如何将 DICOM 图像转换为 JPG 或 PNG

本文介绍如何使用Python将医学DICOM图像转换为常见的JPG或PNG格式。包括安装所需库、提取像素数组、重新缩放像素值及保存图像等步骤,并提供了批量转换的示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在计算机视觉中,我们经常使用医学图像,我们拥有的几乎所有数据库都包含 DICOM 图像。Dicom 图像不仅仅是一张图像,它包含像素信息、患者信息等。

在这种情况下,我们只需要将图像可视化或将其保存为 JPG 或 PNG,以便我们可以使用任何我们想要的软件打开它。

为此,我们需要额外的库来与 Python 一起使用。第一个是Pydicom,它是一个专门用于 Dicom 图像的库,第二个是Pillow,我更喜欢用它来显示和保存 JPG 图像。最后,第三个是Numpy来操作数组。

我会一步一步地和你一起做所有的过程,所以不要担心。以下是我们将一起遵循的步骤:

  • 安装库
  • 提取像素数组
  • 重新缩放图像
  • 显示和保存新图像

1.安装库

正如我们所说,我们需要两个库来完成这个过程,安装它们是非常重要的。您可以通过输入以下命令来使用终端:

pip install pydicom
pip install pillow
pip install numpy

2.提取像素数组

你知道一张 Dicom 图像包含很多关于患者的信息……所以我们要显示或提取的图像是 Dicom 图像中存在的信息之一。这个图像称为“像素阵列”。为此,我们需要做的就是从图像中调用这个组件。

ds = pydicom.dcmread('the path to the image')
new_image = ds.pixel_array.astype(float)

如您所见,我们用两行代码来完成这项工作。第一行打开 Dicom 图像,第二行将从中提取像素阵列,这就是这部分的内容。通过astype函数将数据类型转为float类型。我这样做是因为在下一步中我们将缩放像素,所以如果我们将它们保留为整数,那么在缩放之后我们将有上溢或下溢可能。为此,我们需要使用浮点像素,这样我们就不会丢失信息。

3.重新缩放图像

现在要使用图像,我们应该重新调整其像素并将它们的值设置在0和255之间。

scaled_image = (np.maximum(new_image, 0) / new_image.max()) * 255.0

4.显示和保存图像

我们将使用 Pillow 库创建图像。但在此之前,我们需要将其转换为8 位无符号整数。

scaled_image = np.uint8(scaled_image)
final_image = Image.fromarray(scaled_image)

要显示它,您可以使用这行代码:

final_image.show()

现在,如果您想将其保存为 jpg 或 png 图像。您可以使用 Pillow 中的save函数。

final_image.save('image.jpg')
final_image.save('image.png')

5.如何将一组 Dicom 图像转换为 JPG

现在,您看到了如何将一张 Dicom 图像转换为 JPG 或 PNG。您可以应用相同的程序来转换一组 Dicom 图像。您需要做的就是创建函数。第一个将返回文件夹中图像的名称,第二个将像我们之前所做的那样进行转换。

import os
import numpy as np
import pydicom
from PIL import Image

def get_names(path):
    names = []
    for root, dirnames, filenames in os.walk(path):
        for filename in filenames:
            _, ext = os.path.splitext(filename)
            if ext in ['.dcm']:
                names.append(filename)
    
    return names

def convert_dcm_jpg(name):
    
    im = pydicom.dcmread('Database/'+name)

    im = im.pixel_array.astype(float)

    rescaled_image = (np.maximum(im,0)/im.max())*255 # float pixels
    final_image = np.uint8(rescaled_image) # integers pixels

    final_image = Image.fromarray(final_image)

    return final_image

if __name__ == '__main__':
	names = get_names('Database')
	for name in names:
	    image = convert_dcm_jpg(name)
	    image.save(name+'.png')

参考目录

https://pycad.co/how-to-convert-a-dicom-image-into-jpg-or-png/

### 将DICOM文件转换PNG图像 #### 使用 `mritopng` 工具 为了简化 DICOM 文件到 PNG 图像的批量转换过程,可以使用名为 mritopngPython 模块。该工具支持来自 MRI 扫描设备其他医疗影像设备生成的 DICOM 文件,并能够高效地将其转换PNG 格式以便于跨平台查看和处理[^1]。 ```python import os from mritopng import convert_folder # 定义输入和输出路径 input_dicom_dir = 'path/to/dicom/files' output_png_dir = 'path/to/save/png/images' # 调用函数进行批量转换 convert_folder(input_dicom_dir, output_png_dir) ``` #### 利用 `pydicom` 库读取并保存为 PNG 另一种方法是通过 pydicom 库来手动加载 DICOM 文件,并借助 Pillow OpenCV 等图像处理库将像素数据导出为 PNG 文件格式。这种方法提供了更大的灵活性,允许开发者根据需求调整图像参数[^2]。 ```python import pydicom from PIL import Image import numpy as np def dicom_to_png(dcm_file_path, png_output_path): ds = pydicom.dcmread(dcm_file_path) # 获取像素数组并将灰度范围映射至0-255之间 pixel_array_numpy = ds.pixel_array.astype(float) scaled_image = (np.maximum(pixel_array_numpy, 0) / pixel_array_numpy.max()) * 255.0 # 创建PIL图像对象并保存为PNG image = Image.fromarray(np.uint8(scaled_image)).convert('L') image.save(png_output_path) # 单个文件测试 dicom_to_png('example.dcm', 'converted_example.png') ``` #### DCMTK 工具包的应用场景 对于更复杂的操作者当需要创建新的 DICOM 文件时,则可能需要用到 DCMTK 这样的命令行工具集。虽然主要用于从常规图形文件向 DICOM 文件转化的过程,但在某些情况下也可以辅助完成反向的任务——即提取 DICOM 中存储的信息用于构建标准图像文件[^3]。 #### MicroDicom Viewer 功能特性 最后值得一提的是 MicroDicom viewer 提供了一个直观界面来进行多种类型的医学影像格式之间的相互转换工作;其特色之一是可以指定输出图片尺寸,默认设置通常能满足大多数应用场景下的要求[^4]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值