Интерактивная Inpainting изображений с использованием соответствия примеров

Этот пример показывает, как интерактивно выбрать области изображения и, ввести выбранную область с помощью метода соответствия на основе примеров. Интерактивная inpainting позволяет вам выбрать область несколько раз и выполнить входную проверку итерационно, чтобы достичь желаемых результатов.

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

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

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

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

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

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

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: Создайте freehand ROI в интерактивном режиме при помощи вашей мыши. Поместите указатель мыши на оси и щелкните и перетащите мышью, чтобы нарисовать форму ROI. Отпустите указатель мыши, чтобы закрыть фигуру.

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

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

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

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

См. также

| | |

Похожие темы