首页 > 解决方案 > 如何在不扭曲尺寸的情况下连接图像蒙版的片段?

问题描述

我在试图测量的图像中有一个感兴趣区域的蒙版。但这些面具并不总是高质量的,有时我感兴趣的对象(无人机图像中的鲸鱼)来自多个图像片段,由几个像素分隔。所以我试图做一些膨胀和腐蚀操作来制作一个单一的蒙版,但是太多的膨胀会影响我的最终测量。有没有办法进行膨胀以连接形状,腐蚀以从膨胀中去除所有增加的周长/长度,但防止腐蚀产生两个不同的段?

这是我目前拥有的:

import cv2
# my_mask = output from Mask RCNN
plt.imshow(my_mask, cmap="gray")
plt.show()

第一张图片

mask_uint = np.array(my_mask, dtype=np.uint8)

kernel = np.ones((5,5), np.uint8)
dilation = cv2.dilate(mask_uint, kernel, iterations=5)

plt.imshow(dilation, cmap="gray")
plt.show()

第二张图片

erosion = cv2.erode(dilation, kernel, iterations=4)

plt.imshow(erosion, cmap="gray")
plt.show()

图三

最后你可以看到它仍然是两个独立的部分,如果我做更少的侵蚀迭代,那么掩码就太宽了,我对掩码的测量也太扭曲了。

更新

我尝试更改我的系统以使用 opencv 的 minAreaRect() 函数来测量长度,这导致了一个干净的解决方案,但它增加了一个相当大的缓冲区,导致长度测量非常差。

图四

标签: pythonopencvmatplotlibimage-processingmask

解决方案


推荐阅读