Удаление рисунка текстуры бумаги с фотографии

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

Я попытался применить преобразование FFT (используя плагин Photoshop), но я не мог найти никаких четких белых пятен, Вероятно, шаблон не является таким регулярным для этого метода?

Вы можете увидеть образец ниже. Если вам нужно полное изображение, я могу загрузить его где-нибудь.

4 ответа

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

Как отмечают @Jonas и @michid, фильтрация поможет вам с такой проблемой. При фильтрации вы сталкиваетесь с компромиссом между количеством деталей, которое вы хотите сохранить, и количеством шума (или нежелательных компонентов изображения), которое вы хотите удалить. Например, медианный фильтр, используемый @Jonas, полностью удаляет бумажную текстуру (даже круглую царапину у нижнего края изображения), но также удаляет всю текстуру в глазах, волосах, лице и фоне (хотя мы действительно не заботиться о фоном так много, это важно на переднем плане). Вы также увидите небольшое снижение контраста изображения, что обычно нежелательно. Это придает изображению искусственный вид.

Вот как бы я справился с этой проблемой:

  • Обнаружить шаблон текстуры бумаги:
    • Примените гауссовское размытие к изображению (используйте большое ядро, чтобы убедиться, что вся информация текстуры бумаги уничтожена.
    • Рассчитайте разницу изображений между размытыми и оригинальными изображениями
    • РЕДАКТИРОВАТЬ 2 Применить гауссовское размытие к разностному изображению (используйте небольшое ядро ​​3x3)
  • Порог вышеуказанного шаблона с использованием эмпирически определенного порога. Это дает двоичное изображение, которое можно использовать в качестве маски.
  • Использовать медианную фильтрацию (как упоминалось в @Jonas), чтобы заменить только части изображения, соответствующие шаблону бумаги.

Структура текстуры бумаги (перед порогом):

Вы хотите, чтобы в приведенном выше изображении не было информации о фактическом изображении. Вы увидите, что вы можете очень слабо разглядеть край лица (это нехорошо, но это лучшее, что у меня есть время). Вы также хотите, чтобы это изображение текстуры бумаги было как можно более возможным (чтобы пороговое значение давало равные результаты по всему изображению). Опять же, правая часть изображенного выше изображения немного темнее, а это значит, что это будет трудно.

Конечное изображение:

Результат не идеальный, но он полностью удалил сильно видимый шаблон текстуры бумаги, сохраняя при этом более высокочастотный контент, чем более простые подходы к фильтрации.

ИЗМЕНИТЬ

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

Здесь обработанное изображение с добавленным шумом:

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


Медиа-фильтр может помочь вам немного:

img = imread('http://i.stack.imgur.com/JzJMS.jpg');
%# convert rgb to grayscale
img = rgb2gray(img);
%# apply median filter
fimg = medfilt2(img,[15 15]);
%# show
imshow(fimg,[])

Обратите внимание, что вы можете сначала поместить изображение, чтобы избежать краевых эффектов.

ИЗМЕНИТЬ: меньшее ядро ​​фильтра, чем [15 15], сохранит текстуру изображения лучше, но оставит более видимые следы фильтрации.


Хорошо, я опробовал другой подход с использованием анизотропной диффузии, используя второй коэффициент, который работает на более широких областях.

Вот результат, который я получил:


Из того, что я вижу на картинке, шум имеет относительно высокую частоту по сравнению с самим изображением. Поэтому применение фильтра нижних частот должно работать. Посмотрите на спектр мощности abs(fft(...)), чтобы определить частоту среза.

licensed under cc by-sa 3.0 with attribution.