猿问

Python 将 .dcm 转换为 .png,图像太亮

我必须将一些默认提供的文件转换为.dcm,.png我在这里找到了一些代码示例来实现这一点,但最终结果太亮了。请问有人可以看看这个吗?


 def convert_to_png(file):

    ds = pydicom.dcmread(file)


    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()) * 255.0


    # Convert to uint

    image_2d_scaled = np.uint8(image_2d_scaled)


    # Write the PNG file

    with open(f'{file.strip(".dcm")}.png', 'wb') as png_file:

        w = png.Writer(shape[1], shape[0], greyscale=True)

        w.write(png_file, image_2d_scaled)

我已经调整了代码,但似乎没有任何效果。


这就是实际的 dicom 的样子,右侧是运行此代码的结果

慕尼黑5688855
浏览 686回答 4
4回答

慕婉清6462132

一些 DICOM 数据集需要对原始像素强度进行窗口中心/宽度重新缩放(通过VOI LUT 模块中的 (0028,1050)窗口中心和 (0028,1051)窗口宽度元素),以便重现它们“查看”的方式.pydicom有一个函数apply_voi_lut()用于应用此窗口:from pydicom import dcmreadfrom pydicom.pixel_data_handlers.util import apply_voi_lutds = dcmread(file)if 'WindowWidth' in ds:    print('Dataset has windowing')windowed = apply_voi_lut(ds.pixel_array, ds)# Add code for rescaling to 8-bit...根据数据集类型,您可能需要事先使用apply_modality_lut()。

白衣染霜花

分析.dcm特定图像时,图像似乎具有一定范围的亮度和对比度。在您的情况下它可能看起来有点亮的原因是您只选择了图像的特定视图。为了使图像更暗,看起来你只需要增加你的分母值:threshold = 500 # Adjust as neededimage_2d_scaled = (np.maximum(image_2d, 0) / (np.amax(image_2d) + threshold)) * 255.0这将确保某些像素不会太亮。

狐的传说

那么我也有同样的问题,你可以使用Scikit Image library 中的exposure.equalize_adapthist()。filename = "sample.dcm"ds = pydicom.read_file(filename)image = ds.pixel_arrayimage = exposure.equalize_adapthist(image)cv2.imshow("dicom", image)cv2.waitKey(0)

慕无忌1623718

你可以试试下面的方法image = image - np.min(image)image = (image/np.max(image))*255在这种方法中,您在从 dicom 转换为 png/jpg 时会丢失最少的信息
随时随地看视频慕课网APP

相关分类

Python
我要回答