【发布时间】:2013-12-23 17:14:12
【问题描述】:
请您帮我理解 Matlab Help 中关于 Stereo vision - Basic Block Matching 的代码?
% Scan over all rows.
for m=1:nRowsLeft
% Set min/max row bounds for image block.
minr = max(1,m-halfBlockSize);
maxr = min(nRowsLeft,m+halfBlockSize);
% Scan over all columns.
for n=1:size(leftI,2)
minc = max(1,n-halfBlockSize);
maxc = min(size(leftI,2),n+halfBlockSize);
% Compute disparity bounds.
mind = max( -disparityRange, 1-minc );
maxd = min( disparityRange, size(leftI,2)-maxc );
% Construct template and region of interest.
template = rightI(minr:maxr,minc:maxc);
templateCenter = floor((size(template)+1)/2);
roi = [minc+templateCenter(2)+mind-1 ...
minr+templateCenter(1)-1 ...
maxd-mind+1 1];
% Lookup proper TemplateMatcher object; create if empty.
if isempty(tmats{size(template,1),size(template,2)})
tmats{size(template,1),size(template,2)} = ...
vision.TemplateMatcher('ROIInputPort',true);
end
thisTemplateMatcher = tmats{size(template,1),size(template,2)};
% Run TemplateMatcher object.
loc = step(thisTemplateMatcher, leftI, template, roi);
Dbasic(m,n) = loc(1) - roi(1) + mind;
end
waitbar(m/nRowsLeft,hWaitBar);
end
根据Matlab帮助:loc包含左图中点的位置坐标,roi包含右图中x和y所在区域的[x y width height]是左上角的坐标。
我想知道左右图像中对应的坐标。左图:x = loc(1)、y = loc(2) 右图:x = roi(1) - mind, y = loc(2)
这是正确的吗?我不确定 roi 里面到底是什么。
【问题讨论】:
-
如果我没记错的话,
Dbasic是一个网格,其中包含与特定迭代匹配的块的种子。 -
@AlexandreBizeau 根据这一步
Dbasic(m,n) = loc(1) - roi(1) + mind;在每次迭代期间,我假设Dbasic包含视差图。基于此,loc(1)应包含左侧图像中的列坐标和同一行右侧图像中的roi(1) - mind列坐标。但我不确定。我用它来确定物体和立体视觉相机之间的距离,但结果并不像我想要的那样准确。所以我想知道这部分是否正确。 -
我曾尝试使用该功能。和你一样,Matlab SGBM 结果不是那么好。我为此使用 Opencv Matlab 包装器,对我来说效果很好。但是是否有错误,或者您只是想了解他们在该功能中做了什么?
-
Matlab 提供了函数
disparity()和vipstereo_blockmatch_combined(),它们都返回一个视差图。但我只需要从左右图像中获取相应的坐标。为此,我已经转换了他们的块匹配函数并获得如下坐标:xL = loc(1), yL = loc(2), xR = roi(1) - mind, yR = loc(2)在每次迭代中。没有错误,但我不确定它是否正确。感谢您分享您的经验,这非常节省时间。我想得到最准确的结果,所以我将专注于 OpenCV 包装器。 -
好吧,你并不真正需要视差,而是两个图像之间的匹配点。通常,通过三角测量,您可以做到这一点。您需要相机信息(焦点、中心)和视差图来获取深度,您可以使用 X_left、X_right 和 X_scene 来完成。您从左点开始,使用视差图获取 3D 点并将其转换为右相机。不知道对你有没有好处。
标签: matlab matching stereo-3d matlab-cvst