熊显名,任娟娟
(桂林电子科技大学 电子工程与自动化学院,广西 桂林 541004)
角点是图像亮度变化与邻点变化程度相差很大的点。Harris角点检测算法[1]是由HARRIS C等人提出的,是基于图像灰度的角点提取算法,即对图像中像素点的灰度值进行处理,避免了基于边缘轮廓的角点提取算法中提取轮廓的误差。
摄像机标定是三维计算机视觉[2]的重要组成部分。要获得三维物体的形状和位置等信息,需从摄像机获取该三维物体图像信息。图像上每个点的亮度反映了空间物体表面某点反射光的强度,而这些点在图像上的位置与相应点空间物体表面的几何位置有关。这些位置的相互关系,由摄相机成像的几何模型决定,这种几何模型的参数称为摄像机参数。摄像机参数必须通过实验计算确定,该过程称为摄像机标定。因此,为了获得空间物体的三维信息,必须对摄像机进行标定,获取摄像机的内外参数。
平面标定法是传统摄像机标定法的一种,是借助已知的标定物,即标定物的尺寸和形状已知,利用标定物上的点与拍摄其所获得图像上对应点之间的对应关系建立数学模型,用此数学模型来标定摄像机内外参数[3]。对于利用黑白棋盘进行平面标定,提取图像的角点是实现该方法的关键。本文首先对Harris角点检测算法进行分析,针对其在黑白棋盘格角点检测中的应用,提出了一种改进Harris角点检测算法,并通过实验,验证了该算法的可行性。
Harris角点检测算法:图像的灰度梯度在角点的临近区域有两个或者两个以上不连续的值。根据这种情况,Harris角点检测可通过如下矩阵[4]来实现。
在一定大小的图像窗口中:
其中,Ix和Iy为图像沿x和y方向的灰度梯度;k值一般取0.04。
为避免噪声的影响,首先对Ix和Iy进行高斯滤波,然后通过式(2)计算某个像素的R值,当该值大于预先设定的阈值时,标定该像素点为所求角点。其中阈值大小为 k×Rmax,Rmax是整幅图像中 R 的最大值,0<k<1。
Harris角点检测算法是一种简单的角点提取算法,能够在图像旋转、灰度变化以及噪声干扰等情况下准确地提取角点,具有很高的稳定性。但Harris角点检测算法依赖于系数k的设置,降低了算法的实时性与检测精度;且需要设置像素R值的阈值。本文改进的Harris角点检测算法既避免了k值和阈值的反复设置,也避免了角点聚簇现象的产生。
黑白棋盘格角点提取算法是基于平面标定法的传统摄像机标定研究的重要部分。首先,应该对摄像机标定图像中的黑白棋盘格进行区域提取。其方法是对除黑白棋盘格以外部分进行弱化处理,以屏蔽不需要角点提取的背景部分,突出需要提取角点的黑白棋盘格部分;降低了在角点检测中角点提取的检测时间。图1为左目摄像机拍摄的图像,图2为图1进行区域提取后获得的图像。可以看出,图像在进行区域提取后,背景图像被弱化,不再对角点提取产生影响,减小了角点提取的范围。
图1 未处理的图像
图2 区域提取后的图像
(1)角点响应函数提出
由式(2)可知 k值不同获得的 R值就会不同,提取角点的效果也就会不同。为获得更好的角点提取效果,应选择合适的k值和设置恰当的阈值,这需要通过多次调试,花费大量的时间。本文采用参考文献[5]所提到的响应函数:
其中,ε为任意小的正数;式(3)与式(2)相比,消去了系数k,以此避免了k值的随机选择。
(2)角点提取及角点剔除
本文通过响应函数获得响应函数矩阵,再对该矩阵中元素的8连通邻域进行分块处理[6-7]。在每块区域中,按照从左到右,从上到下的顺序依次遍历[8],获取区域最大值。首先,设置二值图像中区域最大的像素点为1,其他像素点为0,在整个图像检测完后,返回二值图像。然后,将二值图像BW为1的R值进行从大到小排序[9],取前N个对应点作为角点,将剩余的非角点对应的像素点BW改为0。为了避免产生邻近角点聚簇现象,对整幅图像采用图像分块[10](如a×a的模板)算法进行处理。然而,受到光照等外界因素影响,导致仍存在分散的错误角点。对这些角点,再次采用图像分块算法(如b×b的模板)进行角点剔除,以降低角点误检率。
(3)角点精度提高
角点附近的灰度变化是渐变的,但此算法检测到的角点精度为1个像素。为获得角点的亚像素级坐标,本文采用二次曲面拟合法[11]。方法是利用式(4)所示的二次多项式来逼近角点响应函数R,以此来找到角点的亚像素级精确位置。
利用最小二乘法可以求解角点坐标(x,y)周围的 9个像素点建立的含有a~f的6个未知量组成的超定方程组。 对式(4)求导数等于 0,可得到式(5)和式(6)。 亚像素级角点对应的坐标值为((x+xx),(y+yy))。
其中,xx,yy 的值为:
由以上分析可得,本文提出的改进Harris角点检测算法实施过程如下。
对图像中的每个像素点进行以下操作:(1)利用式(1)得到响应函数矩阵M,利用高斯滤波求出新的M值,再利用式(3)计算 R值;(2)利用编写的响应函数文件生成响应函数矩阵C,再计算矩阵C中元素的8连通邻域内区域最大值,提取角点,并生成二值图像 BW;(3)用BW为1的坐标得出R值,按R值从大到小排列,取前N个作为被检测的角点,并将前N个的角点坐标对应的二值图像 BW 设置为 1,其余为 0;(4)找到二值图像 BW为1的像素点对应的角点坐标,并剔除和角点相邻近角点。方法是:先从N×2的矩阵空间提取BW=1的角点坐标,再在a×a范围内寻找下一个 BW=1的角点坐标。若角点存在,则将两个坐标的坐标值取平均,并将该值存入设定的矩阵中;若不存在,则将坐标值直接存入设定的矩阵中。采用以上4个步骤对整幅图像进行处理,可以获得角点坐标,并在图像中显示角点。对仍存在着分散的错误角点,需再次采用图像分块算法(如 b×b的模板)进行角点剔除,以降低误检率。最后,利用二次曲面拟合法将坐标精度达到亚像素级。
实验中采用的摄像机是大恒图像公司的HV1300FM,分辨率为 1 280×1 024,光学镜头采用日本 Computar公司的 M2514-MP百万像素镜头,焦距为 25 mm,标定板大小为26 mm×20 mm,黑白棋盘格为11×8,精度为0.05 mm的棋盘格标定板。软件采用MATLAB R2011b完成算法仿真验证。一般情况下设定 N=160,a=5,b=25。图3为未进行邻近角点剔除的角点状态(用+表示),图4为进行邻近角点剔除的角点状态 (用*表示)。由图4可看出,角点提取不存在聚簇现象。图5为邻近角点剔除前、后角点位置对比显示。此外,图6是当摄像机的分辨率为2 603×1 977时角点检测情况。可以看出,当摄像机分辨率为2 603×1 977时,角点仍可以清晰的检测出来,验证了该算法在不同分辨率下的可行性。
图3 未进行邻近角点剔除的角点状态
图4 进行邻近角点剔除的角点状态
图5 邻近角点剔除前、后角点位置对比显示
图6 分辨率为2 063×1 977时的角点显示
由于光照等外界因素影响,提取角点时,根据图像显示,N值需要进行相应的修改以避免角点漏检。经实验验证,一般 N取值在 160~300范围内,a取值 5,b取值在25~60范围内。此算法的仿真过程中,对于仍被错检的角点,一般采用缩小N值进行提取角点,而非放大b值;对于缩小N值进行提取角点会造成角点丢失的,则采取调整b值大小。表1为不同图像检测到的角点情况(8幅)。一般情况下,如选择合适的N值是不会产生角点丢失的。由表1可以看出,合理地选择N值和b值可提高角点提取准确度。表2为角点坐标用二次曲面拟合法前后的角点像素级坐标与亚像素级坐标的对比值(随机选出的10个角点坐标)。
表1 不同图像检测到的角点情况(8幅)
表2 用二次曲面拟合法前后角点坐标值对比
本文改进了Harris角点检测算法。在不影响Harris角点检测算法计算简便性和稳定性的前提下,优化了角点提取算法的响应函数,同时采用区域最大值抑制和邻近角点策略的方法,对角点进行剔除处理,改善了角点聚簇现象,使角点分布更加均匀。最后,利用二次曲面拟合法提高已获得角点的精度。通过MATLAB软件仿真,验证了此算法在不同分辨率下的可行性。
[1]HARRIS C,STEPHENS M.A combined corner and edge detector[C].Proceedings of the 4th Alvey Vision Conference.August, 1988:147-151.
[2]SZELISKI R.计算机视觉算法与应用[M].北京:清华大学出版社,2012.
[3]曾令虎,刘鹏.摄像机标定的研究[J].武汉工业学院学报,2011,30(3):47-53.
[4]梁志敏,高洪明,王志江,等.摄像机标定中亚像素级角点检测算法[J].焊接学报,2006,27(2):102-104.
[5]屈喜文.一种改进的Harris角点检测方法[J].机电技术,2012(4):40-42.
[6]RAFAEL C G,RICHARD E W,STEVEN L E.Digital image processing using MATLAB[M].北京:电子工业出版社,2009.
[7]ZHU JX,YANG K.Fast harris corner detector algorithm based on image compression and block[C].Proceedings of the 10th International Conference on Electronic Measurement&Instruments (ICEMI),2011:143-146.
[8]周龙萍.基于改进的Harris算法检测角点[J].计算机技术与发展,2013,23(2):11-14.
[9]常丽萍,冀小平,赵梁.分块的基于 Harris角点检测的图像配准方法[J].电视技术,2013,37(1):45-47.
[10]赵万金,龚声蓉,刘纯平,等.一种自适应的 Harris角点检测算法[J].计算机工程,2008,34(10):212-217.
[11]张裕,方康玲,刘永祥.基于harris算法的黑白棋盘格角点检测[J].计算机应用与软件,2010,27(8):251-254.