exponenta event banner

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);

Отображение исходного изображения и введенного изображения.

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 пары «имя-значение» для указания местоположения ROI.

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

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

Выбор нескольких значений ROI для ввода

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

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

numRegion = 6;

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

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

Выберите несколько круговых ROI итеративно, указав 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 для создания маски из выбранных значений ROI.

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.

Удаление объектов в ROI с помощью заливки. Задайте стандартное отклонение 0,5 и радиус заливки 1.

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

Отображение исходного изображения и введенного изображения.

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' и положительное целое число. Радиус заливки обозначает радиус круговой области окрестности, центрированной на пикселе, подлежащем заливке.

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

свернуть все

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

Совет

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

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

Алгоритмы

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

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

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

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

Ссылки

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

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

.
Представлен в R2019a