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 应用程序中的方式相同

Azure 移动服务与将设备作为服务器的 Web 套接字

Azure 移动服务与将设备作为服务器的 Web 套接字

属性表模式与将所有属性存储在 json 列中 [重复]

MVC 创建 SQL 视图与将计算放入控制器

性能考虑:在多个表中分散行与将所有行集中在一个表中