【Matlab】Matlab读取dcm图像的函数以及CT值失真的问题处理

Matlab版本:2020a

一、dicomread函数

Matlab读取dcm图像的函数是dicomread,根据dicomread的帮助文档,该函数有四种参数输入方式:

  • X = dicomread(filename); % 根据文件名直接读取
  • X = dicomread(info); % 根据构造的info结构体读取
  • X = dicomread(___,’frames’,f); % 仅从图像中读取 f 指定的帧
  • X = dicomread(___,Name,Value); % 使用 Name,Value 对组读取 DICOM 图像数据来配置解析器

这里主要介绍的是前两种方式,后两种只是在前两种方式的基础上添加的参数限定,这里不展开讨论。
下面以Matlab内置的CT-MONO2-16-ankle.dcm文件为例,介绍这两种方式

1.根据文件名直接读取

filename='C:\Program Files\Polyspace\R2020a\toolbox\images\imdata\CT-MONO2-16-ankle.dcm'; % dcm文件路径+文件名
imgTest01=dicomread(filename);
figure(1),imshow(imgTest01,[]);% 以默认窗显示图像

2.根据info结构体读取

filename='C:\Program Files\Polyspace\R2020a\toolbox\images\imdata\CT-MONO2-16-ankle.dcm'; % dcm文件路径+文件名
Dinfo=dicominfo(filename);  % 用dicominfo函数读取文件信息
imgTest02=dicomread(Dinfo);
figure(2),imshow(imgTest02,[]);% 以默认窗显示图像

二、CT值失真的问题处理

上面两种方式读取的图像的灰度值都是一致的,显示的结果如下

【Matlab】Matlab读取dcm图像的函数以及CT值失真的问题处理
一般空气部分的CT值在-1000左右,这里显示的值是大于0的。因此我们不能把图像的灰度值直接当作CT值,这里需要info结构体中的信息进行转换。
imgTest03=imgTest02*Dinfo.RescaleSlope+Dinfo.RescaleIntercept;
figure(3),imshow(imgTest03,[]);% 以默认窗显示图像

【Matlab】Matlab读取dcm图像的函数以及CT值失真的问题处理
经过上述转换后,图像的灰度值便是正常的CT值了。

Original: https://blog.csdn.net/Willfore/article/details/125828514
Author: Willfore
Title: 【Matlab】Matlab读取dcm图像的函数以及CT值失真的问题处理

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/633347/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球