9. DICOM图像显示-DCMTK-窗宽窗位调整和源码分析

本文详细介绍了如何使用dcmtk库实现Radiant软件的各种窗宽窗位操作,包括默认窗宽窗位、全动态窗宽窗位、腹部窗宽窗位、反片显示以及自定义窗宽窗位。同时,讨论了dcmtk的高级功能,如根据最大/最小CT值设置窗宽窗位、设置感兴趣区域的窗宽窗位以及直方图窗宽窗位。
摘要由CSDN通过智能技术生成

  本篇文章介绍如何

  1. 基于dcmtk实现Radiant软件的提供的窗宽窗位操作。
  2. dcmtk的其他高级窗宽窗位操作
    样例图像默认窗宽窗位如下:
    在这里插入图片描述
    一. 基于dcmtk实现Radiant软件的提供的窗宽窗位操作。
    radiant的窗宽窗位操作有如下几种:
      Default window是dicom文件中默认的窗宽窗位
      Full dynamic是根据dicom文件中的最大CT值和最小CT值计算的窗宽窗位
      Negative是反片,即CT值越小,越亮
      CT Adbomen等条目根据不同设备类型,显示不同。
      CT设备图像则显示预设的各个器官的标准窗宽窗位,比如腹部CT,wl=60,ww=400,能更好的显示腹部组织。

CT图像窗宽窗位相关操作:
在这里插入图片描述
各个器官对应的窗宽窗位值
在这里插入图片描述
MR图像窗宽窗位相关操作:
在这里插入图片描述
US图像窗宽窗位相关操作
在这里插入图片描述
  前面讲过,窗宽窗位调整属于Voi lut。dcmtk通过DicomImage类的getOutputData方法获Voi lut转换后的灰度值。
  以下代码只展示dcmtk相关,图像显示部分见前面文章。

  1. Default window
//获取默认窗宽窗位
ww = dcmParse->GetElementValueFloat(DCM_WindowWidth);
wl = dcmParse->GetElementValueFloat(DCM_WindowCenter);
//设置默认窗宽窗位
dicomImg->setWindow(wl, ww);
//获取灰度值
int size = dicomImg->getOutputDataSize(8);
unsigned char *pixelDataGrey = new unsigned char[size];
dicomImg->getOutputData(pixelDataGrey, size, 8);

dcmtk和radiant显示效果一致:

dcmtk默认窗宽窗位显示
在这里插入图片描述

radiant默认窗宽窗位显示
在这里插入图片描述
2. Full dynamic
  如果不主动设置窗宽窗位,dcmtk默认使用最大CT值和最小CT值计算的窗宽窗位,即显示dicom图像中的全部CT值。

int size = dicomImg->getOutputDataSize(8);
unsigned char *pixelDataGrey = new unsigned char[size];
dicomImg->getOutputData(pixelDataGrey, size, 8);

getOutputData的内部方法nowindow方法中的核心代码:

const double absmin = inter->getAbsMinimum();
const double absmax = inter->getAbsMaximum();
const double outrange = OFstatic_cast(double, high) - OFstatic_cast(double, low) + 1;  // output range

const double gradient = outrange / (inter->getAbsMaxRange());

for (i = 0; i < ocnt; ++i)  // calculating LUT entries
    *(q++) = OFstatic_cast(T3, OFstatic_cast(double, low) + OFstatic_cast(double, i) * gradient);

在这里插入图片描述

显示效果一致:
dcmtk 全动态窗宽窗位显示
在这里插入图片描述

radiant全动态窗宽窗位显示
在这里插入图片描述
3. CT Adbomen

int ww = 400;
int wl = 60;
dicomImg->setWindow(wl, ww);

int size = dicomImg->getOutputDataSize(8);
unsigned char *pixelDataGrey = new unsigned char[size];
dicomImg->getOutputData(pixelDataGrey, size, 8);

显示效果一致:
dcmtk 腹部窗宽窗位显示
在这里插入图片描述
radiant腹部窗宽窗位显示
在这里插入图片描述
  其他部位窗宽窗位调整同腹部
4. Negative

ww = dcmParse
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DICOM医学影像

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值