Создайте инструмент сравнения изображений Используя ROI

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

Считайте демонстрационное изображение в рабочую область

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

im = imread('peppers.png');
imgray = rgb2gray(im);
figure;
imshowpair(im,imgray,'montage')

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

hFigure = figure();
hAxes = axes('Parent', hFigure);

Сложите оба изображения на тех же осях.

hImage1 = imshow(im, 'Parent', hAxes);
drawnow; % Ensure the image gets drawn.
hold on;
hImage2 = imshow(imgray, 'Parent', hAxes);
hold off;

Создайте круговой ROI на осях.

centerLocation = [220, 100];
radius = 60;
hC = images.roi.Circle(...
    'Parent', hAxes,...
    'FaceAlpha',0,...
    'Center',centerLocation,...
    'Radius', radius);

Создайте прослушиватель, который слушает изменения в положении ROI (круг). Функция updateAlpha задана в конце этого примера.

addlistener(hC,'MovingROI', @updateAlpha);

Выполните коллбэк вручную в первый раз

updateAlpha(hC)

Симулируйте увеличивание масштаб в область.

hC.Parent.XLim = [75 370];
hC.Parent.YLim = [0 205];

Этот файл содержит исходный код для функции, которая реализует этот инструмент сравнения изображений. Этот код прислушивается к двум дополнительным событиям. Когда пользователь, чтобы ввести 't/T' ключ, чтобы переключиться, какое изображение находится на верхней части. Код также прислушивается к колесику прокрутки мыши, чтобы увеличить или уменьшить радиус ROI.

edit helperImageComparer

Анимация инструмента в использовании

Функция обратного вызова, чтобы обновить альфа-слой

Функция обратного вызова, чтобы обновить альфа-слой как объект ROI перемещена.

function updateAlpha(hC, ~)
hImages = findobj(hC.Parent,'Type','image');
% Create a BW mask from the Circle ROI
mask = hC.createMask(hImages(1).CData);
% Set the alpha data so that the underlying image shows through
% only inside the circle
set(hImages(1),'AlphaData', ~mask);
end

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

| |

Похожие темы