python - 将 DICOM 图像保存为无损 JPEG

标签 python image-processing dicom

我的原始图像是 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)

最佳答案

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

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

关于python - 将 DICOM 图像保存为无损 JPEG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52633803/

相关文章:

python - 如何在Python中加密pickled文件?

android - 如何在 Android 中扭曲图像?

c++ - 读取DICOM文件到double-array,最简单的方法

c++ - CT与MRI读数

python - 多维欧拉法python

python - 不遵守最小、最大限制的垂直线(matplotlib)

python - 循环与异步定时器

c++ - C++中的灰度图像处理

java - 尝试使用 Highgui.imread (OpenCV + Android) 加载图像

dicom - 如何计算体素大小?