inpaintCoherent

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

Описание

пример

J = inpaintCoherent(I,mask) восстанавливает конкретные области в вход изображении с помощью метода ввода на основе переноса когерентности. mask является логическим изображением, которое обозначает целевые области в изображении, которое должно быть заполнено посредством ввода.

пример

J = inpaintCoherent(I,mask,Name,Value) задает дополнительные опции ввода, используя один или несколько аргументов имя-значение.

Примеры

свернуть все

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

I = imread('overlayimage.png');

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

mask = imread('text.png');

Отобразите изображение, которое будет введено, и соответствующее ему изображение маски.

montage({I,mask});
title(['Image to Be Inpainted','   |   ','Mask for Inpainting'])

Figure contains an axes. The axes with title Image to Be Inpainted | Mask for Inpainting contains an object of type image.

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

J = inpaintCoherent(I,mask);

Отобразите оригинальное изображение и inpainted изображение.

montage({I,J});
title(['Image to Be Inpainted','    |    ','Inpainted Image'])

Figure contains an axes. The axes with title Image to Be Inpainted | Inpainted Image contains an object of type image.

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

I = imread('coloredChips.png');

Отобразите изображение.

figure
imshow(I,[])

Используйте drawcircle функция для выбора круговой видимой области (ROI) для ввода. Используйте Center и Radius Пары "имя-значение" для определения местоположения информации только для чтения.

h = drawcircle('Center',[130,42],'Radius',40);

Figure contains an axes. The axes contains 2 objects of type image, images.roi.circle.

Выберите несколько ROI для Inpainting

Можно также выбрать несколько ROI итерационно.

Установите число регионов, которые будут введены, равным 6.

numRegion = 6;

Укажите центр и радиусы для каждой области.

roiCenter = [130 42;433 78;208 108;334 124;434 167;273 58];
roiRadius = [40 50 40 40 40 30];

Выберите несколько круговых ROIs итеративно путем определения drawcircle Center и Radius Пары "имя-значение".

roi = cell([numRegion,1]);
for i = 1:numRegion
    c = roiCenter(i,:);
    r = roiRadius(i);
    h = drawcircle('Center',c,'Radius',r);
    roi{i} = h;
end

Figure contains an axes. The axes contains 8 objects of type image, images.roi.circle.

Используйте createMask функция для генерации маски из выбранных ROIs.

mask = zeros(size(I,1),size(I,2));
for i = 1:numRegion
    newmask = createMask(roi{i});
    mask = xor(mask,newmask);
end

Отобразите изображение, которое будет введено, и соответствующее ему изображение маски.

montage({I,mask});
title(['Image to Be Inpainted','   |   ','Mask for Inpainting'])

Figure contains an axes. The axes with title Image to Be Inpainted | Mask for Inpainting contains an object of type image.

Удалите объекты в ROIs путем ввода. Задайте стандартное отклонение 0,5 и радиус ввода 1.

J = inpaintCoherent(I,mask,'SmoothingFactor',0.5,'Radius',1);

Отобразите оригинальное изображение и inpainted изображение.

montage({I,J});
title(['Image to Be Inpainted','    |    ','Inpainted Image']);

Figure contains an axes. The axes with title Image to Be Inpainted | Inpainted Image contains an object of type image.

Входные параметры

свернуть все

Изображение для ввода, заданное как полутоновое изображение размера m -by- n или цветное изображение RGB размера m -by- n - by-3.

Типы данных: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32

Пространственная маска целевых областей, заданная как 2-D бинарное изображение размера m -by- n, где m и n являются размерностями входного изображения I. Ненулевые пиксели в mask составляют целевые области, которые должны быть заполнены посредством ввода.

Примечание

Типы данных: logical

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: J = inpaintCoherent(I,mask,'Radius',7)

Стандартное отклонение Гауссова фильтра, заданное как разделенная запятыми пара, состоящая из 'SmoothingFactor' и положительное число. Это значение используется для вычисления шкал Гауссовых фильтров при оценке направления когерентности.

Радиус ввода, заданный как разделенная разделенными запятой парами, состоящая из 'Radius' и положительное целое число. Радиус ввода обозначает радиус окружной области, центрированной на пикселе, который будет введен.

Выходные аргументы

свернуть все

Inpainted изображение, возвращаемое как полутоновое изображение или цветное изображение RGB того же размера и типа данных, что и входное изображение I.

Совет

  • Результаты ввода зависят от спецификации пары "имя-значение". Можно изменять значения 'Radius' и 'SmoothingFactor' для различных результатов.

  • Каждый информация только для чтения в изображении двоичной маски должен быть достаточно большим, чтобы окружить соответствующую область в изображении, которое должно быть введено.

Алгоритмы

Метод, основанный на переносе когерентности, является пиксельным подходом для удаления объектов и заполнения областей в изображениях [1]. Ввод выполняется внутрь, начиная с краевых пикселей целевой области. Значение ввода для пикселя оценивается из его когерентных соседних пикселей с известными значениями. Соответствующие шаги суммируются следующим образом:

  1. Идентифицируйте целевые области из входа изображения, которое будет заполнено или введено. Сгенерируйте двоичную маску такого же размера, как и входа изображение. Ненулевые пиксели в маскировочном изображении должны содержать целевые области, которые будут введены.

    Порядок ввода пикселей в целевой области вычисляется с их евклидова расстояния до контура целевой области.

  2. Значение ввода для пикселя в целевой области является взвешенным средним значением известных значений пикселя в пределах его радиуса ввода. Известным пикселям в направлении когерентности присваивают более высокое значение веса, чем несвязанным соседним пикселям. Направление когерентности оценивается с помощью тензора структуры.

Ссылки

[1] Ф. Борнеманн и Т. Мярц. «Быстрая инициализация изображений на основе переноса когерентности». Журнал математической визуализации и зрения. Том 28, 2007, стр. 259-278.

Расширенные возможности

.
Введенный в R2019a