使用 cv2 显示 unet 预测图像

Posted

技术标签:

【中文标题】使用 cv2 显示 unet 预测图像【英文标题】:display unet predicted image using cv2 【发布时间】:2020-01-30 14:21:17 【问题描述】:

我已经使用图像和掩码训练了一个模型,并预测了一个图像。 我预测的图像的形状是(1024,1024,3)

代码。

nueva_imagen = cv2.imread("../input/dataset/Training_dataset/Images/all_imgs/zanzibar_4_35_04.jpg")
print(nueva_imagen.shape)
nueva_imagen = cv2.resize(nueva_imagen,(256,256))
nueva_imagen = np.expand_dims(nueva_imagen,axis=0)
print(nueva_imagen.shape)
pred_img = model.predict(nueva_imagen)
print(pred_img.shape)
#pred_img = np.squeeze(pred_img,axis=0)
#print(pred_img.shape)

我添加另一个维度的原因是因为我的模型只拍摄 3 维度的图像。 最后我预测的图像形状是(1,256,256,1) 现在阅读 cv2 文档我无法显示 4 维图像,所以这就是我所做的。

image_to_predict = _images[789]
mask_of_image = masks_arr[789]



pred_img = np.squeeze(pred_img,axis=0)
pred_img = np.squeeze(pred_img,axis=2)



fig = plt.figure()
fig.subplots_adjust(hspace=0.4, wspace=0.4)
ax = fig.add_subplot(1, 2, 1);plt.title("original image")
ax.imshow(image_to_predict)

#ax = fig.add_subplot(1, 2, 2);plt.title("mask")
#ax.imshow(mask_of_image)

ax = fig.add_subplot(1,2,2);plt.title("Predicted image")
ax.imshow(pred_img)

我删除了轴 0 和 3 上的尺寸以显示图像,但我得到的是紫色图像。 这是预测的图像还是我做错了什么?

【问题讨论】:

【参考方案1】:

您可能想要执行的一些检查(如果没有访问模型和图像很难判断):

当您使用 OpenCV 加载图像时,图像存储为 BGR 而不是 RGB。如果您在加载 OpenCV 的图像上训练模型,这应该不是问题。但是如果您在目录上使用fit 方法,您可能希望使用cv2.cvtColor(nueva_imagen, cv2.COLOR_BGR2RGB) 从 BGR 转换为 RGB 确保训练和预测之间的图像预处理相同。通常,检查它们是否具有 [0, 1](作为浮点数)或 [0, 255](作为 int)中的值 使用 Matplotlib 关于 [0, 1] 值时也是如此

【讨论】:

我用 keras ImageDataGenerator 加载/处理的图像训练了我的模型。检查我处理过的图像值变为 [0,255] 但我的预测图像变为 [0,1] 那么您可能希望将图像转换为预测为 [0, 255] 和 RGB:(cv2.cvtColor(nueva_imagen, cv2.COLOR_BGR2RGB) * 255).astype('uint8')

以上是关于使用 cv2 显示 unet 预测图像的主要内容,如果未能解决你的问题,请参考以下文章

神经网络总是预测同一个类别

深度学习UNet案例

深度学习UNet案例

如何根据我的预测获得 ROI 坐标?

基于深度学习的图片上色

我需要在 SVM 的预测时间计算 hist 吗?