2016-09-30 18 views
1

Я пытаюсь реализовать однородное преобразование из изображения несоответствия в изображение виртуального несоответствия, следуя статье Suganuma et. и др. "Метод извлечения препятствий с использованием виртуального несоответствия Изображение". После выполнения матричных вычислений, описанных в статье, я получаю глобальную однородную матрицу преобразования, которая описывает только перевод -27.7 в направлении v, что имеет смысл.Loop для создания виртуального изображения несоответствия в MATLAB

Теперь, чтобы сделать эту трансформацию, я осуществил цикл в 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 

это несоответствие и виртуальный разрыв соответственно:

диспаритета Карта: disparity map

Виртуального диспаритет: virtual disparity

Я перепроверка в течение всего дня, и я не нахожу ошибку.

+0

Я никогда не слышал о «виртуальном несоответствии», поэтому я допускаю, что это попытка, но я думаю о однородных координатах. Я думаю, что ваша трансформация B должна применяться к трехмерной однородной координате, которая должна быть как «[X, Y, Z, 1]», а не «уже нормализованная форма» [X/Z, Y/Z, 1, 1/Z] (как вы видите, если вы нормализуете «перед чем-то другим», последнее значение не может быть 1). Если я говорю о совершенно другом, пожалуйста, будьте добры и объясните мне это: я любезен! – marcoresk

+0

@marcoresk Я не нормализую его, так как я не делю последний элемент, который остается 1: 'U = [j/di/d 1/d 1] ';' Просто метод использует эти координаты, который включает в себя информацию из пикселя изображения и несоответствие (обратно пропорционально расстоянию. Я уже нашел то, что неправильно, что связано, но в конечных координатах. Спасибо в любом случае. Мне нужно идти, я отправлю ответ сегодня;) – agregorio

ответ

0

Наконец, коллега помог мне, и мы обнаружили, что не так. Я предполагал, что конечные координаты U_v будут заданы в виде [u v 0 1]', что на самом деле не имеет большого смысла. Фактически они были заданы в качестве входных координат в виде [u/d v/d 1/d 1]'. Итак, вместо нормализации их деления на элемент 4, как я делал, я должен разделить их на элемент 3 (1/d). Подводя итог, это просто ошибка в строке:

U_v = U_v./U_v(4); 

, который должен быть заменен:

U_v = U_v./U_v(3); 

Теперь изображение, хотя немного более разреженным, чем я думал, что это аналогично документу: Correct virtual disparity image