python - 将 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)
解决方案
丢失信息的问题取决于像素深度,而不是图像压缩。您的 DICOM 图像可能每像素大约 11 位(从 -1024 到 1023),甚至可能更多。并且您无需设置强度窗口即可将其转换为 8 位图像。
这意味着值 -1024 的原始像素变为黑色,+1023 的像素变为白色,但图像中最重要的部分,从 -100 到 +300 左右变为平均灰色。如果你对肺感兴趣,那么重要的值会更低,如果你想看到骨头,那么它们会更高等等。最重要的是,你无法在单个 png/jpg/bmp 图像上看到 DICOM 图像的所有部分。您需要一个特殊的查看器,它允许设置灰度级。可以处理全像素深度的最常见的非医疗格式是 TIFF,但您仍然需要一个特殊的查看器。
推荐阅读
- multithreading - 在 Rust 中的线程之间共享可变数据
- python - 如何使用熊猫将一般数字转换为 HH:MM:SS 格式?
- python-3.x - 用一组元组制作扑克游戏
- reactjs - 为什么我会收到此错误:“在 './src' 中找不到文件 './App'。”:?
- python - 尝试创建热图时出错:“int”和“str”实例之间不支持“<=”
- elf - 如何查找 ppc 的重定位表信息
- python - django查询集中的sql字符串无法在pymysql中执行?
- django - 如何更新扩展的 Django 用户模型?
- intellij-idea - 如何让版本控制选项卡出现在 intellij 中?
- html - 引导,容器流体类不能改变填充