你可以尝试一种基于梯度的方法。下面我用了形态梯度。我对这个渐变图像应用Otsu阈值化,然后进行相似数量的形态闭合(10次迭代),然后获取结果图像的形态梯度。在
现在这些区域很容易被发现。可以从等高线中过滤圆形区域,例如,使用基于区域的方法:使用轮廓的边界框尺寸,可以获得半径的估计值,然后将计算的区域与轮廓区域进行比较。在
不知道这种方法对你的收藏有多普遍。在
渐变图像:为可视化而缩放的强度值
二值化梯度图像
关闭图像
梯度
im = cv2.imread('LDxOj.jpg', 0)
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3, 3))
morph = cv2.morphologyEx(im, cv2.MORPH_GRADIENT, kernel)
_, bw = cv2.threshold(morph, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
morph2 = cv2.morphologyEx(bw, cv2.MORPH_CLOSE, kernel, anchor = (-1, -1), iterations = 10)
morph3 = cv2.morphologyEx(morph2, cv2.MORPH_GRADIENT, kernel)