Меня попросили выполнить поворот изображения вокруг произвольной точки. Структура, которую они предоставили, была в Matlab, поэтому мне пришлось заполнить функцию под названием MakeTransformMat
, которая получает угол поворота и точку, где мы хотим повернуть.Вращение изображения относительно произвольной точки
Как я уже видел в классе для этого поворота, мы переводим точку в начало координат, затем поворачиваем и, наконец, переводим назад.
Рамка просит меня вернуть матрицу преобразования. Правильно ли построить эту матрицу как умножение матриц перевода-поворота-трансляции? в противном случае, что я забываю?
function TransformMat = MakeTransformMat(theta,center_y,center_x)
%Translate image to origin
trans2orig = [1 0 -center_x;
0 1 -center_y;
0 0 1];
%Rotate image theta degrees
rotation = [cos(theta) -sin(theta) 0;
sin(theta) cos(theta) 0;
0 0 1];
%Translate back to point
trans2pos = [1 0 center_x;
0 1 center_y;
0 0 1];
TransformMat = trans2orig * rotation * trans2pos;
end
Вы попробовали? Вернули ли вы правильно повернутое изображение? – Dan
Нет, я не знаю, потому что я борюсь с другой частью рамки перед тем, как применить это, я не использую MATLAB, и они используют очень странные функции, которые я не знаю, что они делают – BRabbit27
Ну, я бы предложил вам сначала создать рамки для тестирования (или если у вас есть панель обработки изображений, которую вы можете протестировать с помощью ['imtransform'] (http://www.mathworks.com/help/images/ref/imtransform.html)). – Dan