200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 单目视觉定位测距的两种方式(转载)

单目视觉定位测距的两种方式(转载)

时间:2019-06-11 02:59:39

相关推荐

单目视觉定位测距的两种方式(转载)

版权声明:本文为陈默含原创文章,未经博主允许。 /sillykog/article/details/71214107

<div class="markdown_views"><p>单目定位和双目定位的选择,我觉得主要还是成本和时间的考虑。之前也尝试过双目定位,感觉要更精准些,但双目测距需要对两幅图像进行图像变换和极线匹配,稍微耗时了一些。这几天尝试了一下单摄像头进行测距定位,主要有两个思路: <br>

1.定位测量插值得到每个像素的实际坐标

该方法总觉得有很大的问题:一个是摄像头安装后就必须固定不动,稍微的旋转都会导致之间测量的像素点对应的坐标偏移。另一个是人工测量的工程量之大,对于1024*1280像素的摄像头,准确的测量就应该是130万个点,而就算我们按米来分割地面,10*20m2的地面也要测量200个点,就算可以通过算法自动识别,做200个标志就算测量画线也是令人头疼的。考虑到针孔成像模型的等比例放大,我们通过直接打印布满等距阵列圆点的纸来进行测量。

其原理如下:

根据相似三角形的等比例关系,有:

/1998/Math/MathML&quot;>EGBD=AGAD” role=”presentation” style=”position: relative;”>EGBD=AGADEGBD=AGAD

/1998/Math/MathML&quot;>GFDC=AGAD” role=”presentation” style=”position: relative;”>GFDC=AGADGFDC=AGAD

同时又有:/1998/Math/MathML&quot;>EGEB=AEAB” role=”presentation” style=”position: relative;”>EGEB=AEABEGEB=AEAB

通过等式传递有:/1998/Math/MathML&quot;>EGBD=GFDC=AEAB” role=”presentation” style=”position: relative;”>EGBD=GFDC=AEABEGBD=GFDC=AEAB

如此一来,可以在较高距离测量等距阵列点(如标定板),经过插值,再进行等比例放大即可得到每个像素点对应的实际地面的坐标。

处理的示意图如下:

这样操作可以省去人工在地面测量绘画标志。测量好纸上的点距后再进行H/h的放大就可以得到像素对应实际地面的坐标。但实际操作过程中遇到的问题是图像上边缘的梯形失真过于严重,导致打印纸上的标志点不容易识别,因此还需要准备不同距离的等距阵列圆点图。

2.根据相似三角比例计算出对应像素点的实际坐标

这个方法对摄像机标定的要求比较高,同时要求镜头本身造成的畸变就比较小,但总体来说这种方法的可移植性和实用性都较强。其主要的思路还是小孔成像的模型。

模型一:假设测量的点都在Y轴上,此时无X轴分量

该图主要有三个坐标系,分别是图像坐标系UO1V” role=”presentation” style=”position: relative;”>UO1VUO1V。(相关的内容我就不复述了,不懂的百度和知乎上都有,搜搜相机标定的知识)

我们可以看到,世界坐标中的点通过光轴成像在图像坐标的点是成比例的,其比例媒介就是相机镜头中心在图像上的像素点O1与其在世界坐标中的实际点M,通过推导可以求解O3P” role=”presentation” style=”position: relative;”>O3PO3P的长度。(注意,由于相机安装一般都有误差,所以镜头中心点不一定是图像的中点,所以ucenter,vcenter不一定为0)

一步步推导如下:

已知量:摄像机高度H

图像坐标中心对应的世界坐标点与摄像头在y轴上的距离O3M” role=”presentation” style=”position: relative;”>O3MO3M

镜头中心点的图像坐标(ucenter&#xFF0C;vcenter)” role=”presentation” style=”position: relative;”>(ucenter,vcenter)(ucenter,vcenter)

测量像素点的图像坐标P1(u&#xFF0C;0&#xFF09;” role=”presentation” style=”position: relative;”>P1(u,0)P1(u,0)

实际像素的长度xpix

实际像素的宽度ypix。

摄像头焦距f

(镜头中心点图像坐标,焦距,像素长宽都可以由标定直接求解出来,通过halcon的标定助手可以很容易的得到,openCV也有相应的程序)

&#x3B1;=arctan(HO3M)” role=”presentation” style=”position: relative;”>α=arctan(HO3M)α=arctan(HO3M)

&#x3B3;=arctan(O1P1&#x00D7;ypixf)=(v&#x2212;vcenter)&#x2217;ypixf” role=”presentation” style=”position: relative;”>γ=arctan(O1P1×ypixf)=(v−vcenter)∗ypixfγ=arctan(O1P1×ypixf)=(v−vcenter)∗ypixf

&#x3B2;=&#x3B1;&#x2212;&#x3B3;” role=”presentation” style=”position: relative;”>β=α−γβ=α−γ

O3P=Htan(&#x3B2;)” role=”presentation” style=”position: relative;”>O3P=Htan(β)O3P=Htan(β)

这样就可以得到垂直方向的坐标Y=O3P” role=”presentation” style=”position: relative;”>Y=O3PY=O3P

模型二:假设测量的点有X轴、Y轴分量

针对以下模型图我们将进行说明:

一步步推导如下:

已知量:摄像机高度H

图像坐标中心对应的世界坐标点与摄像头在y轴上的距离O3M” role=”presentation” style=”position: relative;”>O3MO3M

镜头中心点的图像坐标O1(ucenter&#xFF0C;vcenter)” role=”presentation” style=”position: relative;”>O1(ucenter,vcenter)O1(ucenter,vcenter)

测量像素点的图像坐标P1(u&#xFF0C;0&#xFF09;&#x3001;Q1&#xFF08;u&#xFF0C;v&#xFF09;” role=”presentation” style=”position: relative;”>P1(u,0)、Q1(u,v)P1(u,0)、Q1(u,v)

实际像素的长度xpix

实际像素的宽度ypix

摄像头焦距f

(y轴方向计算和上一个模型相同,x轴计算是y轴坐标通过比例计算得到)

&#x3B1;=arctan(HO3M)” role=”presentation” style=”position: relative;”>α=arctan(HO3M)α=arctan(HO3M)

&#x3B3;=arctan(O1P1&#x00D7;ypixf)=(v&#x2212;vcenter)&#x2217;ypixf” role=”presentation” style=”position: relative;”>γ=arctan(O1P1×ypixf)=(v−vcenter)∗ypixfγ=arctan(O1P1×ypixf)=(v−vcenter)∗ypixf

&#x3B2;=&#x3B1;&#x2212;&#x3B3;” role=”presentation” style=”position: relative;”>β=α−γβ=α−γ

O3P=Htan(&#x3B2;)” role=”presentation” style=”position: relative;”>O3P=Htan(β)O3P=Htan(β)

这样就可以得到垂直方向的坐标Y=O3P” role=”presentation” style=”position: relative;”>Y=O3PY=O3P

O2P1=(v&#x2212;vcenter)&#x2217;xpix)2+f2” role=”presentation” style=”position: relative;”>O2P1=(v−vcenter)∗xpix)2+f2−−−−−−−−−−−−−−−−−−−−−−√O2P1=(v−vcenter)∗xpix)2+f2

O2P=Hsin(&#x3B2;)” role=”presentation” style=”position: relative;”>O2P=Hsin(β)O2P=Hsin(β)

由PQP1Q1=O2PO2P1” role=”presentation” style=”position: relative;”>PQP1Q1=O2PO2P1PQP1Q1=O2PO2P1

这样就可以得到垂直方向的坐标X=PQ” role=”presentation” style=”position: relative;”>X=PQX=PQ

模型三:假设测量的点有X轴、Y轴分量,且物体有高度h

针对以下模型图我们将进行说明:

由于物体有高度,因此还需要进行一个投影变换,其实也还是相似变换

设真实的坐标(X&#x2032;,Y&#x2032;)” role=”presentation” style=”position: relative;”>(X′,Y′)(X′,Y′)

则(X&#x2032;,Y&#x2032;)=(X,Y)&#x00D7;(1&#x2212;hH)” role=”presentation” style=”position: relative;”>(X′,Y′)=(X,Y)×(1−hH)(X′,Y′)=(X,Y)×(1−hH)

模型评价

实际操作过程中,发现该模型在畸变较小的图像中误差较小,且在矫正畸变后的图像中测量的图像坐标可以得到更准确的值。另一方面,在实际操作过程中,发现由于镜头有稍微歪曲或者内置感光区域安装歪了,可能导致我们找不到真正的X,Y轴,所以在测量验证的时候会有稍许误差,但即便如此,在10米的定位下,误差也不到5%,效果还是可以接受的。如果有人知道如何找到真正的X,Y轴,请博客留言告知一下,先谢谢了。

matlab计算代码下载/download/sillykog/10048668

转载自:/sillykog/article/details/71214107

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。