3D医学图像CT dcm格式转换为png

医学图像 CT dcm格式转换为png
在normalize_hu()中修改像素值,需要具体数据对象具体分析
只需要在main函数中更改dcm文件路径

"""
读取dicom图像并将其转换为png图像
读取某文件夹内的所有dicom文件
:param src_dir: dicom文件夹路径
:return: dicom list
"""

import os
import SimpleITK
import pydicom
import numpy as np
import cv2
from tqdm import tqdm


def is_dicom_file(filename):
    # 判断某文件是否是dicom格式的文件

    file_stream = open(filename, 'rb')
    file_stream.seek(128)
    data = file_stream.read(4)
    file_stream.close()
    if data == b'DICM':
        return True
    return False


def load_patient(src_dir):
    # 读取某文件夹内的所有dicom文件

    files = os.listdir(src_dir)
    slices = []
    for s in files:
        if is_dicom_file(src_dir + '/' + s):
            instance = pydicom.read_file(src_dir + '/' + s)
            slices.append(instance)
    slices.sort(key=lambda x: int(x.InstanceNumber))
    try:
        slice_thickness = np.abs(slices[0].ImagePositionPatient[2] \
                                 - slices[1].ImagePositionPatient[2])
    except:
        slice_thickness = np.abs(slices[0].SliceLocation - slices[1].SliceLocation)
    for s in slices:
        s.SliceThickness = slice_thickness
    return slices


def get_pixels_hu_by_simpleitk(dicom_dir):
    # 读取某文件夹内的所有dicom文件,并提取像素值(-4000 ~ 4000)

    reader = SimpleITK.ImageSeriesReader()
    dicom_names = reader.GetGDCMSeriesFileNames(dicom_dir)
    reader.SetFileNames(dicom_names)
    image = reader.Execute()
    img_array = SimpleITK.GetArrayFromImage(image)
    img_array[img_array == -2000] = 0
    return img_array


def normalize_hu(image):
    # 将输入图像的像素值(-4000 ~ 4000)归一化到0~1之间
    MIN_BOUND = 150
    MAX_BOUND = 3000
    image = (image - MIN_BOUND) / (MAX_BOUND - MIN_BOUND)
    image[image > 1] = 1.
    image[image < 0] = 0.
    return image


if __name__ == '__main__':
    dicom_dir = 'F:/AIStudio/DCMgaoxiuwen/'   # 读取dicom文件的元数据(dicom tags)
    slices = load_patient(dicom_dir)
    print('The number of dicom files : ', len(slices))

    image = get_pixels_hu_by_simpleitk(dicom_dir)  # 提取dicom文件中的像素值
    for i in tqdm(range(image.shape[0])):
        img_path = "F:/AIStudio/PNGgaoxiuwen/" + str(i).rjust(3, '0') + ".png"

        org_img = normalize_hu(image[i])  # 将像素值归一化到[0,1]区间
        cv2.imwrite(img_path, org_img * 255)  # 保存图像数组为灰度图(.png)

  • 2
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
软件介绍: DcmTransform是一款专用的医学格式转换器,于对符合DICOM 3.0标准的医学图像文件。软件首先对DICOM文件中的数据进行解析,并将其以图像的样式显示。图像显示后,用户可以自定义地调节医学图像的窗位窗宽。由于医学图像数据的像素变化范围通常为0-4095或0-1023,不同于传统图像文件的0-255。而计算机所能显示的黑白像素范围是0-255,所以需要对医学图像进行像素值的映射处理,即调节医学图像的窗位窗宽。调节操作的作用在于改变显示图像的明暗度对比度。当用户调节好医学图像的窗位窗宽后,即可以对医学图像文件进行格式转化。转化的文件格式可设为BMP格式和JPG格式。用户亦可以根据自己的需要设置转化图像的属性信息,如图像的质量,大小。对于CT,MRI断层图像来说,通常拍摄得到的是一系列DICOM文件,该系列文件通常在同一个文件夹目录下。对于某一系列文件,由于拍摄中设备参数设置不变,其像素的变化范围,图像的明暗度饱和度基本相同,所以在图像转化操作中,用户可以调节好窗位窗宽后,一次性的将系列文件全部转化。对于DSA血管减影造影图像,也是需要拍摄一系列的图像,该系列图像通常保存在同一DICOM文件中。它借助计算机对血管造影图像进行数字图像处理,以消除背景的干扰,突出医生感兴趣的血管部分的信息。医学关心的并不是原始拍摄的图像信息,而是减影成像后的图像。所以本软件即可以将原始图像数据转化成普通图像文件,也可以转化减影成像后的图像。DICOM文件是按照DICOM标准存储的医学文件,它不仅可以用来封装各种医学图像,也可以封装其它医学信息,如病人姓名,性别,拍摄单位、设备参数等。这类资料保存在DICOM文件的文件头中,DICOM文件头包含了标识数据集合的相关信息。DICOM文件一般由1个DICOM文件头和1个DICOM数据集合组成。在对DICOM文件处理过程序中,亦需要对其文件头进行解析,得到图像的相关信息。本软件可以将解析后的文件头保存为TXT文本文件,以便于查看。本软件还为用户提供了普通图像文件浏览的功能,以便于用户转化完DICOM文件后,查看转化效果。图像浏览时,先列出所有转化后图像的缩略图,用户点击任意一幅缩略图即可打开该图像

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值