首页 > 解决方案 > 将 DICOM 图像保存为无损 JPEG

问题描述

我的原始图像是 DICOM 格式,我想以无损 jpg 格式保存它(或者至少保留尽可能多的信息!!!)。我怎么能在python中做到这一点?目前,我正在使用以下代码生成有损 png 图像。我称之为有损 png,因为当我通过 dicom 浏览器查看 dicom 图像时, png 图像看起来与 dicom 图像不同。另外,如何修改此图像以获取 jpg 图像而不是 png 图像。

import numpy as np
import png
import pydicom
ds = pydicom.dcmread("./MyImage.dcm")
shape = ds.pixel_array.shape
# Convert to float to avoid overflow or underflow losses.
image_2d = ds.pixel_array.astype(float)
# Rescaling grey scale between 0-255
image_2d_scaled = (np.maximum(image_2d,0) / image_2d.max()) * 256
# Convert to uint
image_2d_scaled = np.uint8(image_2d_scaled)
# Write the PNG file
with open("out.png", 'wb') as png_file:
    w = png.Writer(shape[1], shape[0], greyscale=True)
    w.write(png_file, image_2d_scaled)

标签: pythonimage-processingdicom

解决方案


丢失信息的问题取决于像素深度,而不是图像压缩。您的 DICOM 图像可能每像素大约 11 位(从 -1024 到 1023),甚至可能更多。并且您无需设置强度窗口即可将其转换为 8 位图像。

这意味着值 -1024 的原始像素变为黑色,+1023 的像素变为白色,但图像中最重要的部分,从 -100 到 +300 左右变为平均灰色。如果你对肺感兴趣,那么重要的值会更低,如果你想看到骨头,那么它们会更高等等。最重要的是,你无法在单个 png/jpg/bmp 图像上看到 DICOM 图像的所有部分。您需要一个特殊的查看器,它允许设置灰度级。可以处理全像素深度的最常见的非医疗格式是 TIFF,但您仍然需要一个特殊的查看器。


推荐阅读