В этом примере показано, как сделать графический интерфейс пользователя, который отображает два изображения рядом друг с другом в панелях прокрутки, которые синхронизируются в месте и увеличении.
Во-первых, задайте функцию, которая создает приложение. Этот пример использует функцию под названием my_image_compare_tool
, который присоединяется в конце примера.
После того, как вы задаете функцию, которая создает приложение, протестируйте приложение. Получите два изображения.
I = imread('flamingos.jpg'); L = rgb2lightness(I); Iedge = edge(L,'Canny');
Отобразите изображения в приложении. Когда вы перемещаете прямоугольник детали в инструмент Overview или изменяете увеличение в одном изображении, оба изображения отвечают.
my_image_compare_tool(I,Iedge);
my_image_compare_tool
функция принимает два изображения как входные параметры и отображает изображения в панелях прокрутки. Инструмент пользователя также включает инструмент Overview и поле Magnification. Обратите внимание на то, что функция подавляет панель инструментов и панель меню в окне рисунка, потому что навигация с возможностью прокрутки несовместима со стандартными инструментами навигации окна рисунка 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
imscrollpanel
| immagbox
| imoverview