我必须检测图像中的圆圈(其中一些没有均匀的背景),因为我正在使用circle_hough函数,它需要边缘逻辑矩阵。
i_edge = edge(image, 'Canny', 0.3); %0.3 works in most cases
radii = 36:2:144; %144 is half the size of all the images
h = circle_hough(i_edge, radii, 'same', 'normalise');
peaks = circle_houghpeaks(h, radii, 'nhoodxy', 9, 'nhoodr', 9, 'npeaks', 1);
问题是,有些图片工作正常:
但其他人不这样做:
在这里,您可以看到我在第一行(找到圆圈)中的行i_edge= edge(image, 'Canny', 0.3);
之后获得的内容,以及第三行(找不到圆圈)。最困扰我的是它们或多或少相似:
我尝试了不同类型的低通滤波器(中位数,平均值,高斯值,磁盘),但是没有一个我得到更好的结果,而不是相反。
在最后一种情况下,边缘矩阵中的圆几乎是完美的但是仍然没有找到正确的圆:
答案 0 :(得分:2)
取第3个数字(绿草上的球),由于许多自然因素如闪电,边缘检测可能会失败。在这里,canny函数增强了球上的条纹,但没有增强其圆形边缘(这种方法可能会失败,因为边缘检测的准确性受限,假设边缘不清晰)。
我建议跟随,尝试找到颜色簇(像这里将是2个突出的 - 绿色的草和红色的球)然后将附近的颜色提升到峰值颜色(这将消失边缘检测前,球上的条纹和缩小图像颜色。 Color Clusters 也可用于生成ROI(感兴趣区域),图像可以分为不同的区域,然后是颜色增长和圆圈数。
就像制作带有黑色条纹的整个红球,红色条纹的红色球,然后搜索圆圈。