Я новичок в компьютерном зрении. Я пытаюсь сделать преобразование вращения с помощью Matlab. Мой код
I = imread('Koala.jpg');
rows = size(I, 1);
cols = size(I, 2);
deg = 45;
deg = deg * pi / 180;
C = uint8(zeros(size(I)));
mid = ceil([rows+1 cols+1] / 2);
[x1, x2] = meshgrid(1:rows, 1:cols);
M = [cos(deg) sin(deg); -sin(deg) cos(deg)];
X = bsxfun(@minus, [x1(:) x2(:)], mid) * M;
X = round(bsxfun(@plus, X, mid));
x1 = X(:, 1);
x2 = X(:, 2);
x1(x1<1) = 1;
x2(x2<1) = 1;
x1(x1>rows) = rows;
x2(x2>cols) = cols;
X = [x1(:) x2(:)];
m = 1;
for i=1:rows
for j=1:cols
C(X(m, 1), X(m, 2), :) = I(i, j, :);
m = m + 1;
end
end
Это работает, но в результате много пикселей без значений. Я думаю, когда я делаю «X2 = X * M», диапазон изображения при преобразовании не совпадает с исходным, и многие значения теряются.
imrotate
мошенничеством? - person Andras Deak   schedule 17.10.2016