最近在做圆形环状标记点检测问题,做个记录。此文是根据《Circular Coded Landmark for Optical 3D-Measurement and Robot Vision》论文实现的。
大概流程是
1 转灰度图
2 otsu转二值图
3 获取所有轮廓信息(我看好多人用的canny算法,我没有,此后有时间在做测试)
4 找到符合条件的mark的轮廓(论文中提供了很多限制条件,我只用了很小一部分,以后需要都加上,必须加上)
5 将mark轮廓拟合成椭圆
6 根据椭圆参数 仿射变换成300直径的圆(300直径主要是为了显示用,也可以变成任意直径,随你)
7 同样将所有mark内部的一级子轮廓进行仿射变换
8 获取mark和所有子轮廓的质心
9 根据质心位置关系和标记点的逻辑关系,确定二进制数
10 旋转二进制数,找到能组合出最小数值的排列组合作为mark数值
源代码下载:https://download.csdn.net/download/ljx_yy/10563191
(包含源码,标记点测试图,和标记点设计图,测试图是标准A4,可以直接打印)
标记点说明
内部点分为2层,外面代表高位,里面代表低位,各6位。高位和低位都是6边形,交叉摆放,每两个点之间的夹角是30度,
在使用时,高位和低位必须都同时存在。
PS:
标记点图:
轮廓图:
结果: