大家好,又见面了,我是你们的朋友全栈君。
https://blog.csdn.net/j_shui/article/details/77262947 https://www.ni.com/zh-cn/support/documentation/supplemental/18/calculating-camera-sensor-resolution-and-lens-focal-length.html#section-489585536
相机标定是进行视觉测量和定位的基础工作之一
首先,定义基本术语。
视野 (FOV):摄像头的采集图片的区域
最小特征:要在图片中检测到最小特征的大小
工作距离 (WD):镜头前端至被检物体之间的距离
请参考下图:
按照下列两个步骤为应用场景选择摄像头最低分辨率以及合适的焦距。
计算最低传感器分辨率:了解视野和要检测的最小特征。
选择摄像头:选定摄像头之后,可使用传感器大小计算得到焦距。
图像的分辨率就是单位面积内像素点的数量。分辨率有两个维度,例如,640X480。可以单独计算每个维度。简单起见,通常只计算一个维度。
如要对图片进行精确测量,最小特征必须要有两个以上的像素。计算最低传感器分辨率:视野的大小(实际单位)乘以2(或每个最小特征的像素数),除以最小特征的大小,如下列公式所示:
计算传感器分辨率:
例1: 视野为100mm,最小特征为1mm。根据公式,所需的最低传感器分辨率为200像素。可选择分辨率为640x480的相机,因为两个维度均大于最低200像素的要求。
例2: 视野为500mmX600mm,最小特征为2mm。假设最小特征是直径为2mm的圆形区域。根据公式,所需的最低传感器分辨率为500X600像素。在该情况下,640X480的传感器不适用。在这种情况下,可选择分辨率为1024X768 或者 1280X1024的摄像头。
只要已知三个变量,就可使用该公式求得其他变量的值。
传感器尺寸是指传感器的实际大小。产品规范上通常不会注明该值。将像素大小乘以分辨率,即可得到传感器尺寸。
计算传感器大小:
例3:Basler acA1300-30um的像素大小为3.75 x 3.75um,分辨率为1296 x 966像素。传感器尺寸为(3.75um x 1296) x (3.75um x 966) = 4.86 x 3.62mm。
传感器规格是指传感器的实际大小。传感器规格跟像素大小不相关。该参数用于判断摄像头适用的镜头。为了使镜头与摄像头兼容,镜头的规格需要大于或等于传感器规格。如果使用较小规格的镜头,则图像会出现渐晕现象,导致在镜头规格区域之外的传感器区域变暗。
一般情况下,镜头为定焦镜头。但是,工作距离是灵活可变的。简便起见,计算工作距离和焦距的比值。这样有助于使用特定的镜头焦距判断所需的工作距离。如果工作距离是有限的,通过该比率计算可得到该工作距离下适用的镜头焦距。这样有助于使用一个范围的工具距离获得镜头焦距的范围。选择了镜头之后,即可重新计算所需的精确工作距离。
计算公式如下:
计算镜头焦距:
例4(使用灵活的工作距离):视野为508mm x 381mm,传感器大小为8.47mm(对角线)。工作距离与焦距的比例为381mm / 8.47mm = 45:1。所以,如选择25mm的焦距(约1"),则需要大约1140mm (45")的工作距离。如最大工作距离为889mm (35"),通过比例(1:45)倒推得到最大焦距为35/45 = 19.76mm (7/9")。16mm焦距的摄像头适用,重新计算得到工作距离为711.2mm (28")。
例5 (使用固定工作距离):视野为609.6mm x 609.6mm,传感器规格为12.7mm(对角线),工作距离为1016mm。为了精确地得到焦距,需要知道传感器的长宽比。如果没有长宽比,对角线也可。根据上述焦距公式,得到焦距为(12.7X1016)/609.6 = 21.2mm。这不是一个常见的焦距,所以需要调整工作距离或者使用可变焦的非标准镜头。
定焦镜头的焦距通常为固定的几个值。常见的镜头焦距包括6毫米、8毫米、12.5毫米、25毫米、50毫米。一旦您选择焦距与图像采集系统所需焦距最接近的镜头,需调整工具距离,将被摄物体放在焦点位置。
注:短焦镜头(小于12毫米)拍摄的图片会有较大的扭曲和失真。如应用场景对图像失真敏感,请尝试增加工作距离或使用较大焦距的镜头。如无法改变工作距离,会影响您可选择的镜头范围。
畸变前
畸变矫正
焦距:1.074097234609696e+03,1.071753430673165e+03
尺寸:1080,1920
内参矩阵
1.074097234609696e+03,0,0;
0,1.071753430673165e+03,0;
9.553145178698927e+02,5.794196521896478e+02,1
主点,主轴与像平面相交的点
9.553145178698927e+02,5.794196521896478e+02
畸变
-0.3751,-0.1204
相机主点(principal point),即相机畸变中心的基础矩阵估计方法
设相机前方一平面标定板的坐标为xc=[x,y,1]’,其所成的像的坐标为xd=[u,v,1]’,畸变矫正的坐标为xu,则xc与xd之间存在如下关系: x c ∗ F ∗ x d = 0 xc*F*xd =0 xc∗F∗xd=0
其中F称为径向畸变基础矩阵(fundamental matrix for radial distortion),等于畸变中心点 e = [ c c 1 , c c 2 , 1 ] ′ e=[cc1,cc2,1]’ e=[cc1,cc2,1]′叉乘H,如下: F = e × H F = e × H F=e×H
其中H为标定板坐标系到相面的单应性矩阵。
理论上一张图片即可估计出principal point。首先通过标定板坐标xc和标定板所成相的像素坐标xd的匹配点对,通过八点算法估计出F矩阵,然后求出F矩阵的左零空间,并把该左零空间向量的第三个元素化为1,该向量的第一二个元素即为相机的principal point。如果有多张图片,即是所有F矩阵共同的左零空间。
这里要说明下,这是一个典型的小孔成像模型,与单目相机的成像原理类似。
中间通过红蓝的垂线是相机的主光轴,d是被测物体至镜头的距离,f为相机镜头的焦距,w为被测物体的实际宽度(高度),w’为物体在成像平面(感光元件)上的宽度(高度)。
根据相似三角形公式可得:f / d = w’ / w
由于f(相机镜头焦距)一般都是已知参数(买相机的时候总要选镜头焦距吧…),即使不清楚也可以通过计算得出,这里就不具体说了,w(实际物体宽或高)则是可以实际测得的常量。
重点说下怎么通过计算得出w’(物像宽或高)。
举个栗子,假设你手上的相机是200w像素捕获画面尺寸为1920*1080,感光元件尺寸为1/2.7’’,宽高分别为5.3mm和4mm(估值),被测物体在画面上的像素宽高都为600 pixel,那么w’(x) = (5.3 / 1920 * 600)(mm),同样的,w’(y) = (4 / 1080 * 600)(mm)。关于感光元件尺寸和画面尺寸可以通过查看相机参数手册获得,而感光元件的宽和高可以通过其尺寸计算出来,这里直接扔张感光元件靶面尺寸表作为参考,图来源自网络:
这样,得知了 f,w,w’ ,就可以根据上文提到的相似三角形公式计算得出d啦。
不过以上考虑的的是理想情况,前提是保证物像光线通过主光轴,相机是完全无畸变的,且被测物体平面要与相机成像平面保持平行状态。在这里我使用的相机是无畸变工业相机(低程度畸变,完全没畸变的相机是不存在的…),如果是较为廉价的相机或者是广角镜头相机都会存在较大程度的画面畸变,可以通过软件进行校正。准确来说这些情况都属于无法完全消除的偏差,只能通过后期软件来尽量减少这种偏差。
以上也就是为什么单目测距的精度要比双目测距差的多的原因,但是在所需测量精度不需要很精确的情况(偏差 < 10% ~ 15%),以及成本受限的情况下,单目测距依然是首选方案,何况其实现起来也十分简单。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/135450.html原文链接:https://javaforall.cn