问题标签 [disparity-mapping]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 视差图的颜色反转
我的视差图的结果很好。据我所知,近处的物品应该是浅色的,远处的物品应该是深色的。相反的情况发生在我身上。
这是我的代码:
我该如何解决这个问题?
c++ - AVX2 赢家通吃视差搜索
我正在使用 AVX2 优化视差估计算法的“赢家通吃”部分。我的标量例程是准确的,但在 QVGA 分辨率和 48 个视差下,运行时间在我的笔记本电脑上大约 14 毫秒,令人失望。我创建了 LR 和 RL 视差图像,但为了简单起见,我将只包含用于 RL 搜索的代码。
我的标量例程:
我尝试使用 AVX2:
视差空间图像 (DSI) 的大小为 HxWxD (320x240x48),我将其水平布局以便更好地访问内存,这样每一行的大小都是 WxD。
视差空间图像具有每像素匹配成本。这与一个简单的盒子过滤器聚合在一起,以制作另一张完全相同大小的图像,但成本总和超过了一个 3x3 或 5x5 的窗口。这种平滑使结果更加“稳健”。当我使用 asPtr 访问时,我正在索引这个聚合成本图像。
此外,为了节省不必要的计算,我一直在以掩码半径偏移的行开始和结束。这个掩码半径是我的人口普查掩码的半径。我可以做一些花哨的边界反射,但它更简单更快,只是为了不打扰这个边界的差异。这当然也适用于开始和结束列,但是当我强制我的整个算法只在列是 16 的倍数(例如 QVGA:320x240)的图像上运行时,在这里搞乱索引并不好,这样我就可以简单地索引并使用 SIMD 命中所有内容(无残留标量处理)。
此外,如果您认为我的代码一团糟,我鼓励您查看高度优化的 OpenCV 立体算法。我发现它们是不可能的,并且几乎没有使用它们。
我的代码编译但在运行时失败。我正在使用 VS 2012 Express Update 4。当我使用调试器运行时,我无法获得任何见解。我对使用内在函数相对较新,所以我不确定调试时应该看到哪些信息、寄存器数量、__m256i 变量是否应该可见等。
听从下面的评论建议,我通过使用更智能的索引将标量时间从 ~14 提高到 ~8。我的 CPU 是 i7-4980HQ,我在同一个文件的其他地方成功使用了 AVX2 内部函数。
opencv - opencv结果上基于相关性的视差图不够令人满意
我使用归一化互相关方程来查找tsukaba 的两个校正图像之间的差异。
我使用大小为 9x9 的矩形窗口在 x=-15:1:15 范围内的水平方向和 y=-1:1:1 范围内的垂直方向搜索。
然后对于(x,y)
最大化相关性,其差异(i,j)
计算为:disparity(i,j)=sqrt( x^2 +y^2 )
。
这是我得到的视差图像:
这不如地面实况视差图令人满意:
我必须执行任何后处理以增强结果吗?
提前致谢。
opencv - 结合由视差图构建的 2 个点云
我有一个旋转且不移动的立体对(2 个透视相机)。使用传统的 opencv 方法,我发现了视差图和透视投影矩阵 Q。
从这里我构建了 2 个点云,reprojectImageTo3D()
用于两个不同的立体对方向。我确实知道描述每个云的相机方向的角度(视差图)。
我的问题是如何转换(旋转、平移)这些云以获得匹配?背后的数学是什么?
我天真地认为,仅通过反向旋转角度旋转第二个云就足够了,但从实践和理论的角度来看,它都行不通。有任何想法吗?
matlab - Matlab/OpenCV立体视觉距离测量不准确
立体校准后,当我运行 Matlab 示例进行立体深度估计 (SDE) 时,距离是错误的:在大约 2 米处,它总是报告距离小于 1m。而且我的 3D 场景重建看起来是锥形的,而不是像真实场景一样。视差图非常嘈杂(不平滑),但与场景相似。
如果我向 SDE 脚本“提供”示例文件而不是网络摄像头输入,它运行正常,一切看起来都很棒;当我从两个网络摄像头('Logitech HD Pro Webcam C920')输入它时,我得到了上述糟糕的结果,从粗略的视差图开始。
我已经尝试了许多不同的校准尝试,只有几张图像最多大约 60 个,Matlab 的棋盘图案在不同的角度(从不 > 45)和到相机的距离大约 8 到 20'。相机镜头始终相距 3.8175",并安装在笔记本电脑的顶部边缘。遵循 Matlab 推荐的工作流程。
我在校准中做错了什么?
MATLAB R2015a。笔记本电脑 Windows 7 64 位棋盘图案为 37" x 27"
......刚刚发现的问题:正在创建视差图:disparityMap = disparity(frameLeftGray, frameRightGray); 但是,我的相机 #1 在右侧,Matlab 说默认视差范围是 [0 64],而对于 cam #1 右侧,它应该是 [-128 0],但这会将视差图更改为所有统一的蓝色。
c++ - C++ / OpenCV - 深度图问题:点云中的项目有一些扭曲
我想创建一个深度图以获得每个像素的 3D 位置,以便我可以在我的图片上获得某些选定项目的 3D 位置。为了查看我的深度数据是否正确,我使用 MeshLab 将其可视化。
我使用 KITTI 数据集的立体数据,因此对图像进行了校正,并提供了每个相机的校准。
过程如下:
左图 + 右图 --> 使用立体半全局匹配 (SGBM) 计算视差 --> 使用 cv::reprojectImageTo3D() 计算深度图,Q 已初始化,这要归功于校准参数和此函数:
我的问题如下:
路还行,但路牌有些变形。我不明白,我试图更改参数但没有成功。我总是有这种扭曲。这很烦人,因为我无法计算出招牌的良好 3D 位置。我也尝试了经典的块匹配,但它是相同的,与半全局匹配相比,结果不是那么好。
但是我的差异看起来像这样(这对我来说似乎很好):
视差计算的参数如下:
你知道为什么会这样吗?我该如何解决?我想有一个很好的标志牌表面。
opencv - 实时静止图像的opencv视差图是否意味着改变?
OpenCV 中从静止场景的两个实时摄像头馈送生成的视差图是否会随着时间而变化???(我假设不是,但我得到了一个不断变化的视差图像。)
computer-vision - 视差空间图像是什么意思
有人可以向我解释什么是视差空间图像吗?它是如何建造的?