2017-03-07 154 views
3

我尝试访问DICOM文件的RGB未知压缩(也许没有)的像素阵列。提取灰度像素数组工作得很好。如何使用pydicom从DICOM文件访问RGB像素阵列?

但是,使用

import dicom 
import numpy as np 

data_set = dicom.read_file(path) 
pixel_array = data_set.pixel_array 
size_of_array = pixel_array.shape 

if len(size_of_array) == 3:  
    chanR = pixel_array[0][0:size_of_array[1], 0:size_of_array[2]] 
    chanG = pixel_array[1][0:size_of_array[1], 0:size_of_array[2]] 
    chanB = pixel_array[2][0:size_of_array[1], 0:size_of_array[2]] 
    output_array = (0.299 ** chanR) + (0.587 ** chanG) + (0.114 ** chanB) 

与目标,将它转化成一个共同的灰度阵列。不幸的是结果数组output_array没有包含正确的像素数据。内容不是虚假缩放的,它们在空间上受到干扰。问题在哪里?

+0

也许它BGR而不是RGB? – Divakar

+0

不,相应的DICOM标签显示“RGB”,其他模式是“OT”,其患者报告转换为图像格式。 结果图像的分辨率和图像大小确实很合适。但是每个频道似乎只包含部分空间信息。 –

+0

什么是'pixel_array.shape'? –

回答

0

您现在可能已经解决了这个问题,但我认为pydicom不能正确解释planar configuration

你需要做的第一:

img = data_set.pixel_array 
img = img.reshape([img.shape[1], img.shape[2], 3]) 

从这里开始你的形象将有形状[rows cols 3],与渠道分离

+0

非常感谢!我马上试一下。其实我的解决方案是写一个ITK方法。 –