В этом примере показано, как повернуть изображение с помощью прямоугольника информация только для чтения с функцией обратного вызова 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
addlistener
| drawrectangle
| imrotate
| Rectangle