Imshow 与将 matplolib.cm 应用于分段图像有很大不同
Posted
技术标签:
【中文标题】Imshow 与将 matplolib.cm 应用于分段图像有很大不同【英文标题】:Imshow differs drastically from applying matplolib.cm to a segmented image 【发布时间】:2022-01-20 10:08:54 【问题描述】:您好,感谢您的阅读。
我想做的是制作一个可以拍摄图像的网络应用程序,通过模型运行它并返回分段版本。我不能在 webapp 中使用 imshow。所以我尝试通过 matplolib.cm.viridis 添加颜色图,但是它返回的图像要暗得多。
这里有一些代码和图片供参考:
pred = new_model.predict(np.expand_dims(img, 0))
pred_mask = np.argmax(pred, axis=-1)
pred_mask = pred_mask[0]
这会返回一个 2D 灰度图像,当放入 matplolib imshow 时看起来像这样。(右边的最后一张图片是模型的输出)。代码和图片如下。
axs[0].imshow(m1)
axs[0].set_title('Image')
axs[1].imshow(test_label1)
axs[1].set_title('Ground Truth')
axs[2].imshow(new_pred)
axs[2].set_title('Prediction')
但是,当使用 matplolib.cm 将颜色映射应用到图像时(我必须为应用程序功能做一些事情),我得到了这个图像。代码和图片如下所示。
添加颜色图。 (据我所知,Viridis 是 matplolib 3.5 中的默认设置)
from matplotlib import cm
pred_mask = cm.viridis(pred_mask / 255)*255
pred_mask = np.asarray(pred_mask, dtype='uint8')
绘制图像
fig, axs = plt.subplots(1, 3, figsize=(20, 10))
axs[0].imshow(m1)
axs[0].set_title('Image')
axs[1].imshow(test_label1)
axs[1].set_title('Ground Truth')
axs[2].imshow(pred_mask)
axs[2].set_title('Prediction')
但正如您所见,图像要暗得多,甚至没有一丝浅蓝色或黄色,即更糟。如何使其更接近 imshow 输出?
PS。非常感谢您的阅读,并希望有人对此有答案。任何建议都将不胜感激。
【问题讨论】:
【参考方案1】:这很可能分别与图像或颜色图的数字范围有关。
由于可以隐约看到预测掩码,我的钱将用于将预测数据乘以 255 或将 imshow 的 vmax
设置为较小的值。在任何情况下,了解pred_mask
的最小值/最大值并另外显示正确绘图的颜色条都会很有用。
我希望这能让你走上正轨。
【讨论】:
以上是关于Imshow 与将 matplolib.cm 应用于分段图像有很大不同的主要内容,如果未能解决你的问题,请参考以下文章
将 UITextView 中的文本保存到 NSUserDefaults 中的方式与将 UITextFIeld 保存在 Notes 应用程序中的方式相同