精华内容
下载资源
问答
  • 基于FPGA实时处理的双目测距系统(项目)
  • liuxu8337@163.com程序有问题发邮件 环境vs2017+opencv3.49 双目测距,可以用鼠标选择测量两个点,以及两个点间距离
  • 双目立体视觉系统的几何参数影响双目视觉的测量精度, 且各几何参数间存在着一定的约 束关系. 通过分析双目视觉系统的几何参数及约束关系, 讨论了两相机光轴和基线之间的夹角α 1和 α 2、 基线距B、 投影角等...
  • 双目测距

    千次阅读 2018-10-25 20:44:48
    之前做双目测距时也是参考了不少博文,一直忘了整体,现在将部分结果保存下来https://download.csdn.net/download/dreamharding/10739966 当然这个实现的鼠标点击输出三维坐标。 后面在此基础上加了一些对目标X,Y,...

    之前做双目测距时也是参考了不少博文,一直忘了整体,现在将部分结果保存下来https://download.csdn.net/download/dreamharding/10739966

    当然这个实现的鼠标点击输出三维坐标。

    后面在此基础上加了一些对目标X,Y,Z方向的干扰滤除,然后自动框选出目标以及其中心点

    当然这些都是比较理想的情况下了(* ̄︶ ̄),但起码实现了功能,嘿嘿

    最后在VS2010下基于MFC对上面整个功能进行整合,与现有的小车进行通信从而实现一定距离内对物体的抓取,因为匹配采用的是SAD,而此算法的参数确定后只能在一定距离内进行物体匹配获得视差图。

    结果视频http://v.youku.com/v_show/id_XMzg4NzI4MzY2MA==.html?spm=a2h3j.8428770.3416059.1

    展开全文
  • 双目测距公式解析

    千次阅读 2018-10-18 17:20:13
    双目测距的时候一个公式就给难住了,网上各种解析很多更是弄得云山雾绕,写下自己的一点理解,自认为非常合理。 就是这个公式:  点P在成像平面上的两个点Pl、Pr的坐标分别是 所谓视差,就是指左右图像上...

    看双目测距的时候一个公式就给难住了,网上各种解析很多更是弄得云山雾绕,写下自己的一点理解,自认为非常合理。

    就是这个公式:                     \huge \frac{T-(x^{l}-x^{r})}{Z-f}=\frac{T}{Z} \rightarrow Z=\frac{fT}{x^{l}-x^{r}}

    点P在成像平面上的两个点Pl、Pr的坐标分别是\LARGE (x^{l},y^{l})(x^{r},y^{r})

    所谓视差,就是指左右图像上的相同特征点在x坐标上的差值,即图中的d,再看一张图

     

    红色矩形框内的是Pr点在左边成像平面上的相同位置点,则视差d就很明显了,就等于左边绿色线段与黄色线段之和,这段距离长度是Xl-Xr,而两条绿色线段等长(很明显吧,两个成想平面一样大,绿色线段是相对称的线段)。所以利用红色三角形相似于蓝色三角形,红色三角形的底边长就是d,然后就得到了下面的公式

    \huge \frac{T-(x^{l}-x^{r})}{Z-f}=\frac{T}{Z} \rightarrow Z=\frac{fT}{x^{l}-x^{r}}

     

     

     

     

     

     

     

     

    展开全文
  • 双目测距原理说明,一看就能懂,并且能很快实现的方法,很适合初学者或者工程实践人员。
  • OpenCV双目标定和测距

    2019-04-05 08:55:23
    基于OpenCV的双目标定和测距代码,C++和cmake工程,附有readme文件。在Mac下使用clang测试通过~~
  • 双目测距数学原理详解

    万次阅读 多人点赞 2016-12-21 11:24:17
    前言最近用到了双目测距的知识,乍想一下这应该是一个很简单很经典的知识了,理论介绍应该很对并且很详尽才对。可是真正想要明白到能给别人讲懂,还是花了一番功夫。网上的类似的文章很多,但是到多都是一样的知识的...

    这是我的推广信息,以激励自己更好的分享自己的知识和经验!也希望看到的你能够多多支持,谢谢!

    1. 滴滴云AI大师:

    目前滴滴云正在大力推广自己的云计算服务,需要购买的朋友们用我的AI大师码 「2049」在滴滴云上购买 GPU / vGPU / 机器学习产品可享受 9
    折优惠,点击这里前往滴滴云官网

    前言

    最近用到了双目测距的知识,乍想一下这应该是一个很简单很经典的知识了,理论介绍应该很对并且很详尽才对。可是真正想要明白到能给别人讲懂,还是花了一番功夫。网上的类似的文章很多,但是到多都是一样的知识的重复,看过的人不知道看没看懂就转载,没有加自己感想,导致我理解花了一番功夫,所以还是写一篇记录下吧。如果真的献丑了,请大家包含并指正,共同进步。

    双目测距理论

    相机成像中的坐标系

    这里写图片描述
    这里写图片描述
    这里写图片描述
    这里写图片描述

    三维估计

    实际场景中物体的三维坐标可以通过双目立体视觉技术来确定。如下图是双目立体视觉原理图,OL和OR是左右相机的光心,它们的光轴和各自的成像平面如图所示。假设两相机的内部和外部参数完全相同,焦距为f,光心之间的距离(基线)为B,两台相机在同一平面上,机他们的投影中心的Y坐标相等。同一时刻空间点p(x,y,z)在两相机上成像点分别为Pleft和Pright。
    这里写图片描述
    由三角几何关系有:
    这里写图片描述
    这个公式重在搞懂各个变量所在的坐标系。**其中Xleft和Xright分别在左、右相机的图像平面下讨论;也就是说它们的坐标系在各自的图像平面坐标系下的坐标,原点分别为各自光轴与像平面的交点。**而f和B是常值,Y也是在图像坐标系下讨论,但是是相同的。x,y,z则是在左相机坐标系下讨论,原点为OL。有了以上基础,就可以理解公式了。另外视差D的理解也非常重要,D就是Xleft-Xright。还记得Xleft和Xright的含义吗,能理解D吗?D不是图上Pleft与Pright的距离,就是Xleft-Xright,就是Xleft-Xright。 重要的事情说三遍。这应该能理解视差D是什么了,就是在各自的图像中,对应点成像的位置越相似,视差就越小,也就说明物体越远。那么有上式可得
    这里写图片描述

    展开全文
  • 双目测距 ZED OpenCV

    2020-03-27 03:40:49
    使用双目相机ZED OpenCV3.1 完成一个双目测距,使用OpenCV3.1中 ximgproc的disparity_filter类,得到效果不错的深度图,并且转换成实际的距离。编译版本为release 使用CMake编译带扩展的OpenCV3.1,需要配置zedsdk。...
  • 双目测距

    万次阅读 2014-01-21 17:24:50
    如上图所示,双目测距主要是利用了目标点在左右两幅视图上成像的横向坐标直接存在的差异(即视差 )与目标点到成像平面的距离Z存在着反比例的关系:Z=fT/d。“@scyscyao :在OpenCV中,f的量纲是像素点,T的量纲由...

    觉得不错,留作记录,原文:

    http://blog.csdn.net/chenyusiyuan/article/details/5961769


    双目测距的基本原理

    clip_image002[10]

    如上图所示,双目测距主要是利用了目标点在左右两幅视图上成像的横向坐标直接存在的差异(即视差clip_image004 )与目标点到成像平面的距离Z存在着反比例的关系:Z=fT/d。“@scyscyao :在OpenCV中,f的量纲是像素点,T的量纲由定标板棋盘格的实际尺寸和用户输入值确定,一般是以毫米为单位(当然为了精度提高也可以设置为0.1毫米量级),d=xl-xr的量纲也是像素点。因此分子分母约去,Z的量纲与T相同。 

    clip_image006

    假设目标点在左视图中的坐标为(x,y),在左右视图上形成的视差为d,目标点在以左摄像头光心为原点的世界坐标系中的坐标为(X,Y,Z),则存在上图所示的变换矩阵Q,使得 Q*[x y d 1]’ = [X Y Z W]’。

    @scyscyao :为了精确地求得某个点在三维空间里的距离Z,我们需要获得的参数有焦距f、视差d、摄像头中心距Tx。如果还需要获得X坐标和Y坐标的话,那么还需要额外知道左右像平面的坐标系与立体坐标系中原点的偏移cx和cy。其中f, Tx, cx和cy可以通过立体标定获得初始值,并通过立体校准优化,使得两个摄像头在数学上完全平行放置,并且左右摄像头的cx, cy和f相同(也就是实现图2中左右视图完全平行对准的理想形式)。而立体匹配所做的工作,就是在之前的基础上,求取最后一个变量:视差d(这个d一般需要达到亚像素精度)。从而最终完成求一个点三维坐标所需要的准备工作。在清楚了上述原理之后,我们也就知道了,所有的这几步:标定、校准和匹配,都是围绕着如何更精确地获得 f, d, Tx, cx 和cy 而设计的 。 ”

     

    一、图像的获取

    1. 如何打开两个或多个摄像头?

    可以通过OpenCV的capture类函数或者结合DirectShow来实现双摄像头的捕获,具体可见我的读书笔记《OpenCV学习笔记(6)基于 VC+OpenCV+DirectShow 的多个摄像头同步工作 》。文中曾提及不能用cvCreateCameraCapture 同时读取两个摄像头,不过后来一位研友来信讨论说只要把摄像头指针的创建代码按照摄像头序号降序执行,就可以顺利打开多个摄像头 ,例如:

     

      
    [c-sharp] view plain copy
    1. CvCapture* capture2 = cvCreateCameraCapture( 1 );  
    2. CvCapture* capture1 = cvCreateCameraCapture( 0 );  

    采用DirectShow的方式读入时:

     

      
    [c-sharp] view plain copy
    1. camera2.OpenCamera(1, false, 640,480);  
    2. camera1.OpenCamera(0, false, 640,480);  

     

    这样就可以同时采集两个摄像头。我也验证过这种方法确实有效,而且还解决了我遇到的cvSetCaptureProperty调整帧画面大小速度过慢的问题。当摄像头的打开或创建代码按照摄像头序号从0开始以升序编写执行时,使用cvSetCaptureProperty就会出现第一个摄像头(序号为0)的显示窗口为灰色(即无图像)、且程序运行速度缓慢的现象。而改为降序编写执行后,则能正常、实时地显示各摄像头的画面。具体原因有待分析讨论。

     

    2. 如何实现多个摄像头帧画面的同步抓取?

    在单摄像头情况下用 cvQueryFrame 即可抓取一帧画面,实际上这个函数是由两个routine组成的:cvGrabFrame和cvRetrieveFrame(详见Learning OpenCV第103页)。cvGrabFrame将摄像头帧画面即时复制到内部缓存中,然后通过cvRetrieveFrame把我们预定义的一个IplImage型空指针指向缓存内的帧数据。注意这时我们并没有真正把帧数据取出来,它还保存在OpenCV的内部缓存中,下一次读取操作就会被覆盖掉。所以一般我们要另外定义一个IplImage来复制所抓取的帧数据,然后对这个新IplImage进行操作。

    由上面的解释也可以看出,cvGrabFrame的作用就是尽可能快的将摄像头画面数据复制到计算机缓存,这个功能就方便我们实现对多个摄像头的同步抓取,即首先用cvGrabFrame依次抓取各个CvCapture*,然后再用cvRetrieveFrame把帧数据取出来。例如:

     

      
    [c-sharp] view plain copy
    1. cvGrabFrame( lfCam );  
    2. cvGrabFrame( riCam );  
    3. frame1 = cvRetrieveFrame( lfCam );  
    4. frame2 = cvRetrieveFrame( riCam );  
    5. if( !frame1|| !frame2) break;  
    6. cvCopyImage(frame1, image1);   
    7. cvCopyImage(frame2, image2);  

    二、摄像头定标

    摄像头定标一般都需要一个放在摄像头前的特制的标定参照物(棋盘纸),摄像头获取该物体的图像,并由此计算摄像头的内外参数。标定参照物上的每一个特征点相对于世界坐标系的位置在制作时应精确测定,世界坐标系可选为参照物的物体坐标系。在得到这些已知点在图像上的投影位置后,可计算出摄像头的内外参数。

    clip_image008

    如上图所示,摄像头由于光学透镜的特性使得成像存在着径向畸变,可由三个参数k1,k2,k3确定;由于装配方面的误差,传感器与光学镜头之间并非完全平行,因此成像存在切向畸变,可由两个参数p1,p2确定。单个摄像头的定标主要是计算出摄像头的内参(焦距f和成像原点cx,cy、五个畸变参数(一般只需要计算出k1,k2,p1,p2,对于鱼眼镜头等径向畸变特别大的才需要计算k3))以及外参(标定物的世界坐标)。 OpenCV 中使用的求解焦距和成像原点的算法是基于张正友的方法( pdf ),而求解畸变参数是基于 Brown 的方法( pdf )。


    1. 图像坐标系、摄像头坐标系和世界坐标系的关系

    clip_image010 clip_image012

    摄像头成像几何关系,其中Oc 点称为摄像头(透镜)的光心,Xc 轴和Yc 轴与图像的x轴和Y轴平行,Zc 轴为摄像头的光轴,它与图像平面垂直。光轴与图像平面的交点O1 ,即为图像坐标系的原点。由点Oc 与Xc 、Yc 、Zc 轴组成的坐标系称为摄像头坐标系,Oc O1 的距离为摄像头焦距,用f表示。

    图像坐标系是一个二维平面,又称为像平面,“@scyscyao :实际上就是摄像头的CCD传感器的表面。每个CCD传感器都有一定的尺寸,也有一定的分辨率,这个就确定了毫米与像素点之间的转换关系。举个例子,CCD的尺寸是8mm X 6mm,帧画面的分辨率设置为640X480,那么毫米与像素点之间的转换关系就是80pixel/mm。”设CCD传感器每个像素点的物理大小为dx*dy,相应地,就有 dx=dy=1/80。


    2. 进行摄像头定标时,棋盘方格的实际大小 square_size (默认为 1.0f )的设置对定标参数是否有影响?

    @scyscyao :当然有。在标定时,需要指定一个棋盘方格的长度,这个长度(一般以毫米为单位,如果需要更精确可以设为0.1毫米量级)与实际长度相同,标定得出的结果才能用于实际距离测量。一般如果尺寸设定准确的话,通过立体标定得出的Translation向量的第一个分量Tx的绝对值就是左右摄像头的中心距。一般可以用这个来验证立体标定的准确度。比如我设定的棋盘格大小为270 (27mm),最终得出的Tx大小就是602.8 (60.28mm),相当精确。”

     

    3. 定标所得的摄像头内参数,即焦距和原点坐标,其数值单位都是一致的吗?怎么把焦距数值换算为实际的物理量?

    @wobject :是的,都是以像素为单位。假设像素点的大小为k x l,单位为mm,则fx = f / k, fy = f / (l * sinA), A一般假设为 90°,是指摄像头坐标系的偏斜度(就是镜头坐标和CCD是否垂直)。摄像头矩阵(内参)的目的是把图像的点从图像坐标转换成实际物理的三维坐标。因此其中的fx, fy, cx, cy 都是使用类似上面的纲量。同样,Q 中的变量 f,cx, cy 也应该是一样的。”

     

    4. 棋盘图像数目应该取多少对摄像头定标比较适宜?

    OpenCV中文论坛上piao的帖子《在OpenCV中用cvCalibrateCamera2进行相机标定(附程序) 》中指出影响摄像头定标结果的准确性和稳定性的因素主要有三个:

    (1) 标定板所在平面与成像平面(image plane)之间的夹角;

    (2) 标定时拍摄的图片数目(棋盘图像数目);

    (3) 图像上角点提取的不准确。

    感觉OpenCV1.2以后对图像角点的提取准确度是比较高的,cvFindChessboardCorners 和 cvFindCornerSubPix结合可以获得很好的角点检测效果(hqhuang1在《[HQ]角点检测(Corner Detection) cvFindCornerSubPix 使用范例 》中给出了相关的应用范例)。因此,影响定标结果较大的就是标定板与镜头的夹角和棋盘图像数目,在实际定标过程中,我感觉棋盘图像数目应该大于20张,每成功检测一次完整的棋盘角点就要变换一下标定板的姿态(包括角度、距离) 

     

    5. 单目定标函数cvCalibrateCamera2采用怎样的 flags 比较合适?

    由于一般镜头只需要计算k1,k2,p1,p2四个参数,所以我们首先要设置 CV_CALIB_FIX_K3;其次,如果所用的摄像头不是高端的、切向畸变系数非常少的,则不要设置 CV_CALIB_ZERO_TANGENT_DIST,否则单目校正误差会很大;如果事先知道摄像头内参的大概数值,并且cvCalibrateCamera2函数的第五个参数intrinsic_matrix非空,则也可设置 CV_CALIB_USE_INTRINSIC_GUESS ,以输入的intrinsic_matrix为初始估计值来加快内参的计算;其它的 flag 一般都不需要设置,对单目定标的影响不大。

     

    P.S. 使用OpenCV进行摄像机定标虽然方便,但是定标结果往往不够准确和稳定,最好是使用 Matlab标定工具箱 来进行定标,再将定标结果取回来用于立体匹配和视差计算。工具箱的使用官方主页 有图文并茂的详细说明,此外,有两篇博文也进行了不错的总结,推荐阅读:

    (1)分享一些OpenCV实现立体视觉的经验

    (2)Matlab标定工具箱使用的一些注意事项


    展开全文
  • opencv双目测距实现

    千次阅读 2015-06-01 05:41:29
    虽然最近注意力已经不可遏制地被神经科学、大脑记忆机制和各种毕业活动吸引过去了,但是还是觉得有必要把这段时间双目视觉方面的进展总结一下。毕竟从上一篇博文发表之后,很多同仁发E-mail来与我讨论,很多原来的...
  • 修改内容:屏蔽了用cvblobslib实现的功能,但是主要功能标定以及测距都可以实现,而且不用安装那反人类的cvblobslib扩展库。 实现环境: 1,两个普通摄像头 2.opencv2.4.9 3.windows10 4.vs2013
  • 简述: 双目测距,测距目标是一个贴在墙上的正方形,已经通过张氏标定得出了内外参数。但是无法确定如何选取世界坐标系以及相应的坐标。 1、问题:单目标定棋盘,世界坐标系设定于棋盘上,世界坐标系的原点选择棋盘...
  • 针对双目视觉系统测量精度的问题,本文提出并建立了双目视觉系统误差分析模型,分析了摄像机标定精度、镜头参数及系统结构参数对系统测量精度的影响,并结合实验证明了理论的正确性。
  • MATLAB标定后使用opencv双目测距

    千次阅读 2020-12-03 18:13:05
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、什么是拍照测距...目前的进度是能在PC上利用双目进行测距,近距离双目测距精度还行,后续需要将代码移植至树莓派B4板子上,由树莓
  • 双目测距原理

    万次阅读 多人点赞 2019-05-28 16:16:42
    双目测距基本原理: 双目测距实际操作分4个步骤:相机标定——双目校正——双目匹配——计算深度信息。 相机标定:摄像头由于光学透镜的特性使得成像存在着径向畸变,可由三个参数k1,k2,k3确定;由于装配方面...
  • 总结 到这里FPGA双目测距开源项目做完了,有任何疑问或者建议都可以通过公众号私聊我;这部分有两个FPGA工程,一个是用于算法仿真的,另外一个就是完整的工程了; 两个工程关注我的公众号:芯王国,后台回复 双目...
  • 双目摄像头测量距离标定工具
  • 双目立体视觉系统精度分析

    万次阅读 多人点赞 2015-12-02 19:03:09
    在一个三维测量项目中,如果采用立体视觉方案,首先,要根据测量需求(精度、测量范围、速度等),确定立体视觉的硬件方案。 Thomas Luhmann在他的《Close-Range Photogrammetry and 3D Imaging》(2014)中,给出...
  • 3,在进行测距之前,首先需要对摄像头进行标定,那么如何标定呢? 在stdafx.h中把"#define CALIBRATION 0"改成 “#define CALIBRATION 1”表示进行标定,标定之后,你就可以在工程目录下的"CalibFile" 文件夹中得到...
  • 双目测距 实践记录

    千次阅读 热门讨论 2019-06-07 12:27:31
    不过效果很一般,也就几米内的精度还不错,根本无法达到商用价值,玩一下也就行了。 原理介绍https://blog.csdn.net/xiaohaijiejie/article/details/49721415 实现教程https://blog.csdn.net/hejingkui/artic...
  • 双目测距理论及其python实现!

    万次阅读 多人点赞 2019-09-03 23:19:09
    一、双目测距基本流程 双目测距属于双目SLAM的一个应用领域。 关于双目测距的基本原理,其实并不复杂,但说起来内容也不少,其核心原理就是三角测量,三角测量在土地测量、天文测量等领域都得到了广泛应用,是一种...
  • 转载双目测距的blog. 原文:http://blog.csdn.net/wangchao7281/article/details/52506691?locationNum=7 本文采用MATLAB标定工具箱和OpenCV3.10来实现双目测距,设备为两个CMOS工业相机和相应的双目云台。  ...
  • 双目视觉-双目测距原理剖析

    千次阅读 2020-04-08 14:45:29
    这是一篇好文章, 深入浅出,帮助我们更好地了解了双目相机的工作原理。 1.从相似三角形原理可知,我们仅仅需要分析出左眼图片和右眼图片中,相同物体的两个不同坐标,就可以算出深度值。 2. 计算 两个图片之间的...
  • 虽然单双目标定的流程其实已经固定化了,但是操作的方法会影响标定的最终精度 标定是否正确可以通过TxTx T_xTx​(左右相机光轴的距离)直接看出来 以下措施都可以提高精度: 使用高分辨率的工业相机 先单目标定,...
  • 双目测距的基本原理

    千次阅读 2016-03-03 16:57:19
    觉得不错,留作记录,原文: ...如上图所示,双目测距主要是利用了目标点在左右两幅视图上成像的横向坐标直接存在的差异(即视差 )与目标点到成像平面的距离Z存在着反比例的关系:Z=fT/d。“@scyscyao :在OpenC
  • 提出了一种局部稠密匹配与人工干预相结合的测距方案,利用非特征点与特征点的位置关系,构建“最小矩形”以缩小匹配范围,再应用NCC(归一化互相关)算法对非特征点进行稠密立体匹配,最后根据双目测距原理直接获取...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,146
精华内容 458
关键字:

双目测距精度