使用RGB数据将输入数据剪切到imshow的有效范围(浮点数为[0..1],整数为[0..255])

Ank*_*nde 17 image-processing medical python-3.x

在将其转换为PNG格式后,我尝试将图形切割算法用于MRI切片.我一直遇到以下问题:

将输入数据剪切到有效范围,用于显示RGB数据([0..1]表示浮点数或[0..255]表示整数).

甚至在设置vmin和vmax后如下:

plt.imshow(out,vmin=0,vmax=255)
Run Code Online (Sandbox Code Playgroud)

Dat*_*yen 25

将图像投射到np.uint8缩放[0, 255]范围后将忽略此警告.它似乎是一个特征matplotlib,正如本期所讨论的那样.

plt.imshow((out * 255).astype(np.uint8))
Run Code Online (Sandbox Code Playgroud)


Anh*_*INH 17

而不是plt.imshow(out),使用plt.imshow(out.astype('uint8'))。就是这样!


vik*_*ath 14

正如警告所说,它正在将数据剪裁在 (0,1) 之间......我尝试了上述方法,警告消失了,但我的图像缺少像素值。所以我尝试对我的 numpy 数组图像 (64, 64, 3) 执行以下步骤。步骤 1:检查数组的最小值和最大值

maxValue = np.amax(Image)
minValue = np.amin(Image)
Run Code Online (Sandbox Code Playgroud)

对于我的情况,图像的最小值为负,最大值为正,但所有值都在 (-1, 1.5) 之间,所以第 2 步:我只是在 imshow 之前剪辑了数据

Image = np.clip(Image, 0, 1)
plt.imshow(Image)
Run Code Online (Sandbox Code Playgroud)

请注意,如果您的像素值的范围类似于(-84, 317)等,那么您可以使用以下步骤

Image = Image/np.amax(Image)
Image = np.clip(Image, 0, 1)
plt.imshow(Image)
Run Code Online (Sandbox Code Playgroud)


小智 11

如果你想显示它,你可以使用img/255.

或者

np.array(img,np.int32)
Run Code Online (Sandbox Code Playgroud)

原因是如果颜色强度是一个浮点数,那么matplotlib 期望它的范围从 0 到 1。如果是 int,那么它期望是 0 到 255。所以你可以强制所有数字为 int 或将它们全部缩放 1 /255。