高精度检测圆形的几个方法
工作中遇到一个小任务,尽量高精度地检测圆形。霍尔变换检测圆虽然方便,但其中的参数不好控制,有的时候圆大一点、歪一点,总有检测不出来的,而且误差感觉也挺大的。搜索资料后发现有如下方法:
模板匹配
如果有一些预先采集的图片,可以用模板匹配来解决,感觉很巧妙。模板匹配总体而言精度还是很高的,这个方法缺点就是需要圆大小、形状固定一些,不然模板里面找不到。
质心
这个是我在某个 matlab 脚本上看到的,也是一个很普遍的做法。
先用阈值筛选得到一个二维图片,可以用一些滤波处理减小噪声影响,但不做对于我的那个任务感觉也还行。假设说我们现在得到了圆形的掩膜图片,即我们知道哪些点是在圆上面,然后就可以用加权求质心的方法了。这个好处就是我们的掩膜图片中可以有漏选或者多选几个点,与之对比的是,用轮廓求中心,就很有可能因为多选、少选几个点,导致结果有不小的偏差。
最小二乘法求解
在上面质心方法中,提到用轮廓求解中心点时误差会有点大,其实本质上而言就是抗噪声能力差。质心方法之所以较好,也是因为相当于用了许多的点的数据,类似于做了平滑滤波。所以顺着这个思路,我们可以改进用轮廓求中心。
方法就是用轮廓上的点去拟合圆,而不是直接单纯认为轮廓上的点一定就是实际轮廓的点。具体做法自行搜索。
识别后
识别之后也可以用圆率、面积等等进行再一次检查筛选,确保正确性。