【发布时间】:2017-02-09 09:01:58
【问题描述】:
我正在尝试实现从视差图像到虚拟视差图像的均匀变换,遵循 Suganuma 等的论文。人。 “一种使用虚拟视差图像的障碍物提取方法”。 在进行了论文中描述的矩阵计算之后,我得到了一个全局齐次变换矩阵,它只描述了在 v 方向上 -27.7 的平移,这是有道理的。
现在,为了进行这种转换,我在 MATLAB 中实现了一个循环:
virtual_disparity=zeros(size(disparityMap));
%Homogeneous vector of a point of the disparityMap U=[u/d v/d 1/d 1]' (4x1)
U = zeros(4,1);
U_v = zeros(4,1);
for i=1:size(disparityMap,1) %Rows-->y
for j=1:size(disparityMap,2) %Cols-->x
d = disparityMap(i, j); % (i,j)-->(cols,rows)-->(y,x)
U = [j/d i/d 1/d 1]'; % [u/d v/d 1/d 1]'
U_v = B*U; % B is the whole homogeneous transform
U_v = U_v./U_v(4);
u_v_x = U_v(1); %u_v_j
u_v_y = U_v(2); %u_v_i
if((u_v_x>1) && (u_v_x<=size(virtual_disparity, 2)) && (u_v_y>1) && (u_v_y<=size(virtual_disparity, 1)))
virtual_disparity(round(u_v_y), round(u_v_x)) = disparityMap(i, j);
end
end
end
现在,问题是我得到的虚拟差异没有任何意义,因为它甚至不符合 B 中描述的转换,正如我所说的:
1.0000 0 0.0000 0
0 1.0000 0.0000 -27.7003
0 0 1.0000 0
0 0 0 1.0000
这些分别是视差和虚拟视差:
我一整天都在重新检查,我没有发现错误。
【问题讨论】:
-
我从未听说过“虚拟视差”,所以我认为这是一个尝试,但我正在考虑同质坐标。我认为您的变换 B 必须应用于类似 3D 的齐次坐标,该坐标应类似于 '[X,Y, Z, 1]' 而不是“已经标准化的形式” [X/Z, Y/Z, 1, 1/Z](如您所见,如果您在“做任何其他事情之前”标准化最后一个值不能为 1)。如果我说的完全不同,请善待并向我解释:我很勇敢!
-
@marcoresk 我没有对其进行规范化,因为我没有划分最后一个元素,它仍然是 1:
U = [j/d i/d 1/d 1]';只是该方法使用了这个坐标,它包含了来自图像像素的信息以及视差(与距离成反比。我已经发现了问题所在,这是相关的,但在最终坐标中。无论如何,谢谢。我得走了,我今天会发布答案;)
标签: matlab computer-vision depth stereoscopy disparity-mapping