当前位置: 首页>编程语言>正文

opencv取坐标中心点 opencv 圆点标定

机器视觉学习笔记(2)--如何检测圆点标定板

摄像机标定常用的标定板除了棋盘格,还有圆点标定板,圆点标定板如图1所示。




opencv取坐标中心点 opencv 圆点标定,opencv取坐标中心点 opencv 圆点标定_机器视觉,第1张


图1:圆点标定板

众所周知的是,OpenCV和Matlab没有现成的圆点标定板的检测算法,只有Halcon有该检测算子,遗憾的是,Halcon是商业软件,而且不开源。

为此,小编自己实现了一个稳定性高,可靠性好的算法,分享给各位爱好机器视觉的朋友,圆点检测算法包含以下几个步骤:

1. 阈值化,可以用Otsu阈值化方法或局部平均自适应阈值化方法。这里用了Otsu算法,效果如图2所示。


opencv取坐标中心点 opencv 圆点标定,opencv取坐标中心点 opencv 圆点标定_拟合_02,第2张


图2:Otsu阈值化

2. 定位,找出圆点阵的感兴趣区域,由图可知,感兴趣区域可以通过找四边形的外边框或五边形的内边框,四边形不能确定圆点排序关系,因此使用五边形。

查找轮廓,多边形拟合,去除非五边形轮廓,将边角的长度远小于其他边长作为重要约束,结合面积和角度约束,去除干扰性的五边形。将检测到的五边形显示在原图上,如图3所示。


opencv取坐标中心点 opencv 圆点标定,opencv取坐标中心点 opencv 圆点标定_c++ 多边形平面弧形如何逆时针排序_03,第3张


图3:定位

3. 变换平面,透视变换可以将平面转换到任意方位,如果我们把圆点标定板由倾斜变成正对着,那么圆点标定板的像素与物理关系就可以对应上,检测圆点就相当容易了。透视变换至少要4个点,而我们有了五边形5个点,已经足够了,但由于我们一般知道内边框大小,而边角长度一般不给出,因此我们需要求边角两边长的延展线的交点来形成四边形,结果如图4所示。


opencv取坐标中心点 opencv 圆点标定,opencv取坐标中心点 opencv 圆点标定_拟合_04,第4张


图4:四边形

将四边形透视变换成正四边形,如图5所示。


opencv取坐标中心点 opencv 圆点标定,opencv取坐标中心点 opencv 圆点标定_透视变换_05,第5张


图5:正边形

4. 找出透视变换中的圆点中心坐标,根据实际位置和图像位置的比例关系,可以直接得到理想圆点中心位置,效果如图6所示。


opencv取坐标中心点 opencv 圆点标定,opencv取坐标中心点 opencv 圆点标定_拟合_06,第6张


图6:理想圆点中心点

从图中可以看出,由于畸变的影响,实际的中心点有了小的偏移,因此需要检测准确的实际中心点,这里不需要采用圆形检测和椭圆检测的方法,只需要用简单的重心法即可。由于实际点偏离理想点较小,可通过理想点选取包含圆点的ROI,用重心法求取中心点,效果图如图7所示。


opencv取坐标中心点 opencv 圆点标定,opencv取坐标中心点 opencv 圆点标定_透视变换_07,第7张


图7:ROI圆点

求出所有点后,效果如图8所示。


opencv取坐标中心点 opencv 圆点标定,opencv取坐标中心点 opencv 圆点标定_透视变换_08,第8张


图8:实际圆点中心点

5. 反透视变换,将所有圆点中心点反透视变换,即可完成最终的圆点检测。

-


opencv取坐标中心点 opencv 圆点标定,opencv取坐标中心点 opencv 圆点标定_opencv取坐标中心点_09,第9张


图9:圆点检测

听完小编的解说,是不是觉得圆点标定板的检测也挺简单的呢,那就动起手来,也实现一下吧。


https://www.xamrdz.com/lan/55w1937198.html

相关文章: