袁 野, 胡学龙*, 陈舒涵, 陈 军
(1. 扬州大学信息工程学院, 江苏 扬州 225127; 2. 扬州瑞控汽车电子有限公司, 江苏 扬州 225100)
长焦相机拍摄远处景物时具有景深较小、拍摄主体突出和背景干扰小等优势, 因而被广泛用于计算机视觉领域.相机标定技术能够为拍摄的二维图像添加深度信息, 从而进行三维场景的重建[1].相机标定技术发展至今, 主要可以分为相机自标定法[2]、主动视觉相机标定法[3]和标定物标定法[4]三类, 其中应用最广泛的是隶属于标定物标定法的张正友标定法[5].张正友标定法的标定过程简单便捷,标定精度较高.由于张正友标定法的精度很大程度上取决于使用角点检测算法提取棋盘格内角点像素坐标的精度, 所以高精度的角点检测算法是保证张正友标定法精度的前提.目前, 基于图像灰度变化的角点检测算法因抗噪性能较强和定位性能好而备受关注, 如Moravec算法[6]、Harris算法[7]、SUSAN算法[8]和BW-Harris[9]等.Harris算法具有计算简便且性能稳定等特点, 在众多角点检测算法中脱颖而出.然而, 随着相机技术的发展, Harris算法越来越难以满足高分辨率图像的检测需求, 耗时长、背景干扰、角点冗余及误角点等问题日益凸显.近年来, 非极大值抑制目标检测方法被引入Harris算法, 缓解了Harris算法的尴尬处境.陈贤儿等[10]提出将Harris算法与加速鲁棒性特征(speeded up robust features, SURF)进行融合, 融合后的算法在复杂背景下的精度较高; Wang等[11]在进行Harris角点检测前使用圆形相移图案对特征点进行编码, 避免了较多误角点的出现, 从而间接提高了检测精度; Choi等[12]在 Harris角点检测中引入鲁棒控制点估计方法, 提出一种在图像高度失真或严重倾斜时依然具有高精度和强可靠性的角点检测方法.本文拟将能快速处理冗余点的随机抽样一致(random sample consensus, RANSAC)算法[13]与Harris角点检测算法相结合, 提出一种改进的Harris-RANSAC长焦相机标定算法.
为了避免图像背景的干扰, 通过OpenCV库中findContours函数提取出棋盘格部分轮廓的像素坐标, 从而将检测区域缩小到棋盘格上会出现角点的黑白格部分, 以大幅缩小待检测区域.任意位姿放置的棋盘格图像经findContours轮廓提取的结果如图1所示.
图1 轮廓提取结果Fig.1 The result of contour extraction
图2 感兴趣区域及其位置变化示意图Fig.2 Region of interest and their position changes diagram
Harris算法原理: 设置一个特征窗口, 若该特征窗口往各方向移动时区域内灰度均无明显变化, 则判断算子位于平坦区域; 若该特征窗口在某一个方向移动时窗口内的图像灰度变化较大, 而在其他方向上均未发生变化, 则窗口可能位于图像中物体的边缘; 若该特征窗口往任意方向移动时窗口内图像的灰度变化都很大, 则判断该区域内存在角点.
据Harris算法原理可知, 角点处R值较大, 平坦区域R值趋近于0, 边缘区域R<0且全部候选角点都位于图像轮廓上.为了降低噪声的影响, 通常设置一个较小的正阈值T, 当R 传统Harris算法存在角点冗余、背景角点干扰现象以及耗时长等固有缺陷, 并且对散焦模糊棋盘格图像角点检测的精度不够.针对上述不足, 现对传统Harris算法进行如下调整: 1) 在对模糊图像进行检测时, 适当增大特征窗口的大小.将特征窗口尺寸由默认的3×3像素调整为7×7像素, 以期在不增加算法耗时的情况下保留感兴趣区域内的全部候选角点.值得注意的是, 若特征窗口过大会加剧角点冗余, 故本文选择将特征窗口大小调整为7×7像素. 2) 由于模糊图像的角点响应值R较小, 故设置一个较小的阈值T=10-2, 以保证有效角点(即进行角点精定位时所需的角点)不丢失. 针对如图3(a)所示的采用Harris算法对任一棋盘格图像的感兴趣区域进行角点检测时得到的大量冗余角点, 利用传统非极大值抑制法剔除冗余角点, 结果如图3(b)所示.通过对图3(b)中局部区域1,2,3放大后观察可见非极大值抑制并不能完全解决角点冗余的问题. 图3 Harris角点检测非极大值抑制结果Fig.3 Harris corner detection of non-maximum suppression 由于冗余角点在每个感兴趣区域内都围绕模糊的角点分布,且分布规律近似一条直线.针对大量呈线状分布的点集, 本文选择RANSAC算法[13]替代非极大值抑制以剔除冗余角点,通过直线模型拟合点集数据, 找出拟合点集最准确的一条线.RANSAC算法处理冗余角点的耗时较非极大值抑制更短, 在某一角点数量确定的感兴趣区域内可迅速获得拟合程度满足容差范围的若干直线方程, 进而通过计算直线附近的灰度梯度即可得到直线上灰度梯度最大的整像素点坐标ci(xi,yi).理想情况下, RANSAC算法拟合所得直线方程便包含角点位置. 运用PyThon编程, 实验平台为64位Windows 10操作系统, PyCharm 2020.3.3(x64), Intel(R) Core(TM) i5-8300H CPU, 内存为16 GB, HT-UB500H 100 mm工业相机.采集如图4所示的不同背景复杂度、光照条件、位姿和清晰度下640×480像素的棋盘格图像进行实验分析. 图4 长焦相机采集的图像Fig.4 Image acquired by telephoto camera 为验证本文算法的有效性, 随机抽取清晰度和背景复杂度不同的3幅棋盘格图像, 分别采用BW-Harris算法[9]、圆形相移图案改进算法[11]以及本文算法进行角点检测, 并以小圆圈标注检测出的角点, 角点提取结果如图5所示. 图5 3种检测算法下的角点提取结果Fig.5 Corner extraction results under three detection algorithms 由图5可见: 文献[9]算法在提取模糊棋盘格图像角点时易受背景干扰, 且出现较多冗余角点或发生角点丢失情况; 文献[11]算法虽能精准识别角点位置, 但在图像清晰度较低的情况下,棋盘格孔洞与手掌阴影处依然会受干扰导致角点误检测; 而本文算法进行角点检测时算法定位准确, 未出现误检、漏检或冗余角点. 表1 本文算法检测结果 对采集的棋盘格图像采用不同角点检测算法进行耗时对比,结果如表2所示.由表2可见: 本文算法能在较短的时间内准确识别出棋盘格角点.其可能原因是本文Harris-RANSAC算法摒弃了非极大值抑制处理冗余角点的过程, 从而降低了耗时, 而文献[9]和文献[11]都在角点检测过程中采用了非极大值抑制. 表2 几种算法耗时对比2.2 Harris-RANSAC算法
2.3 亚像素级角点提取
3 实验结果与分析