exponenta event banner

Инструмент сравнения изображений построения

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

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

После определения функции, которая создает приложение, протестируйте приложение. Получите два изображения.

I = imread('flamingos.jpg');
L = rgb2lightness(I);
Iedge = edge(L,'Canny');

Отображение изображений в приложении. При перемещении прямоугольника детализации в инструменте «Обзор» или изменении увеличения в одном изображении откликаются оба изображения.

my_image_compare_tool(I,Iedge);

Figure Overview (My Image Compare Tool) contains an axes and other objects of type uipanel, uitoolbar, uimenu. The axes contains 8 objects of type line, patch, image.

Figure My Image Compare Tool contains 2 axes and other objects of type uipanel, uicontrol. Axes 1 contains an object of type image. Axes 2 contains an object of type image.

Функция создания приложения

my_image_compare_tool функция принимает два изображения в качестве входных аргументов и отображает их на панелях прокрутки. Пользовательский инструмент также включает инструмент «Обзор» и поле «Увеличение». Обратите внимание, что функция подавляет панель инструментов и строку меню в окне рисунка, поскольку прокручиваемая навигация несовместима со стандартными инструментами навигации окна MATLAB™ рисунка.

Для синхронизации панелей прокрутки функция устанавливает соединения между инструментами, использующими обратные вызовы, и функциями API Scroll Panel. Функция определяет функцию обратного вызова, которая выполняется при каждом изменении увеличения. Указанная функция 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

См. также

| |

Связанные примеры

Подробнее