如何在不变形尺寸的情况下连接图像蒙版的各段?

时间:2018-09-19 17:30:09

标签: python opencv matplotlib image-processing mask

我要测量的图像中有一个感兴趣区域的蒙版。但是这些蒙版并非总是高质量的,有时我感兴趣的对象(无人机影像中的鲸鱼)来自多个图像段,这些图像段由几个像素隔开。因此,我尝试进行一些扩张和腐蚀操作以制成单个遮罩,但是扩张过多会影响我的最终测量结果。有没有一种方法可以进行膨胀以连接形状,腐蚀可以从膨胀中去除所有增加的周长/长度,但是可以防止腐蚀产生两个不同的部分?

这是我目前拥有的:

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

first image

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()

second image

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

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

image three

最后,您仍然可以看到仍然是两个单独的部分,如果我进行较少的腐蚀迭代,则遮罩太宽且遮罩的测量值太失真了。

更新

我试图将系统更改为使用opencv的minAreaRect()函数来测量长度,这导致了外观简洁的解决方案,但它添加了相当大的缓冲区,导致长度测量很差。

image four

0 个答案:

没有答案