OpenCV:如何关闭二值图像中的边缘
OpenCV: How to closes edges in a binary image
我正在尝试对以下脑组织图像进行图像分割:
分割结果应该如下所示:
在对原始图像应用阈值处理、形态变换和轮廓区域过滤(用于去除图像中的噪声)后,我得到了以下结果:
轮廓过滤前的结果:
轮廓过滤后的结果:
但是,在我的结果中,一些黑边 separated/broken 分开了。有没有什么简单的方法可以用来缩小一些边缘之间的小缝隙。
例如。是否可以用黑色填充红色圈出的边缘之间的空白?
如有任何见解,我们将不胜感激。
最简单的方法是尝试使用形态学。您只需执行膨胀操作,然后执行腐蚀操作。
以下脚本使用了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 的单独膨胀和腐蚀函数来获得更多控制)。
注意:我在执行操作之前添加了反转图像,因为它会将白色像素视为正像素,将黑色像素视为负像素,这与您的图像不同。最后它又被反转为return你的格式。
我正在尝试对以下脑组织图像进行图像分割:
分割结果应该如下所示:
在对原始图像应用阈值处理、形态变换和轮廓区域过滤(用于去除图像中的噪声)后,我得到了以下结果:
轮廓过滤前的结果:
轮廓过滤后的结果:
但是,在我的结果中,一些黑边 separated/broken 分开了。有没有什么简单的方法可以用来缩小一些边缘之间的小缝隙。 例如。是否可以用黑色填充红色圈出的边缘之间的空白?
如有任何见解,我们将不胜感激。
最简单的方法是尝试使用形态学。您只需执行膨胀操作,然后执行腐蚀操作。
以下脚本使用了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 的单独膨胀和腐蚀函数来获得更多控制)。
注意:我在执行操作之前添加了反转图像,因为它会将白色像素视为正像素,将黑色像素视为负像素,这与您的图像不同。最后它又被反转为return你的格式。