我在确定下图的仿射变换矩阵时遇到问题。
原图:
仿射变换图像:
我在图像上确定了 2 个点来求解仿射变换矩阵,但我得到的结果并没有将原始转换为所需的。
代码如下,它首先求解矩阵并使用它将原始转换为转换后的版本:
% Pixel values
p1_aff = [164; 470];
p1_nor = [1; 512];
p2_aff = [470; 164];
p2_nor = [512; 1];
%p3_aff = [131;68];
%p3_nor = [166;61];
%p4_aff = [328;90];
%p4_nor = [456;59];
%Transformation matrix
syms a11 a12 a21 a22;
A = [a11 a12; a21 a22];
%Solving matrix
[Sx, Sy, Sz, Sk] = solve(A*p1_nor==p1_aff, A*p2_nor==p2_aff);
a11_d = double(Sx);
a12_d = double(Sy);
a21_d = double(Sz);
a22_d = double(Sk);
lena = imread('lena512.png');
new_aff = uint8(zeros(size(lena)));
for i = 1:size(lena,1)
for j = 1:size(lena,2)
% Applying affine transformation
new_coord = [a11_d a12_d 0; a21_d a22_d 0; 0 0 1]*[i; j; 1];
% Nearest-Neighbor interpolation for placing new pixels
if(round(new_coord(1)) > 0 && round(new_coord(2)) > 0)
new_aff(round(new_coord(1)),round(new_coord(2))) = lena(i,j);
end
end
end
imwrite(new_aff, 'lenaAffine_new.png');
在上面代码的末尾,我得到了这张图片:
有谁明白这里有什么问题?我快疯了。