Деформация изображения с использованием контрольных точек

Я хочу преобразовать изображение, используя контрольные точки по этой схеме, извлеченной изВот:

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 произвести это мой ожидаемый результат?

Есть ли альтернативный способ добиться этого?

Ответы на вопрос(2)

Ваш ответ на вопрос