该代码完成了读取 DICOM 格式图像的功能,具体功能如下:

  1. 打开 DICOM 格式的图像文件: 使用 fopen 函数以二进制读取模式打开指定的 DICOM 文件。

  2. 判断文件是否为 DICOM 格式: 代码读取文件头部的 128 字节,判断是否为 'DICM' 字符串,以此确认文件是否为 DICOM 格式。

  3. 读取 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) 标签值,获取像素数据在文件中的偏移量。
  4. 解析图像数据: 代码根据读取的头部信息,定位到像素数据的位置,并根据像素数据类型和字节序进行解析。

    • 像素数据类型处理: 代码根据 pixelType 判断像素数据类型,并使用相应的转换方法解析数据。
    • 字节序处理: 代码根据 isLitteEndian 判断字节序,以确保正确读取数据。
    • 窗宽窗位校正: 代码使用 fCtAfCtB 计算公式,将像素值进行窗宽窗位校正,以得到合适的显示灰度值。
    • 黑白色反转: 代码根据 ZeroIsBlack 判断是否需要进行黑白色反转。
  5. 将读取的像素数据转换为 OpenCV 中的 Mat 格式: 代码根据通道数创建 Mat 对象,并将解析后的像素数据填充到 Mat 对象中。

  6. 显示图像: 代码使用 cvNamedWindowimshow 函数,创建窗口并显示图像。

该代码详细展示了如何利用 OpenCV 读取和显示 DICOM 图像,并解释了 DICOM 文件头信息解析、像素数据类型处理、窗宽窗位校正等重要步骤。

DICOM 图像读取与显示 - C++ OpenCV 代码详解

原文地址: https://www.cveoy.top/t/topic/naCC 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录