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

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

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

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

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

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

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.

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

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

См. также

| |

Похожие примеры

Подробнее о