使用 RGB 数据将输入数据剪切到 imshow 的有效范围(浮点数为 [0..1] 或整数为 [0..255])
Posted
技术标签:
【中文标题】使用 RGB 数据将输入数据剪切到 imshow 的有效范围(浮点数为 [0..1] 或整数为 [0..255])【英文标题】:Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers) 【发布时间】:2018-09-13 14:18:54 【问题描述】:在将 MRI 切片转换为 PNG 格式后,我尝试运行图形切割算法。我一直遇到以下问题:
Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).
即使在设置vmin
和vmax
之后也是如此:
plt.imshow(out, vmin=0, vmax=255)
【问题讨论】:
【参考方案1】:在缩放[0, 255]
范围后将图像投射到np.uint8
将消除此警告。这似乎是matplotlib
中的一个功能,正如issue 中所讨论的那样。
plt.imshow((out * 255).astype(np.uint8))
【讨论】:
【参考方案2】:使用plt.imshow(out.astype('uint8'))
代替plt.imshow(out)
。就是这样!
【讨论】:
【参考方案3】:如果你想展示它,你可以使用img/255
。
或者
np.array(img,np.int32)
原因是如果颜色强度是浮点数,那么matplotlib expects 它的范围是 0 到 1。如果是 int,那么它需要 0 到 255。所以你可以强制所有数字为 int 或 scale全部减少 1/255。
【讨论】:
【参考方案4】:正如警告所说,它在 (0,1).... 之间裁剪数据。 我尝试了上述方法,警告消失了,但我的图像缺少像素值。 所以我为我的 numpy 数组 Image (64, 64, 3) 尝试了以下步骤。 第1步:检查数组的最小值和最大值
maxValue = np.amax(Image)
minValue = np.amin(Image)
在我的情况下,图像的最小值为负数,最大值为正数,但都在 (-1, 1.5) 之间,所以 第2步:我只是在imshow之前剪切了数据
Image = np.clip(Image, 0, 1)
plt.imshow(Image)
请注意,如果您的像素值在 (-84, 317) 等范围内,那么您可以使用以下步骤
Image = Image/np.amax(Image)
Image = np.clip(Image, 0, 1)
plt.imshow(Image)
【讨论】:
【参考方案5】:只要在这个范围内 [0:1]
如果调用amax()和amin()后在[-1, 1]之间则
img = img / 2 + 0.5
如果在 [0, 250] 之间
img = img / 250
【讨论】:
以上是关于使用 RGB 数据将输入数据剪切到 imshow 的有效范围(浮点数为 [0..1] 或整数为 [0..255])的主要内容,如果未能解决你的问题,请参考以下文章
将 RGB 图像数组乘以标量后使用 plt.imshow 获取黑色图
Python中”Clipping input data to the valid range for imshow with RGB data ”的问题解决