В этом примере показано, как использовать новые функции ROI для создания интерактивного инструмента сравнения изображений. При работе с изображениями нам часто нужно визуально оценить влияние функции на изображение. Некоторые эффекты четко различимы, как краевой фильтр. Но некоторые влияния являются более тонкими и нуждаются в более тщательном рассмотрении.
Прочтите образец изображения в рабочую область, а затем создайте полутоновую версию изображения. Используйте imshowpair
функция для просмотра двух изображений. The montage
опция показывает изображения один за другим.
im = imread('peppers.png'); imgray = rgb2gray(im); figure; imshowpair(im,imgray,'montage')
Используя информацию только для чтения, установите альфа- слой (прозрачность) двух сложенных изображений так, чтобы одно изображение проходило только внутри информации только для чтения. Это выборочное представление следует за информация только для чтения, чтобы его можно было перемещать в интерактивном режиме. Создайте новый рисунок и оси.
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;
Создайте круговой информация только для чтения на осях.
centerLocation = [220, 100]; radius = 60; hC = images.roi.Circle(... 'Parent', hAxes,... 'FaceAlpha',0,... 'Center',centerLocation,... 'Radius', radius);
Создайте прослушиватель, который слушает изменения положения информация только для чтения (кружка). Функция updateAlpha определяется в конце этого примера.
addlistener(hC,'MovingROI', @updateAlpha);
Выполните коллбэк вручную первый раз
updateAlpha(hC)
Моделируйте масштабирование области.
hC.Parent.XLim = [75 370]; hC.Parent.YLim = [0 205];
Этот файл содержит исходный код для функции, которая реализует этот инструмент сравнения изображений. Этот код прослушивает два дополнительных события. Когда пользователь вводит клавишу 't/T', чтобы переключить изображение сверху. Код также прослушивает колесо прокрутки мыши, чтобы увеличить или уменьшить радиус информация только для чтения.
edit helperImageComparer
Функция обратного вызова для обновления альфа- слоя при перемещении объекта информации только для чтения.
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
| Circle
| createMask