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

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

Во-первых, задайте функцию, которая создает приложение. Этот пример использует функцию под названием 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.

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

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

Смотрите также

| |

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

Больше о