В этом примере показано, как сделать графический интерфейс пользователя, который отображает два изображения один за другим в панелях прокрутки, которые синхронизируются в местоположении и увеличении.
Во-первых, задайте функцию, которая создает приложение. В этом примере используется функция, называемая my_image_compare_tool
, который прилагается в конце примера.
После того, как вы определите функцию, которая создает приложение, протестируйте приложение. Получите два изображения.
I = imread('flamingos.jpg'); L = rgb2lightness(I); Iedge = edge(L,'Canny');
Отобразите изображения в приложении. Когда вы перемещаете прямоугольник детали в инструменте Overview или изменяете увеличение на одном изображении, оба изображения реагируют.
my_image_compare_tool(I,Iedge);
The my_image_compare_tool
функция принимает два изображения в качестве входных параметров и отображает изображения в панелях прокрутки. Пользовательский инструмент также включает инструмент «Обзор» и поле «Увеличение». Обратите внимание, что функция подавляет панель инструментов и панель меню в окне рисунка, потому что прокручиваемая навигация несовместима со стандартными MATLAB™ окнами навигации фигуры.
Чтобы синхронизировать панели прокрутки, функция устанавливает соединения между инструментами с помощью коллбэков и функций API панели прокрутки. Функция задает функцию обратного вызова, которая выполняется каждый раз, когда изменение увеличения. Заданная функция является setMagnification
API-функция другой панели. Таким образом, всякий раз, когда увеличение изменяется в одной из панелей прокрутки, другая панель прокрутки изменяет свое увеличение так, чтобы оно совпадало. Инструмент настраивает аналогичное соединение для изменения положения.
function my_image_compare_tool(left_image,right_image) % Create the figure hFig = figure('Toolbar','none',... 'Menubar','none',... 'Name','My Image Compare Tool',... 'NumberTitle','off',... 'IntegerHandle','off'); % Display left image subplot(121) hImL = imshow(left_image); % Display right image subplot(122) hImR = imshow(right_image); % Create a scroll panel for left image hSpL = imscrollpanel(hFig,hImL); set(hSpL,'Units','normalized',... 'Position',[0 0.1 .5 0.9]) % Create scroll panel for right image hSpR = imscrollpanel(hFig,hImR); set(hSpR,'Units','normalized',... 'Position',[0.5 0.1 .5 0.9]) % Add a Magnification box hMagBox = immagbox(hFig,hImL); pos = get(hMagBox,'Position'); set(hMagBox,'Position',[0 0 pos(3) pos(4)]) %% Add an Overview tool imoverview(hImL) %% Get APIs from the scroll panels apiL = iptgetapi(hSpL); apiR = iptgetapi(hSpR); %% Synchronize the left and right scroll panels apiL.setMagnification(apiR.getMagnification()) apiL.setVisibleLocation(apiR.getVisibleLocation()) % When the magnification changes on the left scroll panel, % tell the right scroll panel apiL.addNewMagnificationCallback(apiR.setMagnification); % When the magnification changes on the right scroll panel, % notify the left scroll panel apiR.addNewMagnificationCallback(apiL.setMagnification); % When the location changes on the left scroll panel, % notify the right scroll panel apiL.addNewLocationCallback(apiR.setVisibleLocation); % When the location changes on the right scroll panel, % notify the left scroll panel apiR.addNewLocationCallback(apiL.setVisibleLocation); end
immagbox
| imoverview
| imscrollpanel