DICOM 图像读取与显示 - C++ OpenCV 代码详解
该代码完成了读取 DICOM 格式图像的功能,具体功能如下:
-
打开 DICOM 格式的图像文件: 使用
fopen函数以二进制读取模式打开指定的 DICOM 文件。 -
判断文件是否为 DICOM 格式: 代码读取文件头部的 128 字节,判断是否为 'DICM' 字符串,以此确认文件是否为 DICOM 格式。
-
读取 DICOM 文件头部信息: 代码使用循环逐个解析 DICOM 文件头部的标签值(TagValue)信息,并根据标签值读取对应信息,包括:
- 像素数据类型(pixelType): 通过读取
(0028, 103)标签值,确定像素数据类型,例如ESourcePixelType_U16代表无符号 16 位整型。 - 像素数据长度(pixDataLen): 通过读取
(7FE0, 10)标签值,获取像素数据的长度。 - 图像行列数(rows, cols): 通过读取
(0028, 10)和(0028, 11)标签值,获取图像的行列数。 - 通道数(channle): 通过读取
(0028, 02)标签值,获取图像的通道数。 - 有效长度(validLen): 通过读取
(0028, 101)标签值,获取图像有效数据长度。 - 数据长度(dataLen): 通过读取
(0028, 100)标签值,获取图像数据长度。 - 窗宽窗位(windowsWidth, windowsCenter): 通过读取
(0028, 1050)和(0028, 1051)标签值,获取窗宽和窗位信息。 - 像素数据偏移量(pixDataOffset): 通过读取
(7FE0, 10)标签值,获取像素数据在文件中的偏移量。
- 像素数据类型(pixelType): 通过读取
-
解析图像数据: 代码根据读取的头部信息,定位到像素数据的位置,并根据像素数据类型和字节序进行解析。
- 像素数据类型处理: 代码根据
pixelType判断像素数据类型,并使用相应的转换方法解析数据。 - 字节序处理: 代码根据
isLitteEndian判断字节序,以确保正确读取数据。 - 窗宽窗位校正: 代码使用
fCtA和fCtB计算公式,将像素值进行窗宽窗位校正,以得到合适的显示灰度值。 - 黑白色反转: 代码根据
ZeroIsBlack判断是否需要进行黑白色反转。
- 像素数据类型处理: 代码根据
-
将读取的像素数据转换为 OpenCV 中的 Mat 格式: 代码根据通道数创建
Mat对象,并将解析后的像素数据填充到Mat对象中。 -
显示图像: 代码使用
cvNamedWindow和imshow函数,创建窗口并显示图像。
该代码详细展示了如何利用 OpenCV 读取和显示 DICOM 图像,并解释了 DICOM 文件头信息解析、像素数据类型处理、窗宽窗位校正等重要步骤。
原文地址: https://www.cveoy.top/t/topic/naCC 著作权归作者所有。请勿转载和采集!