600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 角点检测 c语言 棋盘格 一种棋盘格角点全自动检测方法与流程

角点检测 c语言 棋盘格 一种棋盘格角点全自动检测方法与流程

时间:2021-06-17 12:30:44

相关推荐

角点检测 c语言 棋盘格 一种棋盘格角点全自动检测方法与流程

本发明属于图像处理与计算机视觉领域,特别涉及一种棋盘格角点全自动检测的方法。

背景技术:

棋盘格角点作为一种特殊的角点在相机标定中具有广泛的应用,扮演着相当重要的角色。棋盘格图案由于对比度明显,特征简单,易于检测识别所以被广泛地应用于相机标定。同时,棋盘格角点检测的准确与否直接决定着相机内外参标定的精度,而相机标定参数准确与否直接决定着后续图像处理任务的精度。因此提高棋盘格图像角点检测的精度是视觉测量领域重要的课题。

现有角点检测的方法多种多样,大致分为四类,基于边缘特征的角点检测,基于灰度图像的角点检测,基于二值化图像的角点检测,基于数学形态学的角点检测。人们常用的鼠标点击式的人机交互角点检测方法就是基于边缘特征的角点检测方法,也有人使用harris或susan角点提取方法是基于灰度图像的角点检测方法。还有人根据棋盘格矩形的大小设计出矩形模板来进行比对提取的方法是基于二值化图像和数学形态学的角点检测。

其中通过鼠标点击式的人机交互角点检测方法通过人为选取棋盘格四个角的位置来检测角点,尽管检测精度高,但是耗时长,操作十分繁琐。基于灰度图像的角点检测方法利用角点附近图像的灰度变化值进行检测,但这种方法在处于复杂背景下难以获得好的检测精度。通过矩形模板进行比对提取的方法适用于图像畸变较小的情况,而实际上相机镜头的成像畸变有时候会很大,且光照不均,矩形的边缘难以确定,提取出的角点在边缘处误差较大。不仅如此,上述所有方法都不能将棋盘格图像覆盖满整个相机的视场角,不能用棋盘格提取边缘区域的特征点,这样标定出来的相机内外参一定不准确。同时,对于在复杂光照条件拍摄的棋盘格图像可能棋盘格角点会出现错检和漏检的情况。

技术实现要素:

本发明旨在克服现有棋盘格角点检测技术的不足,提供一种棋盘格角点全自动检测的方法,即通过在棋盘格上设置一个或若干个有颜色或者某些形状的标识来标记初始的位置,利用单位格子在像素坐标系中初始的像素坐标以及世界坐标系中人为设定的世界坐标求出的单应性矩阵h向外扩展,最终发散到整个棋盘格区域完成角点检测。

本发明的具体技术方案为:

一种棋盘格角点全自动检测方法,包括以下步骤:

1)设置标记:在棋盘格上设置一个或若干个某些颜色或者某些形状的标识来标记初始的位置。

2)拍摄图像:使用相机采集棋盘格标定板图像,并进行初步图像处理。

3)检测标记:通过形态学或颜色检测算法检测出预先设定的标记的像素坐标。

4)利用标记:根据这些标记的像素坐标确定出初始小格子四个点的像素坐标,通过迭代求出精确的亚像素级角点坐标。

5)向外扩展:根据这四个点的亚像素级角点坐标和它们在世界坐标系中的世界坐标,求出单应性矩阵h。将单应性矩阵h和相邻小格子在世界坐标系中的世界坐标相乘,可以求出该相邻格子另外两个未知点的起始粗略亚像素级角点。然后根据亚像素级角点求解原理,求出最终的亚像素级角点坐标。

6)鲁棒性增强:在向外扩展的过程中,充分利用先验知识去剔除棋盘格标定板图像上不满足条件的角点,最终完成棋盘格图像上亚像素级角点的检测。

步骤4)中利用标记的具体过程包括:

4-1)利用几何关系去求解初始小格子在像素坐标系中四个粗略的角点坐标。

4-2)根据亚像素级角点附近“垂直向量,乘积为0”的特性,令待求的精确亚像素级角点为q,则其周围的点pi与q的连线向量为(pi-q)。对于其搜索窗口内任意一个点pi,令pi处的灰度梯度为gi,可以得到公式:

gi*(pi-q)=0

使用最小二乘法求解:

即:

因为pi点有多个,令个数为n,引入高斯权重,假设pi点处的权重为wi,亚像素级角点的坐标q为:

使用sobel卷积求点pi处的灰度梯度值gi。对于点pi有:

gi=[dxdy]

步骤5)中向外扩展的具体过程包括:

5-1)利用求出初始小格子的四个初始粗略的角点坐标p1,p2,p3,p4。根据相机成像原理,世界坐标系中的一点w(xw,yw,zw)在像素坐标系中的投影点p的像素坐标为(u,v),即为:

其中,zc为相机坐标系中点w的z轴坐标,u0为x方向图像中心坐标,v0为y方向图像中心坐标,f为焦距,r为旋转矩阵,t为平移向量,fx为u轴的尺度因子,fy为v轴的尺度因子,dx为x方向像元尺寸,dy为y方向像元尺寸;

5-2)一般记棋盘格标定板平面上的点的z=0,所以:

其中,r1、r2、r3分别为旋转矩阵r的三个列向量,t为x和y方向的平移向量;

由zcp‘=hw’,令则得到单应性矩阵h:

h=a[r1r2t]

所以可以根据世界坐标系中四个点的坐标和这四个点的像素级坐标求出单应性矩阵h。

步骤6)中鲁棒性增强的具体过程包括:

6-1)在向外扩展的时候,将当前格子边长和上一个作比较,判断变化大小。假定上一个格子的四个边边长分别为d1,d2,d3,d4,当前格子的对应边长为d4,d'2,d'3,d'4,设定两个阈值k1,k2,若同时满足k1d1≤d4≤k2d1,k1d2≤d'2≤k2d2,k1d3≤d'3≤k2d3,k1d4≤d'4≤k2d4,可以认为满足边长要求。

6-2)在向外扩展的时候,将当前四个边正切值和上一个作比较,判断变化大小。假定上一个格子边的正切值为θ1,θ2,θ3,θ4,当前格子边的正切值为θ4,θ'2,θ'3,θ'4,设定两个阈值m1,m2,若满足m1θ1≤θ4≤m2θ1,m1θ2≤θ'2≤m2θ2,m1θ3≤θ'3≤m2θ3,m1θ4≤θ'4≤m2θ4,就可以认为满足正切值要求。

6-3)在待求准确亚像素级角点的附近划定四个区域block1,block2,block3,block4,统计二值化图像中白色像素点个数whitepixs和黑色像素点个数blackpixs,设定一个阈值colorth:

根据棋盘格黑白格子交替出现的特性,四个区域中一定是两个黑色区域相对,两个白色区域相对。如果colorth小于某个值μ,其中令0≤μ≤0.2;说明此时黑白像素点的个数相近,待求角点附近二值化效果不好,该角点不符合要求,应该被舍弃。如果whitepixs-blackpixs<0,那么该区域为白色,否则为黑色。

6-4)同时对于红外图像,假设每个点p(i,j)的像素值为i(j,i),统计原图的灰度图中每个区域blockm的平均灰度值avggrayscale:

根据棋盘格黑白格子交替出现的特性也可以用于红外相机拍摄的棋盘格图像角点检测的鲁棒性提升。设定一个阈值grayth,当对角区域平均灰度值δavggrayscale相差大于grayth或者相邻区域平均灰度值相差小于grayth时,说明该角点不符合要求,应该被舍弃。

本发明的有益效果是:本发明设计了一种利用标记全自动检测棋盘格角点的方法。在求出初始的小格子之后,利用单应性矩阵向外发散扩展,进而扩展到整个棋盘格区域。本发明具有以下特点:

(1)实现了棋盘格图像亚像素级角点的全自动检测,得出的亚像素级角点坐标可以直接用于相机的内参和外参求解。

(2)该方法与当前主流棋盘格角点检测方法相比,不需要人工干预,只需要让程序读取图片即可完成全自动的角点检测。

(3)角点检测速度快,不会受到棋盘格不完整的影响,采集的图片只需要拍到人为设定的标识即可。

(4)对于复杂光照环境或者棋盘格表面污损的情况,该方法具有很强的鲁棒性,能准确无误的检测出棋盘格上的亚像素级角点。

附图说明

图1为方案的整体流程图;

图2为坐标系间的转换图;

图3为亚像素角点检测原理图;

图4为实施例的棋盘格标记图;

图5为实施例的鲁棒性增强示意图;

图6为实施例的鲁棒性增强示意图;

图7为二值化和结果图;

图8为角点检测细节图。

具体实施方式

本发明提出了一种基于棋盘格的角点检测方法,通过设置标记,检测标记,利用标记,向外扩展,鲁棒性增强五个步骤实现了棋盘格全自动亚像素级角点检测。以在棋盘格上设置五个圆作为标记为例,具体实施方案如下:

1)首先需要一张打印好的棋盘格标定板,该标定板可以是打印出来自带五个圆的标定板,也可以在普通棋盘格标定板上粘贴五个圆作为标识物。这五个圆的位置分布在黑白棋盘格中心区域中3*3棋盘格的五个白色小方格内,五个圆的直径小于白色小方格的边长,记中间圆编号为c0,其余四个圆的编号为c1,c2,c3,c4。

2)使用相机拍摄该棋盘格标定板,直到标定板覆盖满整个相机的视场角。对采集到的图片分别进行灰度化和二值化处理。

3)通过霍夫圆检测算法检测出图片中的五个圆并记录它们的像素坐标。周围四个圆c1,c2,c3,c4与中间圆编号c0的连线求出四个连线中点,编号为p1,p2,p3,p4,将这四个点作为初始的四个角点,根据亚像素级角点求解原理,迭代求解出四个亚像素级角点p1,p2,p3,p4。

4)根据这四个初始亚像素级角点,在世界坐标系中对棋盘格上的点一一赋值。利用世界坐标系和像素坐标系中四个点的关系,我们可以获得单应性矩阵h。

5)利用初始四个点的单应性矩阵h和相邻格子的一对待求点p5,p6在世界坐标系中的坐标,我们可以得出接下来两个点的像素坐标p5,p6,再根据亚像素级角点求解原理,迭代求解出新的亚像素级角点p5,p6。

6)从4个点确定的这个小方格向x正半轴,x负半轴,y正半轴,y负半轴四个方向向外扩展发散求出棋盘格上所有的亚像素级角点。

7)在向外扩展的时候,将当前格子边长和上一个作比较,判断变化大小。假定上一个格子的四个边边长分别为d1,d2,d3,d4,当前格子的对应边长为d4,d'2,d'3,d'4,设定两个阈值k1,k2,若同时满足k1d1≤d4≤k2d1,k1d2≤d'2≤k2d2,k1d3≤d'3≤k2d3,k1d4≤d'4≤k2d4,可以认为满足边长要求。

8)在向外扩展的时候,将当前四个边正切值和上一个作比较,判断变化大小。假定上一个格子边的正切值为θ1,θ2,θ3,θ4,当前格子边的正切值为θ4,θ'2,θ'3,θ'4,设定两个阈值m1,m2,若满足m1θ1≤θ4≤m2θ1,m1θ2≤θ'2≤m2θ2,m1θ3≤θ'3≤m2θ3,m1θ4≤θ'4≤m2θ4,就可以认为满足正切值要求。

9)在待求准确亚像素级角点的附近划定四个区域block1,block2,block3,block4,统计二值化图像中白色像素点个数whitepixs和黑色像素点个数blackpixs,设定一个阈值colorth:

根据棋盘格黑白格子交替出现的特性,四个区域中一定是两个黑色区域相对,两个白色区域相对。如果colorth小于某个值μ,其中令μ=0.1,说明此时黑白像素点的个数相近,待求角点附近二值化效果不好,该角点不符合要求,应该被舍弃。如果whitepixs-blackpixs<0,那么该区域为白色,否则为黑色。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。