Вот пример графического интерфейса:
function rotationGUI()
%# read image
I = imread('cameraman.tif');
%# setup GUI
hFig = figure('menu','none');
hAx = axes('Parent',hFig);
uicontrol('Parent',hFig, 'Style','slider', 'Value',0, 'Min',0,...
'Max',360, 'SliderStep',[1 10]./360, ...
'Position',[150 5 300 20], 'Callback',@slider_callback)
hTxt = uicontrol('Style','text', 'Position',[290 28 20 15], 'String','0');
%# show image
imshow(I, 'Parent',hAx)
%# Callback function
function slider_callback(hObj, eventdata)
angle = round(get(hObj,'Value')); %# get rotation angle in degrees
imshow(imrotate(I,angle), 'Parent',hAx) %# rotate image
set(hTxt, 'String',num2str(angle)) %# update text
end
end
Если вы предпочитаете создавать GUI в GUIDE, выполните следующие действия:
создание графического интерфейса и добавление необходимых компонентов: ось, ползунок, статический текст (перетаскивание)
Используя «Инспектор свойств», измените свойства слайдера, как требуется: * Min/Max/Value/SliderStep
. Также поможет, если вы назначите Tag
для возможности поиска компонентов в коде.
В функции xxxx_OpeningFcn
рисунка прочитайте и сохраните изображение в структуре handles
, затем покажите его:
handles.I = imread('cameraman.tif');
imshow(I, 'Parent',findobj(hObject,'Tag','imgAxis')) %# use tag you assigned
guidata(hObject, handles); %# Update handles structure
- Создайте обработчик события обратного вызова для вашего ползунка и добавьте код:
angle = round( get(hObject,'Value') );
imshow( imrotate(handles.I,angle) )
EDIT:
Поворот изображения - это аффинное преобразование, которое отображает положение (x, y) пикселей входного изображения на новые координаты (x2, y2) для выходного изображения. Проблема в том, что выходные координаты не всегда могут быть целыми числами. Поскольку цифровые изображения представлены в виде сетки дискретных пикселей, поэтому используется некоторая форма передискретизации / интерполяции (именно поэтому прямые линии могут выглядеть неровными при повороте на определенные углы).
(Иллюстрация заимствована у: Понимание цифровой интерполяции изображений )