摄像机标定常用的标定板除了棋盘格,还有圆点标定板,圆点标定板如图1所示。 图1:圆点标定板
众所周知的是,OpenCV和Matlab没有现成的圆点标定板的检测算法,只有Halcon有该检测算子,遗憾的是,Halcon是商业软件,而且不开源。
为此,小编自己实现了一个稳定性高,可靠性好的算法,分享给各位爱好机器视觉的朋友,圆点检测算法包含以下几个步骤:
1. 阈值化,可以用Otsu阈值化方法或局部平均自适应阈值化方法。这里用了Otsu算法,效果如图2所示。
图2:Otsu阈值化
2. 定位,找出圆点阵的感兴趣区域,由图可知,感兴趣区域可以通过找四边形的外边框或五边形的内边框,四边形不能确定圆点排序关系,因此使用五边形。
查找轮廓,多边形拟合,去除非五边形轮廓,将边角的长度远小于其他边长作为重要约束,结合面积和角度约束,去除干扰性的五边形。将检测到的五边形显示在原图上,如图3所示。 图3:定位
3. 变换平面,透视变换可以将平面转换到任意方位,如果我们把圆点标定板由倾斜变成正对着,那么圆点标定板的像素与物理关系就可以对应上,检测圆点就相当容易了。透视变换至少要4个点,而我们有了五边形5个点,已经足够了,但由于我们一般知道内边框大小,而边角长度一般不给出,因此我们需要求边角两边长的延展线的交点来形成四边形,结果如图4所示。
图4:四边形
将四边形透视变换成正四边形,如图5所示。