答案 0 :(得分:3)
由于您的标签表明您也欢迎使用Python解决方案,因此我在cv2.HoughCircles
之后介绍了以下使用OpenCV的方法,特别是this tutorial方法。
代码如下:
import cv2
import numpy as np
# Read input image
img = cv2.imread('images/xbHB0.jpg', cv2.IMREAD_GRAYSCALE)
# Blur input image to prevent too much false-positive detected circles
img = cv2.GaussianBlur(img, (3, 3), 0)
# Initialize outputs
clean = np.zeros(img.shape, np.uint8)
compare = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)
# Detect circles using Hough transform; convert center points and radii to int
circles = cv2.HoughCircles(img, cv2.HOUGH_GRADIENT, 1, 20, param1=50, param2=25, minRadius=10, maxRadius=0)
circles = np.uint16(np.around(circles))
# Draw detected circle to outputs
for i in circles[0, :]:
cv2.circle(clean, (i[0], i[1]), i[2], 255, 1)
cv2.circle(compare, (i[0], i[1]), i[2], (0, 255, 0), 1)
cv2.circle(compare, (i[0], i[1]), 2, (0, 0, 255), 1)
cv2.imshow('Input', img)
cv2.imshow('Comparison', compare)
cv2.imshow('Clean output', clean)
cv2.waitKey(0)
cv2.destroyAllWindows()
“干净的”圆圈看起来像这样:
并且,为了比较,在原始图像上覆盖:
如您所见,在此特定图像上使用此方法将无法获得理想的效果。参数调整可能会改善结果。
希望有帮助!
答案 1 :(得分:0)
如果问题是特定于圆的,则可以使用“霍夫圆”算法在图像中找到圆,然后简单地绘制它们。我不知道如何在matlab中完成。在python中,您可以使用opencv HoughCircles
如果您正在寻找更通用的解决方案,可能会感兴趣的是morphological operators,例如膨胀,腐蚀,打开,关闭。