ITK读取CT DICOM,如何设置窗位和窗宽?

关键字: dicom itk CT 不清晰 窗位 窗宽

碎碎念:

最近忽然要用到ITK读取DICOM,在听到任务之前,我连ITK和DICOM是个啥东西都不知道.当然,刚听到任务的时候,我脑子里也只有"这特码是啥?""这特码又是啥?"...

在被进度恶心了几天之后,对这些概念我大概有了些认识.然后在试图将DICOM显示成jpeg时候,按照guide里的例子改了改,结果发现JPEG的图像呈现灰蒙蒙的感觉,完全不如另一款软件读出的清晰.

尝试过程中,由于概念认识有限,搜索能力也大打折扣,个中滋味只有自己能体会了.

当然,折腾了几天后,算是解决了这个问题.为了方便使用中文的其他人,在这里做一个简单记录.

==================

ITK的概念:略

DICOM的概念:略

问题:

(CT图像的)DICOM文件使用ITK读取后,进行重新压缩,产生的图像有不清晰 或 对比度奇怪 或 底色不是纯黑色 等多种难以描述的奇特景象.

解决办法:

读入文件后,查找DICOM的窗位(window center)和窗宽(window width),并使用这两个参数通过itkIntensityWindowingImageFilter滤镜进行转换,写入新文件即可.

关键点:

1.查找窗位和窗宽时,可参照guide给出的例子("Printing DICOM Tags From One Slice"这一节),用到了itkMetaDataDictionary和itkMetaDataObject.
2.设定时,可参照ITK源代码自带例子(Filtering\ResampleVolumesToBeIsotropic.cxx),用到了itkIntensityWindowingImageFilter.

注意这里设定的最大值(SetWindowMaximum)和最小值(SetWindowMinimum),需要根据窗位和窗宽计算一下.

(max = window center + window width/2.0f; min = window center - window width/2.0f )

3.(仅限CT)如果还是觉得有问题,先不要想着用截距和斜率进行再计算.ITK读入DICOM的时候是计算过这两个参数的,理论上说来,不需要再计算一次.

以上就是折腾了几天的内容.

另外别问我为啥不喜欢贴代码,贴了代码的好处是代码的语言是全球通用,谁都能读懂,人人都能直接copy,但是坏处就是很多人也不管代码强度就直接copy,到后来出了问题自己也不知道是什么情况.于是我就只写思路,实现什么的,最讨厌了.

时间: 2024-09-30 05:34:13

ITK读取CT DICOM,如何设置窗位和窗宽?的相关文章

CT值及CT常用窗宽、窗位 [转]

一.常用CT值 CT值的含义是:每个反应管内的荧光信号达到设定的域值时所经历的循环数.研究表明,每个模板的Ct值与该模板的起始拷贝数的 对数存在线性关系,起始拷贝数越多,Ct值越小.利用已知起始拷贝数的标准品可作出标准曲线,因此只要获得未知样品的CT值,即可从标准曲线上计算出该样 品的起始拷贝数. 是用不同的灰阶来反应组织和器官的密度,也可以用吸收系数来反应组织器官的密度. 常见人体组织的CT值(HU) 组织 CT值 组织 CT值 骨组织 >400 肝脏 50-70 钙值 80-300 脾脏 3

十ITK读取一张dcm图像然后通过vtk显示

一.功能 通过ITK读取一张图片(dcm格式),然后通过vtk显示出来. 版本:VS2019 itk5.0.1 vtk 8.2.0 二.程序主要思路 1-读取dcm格式图片 2-转换为vtk可以读取的数据类型 3-设置显示参数,然后显示出来 三.代码 工程构建参见前面的博客,代码部分如下: //保证VTK正常运行 #include "vtkAutoInit.h" VTK_MODULE_INIT(vtkRenderingOpenGL2); // VTK was built with vt

基于HTML5的PACS--HTML5图像处理(7)实现客户端JS调整窗宽窗位

仅提供参考和学习,代码仅为了指明个思路,转载请注明出处. 要查看此系统更多的图像处理功能请参考: 区域医疗移动医疗影像解决方案--基于HTML5的PACS--HTML5图像处理 在此之前,此系统是结合DICOM的WADO标准,在浏览器里通过javascript操作返回的JPG图片.这种服务器端解析,客户端展现的方式,对实现图像的移动.缩放.旋转.测量等图像操作能够实现实时的交互.但这种方式存在着几个弊端: 1.获取图像上的CT值(钙化值)信息的时候,要频繁的和服务器进行交互. 2.调整图像的窗宽

基于HTML5的PACS---JS调整窗宽窗位续

上一遍博文中(基于HTML5的PACS--HTML5图像处理(7)实现客户端JS调整窗宽窗位)中介绍了如何用后台解析出来的DICOM像素数据来生成要显示的图像及在JS端调整窗宽窗位.其中碰到几个问题: 1.对于(2050,0020)Presentation LUT Shape等于INVERSE 或者(0028,0004)Photometric Interpretation等于MONOCHROME1的灰度图像,使用文中的查找表算法,出来的图像其实是反色的图像.要对查找表进行修改增加是否反色的标记,

网络安全系列之四十 在Linux中设置SET位权限

虽然通过ACL增加了权限设置的灵活性,但是Linux系统中可供设置的权限只有读.写.执行三种,在某些特殊的场合,这可能将无法满足要求.因而,在Linux系统中还提供了几种特殊的附加权限,用于为文件或目录提供额外的控制方式,可用的附加权限包括:SET位权限(SUID.SGID)和粘滞位权限(Sticky Bit).本文将介绍SET位权限. SET位权限多用于给可执行的程序文件或目录进行设置,其中SUID表示对所有者用户添加SET位权限,SGID表示对所属组内的用户添加SET位权限.当一个可执行文件

反射原理读取对象属性并设置属性值

Dictionary<string, string> dicNodes = new Dictionary<string, string>(); foreach (XmlNode node in nodes.ChildNodes) { if (node.NodeType==XmlNodeType.Element) { dicNodes.Add(node.Attributes["name"].Value,node.Attributes["value&quo

批量添加用户,并设置8位随机密码(禁止使用for,while等循环)

批量添加用户,并设置8位随机密码(禁止使用for,while等循环) 创建用户: [[email protected] lin]# echo oldboy{01..05}|xargs -n1 oldboy01 oldboy02 oldboy03 oldboy04 oldboy05 [[email protected] lin]# echo oldboy{01..05}|xargs -n1|awk '{print "useradd "$NF}' useradd oldboy01 user

android动态设置控件的高宽

关键代码: LayoutParams para; para = mTabImg.getLayoutParams(); para.width=one; mTabImg.setLayoutParams(para); mTabImg是你要设置的控件  首先拿到后就可以设置 Display currDisplay = getWindowManager().getDefaultDisplay();// 获取屏幕当前分辨率 int displayWidth = currDisplay.getWidth();

VC++玩转炫酷悬浮窗1---悬浮窗的实现

?? 目标实现像迅雷那样炫酷的悬浮窗.计划&方案首先第一步要实现一个悬浮窗,窗体无边框,能够随意拖动.对于一个窗体来说,只有我们把鼠标放到标题栏中才进入到拖拽模式.由于是无边框的窗体,默认是不能够移动的.我们尝试用两种办法使其跟随鼠标移动.一个是用OnNcHitTest函数,另一个是在OnLButtonDown时发消息.实践一. OnNcHitTest方案这个CWnd类的一个方法,我们可以捕捉鼠标点击的坐标,然后将其HTCLIENT结果偷换成HTCAPTION,这样就可以让系统误以为鼠标左键点击