exponenta event banner

Ввод интерактивного изображения с помощью сопоставления примеров

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

В этом примере выполняется заполнение области и удаление объекта:

  • Интерактивный выбор области ввода.

  • Динамическое обновление значений параметров.

  • Динамическая визуализация результатов.

Чтение изображения в рабочую область

Чтение изображения для вставки в рабочую область. В изображении отсутствуют области изображения, которые должны быть заполнены с помощью заливки.

I = imread('greensdistorted.png');

Создание интерактивного окна рисунка

Создание интерактивного окна рисунка для отображения изображения, подлежащего заливке. В окне можно выбрать интересующую область (ROI) и динамически обновить значения параметров.

h = figure('Name','Interactive Image Inpainting','Position',[0,0,700,400]);

% Create a panel in the current figure to interactively set the parameter
% values.
dataPanel = uipanel(h,'Position',[0.01 0.5 0.25 0.5],'Title','Set parameter values','FontSize',10);

% Add an user control interface for specifying the patch size.
% Set the default patch size value to 9.
uicontrol(dataPanel,'Style','text','String','Enter Patch Size','FontSize',10,'Position',[1 150 120 20]);
data.patchSize = uicontrol(dataPanel,'Style','edit','String',num2str(9),'Position',[7 130 60 20]);

% Add an user control interface for selecting the fill order.
% Set the default fill order to gradient.
uicontrol(dataPanel,'Style','text','String','Select Filling Order','FontSize',10,'Position',[5 100 120 20]);
data.fillOrder = uicontrol(dataPanel,'Style','popupmenu','String',{'gradient','tensor'},'Position',[7 80 80 20]);

% Create a panel in the current figure to display the image.
viewPanel = uipanel(h,'Position',[0.25 0 0.8 1],'Title','Interactive Inpainting','FontSize',10);
ax = axes(viewPanel);

Отображение изображения в интерактивном окне рисунка.

hImage = imshow(I,'Parent',ax); 

Интерактивный выбор и вложение областей изображения

Выбор ROI в интерактивном режиме и динамическое отображение выбранных ROI с помощью функции обратного вызова clickCallback. Назначить дескриптор функции, который ссылается на clickCallback функции к ButtonDownFcn свойства объекта изображения.

hImage.ButtonDownFcn = @(hImage,eventdata)clickCallback(hImage,eventdata,data);

Выполните следующие действия для интерактивного ввода изображения.

Шаг 1: Выберите размер и порядок заливки для заливки. Для заливки значениями локальных параметров измените размер фрагмента и порядок заливки на требуемые значения с помощью пользовательских элементов управления в интерактивном окне рисунка.

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

Значение размера сегмента по умолчанию равно 9.

  • Чтобы окутать области правильными текстурами, выберите больший размер заплатки и получите бесшовную окантовку.

  • Для заливки областей, которые являются локально однородными по отношению к небольшой окрестности, выберите меньший размер пластыря.

Порядок заполнения по умолчанию равен 'gradient'. Вы можете выбрать 'gradient«или»tensor«Основанный на порядке заливки для заливки областей изображения». Однако, 'tensor«Порядок заливки на основе больше подходит для заливки областей изображения линейными структурами и правильными текстурами».

Шаг 2: Создайте свободный ROI в интерактивном режиме с помощью мыши. Поместите указатель на оси и щелкните и перетащите, чтобы нарисовать форму окупаемости инвестиций. Отпустите указатель, чтобы закрыть фигуру.

Функция динамически обновляет значения параметров, заданные с помощью пользовательского интерфейса управления, и вводит выбранный ROI. Повторите шаги 1 и 2, чтобы вставить в изображение все требуемые области.

Создание функции обратного вызова для выбора и внедрения ROI

Создать clickCallback для использования с ButtonDownFcn для интерактивного выбора и ввода значений ROI.

function clickCallback(src,~,data)
% Get the parameter values for inpainting.
fillOrder = data.fillOrder.String{data.fillOrder.Value};
pSize = data.patchSize.String;
patchSize = str2double(pSize);
% Select and draw freehand ROI.
h = drawfreehand('Parent',src.Parent);
% Create a binary mask of the selected ROI.
mask = h.createMask(src.CData);
% Run exemplar-based inpainting algorithm with user given parameters.
newImage = inpaintExemplar(src.CData,mask,'PatchSize',patchSize,'FillOrder',fillOrder);
% Update input image with output.
src.CData = newImage;
% Delete ROI handle.
delete(h);
end

См. также

| | |

Связанные темы