含噪二值图像内点圆拟合算法咨询:适配各类圆缺陷的鲁棒方案
问题:含噪二值图像内圆的鲁棒拟合算法
我有一张含噪二值图像,其中多数白点位于一个圆内。需要具备鲁棒性、能处理圆各类缺陷的拟合算法。
示例图像:
原始图像:
已尝试的方法
- Hough圆变换:鲁棒性不足
- 膨胀操作后寻找凸包并拟合圆:鲁棒性不足
- 常规圆拟合算法:仅能拟合圆周上的点,无法处理圆内点
- 计算白点间的两两距离生成直方图,用Otsu算法找对应圆直径的阈值:因点数达数万,计算速度过慢
图像预处理步骤
- 转为灰度图
- 识别并移除过暗像素(主要是两条黑色曲线,不可作为圆检测的线索),替换为图像灰度中值
- 采用反向Otsu阈值进行二值化
- 填充孔洞:在此图像中效果不明显,但对圆内内容更密集的图像帮助很大
推荐的鲁棒圆拟合方案
1. 适配圆内点的RANSAC圆拟合
不需要局限于圆周点,直接利用所有白点做鲁棒拟合:
- 每次随机选取3个白点,拟合一个临时圆
- 统计所有白点中到该圆的距离小于设定阈值(比如半径的5%-10%)的点数量,作为内点计数
- 重复采样足够次数(如1000次),保留内点数量最多的圆作为候选
- 最后用该候选圆的所有内点重新做最小二乘拟合,优化圆心坐标和半径
这种方法天然抗噪,能忽略零散噪点,圆内的点同样能提供有效判断依据。
2. 距离变换+峰值检测
利用圆内点到边界的距离特性快速定位:
- 对二值图像做距离变换,每个白点的距离值为其到最近黑点的距离
- 圆内的距离值会围绕圆心呈现对称分布,圆心对应距离变换图的峰值点
- 找到峰值点作为圆心后,统计所有白点到该点的距离,用中位数或众数作为半径(这两个统计量抗噪性远优于均值)
距离变换的计算复杂度为O(n),处理数万点速度很快,适合大规模数据场景。
3. 离群点过滤+最小外接圆拟合
先清理噪点再用几何方法求解:
- 用DBSCAN聚类算法对所有白点聚类,过滤掉零散的小噪点簇
- 对剩余的主簇点,用Welzl算法计算最小外接圆,这个圆能包裹绝大多数有效内点
- Welzl算法的时间复杂度接近线性,处理数万点效率很高
相比单纯的凸包拟合,先过滤离群点能大幅提升鲁棒性。
4. 加权最小二乘拟合(针对圆内点场景)
修改常规最小二乘的目标函数,适配圆内点:
- 定义误差为点到圆心的距离与半径的差的绝对值,给距离接近半径的点赋予更高权重,距离过小的点降低权重
- 通过迭代加权的方式求解,每次迭代根据点到当前圆的距离调整权重,逐步收敛到最优圆
这种方法能兼顾圆周点和圆内点的信息,同时抑制离群噪点的影响。
内容的提问来源于stack exchange,提问作者hillin
相关产品推荐
相关产品推荐

