对医学图像中dcm文件进行处理

news/2024/7/21 5:12:25 标签: 图像处理, 人工智能, python

处理医学图像中的dcm/DICOM文件

  • 查看DICOM图像
  • 查看该dcm文件是否为单张多帧
  • 单张单帧的dcm文件转为png图像
  • 将文件夹中多个单张单帧的dcm转为png图像
  • 单张多帧的dcm转为png图像
  • 将文件夹中多个单张多帧的dcm转为png图像

查看DICOM图像

python">import pydicom
import matplotlib.pyplot as plt

dicom_file_path = 'DICOM_anon/i0000,0000b.dcm'  # 替换为DICOM文件的实际路径

# 读取DICOM文件
dicom_data = pydicom.dcmread(dicom_file_path)

# 打印DICOM元数据
print("DICOM Metadata:")
print(dicom_data)

# 获取像素数据
pixel_data = dicom_data.pixel_array

# 显示DICOM图像
plt.imshow(pixel_data, cmap=plt.cm.gray)
plt.axis('off')
plt.title('DICOM Image')
plt.show()

查看该dcm文件是否为单张多帧

python">import pydicom

dicom_file_path = 'do_dcm/1-1.dcm'  # 替换为DICOM文件的实际路径

# 读取DICOM文件
dicom_data = pydicom.dcmread(dicom_file_path)

# 检查NumberOfFrames标签是否存在
if 'NumberOfFrames' in dicom_data:
    num_frames = dicom_data.NumberOfFrames
    print(f"This DICOM file contains {num_frames} frames.")
else:
    print("This DICOM file is not a multi-frame image.")

单张单帧的dcm文件转为png图像

python">import look_dcm
import numpy as np
from PIL import Image

dicom_file_path = 'DICOM_anon/i0000,0000b.dcm'  # 替换为DICOM文件的实际路径

# 读取DICOM文件
dicom_data = pydicom.dcmread(dicom_file_path)

# 获取像素数据
pixel_data = dicom_data.pixel_array

# 将像素值范围归一化到0-255之间
pixel_data_normalized = ((pixel_data - np.min(pixel_data)) / (np.max(pixel_data) - np.min(pixel_data))) * 255
pixel_data_normalized = pixel_data_normalized.astype(np.uint8)

# 创建PIL图像对象
png_image = Image.fromarray(pixel_data_normalized, mode='L')

# 保存为PNG文件
output_png_path = '/root/autodl-tmp/datasets/CHAOS/CT/1/DICOM1.png'  # 替换为输出PNG文件的路径
png_image.save(output_png_path)

将文件夹中多个单张单帧的dcm转为png图像

python">import os
import look_dcm
import numpy as np
from PIL import Image
import pydicom

input_folder = '19/DICOM_anon'  # 替换为包含DICOM文件的文件夹路径
output_folder = '19/19DICOM_PNG/'  # 替换为输出PNG文件的文件夹路径
os.makedirs(output_folder, exist_ok=True)

# 遍历输入文件夹中的每个 .dcm 文件
for dcm_file_name in os.listdir(input_folder):
    if dcm_file_name.endswith('.dcm'):
        dcm_file_path = os.path.join(input_folder, dcm_file_name)

        # 读取DICOM文件
        dicom_data = pydicom.dcmread(dcm_file_path)

        # 获取像素数据
        pixel_data = dicom_data.pixel_array

        # 将像素值范围归一化到0-255之间
        pixel_data_normalized = ((pixel_data - np.min(pixel_data)) / (np.max(pixel_data) - np.min(pixel_data))) * 255
        pixel_data_normalized = pixel_data_normalized.astype(np.uint8)

        # 创建PIL图像对象
        png_image = Image.fromarray(pixel_data_normalized, mode='L')

        # 构建PNG文件名,并保存为PNG文件
        png_file_path = os.path.join(output_folder, dcm_file_name.replace('.dcm', '.png'))
        png_image.save(png_file_path)

单张多帧的dcm转为png图像

python">import pydicom
import os
import numpy as np
from PIL import Image

dicom_file_path = '/root/autodl-tmp/wzh/do_dcm/1-1.dcm'  # 替换为DICOM文件的实际路径

# 读取DICOM文件
dicom_data = pydicom.dcmread(dicom_file_path)

# 检查NumberOfFrames标签是否存在
if 'NumberOfFrames' in dicom_data:
    num_frames = dicom_data.NumberOfFrames
    print(f"This DICOM file contains {num_frames} frames.")

    # 创建输出文件夹
    output_folder = 'do_dcm/dcm_framesPNG/'  # 替换为输出PNG文件夹路径
    os.makedirs(output_folder, exist_ok=True)

    # 保存每一帧的像素数据为PNG图像
    for frame_idx in range(num_frames):
        frame_data = dicom_data.pixel_array[frame_idx, ...]

        # 将像素值范围归一化到0-255之间
        pixel_data_normalized = ((frame_data - np.min(frame_data)) / (np.max(frame_data) - np.min(frame_data))) * 255
        pixel_data_normalized = pixel_data_normalized.astype(np.uint8)

        png_image = Image.fromarray(pixel_data_normalized, mode='L')
        png_file_path = os.path.join(output_folder, f'frame_{frame_idx:03d}.png')
        png_image.save(png_file_path)
else:
    print("This DICOM file is not a multi-frame image.")

将文件夹中多个单张多帧的dcm转为png图像

python">import os
import pydicom
from PIL import Image

input_folder = 'path/to/your/input/folder'  # 替换为包含DICOM文件的文件夹路径
output_folder = 'path/to/output/folder'     # 替换为输出PNG文件的文件夹路径
os.makedirs(output_folder, exist_ok=True)

# 遍历输入文件夹中的每个 .dcm 文件
for file_name in os.listdir(input_folder):
    if file_name.endswith('.dcm'):
        dcm_file_path = os.path.join(input_folder, file_name)
        
        # 读取DICOM文件
        dicom_data = pydicom.dcmread(dcm_file_path)
        
        # 获取像素数据
        pixel_data = dicom_data.pixel_array
        
        # 创建子文件夹路径
        sub_folder_name = os.path.splitext(file_name)[0]
        sub_folder_path = os.path.join(output_folder, sub_folder_name)
        os.makedirs(sub_folder_path, exist_ok=True)
        
        # 保存像素数据为PNG图像
        png_file_path = os.path.join(sub_folder_path, f'{sub_folder_name}.png')
        png_image = Image.fromarray(pixel_data, mode='L')
        png_image.save(png_file_path)


http://www.niftyadmin.cn/n/4939779.html

相关文章

【springboot启动报错】java: 错误: 无效的源发行版:17

报错截图 解决方案 第一步:编辑配置,改为想用的jdk版本 第二步:文件--->项目结构,改为对应的SDK 第三步:文件--->设置--->构建、执行、部署--->编译器--->Java编译器,修改目标字节码版本 第…

Java课题笔记~ JSP编程

4.1 JSP基本语法 JSP (全称Java Server Pages) 是由 Sun Microsystems 公司倡导和许多公司参与共同创建的一种使软件开发者可以响应客户端请求,而动态生成 HTML、XML 或其他格式文档的Web网页的技术标准。 JSPHTMLJava JSP的本质是Servlet 访问JSP的时候&#x…

综述:计算机视觉中的图像分割

一、说明 这篇文章是关于图像分割的探索,这是解决计算机视觉问题(如对象检测、对象识别、图像编辑、医学图像分析、自动驾驶汽车等)的重要步骤之一。让我们从介绍开始。 二、图像分割介绍 图像分割是计算机视觉中的一项基本任务,涉…

cad中数据输入方法【直角坐标法,极坐标法,动态数据】

在 AutoCAD 中,点的坐标可以用直角坐标、极坐标、球面坐标和柱面坐标表示,每一种坐标又分别具有两种坐标输入方式:绝对坐标和相对坐标。其中直角坐标和极坐标最为 常用。 1.直角坐标法: 用点的 X、Y 坐标值表示的坐标。在命令行…

MySQL事务:确保数据完整性与并发性的关键

MySQL事务:确保数据完整性与并发性的关键 MySQL作为一种广泛使用的开源关系型数据库管理系统,具备强大的事务支持,以确保数据库操作的一致性、隔离性和持久性。本文将深入探讨MySQL中的事务概念、事务隔离级别以及事务的应用场景&#xff0c…

Python 基础 -- Tutorial(二)

5、数据结构 本章更详细地描述了一些你已经学过的东西,并添加了一些新的东西。 5.1. 更多关于Lists 列表(list)数据类型有更多的方法。下面是列表对象的所有方法: list.append(x) 在列表末尾添加一项。相当于a[len(a):] [x]。 list.extend(iterable) 通过添加可…

4WRZ25E3-220-5X/6A24NZ4/D3M不带位移反馈比例阀放大器

该先导阀是一个由比例电磁铁控制的三通减压阀,它的作用是将一个输入信号转化为一个与其成比例的压力输出信号,可用于所有的4WRZ...和5WRZ...型比例阀的控制。比例电磁铁是可调试,湿式直流电磁铁结构,带中心螺纹,线圈可…

JS+TS+Dayjs实现出生日期到当前日期是*岁*月*天

备注: 本例子中有两个参数 一个是出生日期另外一个是当前日期格式都是"1995-06-24"这种格式,能够精确算出岁月*天,具体实现代码如下 /*** * param birthDay 出生日期* param curDate 当前日期* returns */ export const birthToAg…