1

根据 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

这些分别是视差和虚拟视差:

视差图: 视差图

虚拟差异: 虚拟差异

我整天都在重新检查,我没有发现错误。

4

1 回答 1

0

最后,一位同事帮助了我,我们发现了问题所在。我假设最终坐标 U_v 将以 形式给出[u v 0 1]',这实际上没有多大意义。实际上,它们是作为表单中的输入坐标给出的[u/d v/d 1/d 1]'1/d因此,我必须将它们除以元素 3 ( ) ,而不是像我所做的那样将它们除以元素 4 进行归一化。总而言之,这只是一行中的一个错误:

U_v = U_v./U_v(4);

必须替换为:

U_v = U_v./U_v(3);

现在的图像,虽然比我想象的要稀疏一点,但它与论文中的一张相似: 校正虚拟视差图像

于 2016-10-02T12:04:19.880 回答