Я хочу преобразовать изображение с помощью контрольных точек в соответствии с этой схемой, извлеченной из здесь:
A
и B
содержит координаты источника целевых вершин.
Я вычисляю матрицу преобразования как:
A = [51 228; 51 127; 191 127; 191 228];
B = [152 57; 219 191; 62 240; 92 109];
X = imread('rectangle.png');
info = imfinfo('rectangle.png');
T = cp2tform(A,B,'projective');
До сих пор он работает правильно, потому что (используя нормированные координаты) исходная вершина создает свою целевую вершину:
H = T.tdata.T;
> [51 228 1]*H
ans =
-248.2186 -93.0820 -1.6330
> [51 228 1]*H/ -1.6330
ans =
152.0016 57.0006 1.0000
Проблема заключается в том, что imtransform
создает неожиданный результат:
Z = imtransform(X,T,'XData',[1 info.Width], 'YData',[1 info.Height]);
imwrite(Z,'projective.png');
Как я могу использовать imtransform
для получения этого ожидаемого результата?:
Есть ли альтернативный способ его достижения?