Деформация изображения с использованием контрольных точек
Я хочу преобразовать изображение, используя контрольные точки по этой схеме, извлеченной изВот:
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
произвести это мой ожидаемый результат?
Есть ли альтернативный способ добиться этого?