使用 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).

即使在设置vminvmax 之后也是如此:

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 ”的问题解决

将 RGB 颜色数组转换为 px.imshow 热图

Python OpenCV - imshow 不需要从 BGR 转换为 RGB

使用numpy蒙版数组和imshow绘制分段彩色图像

matlab 如何将彩图转成灰度图