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

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

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

  • В интерактивном режиме выбирая inpainting область.

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

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

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

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

I = imread('greensdistorted.png');

Создайте интерактивное Окно фигуры

Создайте интерактивное окно рисунка, чтобы отобразить изображение, чтобы быть inpainted. В окне можно выбрать видимую область (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); 

Выберите и области Inpaint изображений в интерактивном режиме

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

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

В интерактивном режиме inpaint изображение путем выполнения этих шагов.

Шаг 1: Выберите размер закрашенной фигуры и порядок заливки для inpainting. К inpaint с локальными значениями параметров измените размер закрашенной фигуры, и заливка заказывают требуемым значениям при помощи контроля за работой пользователей в интерактивном окне рисунка.

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

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

  • В inpaint области с регулярными структурами выберите больший размер закрашенной фигуры и достигните бесшовного inpainting.

  • В inpaint области, которые локально универсальны относительно маленького окружения, выберите меньший размер закрашенной фигуры.

Порядок заливки по умолчанию устанавливается к 'gradient'. Можно выбрать 'gradient'или 'tensor'основанная заливка заказывает для областей inpainting изображений. Однако 'tensor'основанный порядок заливки более подходит для областей inpainting изображений с линейными структурами и регулярными структурами.

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

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

Создайте функцию обратного вызова, чтобы выбрать и ROI Inpaint

Создайте clickCallback использоваться с ButtonDownFcn в интерактивном режиме выбрать и inpaint 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

Смотрите также

| | |

Похожие темы