Помогите разобраться с МАТЛАБовским скиптом

unclehm

Мне нужно по >4 парам соответсвующих друг другу точкек на изображениях (это не имеет значения, просто нужно реализовать алгоритм преобразования перспективного искажения на изображении так вот, нужно найти матрицу преобразования Н, такую что (x`;y`) <-> H*(x;y)
Мне подкинули скриптик на матлабе вычисления этой матрицы Н, теперь мне нужно аналогичный алгоритм сделать на С++
но в матлабовском коде что то не очень получается разбираться
гляньте пока что кто-нибудь, плизз, а я потом ещё поконкретнее вопрос накатаю
function H = est_h_lin(varargin) 
% 1) H = est_h_lin( M )
% 2) H = est_h_lin( M1, M2 )
%
% Estimate homography matrix from >=4 points
%
% Input:
% 1) M - M - matching point features (M(1:2,i) correspondes
% to M(3:4,i non-homogeneous).
% 2) M1,M2 - matches from 1 and second images (arrays
% of homogeneous column-vectors)
% Output:
% H - Resulting homography matrix 3x3
% Simple Size Checking
%if size(Data) ~= [4, 7]
% F = zeors([3 3]);
% return;
%end;
if nargin == 1
Data = varargin{1};
else
M1 = varargin{1};
Data(1:2,:) = M1(1:2,:);
M2 = varargin{2};
Data(3:4,:) = M2(1:2,:);
end;
A = zeros( [2*size(Data,2 9] );
%construct matrix for calculation of H
for i = 1:size(Data,2)
x1 = Data(1,i);
y1 = Data(2,i);
x2 = Data(3,i);
y2 = Data(4,i);
A(2*i-1,:) = [x1, y1, 1, 0, 0, 0, -x1*x2, -y1*x2, -x2];
A(2*i,:) = [0, 0, 0, x1, y1, 1, -x1*y2, -y1*y2, -y2];
end;
%Solve system Ah = 0, where h = (H11, H12, H13, H21, H22, H23, H31, H32,
%H33)
[U,S,V] = svd( A' * A, 0 );
h = V(:,9); %last column of V correspond to smallest singular value
H(1,:) = h(1:3)';
H(2,:) = h(4:6)';
H(3,:) = h(7:9)';

unclehm

если конкретнее, то вот эта часть кода (внутри цикла) интересует:
    A(2*i-1,:) = [x1, y1, 1, 0, 0, 0, -x1*x2, -y1*x2, -x2];    
    A(2*i,:) = [0, 0, 0, x1, y1, 1, -x1*y2, -y1*y2, -y2];

что из себя представляет А?
и последние четыре строчки тоже не совсем понял...

suchkovsistema

матлаб вроде сам в С++ конвертить умеет.. имхо!..

zuzaka

двоеточие выделяет строку. То есть ты говоришь,
что строка с номером 2*i-1 равняется [x1, y1, 1, 0, 0, 0, -x1*x2, -y1*x2, -x2],
а строка с номером 2*i равняется [0, 0, 0, x1, y1, 1, -x1*y2, -y1*y2, -y2]
Оставить комментарий
Имя или ник:
Комментарий: