我正在尝试将图形背景设置为dicom图像。我跟着this example,但dicom.pixel_array
给出的图像数据不是RGBA。我也不确定如何转换它。我也不确定散景的期待是什么。我已经尝试在文档中找到细节,但没有运气。
from bokeh.plotting import figure, show, output_file
import dicom
import numpy as np
path = "/pathToDicomImage.dcm"
data = dicom.read_file(path)
img = data.pixel_array
p = figure(x_range=(0,10), y_range=(0,10))
# must give a vector of images
p.image_rgba(image=[img], x=0, y=0, dw=10, dh=10)
output_file("image_rgba.html", title="image_rgba.py example")
show(p)
此代码不会给我任何错误,但它不会显示任何内容。也许像素数组没有alpha数据,因此alpha
默认为0
?我不确定。另外,我无法弄清楚如何测试它。
解决
正如所指出的,我只需要将像素数据映射到rgba空间。对于这个例子,它意味着将数据复制到每个通道,并一直设置alpha。
def dicom_image_to_RGBA(image_data):
rows = len(image_data)
cols = rows
img = np.empty((rows,cols), dtype=np.uint32)
view = img.view(dtype=np.uint8).reshape((rows, cols, 4))
for i in range(0,rows):
for j in range(0,cols):
view[i][j][0] = image_data[i][j]
view[i][j][1] = image_data[i][j]
view[i][j][2] = image_data[i][j]
view[i][j][3] = 255
return img
答案 0 :(得分:0)
不是python的专家,我已经了解了pydicom处理像素数据的能力。我发现pixel_array是DICOM数据集的像素数据属性的值,因为并且pydicom没有提供将其转换为可以统一处理的某种标准格式的任何功能。这意味着在大多数情况下你必须将它转换为RGB,这是一个非常复杂且容易出错的任务。
在此考虑的事项:
但是,如果您限制特定类型的图像(例如计算机射线照相术)。上述限制适用于使您的生活更轻松。
如果您要发布图像标题的DICOM转储,我可以给您一些提示如何显示该特定图像。
HTH
kritzel
答案 1 :(得分:0)
您需要做的是将pixel_array返回的像素数据映射到RGB空间。通常使用查找表(LUT)完成。在dicomparser库的dicompyler-core模块中查看函数GetImage和GetLUTValue。
在GetLUTValue中,它将数据映射到8位灰度图像。如果要使用其他LUT,则需要相应地映射颜色空间。