艾裕丰,赵 敏,张 琪,雷 杰,白小亮
(1.中国石油集团石油管工程技术研究院,陕西 西安 710077;2.西安理工大学 机械与精密仪器工程学院,陕西 西安 710048;3.西安捷创测控技术有限公司,陕西 西安 710048)
图像测量技术在现代工业中应用愈来愈广泛,为了提高测量精度,首先要求相机畸变得到控制,因此相机标定是图像测量和机器视觉应用中很重要的一个环节。相机标定需要使用标定模板,通常标定模板采用等间距的国际棋盘格图案。黑白棋盘格角点检测的准确与否将会对标定结果的精确性产生很大影响。
角点是图像中的强特征点,其对图像处理、匹配、计算机视觉具有重要作用。在棋盘格标定中,角点检测是相机标定的关键步骤。目前棋盘格角点检测算法主要分为两类[1-2]:基于图像角点的检测方法和基于图像边缘的检测方法。基于图像角点的检测方法是一种基于图像灰度的检测方法,这类方法主要考虑像素邻域点的灰度变化,将与临点亮度对比足够大的点定义为角点。现有角点检测比较成熟的算法有SUSAN算法、Harris算法、FAST算法等[3-5]。角点检测算法的精度依赖于参数设置,并且对图像噪声比较敏感,因此检测结果的鲁棒性不高。基于图像边缘的检测方法要先对图像进行边缘检测[6],然后通过Hough变换等手段求取直线,再通过两条直线的交点求出角点的精确坐标,这种方法简单易行。基于边缘的角点检测,由于利用了大量边缘信息,通过多点平均,可以有效地滤除噪声点误差,提高结果的鲁棒性。目前利用边缘检测方法,是采用整像素边缘,再计算线段交点,获取棋盘格角点。由于整像素带来的舍入误差,会传递到角点计算中,降低检测精度。
本文提出一种亚像素边缘角点检测方法。采用结合像素插值和灰度曲线拟合的方法提取亚像素边缘,再通过边缘相交获得角点位置。本算法可有效的提高角点检测精度且不受棋盘格角点方位影响。
图像边缘提取,目前常见的算法有Prewitt算法、Sobel算法、Canny算法和Laplacian算法[7-9]。这些典型的一阶导数边缘检测算子仅在两个方向上计算边缘强度,且只在灰度变化最大的方向上求解梯度,在没有模糊干扰的情况下,一个理想的边缘灰度分布就可模拟为一个阶跃函数(一维条件下):
(1)
式中:f(x)表示位于像素处的灰度值,h和k分别表示灰度背景和灰度反差,R为设定值。
然而,由于模糊效应在图像形成的过程中对视觉系统的影响,阶跃模型并不能真实体现边缘灰度的分布情况,但是这些算法通过合理的参数设置,可以得到单像素图像边缘位置。亚像素边缘是在整像素边缘的基础上,通过灰度曲线梯度得到的,见图1。
图1 整像素边缘与亚像素边缘
为了提高边缘的位置精度,需要确定亚像素边缘。目前已有插值、矩法及曲线拟合等多种方法[10-11]。其中,拟合类亚像素边缘检测算法,由于对噪声具有良好的鲁棒性,能够较好的保证检测精度,获得了较广泛的应用。而结合插值和曲线拟合的方法将进一步提高亚像素边缘检测精度。
目前插值和曲线拟合的方法大都是在水平或垂直方向计算,得到亚像素边缘,但在棋盘格角点检测时,边缘线大多是倾斜位置,因此要建立边缘法向方向亚像素定位算法。
根据图像质量,本文采用边缘5个点拟合检测亚像素边缘。点数增多会引入无关信息,降低拟合精度。
图2 边缘像素点5×5邻域
在法线方向以单个像素距离在中心像素两端各插值两个像素点,得到5个法线方向虚拟像素点,通过5个虚拟像素点,拟合出法线方向灰度变化曲线,计算梯度极值,得到法线方向亚像素点坐标。虚拟像素点灰度值通过其相邻四个像素灰度值插值计算,见图3。
图3 虚拟像素点灰度插值
虚拟像素点在4个整像素中坐标为(x,y),到中心像素点(0, 0)的距离为1,即:
x=cosθ
(2)
y=sinθ
(3)
对虚拟像素点Ixy灰度采用双线性插值方法计算:
(4)
(5)
(I10-I00)x+(I01-I00)y+I00
(6)
拟合类亚像素边缘检测的基本思路是先给出近似真实边缘灰度分布的拟合函数模型,然后获得模型中的参数,从而实现亚像素边缘定位。Gauss模型边缘检测求解的时间往往较长,很难满足实时检测的需求。
分析发现反正切函数图像与边缘区域灰度分布非常相似。为了进一步确认,增加了不同拟合函数的对比实验。相关指数R表征拟合效果的好坏,其数值越大拟合效果越好[12]。Gauss拟合R1=0.996 68,反正切拟合R2=0.998 17,双曲正切拟合R3=0.987 58。根据实验对比,利用反正切函数可以简单、准确拟合边缘实际的灰度分布情况。边缘模型拟合函数为[13-14]:
y=a1arctan(a2x+a3)+a4
(7)
式中:a1表示将反正切函数趋于的最大值与最小值扩大至原来的a1倍;a2和a3表示反正切函数曲线弯曲的程度,a2和a3的值越大,曲线弯曲的程度越大;a4表示反正切函数在y轴的偏移量。用最小二乘法拟合,可以计算出a1,a2,a3,a4。考虑到运算效率,可以采用数值计算的牛顿法解决该问题。
在计算出拟合曲线后,定义亚像素边缘在函数斜率最大坐标点处。即对函数求导:
(8)
再对x求导:
(9)
得:
(10)
此即为亚像素点位置。
相比较于基于灰度的角点检测算法,基于边缘的角点算法具有更好的抗噪声能力和更高的定位精度。基于边缘的角点检测技术,是通过棋盘格亚像素边缘点拟合直线,再根据直线交点确定棋盘格角点[15]。边缘直线在角点处相交有三种形式,见图4。
图4 边缘交点形式
在图4的三种形式中:形式一,一个交点即为棋盘格角点;形式二,棋盘格角点为两个交点中心点;形式三,棋盘格角点为四个交点中心点。在以上三种交点形式中,角点是通过边缘交点形心确定。
为了验证算法的有效性,对任意位置放置的棋盘格模板,见图5。通过亚像素边缘的检测,再根据边缘线交点定位图像角点。以整像素边缘坐标(76, 44)为例,计算此点亚像素坐标。
图5 棋盘格灰度数据
法线方向灰度拟合曲线见图6,式(7)中参数分别为a1=56.8,a2=3.3,a3=-10.1,a4=106.3。
图6 灰度拟合曲线
由上式得亚像素点位置x=3.06。根据整像素边缘点坐标(76, 44),得棋盘格上该边缘点亚像素坐标为(76.514, 44.309)。计算棋盘格角点四个边缘亚像素坐标,将亚像素边缘做直线拟合,得到四条棋盘格边缘线,根据边缘线相交三种形式,可计算出亚像素角点坐标。
为了进一步验证算法精度,对图7的棋盘格角点进行了检测对比试验,验证角点距离方差,见式(11)。对比本文算法和Harris角点检测法检测角点的精度。试验中认为棋盘格为理想精度,即各角点都是等距离分布。
(11)
式中:L′为检测得到各对角点距离均值,Li为第i对角点距离,N为角点对数。方差越小表示检测结果越稳定可靠。
图7 棋盘格模板
本实验检测了10对角点位置,本文算法方差为:0.043 5 pixel,Harris角点检测算法方差为0.087 2 pixel。通过试验可以看出,本文算法可以有效提高检测精度,满足实际应用需求。
针对棋盘格标定中关键的角点检测问题,提出了一种基于亚像素边缘的角点检测算法。采用结合像素插值和灰度曲线拟合的方法提取亚像素边缘:先确定棋盘格边缘线法线方向,再在法线方向插入虚拟像素,利用反正切函数准确地拟合边缘灰度模型,再通过曲线梯度,确定亚像素边缘。在得到各亚像素边缘后,根据边缘相交形式,采用形心法确定角点位置。
本算法建立了边缘法向方向亚像素定位算法,不受棋盘格角点方位影响。实验表明本算法有效的提高了检测精度,相对Harris角点检测算法精度提高一倍,已成功应用于石油管螺纹的图像检测中,满足实际应用需求。