Этот пример показывает, как использовать новые функции 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
addlistener
| createMask
| images.roi.Circle