双目视觉(六)U-V视差

article/2025/10/9 15:46:26

系列文章:

  1. 双目视觉(一)双目视觉系统
  2. 双目视觉(二)双目匹配的困难和评判标准
  3. 双目视觉(三)立体匹配算法
  4. 双目视觉(四)匹配代价
  5. 双目视觉(五)立体匹配算法之动态规划全局匹配
  6. 双目视觉(六)U-V视差
  7. 【项目实战】利用U-V视差进行地面检测
  8. 【项目实践】U-V视差路面检测之动态规划

因为在自己的工作中需要剔除行驶的地面,要用到U-V视差,所以写这篇博客主要是记录自己学习到的相关内容。如果写的有问题可以在评论中指出。

实践部分

  1. 【项目实战】利用U-V视差进行地面检测【链接】
  2. 【项目实践】U-V视差路面检测之动态规划【链接】

  3. 【项目实践】开源代码【链接】

目录

1.原理:

双目系统

模型推导 

2.U-V视差的构造

3.各种3D平面在U-V视差中的投影 

4.实例 

5.Opencv实现

 参考:


1.原理:

  • 双目系统

双目相机系统如下图所示:f为焦距,b为基线,P(X,Y,Z)为三维点。 我们可以得到视差的公式如下:(双目视觉系统)

  • 模型推导 

首先,当我们使用双目相机拍摄真实世界时,如下图所示,(Xw ,Yw , Zw )为世界坐标系,(Xl ,Yl , Zl)为左相机坐标系,(Xr ,Yr , Zr)为右相机坐标系。 

  • 对于世界坐标系和左相机坐标系,存在着b/2的平移,以及一个旋转角θ
  • 对于世界坐标系和右相机坐标系,存在着b/2的平移,以及一个旋转角θ

那么,从世界坐标系到左右相机坐标的变换矩阵为:

 其次,我们预先通过标定知道了左右相机的内参矩阵为:

 当相机的内参和外参都知道了,根据针孔相机模型,就可以计算处相机的投影矩阵P=K[R|t]

使用矩阵的乘法公式对其进行展开得到: 

 由d=ul-ur得到视差:

2.U-V视差的构造

  • U视差的构造

U-disparityMap的列对应于原始视差图的列;

U-disparityMap中(d,u) = 原始视差图中第u列,视差为d的个数。

  • V视差的构造

V-disparityMap的行对应于原始视差图的行;

V-disparityMap中(v,d) = 原始视差图中第v行,视差为d的个数。

3.各种3D平面在U-V视差中的投影 

4.实例 

1.左图像,右图像,视差图像

 2.U-视差,V-视差

3.对U-V视差图使用霍夫变换检测线

 

①,⑤:近似直线,如图中的球体和圆锥;

②   11:地平面在V视差中的投影为直线;

⑥,⑦:侧面的墙在U视差中的投影为直线;

⑨       :垂直障碍物;

③④⑧⑩:垂直墙面的转角处;

4.3D重建的结构

5.Opencv实现

  • 双目匹配(这里我们使用Opencv中自带的SGBM算法)
    //SGBM paramint mMaxDisp = 128;int mP1 = 100;int mP2 = 2700;int mWinSize = 4;int mPreFilterCap = 180;//create SGBMcv::Ptr<cv::StereoSGBM> mSGBM=cv::StereoSGBM::create(0,mMaxDisp,mWinSize,mP1,mP2,0,mPreFilterCap,5,0,0,cv::StereoSGBM::MODE_HH);// read imagecv::Mat left=cv::imread("../image/I1_000000.png");cv::Mat right=cv::imread("../image/I2_000000.png");cv::Mat disp16s,disp;//compute disparitymSGBM->compute(left,right,disp16s);disp16s=disp16s/16;disp16s.convertTo(disp,CV_8UC1);
  •  计算U视差图
cv::Mat UdispMap=cv::Mat(mMaxDisp,disp.cols,CV_16UC1);
void computeUDisparity(cv::Mat &UdispMap,cv::Mat disp)
{UdispMap.setTo(0);int width=disp.cols;int height=disp.rows;for(int row=0;row<height;row++){auto  pRowInDisp=disp.ptr<uchar>(row);for(int col=0;col<width;col++){uint8_t currDisp=pRowInDisp[col];if(currDisp>0&&currDisp<128){UdispMap.at<ushort>(currDisp,col)++;}}}
}
  • 计算V视差图
cv::Mat VdispMap=cv::Mat(disp.rows,mMaxDisp,CV_16UC1);
void computeVDisparity(cv::Mat &VdispMap,cv::Mat disp)
{VdispMap.setTo(0);int width=disp.cols;int height=disp.rows;for(int row=0;row<height;row++){auto  pRowInDisp=disp.ptr<uchar>(row);for(int col=0;col<width;col++){uint8_t currDisp=pRowInDisp[col];if(currDisp>0&&currDisp<128){VdispMap.at<ushort>(row,currDisp)++;}}}
}
  • 原图像

  • U视差

  • V视差

  • U视差用来剔除障碍物(10为阈值)
cv::Mat removeObstacle(cv::Mat Disparity,cv::Mat Udisparity)
{cv::Mat mObstacleMap;mObstacleMap.create(Disparity.rows, Disparity.cols, CV_8UC1);mObstacleMap.setTo(0);int height = Disparity.rows;int width = Disparity.cols;for (int v = 0; v < height; v++){uint8_t* pRowInDisp = Disparity.ptr<uchar>(v);uint8_t* pRowInObsMap = mObstacleMap.ptr<uchar>(v);for (int u = 0; u < width; u++){uint8_t currDisp = pRowInDisp[u];if (currDisp < 128 && Udisparity.at<ushort>(currDisp, u) > 10)pRowInObsMap[u] = 255;}}return mObstacleMap;}

 参考:

基于 U-V 视差算法的障碍物识别技术研究

A Complete U-V-Disparity Study for Stereovision Based 3D Driving Environment analysis

基于U—V 视差算法的障碍物识别技术研究 - 道客巴巴

视差:disparity与UV-视差:UV-disparity_uv视差图_生活没有if-else的博客-CSDN博客

菜鸟看论文——U-V-Disparity与地面检测、相机姿态估计:菜鸟看论文——U-V-Disparity与地面检测、相机姿态估计_yiteeee的博客-CSDN博客

可行使区域检测:https://github.com/OdingdongO/bdd_segmentation

可行驶区域检测:


http://chatgpt.dhexx.cn/article/K5Ya9nK9.shtml

相关文章

双目立体视觉的数学原理

1.前言戏说 双目立体视觉是基于视差原理&#xff0c;由多幅图像获取物体三维几何信息的方法。在机器视觉系统中&#xff0c;双目视觉一般由双摄像机从不同角度同时获取周围景物的两幅数字图像&#xff0c;或有由单摄像机在不同时刻从不同角度获取周围景物的两幅数字图像&#x…

双目立体视觉系统

https://blog.csdn.net/onthewaysuccess/article/details/40709745 双目视觉几何框架详解 一、图像坐标&#xff1a;我想和世界坐标谈谈(A) 玉米竭力用轻松具体的描述来讲述双目三维重建中的一些数学问题。希望这样的方式让大家以一个轻松的心态阅读玉米的《计算机视觉学习笔…

双目立体视觉技术

在某些哺乳动物如牛、马、羊等&#xff0c;它们的两眼长在头的两侧&#xff0c;因此两眼的视野完全不重叠&#xff0c;左眼和右眼各自感受不同侧面的光刺激&#xff0c;这些动物仅有单眼视觉&#xff08;monocular vision)。人和灵长类动物的双眼都在头部的前方&#xff0c;两眼…

双目立体视觉简单介绍

1. 什么是视觉 视觉是一个古老的研究课题&#xff0c;同时又是人类观察世界、认知世界的重要功能和手段。人类从外界获得的信息约有75%来自视觉系统&#xff0c;用机器模拟人类的视觉功能是人们多年的梦想。视觉神经生理学&#xff0c;视觉心里学&#xff0c;特别是计算机技术…

双目视觉之相机标定

双目视觉之相机标定 目录 一、三大坐标系 1.1 图像坐标系到像素坐标系 1.2 世界坐标系到摄像机坐标系 1.3 摄像机坐标系到图像坐标系 1.4 总结 二、图片矫正 2.1 径向畸变 2.2 切向畸变 三、张氏标定法 四、使用opencv实现单目标定 去年三四月份实验室做了一个机器人与视觉识别…

浅谈双目立体视觉

首先&#xff0c;顾名思义&#xff0c;双目立体视觉就是利用两个摄像机拍摄同一场景&#xff0c;根据这样的信息来重构出立体场景来&#xff0c;甚至完成三维立体的显示。当然&#xff0c;三维立体显示的话就成为另一个方向了&#xff0c;这里简单说说双目立体视觉的一些东西&a…

(16)双目视觉的图像获取

1、主要参考 &#xff08;1&#xff09;摄像头参数 https://blog.csdn.net/crazty/article/details/107365147 &#xff08;2&#xff09;双目标定方法&#xff0c;过程参照了一下 双目三维重建系统(双目标定立体校正双目测距点云显示)Python_AI吃大瓜的博客-CSDN博客_双目…

双目视觉(二)双目匹配的困难和评判标准

系列文章&#xff1a; 双目视觉&#xff08;一&#xff09;双目视觉系统双目视觉&#xff08;二&#xff09;双目匹配的困难和评判标准双目视觉&#xff08;三&#xff09;立体匹配算法双目视觉&#xff08;四&#xff09;匹配代价双目视觉&#xff08;五&#xff09;立体匹配…

双目相机:基于双目视觉的目标测距

双目视觉的目标测距主要任务为利用双目相机完成对场景中物体或障碍物距离的计算&#xff0c;提供场景深度信息。 双目视觉的目标测距流程主要包括以下几个步骤&#xff1a;图像的获取、图像的矫正、立体匹配和距离计算。其中立体匹配是双目视觉中最重要和最困难的环节&#xf…

双目视觉测量技术介绍

1 双目视觉系统测量原理 双目视觉测量技术是计算机领域重点研究课题&#xff0c;其目标是从左右两相机获取的图像中计算出图像中每个像素点的视差信息&#xff0c;进而获取实际空间中物体的三维信息。基于视觉的测量方法往往是非接触形式的&#xff0c;其以速度快、精度高和无需…

关于双目立体视觉的一些总结(一)

由于项目和毕设的需要&#xff0c;最近在做一些立体视觉的东西&#xff0c;总算是把立体视觉建立起来了&#xff0c;中途查了很多相关资料&#xff0c;这里做一个总结。 1.简介&#xff1a; 双目视觉是模拟人类视觉原理&#xff0c;使用计算机被动感知距离的方法。从两个或者…

双目视觉定位方案设计

双目视觉定位总体方案设计 主要步骤说明&#xff1a; 1&#xff09;双目相机标定&#xff0c;获取左右摄像头内参、外参&#xff0c;得到图像坐标到世界坐标的映射模型。 2&#xff09;图像预处理&#xff0c;根据标定得到畸变参数对采集到的图像去畸变&#xff0c;根据测试图…

双目立体视觉概述

导读 为什么非得用双目相机才能得到深度&#xff1f; 双目立体视觉深度相机的工作流程 双目立体视觉深度相机详细工作原理 理想双目相机成像模型 极线约束 图像矫正技术 基于滑动窗口的图像匹配 基于能量优化的图像匹配 双目立体视觉深度相机的优缺点 ------------------------…

白学立体视觉(1): 双目视觉

文章目录 前言什么是双目视觉&#xff1f;双目视觉的应用总结 前言 小伙伴们&#xff0c;大家好&#xff0c;以前学习了新的知识&#xff0c;一段时间之后便忘得差不多了&#xff0c;经常被他人嘲讽&#xff1a; 你真是白学xxx了&#xff01;。是啊&#xff0c;我确实是白学了…

(一) 双目立体视觉介绍

文章目录 1 针孔相机模型2.双目相机模型3.立体校正(共面行对准、极线校正)3.1极线约束3.2Bouguet算法3.3OpenCV API 介绍 4. 立体匹配与视差图5.深度图5.1 基础介绍5.2OpenCV API 6.双目测距精度分析7.总结 1 针孔相机模型 如基本相机模型及参数中介绍的&#xff0c;首先回忆一…

【技术流派】教你提高双目立体视觉系统的精度!

开源代码免费获取&#xff0c;欢迎关注我的GitHub&#xff1a; https://github.com/ethan-li-coding 双目立体视觉&#xff08;Binocular Stereo Vision&#xff09;是机器视觉的一种重要形式&#xff0c;它是基于视差原理并利用成像设备从不同的位置获取被测物体的两幅图像&am…

来聊聊双目视觉的基础知识(视察深度、标定、立体匹配)

点击上方“AI算法修炼营”&#xff0c;选择“星标”公众号 精选作品&#xff0c;第一时间送达 1 双目视觉的视差与深度 人类具有一双眼睛&#xff0c;对同一目标可以形成视差&#xff0c;因而能清晰地感知到三维世界。因此&#xff0c;计算机的一双眼睛通常用双目视觉来实现&am…

双目视觉(三)立体匹配算法

系列文章&#xff1a; 双目视觉&#xff08;一&#xff09;双目视觉系统双目视觉&#xff08;二&#xff09;双目匹配的困难和评判标准双目视觉&#xff08;三&#xff09;立体匹配算法双目视觉&#xff08;四&#xff09;匹配代价双目视觉&#xff08;五&#xff09;立体匹配…

双目视觉 1 双目视觉的原理

首先我们讲解一下双目视觉中&#xff0c;我们只有两张二维的图片&#xff0c;我们的目的就是通过这两张二位的图片来构建出一个三维的模型&#xff0c;这就要求我们要通过两张图&#xff0c;推算出来一个图片没有展示出来的深度。深度的计算的原理如下 图片中C1和C2分别对应着我…

单目视觉>双目视觉>RGBD比较

目前&#xff0c;视觉SLAM&#xff08;SLAM是“Simultaneous Localization And Mapping”的缩写&#xff0c;可译为同步定位与建图&#xff09;可分为单目、双目(多目)、RGBD这三类&#xff0c;另还有鱼眼、全景等特殊相机&#xff0c;但目前在研究和产品中还属于少数。从实现难…