概念解释(网络资料):html
窗宽:算法
窗宽指CT图像所显示的CT 值范围。在此CT值范围内的组织结构按其密度高低从白到黑分为16 个灰阶以供观察对比。例如,窗宽选定为100 Hu ,则人眼可分辨的CT值为100 / 16 =6 . 25 Hu ,即2 种组织CT值相差在6 . 25Hu以上者便可为人眼所识别。所以,窗宽的宽窄直接影响图像的清晰度与对比度。若是使用窄的窗宽,则显示的CT 值范围小,每一灰阶表明的CT 值幅度小,对比度强,适于观察密度接近的组织结构(如脑组织)。反之,若是使用宽的窗宽,则显示的CT值范围大,每一灰阶表明的CT 值幅度大,则图像对比度差,但密度均匀,适于观察密度差异大的结构。微信
//实例化文件处理对象并打开文件 DicomFile dicomFile = DicomFile.Open(@"C:\101\1.dcm"); //获取dicom图像对象 DicomImage dicomImage = new DicomImage(dicomFile.Dataset); //获取窗宽 Console.WriteLine(dicomImage.WindowWidth); //获取窗位 Console.WriteLine(dicomImage.WindowCenter);
在鼠标操做上,按住鼠标左右移动是调整窗宽,上下移动是调整窗位,记录鼠标按下时的位置和拖动坐标差,并从新设置影像的窗宽窗位:网络
//监听鼠标按下事件 private void GridLine_MouseDown(object sender, MouseButtonEventArgs e) {try { SelectedBox(true); if (shapeManager.drawAction != DrawAction.None) { return; } //记录鼠标位置 isMouseDown = true; StartPoint.X = e.GetPosition(GridLine).X; StartPoint.Y = e.GetPosition(GridLine).Y; if (DicomFile != null) { double? tagVal; DicomFile.Dataset.TryGetValue(DicomTag.WindowCenter, 0, out tagVal); if (tagVal != null) { //获取原始调窗 datasetWinC = DicomFile.Dataset.GetValue<double>(DicomTag.WindowCenter, 0); datasetWinW = DicomFile.Dataset.GetValue<double>(DicomTag.WindowWidth, 0); //设置最后一次调窗 lastWindowCenter = DicomImage.WindowCenter - datasetWinC; lastWindowWidth = DicomImage.WindowWidth - datasetWinW; } else { lastWindowCenter = DicomImage.WindowCenter; lastWindowWidth = DicomImage.WindowWidth; } mouseDownScaleX = st.ScaleX; mouseDownScaleY = st.ScaleY; } } catch (Exception ex) { LogApi.WriteErrLog(ex); } }
看效果:架构
2.自定义调窗并发
能够使用键值对或其余数据格式来保存和加载自定义窗宽窗位,经常使用参考值以下:iview
一、胸部CT检查时,肺窗纵膈窗窗宽、窗位分别是:机器学习
(1)肺窗WW1500—2000HU 、WL-450—-600HU高并发
(2)纵膈窗WW250—350HU、WL30—50HU工具
二、骨窗、软组织窗窗宽、窗位
(1)骨窗WW1000—1500HU、WL250—350HU
(2)软组织窗WW300—500HU、WL40—60HU
三、窗宽和窗位设定
不一样部位使用不一样窗宽窗位,能较充分反映解剖内容和病灶影像表现,
头颅:脑组织窗宽设定为80 Hu~100 Hu,窗位为30 Hu~40 Hu,
垂体及蝶鞍区病变窗宽宜设在200 Hu~250 Hu,窗位45 Hu~50 Hu,
脑出血患者可改变窗宽位80 Hu~140 Hu,窗位30 Hu~50 Hu,
脑梗死患者经常使用窄窗60 Hu,能提升病灶的检出率,清楚显示梗死及软化灶,
颌面部眼眶窗宽定为150 Hu~250 Hu,窗位30 Hu~40 Hu,
观察骨骼时窗宽150 Hu~2 000 Hu,窗位400 Hu~450 Hu,
喉颈部、鼻咽、咽喉部的窗宽和窗位常设在300 Hu~350 Hu和30 Hu~50 Hu,能知足该部位的解剖和病灶显示,
胸部:常规胸部CT检查分别用纵隔窗及肺窗观察,纵隔窗可观察心脏、大血管的位置,
纵隔内淋巴结的大小,纵隔内肿块及这些结构的比邻关系,设定纵隔窗可用窗宽300 Hu~500 Hu,窗位30 Hu~50 Hu
根据此参考,咱们能够设定一些默认的自定义调窗:
3.调窗的用做范围
根据以前的文章:C#开发PACS医学影像处理系统(八):单元格变换
看成用范围是所有时,遍历全部单元格和容器:
for (int i = 0; i < Main.Mdiview.Cells.Count; i++) for (int j = 0; j < Main.Mdiview.Cells[i].BoxList.Count; j++)
看成用范围是序列时,只需遍历当前单元格容器:
for (int i = 0; i < Cell.BoxList.Count; i++)
看成用范围是图像时,直接设置图像:
//调整窗位 dicomImage.WindowCenter = 100; //调整窗宽 dicomImage.WindowWidth = 100;
部分代码:
/// <summary> /// 变换窗宽窗位 /// </summary> /// <param name="X"></param> /// <param name="startX"></param> /// <param name="Y"></param> /// <param name="startY"></param> public void WinImage(double X, double startX, double Y, double startY, double myWidth = -999, double myCenter = -999) { double cVal = Y - startY; double wVal = X - startX; if (myWidth != -999 && myCenter != -999) { DicomImage.WindowCenter = myCenter; DicomImage.WindowWidth = myWidth; } else { DicomImage.WindowCenter = datasetWinC + lastWindowCenter + cVal; DicomImage.WindowWidth = datasetWinW + lastWindowWidth + wVal; } ImageHandler.SetImageScale(DicomImage, PalImgInfo); UpDateTag(); if (Main.WinRange == WindowRange.Series) { #region -----做用范围:序列----- for (int i = 0; i < Cell.BoxList.Count; i++) { if (Cell.BoxList[i] != this) { Cell.BoxList[i].WinImage(DicomImage.WindowWidth, DicomImage.WindowCenter); } } #endregion } else if (Main.WinRange == WindowRange.All) { #region -----做用范围:全部----- for (int i = 0; i < Main.Mdiview.Cells.Count; i++) { for (int j = 0; j < Main.Mdiview.Cells[i].BoxList.Count; j++) { if (Main.Mdiview.Cells[i].BoxList[j] != this) { Main.Mdiview.Cells[i].BoxList[j].WinImage(DicomImage.WindowWidth, DicomImage.WindowCenter); Main.Mdiview.Cells[i].MouseWindowCenter = DicomImage.WindowCenter; Main.Mdiview.Cells[i].MouseWindowWidth = DicomImage.WindowWidth; } } } #endregion } else { string key = Cell.studyInfo.CommonSeriesId + "|" + CurrentFrame; string value = DicomImage.WindowWidth + "|" + DicomImage.WindowCenter; if (PubVal.WinImageList.Keys.Contains(key)) { PubVal.WinImageList[key] = value; } else { PubVal.WinImageList.Add(key, value); } } Cell.MouseWindowCenter = DicomImage.WindowCenter; Cell.MouseWindowWidth = DicomImage.WindowWidth; }
效果:
C#开发PACS、RIS、3D医学影像处理系统系列教程目录整理:
菜鸟入门篇:
PACS客户端:
C#开发PACS医学影像处理系统(七):读取影像Dicom信息
C#开发PACS医学影像处理系统(十):Dicom影像下载策略与算法
C#开发PACS医学影像处理系统(十一):Dicom影像挂片协议
C#开发PACS医学影像处理系统(十二):绘图处理之图形标记
C#开发PACS医学影像处理系统(十三):绘图处理之病灶测量
C#开发PACS医学影像处理系统(十四):处理Dicom影像窗宽窗位
C#开发PACS医学影像处理系统(十五):Dicom影像交叉定位线算法
C#开发PACS医学影像处理系统(十六):2D处理之影像平移和缩放
C#开发PACS医学影像处理系统(十七):2D处理之影像旋转和翻转
C#开发PACS医学影像处理系统(十八):Dicom使用LUT色彩加强和反色
C#开发PACS医学影像处理系统(十九):Dicom影像放大镜
PACS三维处理医学图像:
C#开发PACS医学影像三维重建(一):使用VTK重建3D影像
C#开发PACS医学影像三维重建(二):使用VTK进行体绘制
C#开发PACS医学影像三维重建(三):纹理映射与颜色传输
C#开发PACS医学影像三维重建(四):3D网格平滑效果
C#开发PACS医学影像三维重建(五):基于梯度透明的组织漫游
C#开发PACS医学影像三维重建(六):三维光源与阴影效果
C#开发PACS医学影像三维重建(七):空间测量与标注
C#开发PACS医学影像三维重建(八):VR体绘制
C#开发PACS医学影像三维重建(九):MPR三视图切面重建
C#开发PACS医学影像三维重建(十):MIP最小密度投影
C#开发PACS医学影像三维重建(十一):CPR曲面重建
C#开发PACS医学影像三维重建(十二):VE虚拟内镜技术
熟手进阶篇:
医学图像算法:
C#处理医学图像(一):基于Hessian矩阵的血管肺纹理骨骼加强对比
C#处理医学图像(二):图像锐化加强对比
PACS网页端 开发Web版本的PACS:
C#开发Web端PACS(一):基于PACS客户端思想重写Web端
C#开发Web端PACS(二):使用 .Net MVC 开发手机端PACS服务端
C#开发Web端PACS(三):使用HTML5和CSS3开发PACS手机端页面
C#开发Web端PACS(四):Web端与服务端的DICOM传输
C#开发Web端PACS(五):Web端的平移缩放旋转2D操做
C#开发Web端PACS(六):Web端的窗宽窗位调整
C#开发Web端PACS(七):将移动端接入微信公众号实现医院云胶片
登峰造极篇:
C#开发基于Python人工智能的肺结节自动检测
C#开发基于Python人工智能的脊柱侧弯曲率算法
C#开发基于Python机器学习的医学影像骨骼仿真动画
C#开发基于Python机器学习的术后恢复模拟
C#开发基于U3D的VR眼镜设备虚拟人体三维重建
C#开发基于全息投影的裸眼3D医学影像显示技术
周边附加篇:
胶片打印:
C#开发医学影像胶片打印系统(一):功能与胶片排版
C#开发医学影像胶片打印系统(二):胶片打印机通信
C#开发医学影像胶片打印系统(三):不规则排版打印
PACS服务端:
C#开发PACS医学影像处理系统服务端(一):医疗设备的链接与收图
C#开发PACS医学影像处理系统服务端(二):高并发架构
PACS与RIS系统的通讯与集成
在RIS系统中调起PACS并打开Dicom影像
云PACS与远程会诊
C#开发PACS医学影像处理系统之云PACS(区域PACS)(一):架构概述
C#开发PACS医学影像处理系统之云PACS(区域PACS)(二):远程会诊与双向转诊
科幻级视频特效:
使用Adobe After Effects 制做PACS影像处理系统宣传视频
![]() |
QQ:1850969244 近10年开发经验,主攻C#、ASP MVC,HTML5, B/S C/S 皆可,目前研究医疗领域医学影像相关技术, 任何技术问题欢迎加QQ交流。 |