本发明属于图像识别领域,具体涉及一种基于棋盘格的相机分辨率标定方法。
背景技术:
相机分辨率的标定是机器视觉系统中的一个重要课题,标定精度在很多情况下会影响到整个视觉系统的性能。相机的分辨率代表了机器视觉系统的细节表现能力,值越小,越容易看到物体细小的部分。大部分的标定方法中,都采用提取特征点的方式,进行算法的设计。其中,棋盘格因其对比高,易识别的特点,被广泛用作标定参照物。棋盘格的特征点,也被称为角点,指的是黑白格之间的临界点。在实际的机器视觉检测系统中,噪声干扰大,图像质量差,特征点的定位较为复杂。因此,提出一种鲁棒性好,效率高的相机分辨率标定方法具有重要意义。
技术实现要素:
本发明的目的在于提供一种抗噪能力强,执行效率高的基于棋盘格的相机分辨率标定方法。
一种基于棋盘格的的相机分辨率标定方法,包括如下步骤:
步骤1,获取棋盘格图像,进行二值化,得到二值化图像;
步骤2,将二值化图像进行形态学处理,得到棋盘格的边缘图像;
步骤3,将边缘图像,分为水平方向和垂直方向两个点集;
步骤4,拟合水平方向直线和垂直方向直线;
步骤5,求取水平方向和垂直方向直线的交点;
步骤6,计算相邻两点的像素距离,标定相机分辨率。
作为本发明的一种优选方案,步骤2所述将二值化图像进行形态学处理,得到棋盘格的边缘图像,包括如下步骤:
1)将二值化图像向外膨胀一个像素,得到膨胀后图像;
2)利用膨胀后图像减去二值化图像,得到棋盘格的边缘图像。
作为本发明的一种优选方案,步骤3所述边缘图像,分为水平方向和垂直方向两个点集,包含如下步骤:
1)遍历边缘图像,如果被测像素点以及水平相邻的像素点都为白点,则记入水平点集;
2)遍历边缘图像,如果被测像素点以及垂直相邻的像素点都为白点,则记入垂直点集。
作为本发明的一种优选方案,步骤4所述拟合水平方向直线和垂直方向直线,包含以下步骤:
1)遍历水平(垂直)点集,记第一个点为起始点,如果下一点的纵(横)坐标与起始点的纵(横)坐标,差值小于设定的差异阈值δ1,则将其加入第i条直线的拟合点集,否则舍弃该点,读取下一个点;
2)如果某点的纵(横)坐标与起始点的纵(横)坐标,差值大于设定的行(列)阈值δ2,则记该点为新的初始点,即第i+1条直线的起点,执行步骤1;
3)计算第i条直线中拟合点集的数量,如果该值小于数量阈值δ3,则舍弃,否则,进行直线的拟合计算。
作为本发明的一种优选方案,步骤4所述拟合水平方向直线和垂直方向直线,采用的方法为最小二乘法,计算公式为:
其中,
作为本发明的一种优选方案,步骤5所述求取水平方向和垂直方向直线的交点中,两直线的交点公式为:
y=(k1b2+b1)/(1-k1k2),
x=k2y+b2;
其中,水平方向的直线方程为y=k1x+b1,垂直方向的直线方程为x=k2y+b2,k1,k2为直线的斜率,b1,b2分别为直线在y轴和x轴上的截距。
作为本发明的一种优选方案,步骤6所述计算相邻两个交点的像素距离,标定相机分辨率中,两点之间的距离计算公式为:
其中,d为两点距离,(x1,y1),(x2,y2)为已知的两点坐标。
作为本发明的一种优选方案,步骤6所述计算相邻两个交点的像素距离,标定相机分辨率中,相机分辨率的计算公式为:
μx=w/dx,
μy=h/dy;
其中,μx,μy为相机x,y方向上的分辨率,w,h为棋盘格中单元格的物理长度和物理宽度,dx,dy为通过计算所得到的棋盘格中单元格的像素长度和像素宽度。
本发明提供的一种基于棋盘格的的相机分辨率标定方法,仅使用直线拟合的方式定位棋盘格角点,无缺进行微分计算,实现简单方便,选用不同单位下的两点距离,即可计算出相机的分辨率,有效克服了传统检测方法中对图像质量要求高,鲁棒性差的缺点。
附图说明
图1为本发明的流程示意图;
图2为本发明的棋盘格原图;
图3为本发明的棋盘格二值化图;
图4为本发明的棋盘格边缘图;
图5为本发明的水平直线拟合流程图;
图6为本发明的棋盘格直线拟合图;
图7为本发明的棋盘格特征点定位图。
具体实施方式
以下结合具体实施方式进一步详细说明本发明的技术方案。应当理解,此处描述的具体实施方式仅仅用以解释本发明,并不限定于本发明。
一种基于棋盘格的相机分辨率标定方法,包括:
s1:获取棋盘格图像,进行二值化,得到二值化图像。
1)获取棋盘格图像
获取棋盘格图像,可以采用常见的多媒体设备,如摄像机,工业相机,扫描仪等,也可以从原图像中截取出棋盘格图像区域。图2为采用黑白工业相机获取的棋盘格图像。
2)二值化
二值化是图像处理领域一种采用的技术手段,基本思路是将灰度值大于或等于某个阈值的点设为目标点,并将该点的灰度值用255表示,灰度值小于该阈值的点,则被视为背景或其他区域,灰度值用0表示。图3为本发明的棋盘格二值化图像。
s2:将二值化图像进行形态学处理,得到棋盘格的边缘图像。
1)将二值化图像向外膨胀一个像素,得到膨胀后图像;
膨胀是图像处理领域一个常用的预处理步骤,主要目的是消除孔洞,填补区域。对于二值化图像而言,膨胀的效果是扩大白色区域。
2)利用膨胀后图像减去二值化图像,得到棋盘格的边缘图像。
图像的边缘指的是图像局部变化最为显著的部分,存在于目标与目标,目标与背景之间,是图像识别,图像分割的一个重要部分。常用的检测方法有canny算子,laplace算子等,效果好,但是需要进行微分计算。本发明采用的形态学处理获取棋盘格图像边缘,更为简单方便。计算公式为:
其中,f(x,y)为输入的图像,g(i,j)为结构元素,df,dg分别为函数f,g的定义域。
s3:将边缘图像,分为水平方向和垂直方向两个点集。
通过分析棋盘格图像的特征,可以得出,棋盘格的特征点可以用水平直线和垂直直线的交点,进行表示。水平直线的特点是每个白点的水平方向上的相邻点都为白点,垂直直线的特点是每个白点的垂直方向上的相邻点都为白点,因此,在本发明中,将边缘图像,分为水平方向和垂直方向两个点集,包括如下步骤:
1)遍历边缘图像,如果被测像素点以及水平相邻的像素点都为白点,则记入水平点集。
2)遍历边缘图像,如果被测像素点以及垂直相邻的像素点都为白点,则记入垂直点集。
s4,拟合水平方向直线和垂直方向直线。
1)遍历水平(垂直)点集,记第一个点为起始点,如果下一点的纵(横)坐标与起始点的纵(横)坐标,差值小于设定的差异阈值δ1,则将其加入第i条直线的拟合点集,否则舍弃该点,读取下一个点。
2)如果某点的纵(横)坐标与起始点的纵(横)坐标,差值大于设定的行(列)阈值δ2,则记该点为新的初始点,即第i+1条直线的起点,执行步骤1。
3)计算第i条直线中拟合点集的数量,如果该值小于数量阈值δ3,则舍弃,否则,进行直线的拟合计算。
通过上述步骤,得到了每条直线的拟合点集,还需要通过算法将每条直线方程拟合出来。在本发明中,采用的是最小二乘法,其基本原理是根据给定的点集,基于误差平方和最小的原则,找出最佳函数匹配,计算公式为:
其中,
s5,求取水平方向和垂直方向直线的交点。
两直线的交点公式为:
y=(k1b2+b1)/(1-k1k2),(3)
x=k2y+b2。(4)
其中,水平方向的直线方程为y=k1x+b1,垂直方向的直线方程为x=k2y+b2,k1,k2为直线的斜率,b1,b2分别为直线在y轴和x轴上的截距。
当相机,镜头精度不高的情况下,图像边缘容易存在畸变情况,因此,在发明中,选用图像中心附近5*5个点进行计算。
s6,计算相邻两点的像素距离,标定相机分辨率。
1)计算相邻两点的像素距离
两点之间的距离计算公式为:
其中,d为两点距离,(x1,y1),(x2,y2)为已知的两点坐标。
将s5中得到的5*5个特征点带入到(5)式中,分别计算相邻两点之间的距离,并求取平均值,当某个值大于平均值的1.3倍时,应将该值舍弃,重新计算。
2)标定相机分辨率
相机的分辨率,代表了每单个像素所代表的物理长度。其中,相机分辨率的计算公式为:
μx=w/dx,(6)
μy=h/dy。(7)
其中,μx,μy为相机x,y方向上的分辨率,w,h为棋盘格中单元格的物理长度和物理宽度,dx,dy为通过计算所得到的棋盘格中单元格的像素长度和像素宽度。