我不知道在将dicom文件转换为jpg文件时如何设置“窗口宽度”和“窗口中心”。

我完成了一个转换器应用程序,该应用程序可以通过python和opencv将dicom文件转换为jpg文件。

但这在dicom文件和jpg文件之间有很大的区别,因为我没有设置Window Width和Window Center。但是我不知道如何设置它。

窗口中心为-400,窗口宽度为1500。

这是我的代码

# -*- coding: utf-8 -*-
#!/usr/bin/python

import os
import cv2
import dicom

def convert_file(dcm_file_path, jpg_file_path):
    dicom_img = dicom.read_file(dcm_file_path)
    img = dicom_img.pixel_array
    cv2.imwrite(jpg_file_path, img)

if __name__ == '__main__':
    rootdir = "D:\CT\A7"

    for parent, dirnames, filenames in os.walk(rootdir):
        for filename in filenames:
            if '.dcm' in filename.lower():
                dicom_path = os.path.join(parent, filename)
                name = dicom_path.replace('\\', '_')[3:]
                jpg_path = "d:\CT_JPG\\%s.jpg" % name
                print (jpg_path)
                convert_file(dicom_path, jpg_path)

最佳答案

如果您真的想将DICOM图像另存为jpg,而不是像评论中所建议的那样玩着“窗口宽度”和“窗口中心”参数,那是为了便于查看,我建议您简单地标准化图像的比例(到int16(这是正常jpg / png / gif图像的比例)中。请注意但是,这会导致分辨率降低。

要将其另存为jpg,一种可能的方法是进行以下修改:

def convert_file(dcm_file_path, jpg_file_path):
    dicom_img = dicom.read_file(dcm_file_path)
    img = dicom_img.pixel_array
    scaled_img = cv2.convertScaleAbs(img-np.min(img), alpha=(255.0 / min(np.max(img)-np.min(img), 10000)))
    cv2.imwrite(jpg_file_path, scaled_img)

如果要针对固定的“窗口中心”和“窗口宽度”进行操作,则
def convert_file(dcm_file_path, jpg_file_path):
    dicom_img = dicom.read_file(dcm_file_path)
    img = dicom_img.pixel_array
    scaled_img = cv2.convertScaleAbs(img-window_center, alpha=(255.0 /window_width)
    cv2.imwrite(jpg_file_path, scaled_img)

07-26 09:30
查看更多