【问题标题】:OpenCV: How to closes edges in a binary imageOpenCV:如何关闭二进制图像中的边缘
【发布时间】:2019-07-30 11:48:33
【问题描述】:

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

以下是分割后的结果:

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

轮廓过滤前的结果:

轮廓过滤后的结果:

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

感谢任何见解。

【问题讨论】:

  • 您可以使用侵蚀来删除不需要的连接
  • 我不认为腐蚀可以解决这个问题。侵蚀只会使前景物体的边界变薄。我正在尝试关闭边缘应该是完整的边缘的间隙,但在处理图像后引入了一个小间隙。
  • 要消除图中突出显示的间隙,您必须首先找到存在这些连接的区域,然后才能将其删除。问题是你将如何找到它们?您不知道,但简单的解决方案是使白色区域变薄,侵蚀可以消除这些不希望的连接,但会使黑色区域(在您的情况下为边缘)变厚。

标签: opencv image-processing computer-vision contour


【解决方案1】:

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

以下脚本使用了 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 的单独膨胀和侵蚀函数来获得更多控制)。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-13
    • 1970-01-01
    • 2014-03-14
    • 2013-05-09
    • 2019-11-12
    • 1970-01-01
    • 2020-07-23
    相关资源
    最近更新 更多