Вращайте изображение в интерактивном режиме, используя прямоугольник информация только для чтения

В этом примере показано, как повернуть изображение с помощью прямоугольника информация только для чтения с функцией обратного вызова imrotate когда вы перемещаете информация только для чтения.

Вращение изображения является общим шагом предварительной обработки. В этом примере изображение должно быть повернуто на неизвестную величину, чтобы выровнять горизонт по оси X. Можно использовать imrotate функция для поворота изображения, но вам нужно предварительное знание угла поворота. При помощи интерактивного вращаемого информация только для чтения можно повернуть изображение в реальном времени, чтобы соответствовать вращению информация только для чтения.

Создайте Вращающийся Прямоугольник информация только для чтения

Отображение изображения в области осей.

im = imread('baby.jpg');
hIm = imshow(im);

Получите размер изображения.

sz = size(im);

Определите положение и размер прямоугольника информация только для чтения как вектора с 4 элементами вида [x y w h]. Информация только для чтения будет нарисован в центре изображения и имеет половину ширины и высоты изображения.

pos = [(sz(2)/4) + 0.5, (sz(1)/4) + 0.5, sz(2)/2, sz(1)/2];

Создайте вращаемый Прямоугольник информация только для чтения в заданном положении и установите свойство Rotatable на true. Затем можно повернуть прямоугольник, нажав и перетащив рядом с углами. Когда информация только для чтения перемещается, он транслирует событие MovingROI. Добавив прослушиватель для этого события и функцию обратного вызова, которая выполняет, когда событие происходит, можно повернуть изображение в ответ на движения ROI.

h = drawrectangle('Rotatable',true,...
    'DrawingArea','unlimited',...
    'Position',pos,...
    'FaceAlpha',0);

Поместите приглашение в метку.

h.Label = 'Rotate rectangle to rotate image';

Добавьте прослушиватель, который слушает любое движение ROI.

addlistener(h,'MovingROI',@(src,evt) rotateImage(src,evt,hIm,im));

Функции imrotate в функции обратного вызова

Задайте функцию обратного вызова, которая выполняется при перемещении прямоугольника информация только для чтения. Эта функция извлекает текущий угол поворота информация только для чтения, вызывает imrotate на изображении с этим углом поворота и обновляет отображение. Функция также обновляет метку, чтобы отобразить текущий угол поворота.

function rotateImage(src,evt,hIm,im)

% Only rotate the image when the ROI is rotated. Determine if the
% RotationAngle has changed
if evt.PreviousRotationAngle ~= evt.CurrentRotationAngle

    % Update the label to display current rotation
    src.Label = [num2str(evt.CurrentRotationAngle,'%30.1f') ' degrees'];

    % Rotate the image and update the display
    im = imrotate(im,evt.CurrentRotationAngle,'nearest','crop');
    hIm.CData = im;

end

end

См. также

| | |

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте