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

Чтобы проиллюстрировать, как использовать коллбэки, чтобы установить связи, требуемые для взаимодействий между инструментами, этот пример использует API Панели Прокрутки, чтобы создать простой графический интерфейс пользователя сравнения изображений. Этот инструмент пользователя отображает два изображения рядом друг с другом в панелях прокрутки, которые синхронизируются в месте и увеличении. Инструмент пользователя также включает инструмент Overview и поле Magnification.

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 left and right scroll panels
apiL.setMagnification(apiR.getMagnification())
apiL.setVisibleLocation(apiR.getVisibleLocation())

% When magnification changes on left scroll panel, 
% tell right scroll panel
apiL.addNewMagnificationCallback(apiR.setMagnification);

% When magnification changes on right scroll panel, 
% tell left scroll panel
apiR.addNewMagnificationCallback(apiL.setMagnification);

% When location changes on left scroll panel, 
% tell right scroll panel
apiL.addNewLocationCallback(apiR.setVisibleLocation);

% When location changes on right scroll panel, 
% tell left scroll panel
apiR.addNewLocationCallback(apiL.setVisibleLocation);

Комплекты инструментальных средств комплексное взаимодействие между панелями прокрутки со всего несколькими вызовами, чтобы Прокрутить API-функции Панели. В коде инструмент задает функцию обратного вызова, чтобы выполнить каждый раз изменения увеличения. Заданной функцией является setMagnification API-функция другой панели прокрутки. Таким образом, каждый раз, когда изменения увеличения в одной из панелей прокрутки, другая панель прокрутки изменяет свое увеличение, чтобы соответствовать. Комплекты инструментальных средств подобная связь для изменений положения.

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

Прокрутите связи панели в инструменте сравнения пользовательского изображения

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

left_image = imread('peppers.png');
right_image = edge(left_image(:,:,1),'canny');
my_image_compare_tool(left_image,right_image);

Инструмент создает окно фигуры, отображая два изображения рядом друг с другом, в отдельных панелях прокрутки. Пользовательские выдерживают сравнение, инструмент также включает инструмент Overview и поле Magnification. Когда вы перемещаете прямоугольник детали в инструмент Overview или изменяете увеличение в одном изображении, оба изображения отвечают.