首页 > 解决方案 > OpenCV:如何关闭二进制图像中的边缘

问题描述

我正在尝试对以下脑组织图像进行图像分割:

在此处输入图像描述

以下是分段结果的样子:

在此处输入图像描述

在对原始图像应用阈值、形态变换和轮廓区域过滤(用于去除图像中的噪声)后,我得到了以下结果:

轮廓过滤前的结果:

在此处输入图像描述

轮廓过滤后的结果:

在此处输入图像描述

然而,在我的结果中,一些黑边被分开/分开了。有什么简单的方法可以用来缩小一些边缘之间的小间隙。例如,是否可以用黑色填充红色圆圈边缘之间的空白?

在此处输入图像描述

任何见解都值得赞赏。

标签: opencvimage-processingcomputer-visioncontour

解决方案


最简单的方法是尝试使用形态学。您只需执行膨胀操作,然后执行侵蚀操作。

以下脚本使用了 opencv 的 Morphology 函数:

import numpy as np
import cv2

folder = 'C:/Users/Mark/Desktop/'
image = cv2.imread(folder + '6P7Lj.png')
image2 = cv2.bitwise_not(image)
kernel = np.ones((8,8),np.uint8)
closing = cv2.morphologyEx(image2, cv2.MORPH_CLOSE, kernel)
closing = cv2.bitwise_not(closing)

cv2.imshow('image', closing)
cv2.waitKey(0)

这是结果:

在此处输入图像描述

大多数边缘是连接的。我相信您可以进一步使用该函数的内核以获得更好的结果(或者甚至使用 openCV 的单独膨胀和侵蚀函数来获得更多控制)。

注意:我添加以在执行操作之前反转图像,因为它与您的图像不同,它将白色像素视为正,将黑色视为负。最后,它再次反转以返回您的格式。


推荐阅读