gpt4 book ai didi

python - 获取并显示 numpy 数组中一堆 3 channel 图像中的一个图像

转载 作者:太空宇宙 更新时间:2023-11-03 14:11:42 24 4
gpt4 key购买 nike

我有一堆图像。堆栈上的第一个看起来像这样:

enter image description here

import dicom as dc
dcm = dc.read_file('full_stack.dcm')
dcm = dcm.pixel_array
print type(dcm)
print dcm.shape

这给了我

<type 'numpy.ndarray'>

(3, 180, 480, 640)

所以看起来有:

  • 3 个 channel
  • 180 张图片
  • 宽度为 480
  • 高度为 640

太棒了。

我的目标是提取堆栈中的图像。然后,我想显示该图像。听起来很简单。

这是我的策略。我希望对此有任何想法/反馈:

1) 获取一张图像。使用基本切片获取堆栈上的第 10 个图像

dcm1 = dcm[0:, 10:11]
dcm1.shape
(3, 1, 480, 640)

2) 要使用 plt.imshow 在 pyplot 中实际绘制此图,我们需要以下形状:(r,c, channel )。所以我想通过暴力来击败图像。

dcm2 = np.squeeze(dcm1, axis=1)  # throw away the '1'...this makes me nervous
print 'threw away the "1": ', dcm2.shape
dcm3 = np.swapaxes(dcm2, 0,2)
print 'swapped the first and last dim: ', dcm3.shape
dcm4 = np.swapaxes(dcm3, 0,1)
print 'swapped the first and second dim:', dcm4.shape

现在,我已经破坏了这个糟糕的图像:

threw away the "1":               (3, 480, 640)
swapped the first and last dim: (640, 480, 3)
swapped the first and second dim: (480, 640, 3)

绘图时间到了!可能会出现什么问题?

imgplot = plt.imshow(dcm4)

这是我得到的:

enter image description here

不知何故,我的图像现在有各种颜色,看起来很糟糕。

这就是我的问题开始的地方——有人知道发生了什么事吗?显然我的方法不成熟且不能令人满意。但我不确定到底该去哪里。

额外的东西,可能并不真正相关

此时,我尝试将 channel 减少到一个,然后复制回三个,以便 imshow 可以读取它,我会为您保存详细信息,但它给了我这个:

enter image description here

最佳答案

这个解决方案对我来说效果很好。请验证输入数组中的值范围是否在 0-255 范围内且为 uint8 数据类型。仅尺寸不足以重现结果。例如,以下设置对我来说效果很好:

In [50]: img = np.random.randint(0, 255, (3, 180, 480, 640), dtype=np.uint8)
In [51]: img1 = np.squeeze(img[:, 9:10])

# proper_img is a *view*; caution while modifying it
In [52]: proper_img = np.moveaxis(img1, source=0, destination=-1)
In [53]: plt.imshow(proper_img)

我得到的情节如下:

enter image description here

关于python - 获取并显示 numpy 数组中一堆 3 channel 图像中的一个图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48454263/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com