为了账号安全,请及时绑定邮箱和手机立即绑定

将 DICOM 图像保存为无损 JPEG

将 DICOM 图像保存为无损 JPEG

翻阅古今 2021-06-29 08:52:51
我的原始图像是 DICOM 格式,我想以无损 jpg 格式保存它(或至少保留尽可能多的信息!!!)。我怎么能在python中做到这一点?目前,我正在使用以下代码生成有损 png 图像。我称之为有损 png,因为当我通过 dicom 浏览器看到 dicom 图像时,png 图像看起来与 dicom 图像不同。另外,如何修改此图像以获取 jpg 图像而不是 png 图像。import numpy as npimport pngimport pydicomds = 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-255image_2d_scaled = (np.maximum(image_2d,0) / image_2d.max()) * 256# Convert to uintimage_2d_scaled = np.uint8(image_2d_scaled)# Write the PNG filewith open("out.png", 'wb') as png_file:    w = png.Writer(shape[1], shape[0], greyscale=True)    w.write(png_file, image_2d_scaled)
查看完整描述

2 回答

?
MM们

TA贡献1886条经验 获得超2个赞

还有另一种使用 OpenCV 和 pydicom 库将 Dicom 图像转换为 JPEG 或 PNG 格式的有效方法。下面的代码在一次运行中将所有 dicom 图像集转换为 jpeg/png(使用 for 循环)。


import pydicom as dicom

import os

import cv2

# make it True if you want in PNG format

PNG = False

# Specify the .dcm folder path

folder_path = "/Image"

# Specify the output .jpg/png folder path

jpg_folder_path = "/JPGImage"

images_path = os.listdir(folder_path)

for n, image in enumerate(sorted(images_path)):

    print(os.path.join(folder_path, image))

    ds = dicom.dcmread(os.path.join(folder_path, image), force=True)

    ds.file_meta.TransferSyntaxUID = dicom.uid.ImplicitVRLittleEndian

    pixel_array_numpy = ds.pixel_array

    if PNG == False:

        image = image.replace('.dcm', '.jpg')

    else:

        image = image.replace('.dcm', '.png')

    pixel_array_numpy2 = cv2.flip(pixel_array_numpy, 0)

    cv2.imwrite(os.path.join(jpg_folder_path, image), pixel_array_numpy2)


查看完整回答
反对 回复 2021-07-06
?
慕神8447489

TA贡献1780条经验 获得超1个赞

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

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


查看完整回答
反对 回复 2021-07-06
  • 2 回答
  • 0 关注
  • 610 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号