在医生实际使用过程中,对于有病灶的影像需要一些2D绘图操作,例如对于病灶的标记和测量, 这就牵涉到在WPF中的2D绘图操作技术,一般的思路是监听鼠标的按下和抬起以及运动轨迹,目前整理出的常用绘图和测量功能如下: 图形标记类:(测量类请参考本系列文章:绘图处理之测量工具) 功能 说明 选区 蚂蚁线选择框 线段 线段标记 折线 折线标记 圆形 空心圆形 矩形 空心矩形 多边形 空心多边形 箭头 指向作用 文本 文本标记 清除所有标记 清空单元格绘图对象 撤销上个标记 删除上一个绘图对象 在WPF中,…
1.定位线概念:某个方位的影像在另一个方向的影像上的投影相交线,例如横断面(从头到脚的方向)在矢状面(从左手到右手)上的影像投影面交线. 举个例子:右边的是MR(核磁共振)的某一帧切片,这是从头开始扫描,扫描到眼睛这个位置, 而左边图像是从左手到右手的扫描切片,那么右边图像的位置就恰好在左边图像的眼睛的位置,用红线标出的位置则为定位线, 一般用于医生参考病灶在矢状面.冠状面和横断面的具体方位. 2.检查设备示意图 在笛卡尔空间直角坐标系中,Y 右肩膀到左肩膀,X 后背到前胸,Z 足到头 3.算法…
1.平移,利用WPF中控件边距来控制位移: /// <summary> /// 平移图像 /// </summary> /// <param name="X">平移X轴距离</param> /// <param name="startX">X轴起始位置</param> /// <param name="Y">平移Y轴距离</param> /// <…
接上一篇文章,当我们可以绘制图形标记后,就可以在此操作类上面进行扩展, 比如测量类工具,目前整理出的常用绘图和测量功能如下: 测量工具类:(图形标记类请参考本系列文章:绘图处理之图形标记) 功能 说明 标尺 线段长度测量 折尺 曲线长度测量  心胸比 两根线段按比例测量  交叉尺 两根线段互相垂直测量  Cobb角 两根线段的垂线交点角度测量,一般用于脊柱曲率  开角 两根线段的延长交点的角度测量 T型尺 两根线段相交的任意角度摇摆测量和长度测量 角度测量 角度测量  圆形测量 圆形或椭圆面积测…
概念解释(网络资料): 窗宽: 窗宽指CT图像所显示的CT 值范围.在此CT值范围内的组织结构按其密度高低从白到黑分为16 个灰阶以供观察对比.例如,窗宽选定为100 Hu ,则人眼可分辨的CT值为100 / 16 =6 . 25 Hu ,即2 种组织CT值相差在6 . 25Hu以上者即可为人眼所识别.因此,窗宽的宽窄直接影响图像的清晰度与对比度.如果使用窄的窗宽,则显示的CT 值范围小,每一灰阶代表的CT 值幅度小,对比度强,适于观察密度接近的组织结构(如脑组织).反之,如果使用宽的窗宽,则显…
在医生阅片确诊的过程中,当发线疑似病灶时在灰度显示下有时并不清晰,这时候就需要色彩增强效果来使灰度图像变为彩色图像. LUT可以简单的理解为0-255的颜色映射值,例如:彩虹编码,将其打包成LUT格式文件,在读取图像后载入LUT: //实例化文件处理对象并打开文件 DicomFile dicomFile = DicomFile.Open(@"C:\101\1.dcm"); //获取dicom图像对象 DicomImage dicomImage = new DicomImage(dico…
在XAML代码设计器中,添加canvas画布与圆形几何对象,利用VisualBrush笔刷来复制画面内容到指定容器: <Canvas x:Name="CvsGlass" Width="106" Height="106" HorizontalAlignment="Left" VerticalAlignment="Top" MouseWheel="CvsGlass_MouseWheel"…
在菜单栏布局上,为了使用自定义窗体样式和按钮,我们需要先将窗体设置为无边框,然后添加一个Grid作为菜单栏并置顶,VerticalAlignment="Top" logo图片和标题是Image和TextBlock控件,菜单是Menu控件,系统按钮是Button控件. 其中需要注意的是,一般医院影像科或放射科阅片采用的是双屏,横屏+竖屏,而PACS一般是在竖屏上显示, 当最大化窗体时,如果不进行特殊处理,则会在横屏上最大化,而我们的要求是在竖屏上最大化, 所以需要监听最大化按钮的点击事件…
工具栏布局采用WPF中Grid作为容器,按钮采用自定义样式和图标,并采用Separator分割线: XAML设计器代码: 其中  Style="{StaticResource ButtonStyle}"  按钮样式可以根据自身UI风格来使用自定义样式 <Button x:Name="BtnRotate" Margin="5,0,0,0" Style="{StaticResource ButtonStyle}" Horiz…
对于一款软件的扩展性和维护性来说,上层业务逻辑和UI表现一定要自己开发才有控制权,否则项目上线之后容易被掣肘, 而底层图像处理,我们不需要重复造轮子,这里推荐使用fo-dicom,同样基于Dicom3.0协议. 根据以上原则,后台影像处理完成之后,即可使用自己开发的控件来呈现. 1.先准备好自己的dcm文件,可以是单个文件或序列文件或DicomDir文件. 2.在VS编辑器里打开NUGET搜索fo-dicoman安装即可. 3.使用fo-dicom读取影像. //将图像处理模式设置为全局WPF模…
1.任意角度旋转 在XAML设计器中,设置RotateTransform属性 <InkCanvas x:Name="ToolInkCanvas" UseCustomCursor="True" ClipToBounds="False" MinHeight="50" MinWidth="50" EditingMode="None" Background="{x:Null}&q…
本系列文章将从以下模块和大家分享和讨论使用C#开发医学软件PACS和RIS系统, 国内相关资料比较少,也借此机会丰富一下医学软件开发生态,讨论技术难点,希望大家互相帮助共同进步. 章节介绍及截图预览: (一)PACS客户端:客户端功能和相关医学知识 部分功能菜单: (二)PACS三维:MRP.MIP.VR (三)PACS网页端:开发Web版本的PACS (四)PACS移动端:基于HTML5 (五)PACS服务端:架构.收图.归档 (六)PACS与RIS系统的通信与集成 (七)视频特效教程:使用A…
1.先看结构: 创建WPF用户控件:YourTab 创建WPF用户控件:YourItem 创建选项卡时循环添加item,并设置序列缩略图到控件和异步下载的进度条, 1个病人1个或多个Study检查,1个Study检查1个选项卡,并为每个选项卡添加自定义关闭按钮 Tab自定义关闭按钮的XAML样式如下: <Style TargetType="{x:Type TabItem}"> <Setter Property="Template"> <…
通俗点说,挂片协议可以看作整个系统的一个相对复杂一点的配置文件,可以用JSON或XML格式来读取与保存, 另外,可以制作一个独立的exe配置程序来管理这些挂片协议. 假设配置了CT的挂片协议的右键菜单,那么在打开CT影像时则是对应的不同的动态的右键菜单,如下图: CT影像的自定义工具栏,如下图: CT影像的自定义窗宽窗位,如下图: 协议格式可以参考XML格式: <?xml version="1.0" encoding="utf-8"?> <Moda…
有关其他已翻译的章节请关注Github上的项目:https://github.com/msdx/gradledoc/tree/1.12,或访问:http://gradledoc.qiniudn.com/1.12/userguide/userguide.html 本文原创,转载请注明出处:http://blog.csdn.net/maosidiaoxian/article/details/40949821 关于我对Gradle的翻译,以Github上的项目及http://gradledoc.qin…
触摸事件 在用户使用app过程中,会产生各种各样的事件 一.iOS中的事件可以分为3大类型 触摸事件加速计事件远程控制事件 响应者对象在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件.我们称之为“响应者对象” UIApplication.UIViewController.UIView都继承自UIResponder,因此它们都是响应者对象,都能够接收并处理事件 二.UIResponder UIResponder内部提供了以下方法来处理事件触摸事件- (v…
JavaFX的对话框主要分为提示对话框和文件对话框两类,其中提示对话框又分作消息对话框.警告对话框.错误对话框.确认对话框四种.这四种对话框都使用Alert控件表达,并通过对话框类型加以区分,例如AlertType.INFORMATION表示消息对话框,AlertType.WARNIN表示警告对话框,AlertType.ERROR表示错误对话框,AlertType.CONFIRMATION表示确认对话框.另外,Alert工具还提供了下列方法来操作对话框:setTitle:设置对话框的标题.set…
VTK简介: VTK是一个开源的免费软件系统,主要用于三维计算机图形学.图像处理和可视化.Vtk是在面向对象原理的基础上设计和实现的,它的内核是用C++构建的. 因为使用C#语言开发,而VTK是C++的,所以推荐使用VTK的.Net开发库:ActiViz. 本系列文章主要以技术和代码讲解为主,ActiViz的安装和环境配置可以参考: ActiViz(VTK的C#库)学习使用心得之二:Activiz.NET的下载和安装 官网资料:https://www.kitware.eu/product/act…
今天我们来讲讲自定义组件和它的构造函数. 在前面的文章里我们已经接触了好几个自定组件,这次的示例是一个自定义对话框,他有一个about按钮,点击按钮可以显示出Qt的信息或者用户输入的信息.这是效果图: 下面我们就来重点讲解自定义组件和它的构造函数吧. 构造函数的声明 先上代码: type MyDialog struct { widgets.QDialog _ func() `constructor:"init"` _ func(string) `signal:"showAbo…
前面介绍了基于HttpURLConnection的网络访问请求,包括GET方式调用接口.POST方式调用接口.下载网络文件.上传本地文件这四种HTTP操作.虽然通过HttpURLConnection能够实现相应的业务功能,但是它的编码过程却有些繁琐,需要时时刻刻注意有关细节,一不留神便会掉到坑里.比如下列编码细节就经常令初学者头痛不已:1.HttpURLConnection工具独自一人承担了所有的方法实现,分不清哪些方法与请求有关,哪些方法与应答有关:2.HTTP调用的步骤太多,诸如参数设置.开…
前面介绍了程序界面上一些简单控件的组合排列,它们用来表达相互之间联系较弱的信息倒还凑合,要是用来表达关联性较强的聚合信息就力不从心了.倘若只是简单信息的罗列,例如商品名称列表.新闻标题列表.学生姓名列表等,尚可使用列表框JList予以展示:倘若要求罗列复杂的排列信息,例如商品订单列表.新闻分类列表.学生成绩列表等等,像这种存在多项细节的信息列表就无法通过列表框表达,而应通过Swing的表格类型JTable加以描述.JTable如其名字所言,它的面貌正是分行分列的表格,每行是一条完整的信息,而每列…
//创建一个名为"Player"的游戏物体 //并给他添加刚体和立方体碰撞器. player=new GameObject("Player"); player.AddComponent("Rigidbody"); player.AddComponent("BoxCollider"); //创建一个没有名称的游戏物体 //并给他添加刚体和立方体碰撞器.Transform总是被添加到该游戏物体. player=new GameOb…
目录 目录 前言 (一)不同风格 1.说明: 2.使用: 3.代码使用: (二)例子演示 1.dark_background 2.bmh 3.fivethirtyeight 4.ggplot 5.grayscale 6.Solarize_Light2 目录 前言 在matplotlib里默认有好几种绘图的风格,今天来作一下简单介绍. (一)不同风格 1.说明: 当不设置风格时,便是默认的风格. 风格 说明 dark_background 黑背景 bmh 贝叶斯风格 fivethirtyeight…
进击的Python[第十二章]:mysql介绍与简单操作,sqlachemy介绍与简单应用 一.数据库介绍 什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据.我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢.所以,现在我们使用关系型数据库管理系统(RDBMS)来存储和管理的大数据量.所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来…
一. 概述 Mysql是最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一. 什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库, 每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据. 我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢. 所以,现在我们使用关系型数据库管理系统(RDBMS…
1.调用前组装参数 2.调用发送信息服务脚本   .调用前组装参数: BaseSendTaskEntity entity = new BaseSendTaskEntity(); entity.MessType = BaseSendTaskEntity.EnumMessType.Phone.ToString(); entity.BusinessType = BaseSendTaskEntity.EnumBusinessType.MES.ToString(); entity.WindowName =…
本篇我将带着大家一起来对Dapper进行下封装并实现基本的增删改查.分页操作的同步异步方法的实现(已实现MSSQL,MySql,PgSQL).同时我们再实现一下仓储层的代码生成器,这样的话,我们只需要结合业务来实现具体的业务部分的代码就可以了,可以大大减少我们重复而又繁琐的增删改查操作,多留点时间给生活充充电(不会偷懒的程序员不是一位好爸爸/好老公/好男朋友).如果您觉得我的实现过程有所不妥的话,您可以在评论区留言,或者加入我们的千人.Net Core实战项目交流群637326624交流.另外如…
本单位用的oa系统就是泛微公司的oa协同办公平台,下面是我对他进行二次开发统计用到的写数据库脚本,只做开发参考使用,对于该系统的二次开发技术交流可以加我q:2050372586 [仪表盘]格式sql编写规则: ? 只支持select语句并且, Select的结果必须为四列一行,且没列值为数值,其中 ? 第一个值为最小值 ? 第二个值为最大值 ? 第三个值为安全值 ? 第四个值为当前值 例如 Select ,,,count(id) from hrmresource [其他图形]格式sql编写规则(…
这是"使用 C# 开发智能手机软件:推箱子"系列文章的第十二篇.在这篇文章中,介绍 Window/AboutDlg.cs 源程序文件. 这个源程序文件包括 AboutDlg 类,该类继承自 System.Windows.Forms.Form 类.表示推箱子的"关于"对话框.例如以下图所看到的:         以下是 Window/AboutDlg.Designer.cs 源程序的部分代码: namespace Skyiv.Ben.PushBox.Window {…
  专题开发十二:JEECG微云高速开发平台-基础用户权限 11.3.4自己定义button权限 Jeecg中.眼下button权限设置,是通过对平台自己封装的button标签(<t:dgFunOpt等)进行设置.而在开发的过程中,有一些button标签是普通的<ahref>或<button>形式的.对于这样的普通开发人员自己定义button的权限设置.眼下jeecg也能够支持了.详细设置方法例如以下: 1. 给页面上的自己定义button添加id或class . water…
BS