Создайте инструмент сравнения изображений с помощью ROIs

В этом примере показано, как использовать новые функции 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

См. также

| |

Похожие темы