Ниже приводится простая реализация применения аффинного преобразования к изображению. Некоторые матрицы могут быть перевернуты, потому что я сделал это по памяти. Я не знаю точно, как вы форматируете свой массив pts, поэтому считаю, что рабочий пример - лучшее, что я могу сделать. Функция interp2
применяет билинейную интерполяцию, функция bilinear
выполняет билинейное преобразование, которое описывает аналоговые фильтры как цифровые фильтры. Это не то, что вам нужно.
P.S. Вы должны обязательно использовать обратное преобразование при применении деформации изображения (то есть определить точку, которую вы хотите выбрать во входном изображении для каждой точки в выходном изображении). Если вы выполните прямое преобразование (то есть определите точку в выходном изображении, которой сопоставляется каждая точка во входном изображении), вы получите серьезные эффекты сглаживания и, возможно, дыры в выходном изображении.
Надеюсь это поможет. Дайте мне знать, если у вас возникнут вопросы.
img = double(imread('rice.png'))/255;
theta = 30; % rotate 30 degrees
R = [cosd(theta) -sind(theta) 0; ...
sind(theta) cosd(theta) 0; ...
0 0 1];
sx = 15; % skew by 15 degrees in x
Skx = [1 tand(sx) 0; ...
0 1 0; ...
0 0 1];
% Translate by 1/2 size of image
tx = -size(img, 2)/2;
ty = -size(img, 1)/2;
T = [1 0 tx; ...
0 1 ty; ...
0 0 1];
% Scale image down by 1/2
sx = 0.5;
sy = 0.5;
S = [sx 0 0; ...
0 sy 0; ...
0 0 1];
% translate, scale, rotate, skew, then translate back
A = inv(T)*Skx*R*S*T;
% create meshgrid points
[x, y] = meshgrid(1:size(img,2), 1:size(img,1));
% reshape so we can apply matrix op
V = [reshape(x, 1, []); reshape(y, 1, []); ones(1, numel(x))];
Vq = inv(A)*V;
% probably not necessary for these transformations but project back to the z=1 plane
Vq(1,:) = Vq(1,:) ./ V(3,:);
Vq(2,:) = Vq(2,:) ./ V(3,:);
% reshape back into a meshgrid
xq = reshape(Vq(1,:), size(img));
yq = reshape(Vq(2,:), size(img));
% use interp2 to perform bilinear interpolation
imgnew = interp2(x, y, img, xq, yq);
% show the resulting image
imshow(imgnew);
person
jodag
schedule
14.11.2016
interp2
- person jodag   schedule 14.11.2016