3D立体匹配入门 - 视差计算

这篇具有很好参考价值的文章主要介绍了3D立体匹配入门 - 视差计算。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

经典假设

1、左右视图成功匹配的窗口,具有相同的像素
3D立体匹配入门 - 视差计算

这个是最经典的假设,几乎所有视差图计算都用上了他,通过匹配左右窗口像素,得到最佳匹配对应的x轴坐标差,就是视差

2、像素P的视差只与其领域有关
3D立体匹配入门 - 视差计算

这个是基于马尔可夫性质,做代价聚合的时候,基于这个假设就用周围的像素视差对中间的视差进行聚合。

3、相近颜色的点具有相近的视差
3D立体匹配入门 - 视差计算

如果一个平面只采集到几个有效视差,就可以基于这个假设,拟合一个平面去确定其他位置的视差。

4、视差非连续区,应具有颜色差或亮度差

3D立体匹配入门 - 视差计算

如上图的边界区,就是视差不连续的

上述这些假设都作为各类算法的切入点,详细可以观看 立体匹配理论与实战

立体匹配

一般分为四种:局部、全局、半全局、基于深度学习的匹配,前三种都是传统的算法。

代价计算

如经典的SDA匹配,使用左视图的窗口减去右视图的窗口,得到SDA值最小很可能就是真实视差。不过这样计算出来的一般都比较粗糙,我们一般只用来做初始代价计算,然后得到DSI(视差空间影像),这是一个三维数组(尺寸是w×h×d),其深度d代表视差,我们在每个候选视差位置计算得到的代价就填入该数组(可以用于后续的代价聚合):
3D立体匹配入门 - 视差计算

代价聚合

就是用周围像素的代价聚合到中间去,方法很多,什么双边滤波,置信权重,交叉线,扫描线等等。像SGM之类的就用来这个,效果不错。
3D立体匹配入门 - 视差计算

视差估计

聚合完用赢家通吃,得到最佳视差。当然如果直接用全局视差估计方法,比如图割,则不需要进行聚合,DSI计算完直接进行图割即可,不过全局方法会比较慢就是了。

视差优化

比如左右一致性检查的话,分别求出左右图像的视差,若同一个目标位置视差不一致则剔除。

再比如小连通域剔除,比如有一些散落的小白点,可以通过这个方法剔除这种错误
3D立体匹配入门 - 视差计算
最后可以用平滑滤波,中值滤波这种去一下噪声。

结尾

3D立体匹配入门 - 视差计算
SGM部分可参考 SGM源码分析

最后简单实现一下SAD匹配:文章来源地址https://www.toymoban.com/news/detail-442571.html


CVIMAGE computerSAD(CVIMAGE left, CVIMAGE right)
{
	int Height = left->height;
	int Width = left->width;
	int winH2 = 0;//卷积核的半径
	int winW2 = 1;
	int winHSize = winH2 * 2 + 1; 
	int winWSize = winW2 * 2 + 1;

	int DSR = 20;     //视差搜索范围
	CVIMAGE disp = YMCV_Creat_Img_Creat(left->width, left->height, CVGrayType);
	uint8* doutp = disp->data;
	uint16 imgw = left->width;
	//周围填充0,避免产生边框
	YMCV_Gray_Image_Boundary_Padding_Val(doutp, winW2, winH2, disp->width, disp->height, 0.0f);

	for (int i = 0 ,imax = Height - (2 * winH2); i < imax; i++)  
	{
		uint8* doline = &doutp[(i + winH2) * imgw + winW2];
		//左从DSR开始遍历
		for (int j = DSR,jmax = Width - (2 * winW2); j < jmax; j++)
		{
			int minx = 0, minv = winHSize * winWSize * 255;
			for (int k = 0; k < DSR; k++)
			{
				int xstart = j - k;
				int sadv = 0;
				for (int y = i,ymax = i + winHSize; y < ymax; y++)
				{
					uint8* gLline = &left->data[y * imgw + j];
					uint8* gRline = &right->data[y * imgw + xstart];
					for (int x = 0; x < winWSize; x++)
					{
						sadv += YMCV_Abs(gLline[x]- gRline[x]);
					}
				}
				//记录最小值
				if (sadv < minv)
				{
					minv = sadv;
					minx = k;
				}
			}
			//匹配成功
			if (minv < 125)//25*5 = 125
				doline[j] = minx;
			else
			{
				doline[j] = 0;
			}
		}
	}
	return disp;
}

到了这里,关于3D立体匹配入门 - 视差计算的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 双目立体视觉之立体匹配算法

    双目立体视觉是指使用两个摄像机从不同的角度获取同一个场景的左右视图,然后使用双目立体匹配算法来寻找左右视图中的匹配像素点对,最后利用三角测量原理来还原三维空间物理点过程。其中双目立体匹配算法是最为核心的。 立体匹配是一种根据平面图像来恢复真实场

    2024年02月04日
    浏览(46)
  • 【双目视觉】双目立体匹配

    在opencv中用的比较多的双目立体匹配算法有两种:BM和SGBM。SGBM是BM立体匹配算法的优化版,属于半全局匹配,相对于BM花的时间要更多,但效果优于BM。本文使用的是SGBM半全局匹配方式。 步骤: 1.打开相机,获取到左目和右目的图像; 2.矫正畸变; 3.图像灰度化; 4.立体匹配

    2024年02月03日
    浏览(51)
  • 双目立体匹配_StereoNet网络

    端到端立体匹配网络:通常以左右视图作为输入,经卷积模块提取特征后,按相关性操作(Correlation)或拼接操作(Concat)构建代价体,最后根据代价体的维度进行不同的卷积操作,回归出视差图。 根据代价体维度的不同,可分为基于 3D 代价体和基于 4D 代价体的两种方法, 2D 编码

    2024年02月05日
    浏览(35)
  • 双目立体匹配算法SGM步骤拆解

            立体匹配是立体视觉研究中的关键部分,其目标是在两个或多个视点中匹配相应像素点,计算视差。双目摄像头类似人眼的工作原理,对同一目标可以形成视差,用来感知三维世界,由于成本远低于激光雷达,因此在自动驾驶领域被广泛研究。         SGM(

    2024年02月07日
    浏览(39)
  • 从双目标定到立体匹配:pyton实践指南

    立体匹配是计算机视觉中的一个重要领域,旨在将从不同角度拍摄的图像匹配起来,以创建类似人类视觉的3D效果。实现立体匹配的过程需要涉及许多步骤,包括双目标定、立体校正、视差计算等。在这篇文章中,将介绍如何使用Python实现立体匹配的基本步骤和技巧。 下面的

    2024年02月11日
    浏览(46)
  • 使用opencv做双目测距(相机标定+立体匹配+测距)

    最近在做双目测距,觉得有必要记录点东西,所以我的第一篇博客就这么诞生啦~ 双目测距属于立体视觉这一块,我觉得应该有很多人踩过这个坑了,但网上的资料依旧是云里雾里的,要么是理论讲一大堆,最后发现还不知道怎么做,要么就是直接代码一贴,让你懵逼。 所以

    2024年01月20日
    浏览(38)
  • 基于MVS的三维重建算法学习笔记(三)— 立体匹配概述

    本人书写本系列博客目的是为了记录我学习三维重建领域相关知识的过程和心得,不涉及任何商业意图,欢迎互相交流,批评指正。 在之前的博客中简单介绍过立体匹配,它是MVS稠密重建中的重要环节,而在这篇博客中,将详细的介绍立体匹配的相关概念,其中详细的过程和

    2024年02月11日
    浏览(45)
  • 004 Golang-channel-practice 左右括号匹配

    第四题 左右括号打印 一个协程负责打印“(”,一个协程负责打印“)”,左右括号的数量要匹配。在这道题目里,我在main函数里进行了一个死循环。会产生一个随机数,随机数就是接下来要打印的左括号的数量。 例如:((((()))))、(())、()。这样是正确的。一个左括号要匹

    2024年02月02日
    浏览(42)
  • Qt designer设计UI实例:双视图立体匹配与重建的可视化UI

    PyQt5和Qt designer的详细安装教程 :https://blog.csdn.net/qq_43811536/article/details/135185233?spm=1001.2014.3001.5501 Qt designer界面和所有组件功能的详细介绍 :https://blog.csdn.net/qq_43811536/article/details/135186862?spm=1001.2014.3001.5501 输入 :一对左右眼视图的图像。 任务 :对输入的一对带相机参数的左

    2024年02月04日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包