Как стать автором
Обновить

GIMP: понижение шума по маске

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров1.5K

Существуют изображения, на которых встаёт задача понижения шума при сохранении значимых контуров.

Предположу первое возражение:

"Есть же медианный фильтр. Применить его и всё."

"Медианный фильтр..." то есть, но на рассматриваемых изображениях он даёт не просто плохой результат, а вообще "никакой". То есть важные контуры в результате утрачиваются. Причём все.

Предположу второе возражение:

"Есть куча средств в Фильтры->Улучшения: Подавление шума, Удаление пятен, Удаление штрихов. Зачем изобретать велосипед?"

Ни один из указанных инструментов не дал удовлетворительного результата.

Пришло время показать, о каких изображениях идёт речь:

Зашумлённый скан книги.
Зашумлённый скан книги.

Видим сильно зашумлённый скан книги, на котором присутствуют два вида контуров: важные - контуры букв, и вредные - контуры шума. Имеем задачу - не трогать вообще контура букв и подавить штрихи шума. Задача включает два диаметрально противоположных компонента, которые зависят только от размера контуров (для больших контуров одна компонента, для мелких - другая).

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

Для чего вдруг понадобилось решение данной задачи?

Ежели применить "Порог" к данному изображению с автоматическим определением порогового значения (кнопка "Авто"), то получим следующий результат:

Автоматический порог исходного скана.
Автоматический порог исходного скана.

Видим кучу мелких точек шума, которые не просто портят результат, но и ухудшают читаемость системами OCR. Да, есть алгоритмы, удаляющие BW-шум, но в данной статье рассматривается GIMP. К тому же было упомянуто, что скан может содержать иллюстрации.

Понижение шумов.

Для понижения шумов будут использованы простейшие стандартные средства, не зависящие от версии GIMP, либо установленных плагинов.

Создается копия исходного слоя. К нему применяется фильтр "Гауссово размывание" с размерами, разделяющими контуры изображения на важные и вредные (в данном случае 3 и 3):

"Гауссово размывание" 3x3.
"Гауссово размывание" 3x3.

Накладывается данный слой на исходный в режиме "Разница":

Разница размытого и исходного слоя.
Разница размытого и исходного слоя.

На разнице светлыми становятся и светлые и тёмные контуры исходного изображения, тёмными остаются участки на которых нет контуров. Но нужны то не все контура, а только те, что больше заданного размера (т.е. важные). Поэтому к контурам применяется ещё раз "Гауссово размывание" с размерами, разделяющими контуры изображения на важные и вредные (в данном случае 3 и 3):

"Гауссово размывание" контуров 3x3.
"Гауссово размывание" контуров 3x3.

Применяется "Порог" к размытым контурам с автоматическим определением порогового значения (кнопка "Авто"). После порога применяется "Инвертировать яркость". Это даёт маску важных контуров:

Маска важных контуров.
Маска важных контуров.

В случае скана, содержащего только текст, можно выбелить всё, что не оказалось в маске важных контуров, просто наложив маску в режиме "Добавить" на исходный слой:

Наложение маски в режиме "Добавить".
Наложение маски в режиме "Добавить".

Для данного скана получилось вполне себе ничего. Но! Только для этого. засвеченного гама-коррекцией скана, не содержащего иллюстраций. Но! При нормальном сканировании без засветки цвет страниц вовсе не белый. И некоторые страницы содержат ещё более небелые иллюстрации. Поэтому выбеливать вне контуров не будем, а заменим области вне контуров на размытую версию этих областей. Для этого используем инструмент выделения "Выделить по цвету", кликаем на любом белом участке маски. Получаем выделение всех белых зон. На размытом слое, использованном в самом начале, в списке слоёв делаем правый клик и выбираем "Добавить маску слоя", в открывшемся диалоге выбираем "Выделение". После получения маски слоя снимаем выделение:

Размытое изображение с прозрачными областями контуров.
Размытое изображение с прозрачными областями контуров.

Так как слой имеет прозрачность в нужных местах, то просто накладываем его на исходный слой в режиме "Нормальный":

Слой с пониженными шумами.
Слой с пониженными шумами.

Для сравнения применим порог с авто определением порогового значения:

Порог обработанного слоя.
Порог обработанного слоя.

На этом как бы всё. Но! Разговор был так же за иллюстрации. Поэтому продемонстрирую данную методу на участке зашумлённого скана обложки:

Участок зашумлённого скана обложки.
Участок зашумлённого скана обложки.
"Гауссово размывание" 3x3.
"Гауссово размывание" 3x3.
Контура.
Контура.
"Гауссово размывание" контуров 3x3.
"Гауссово размывание" контуров 3x3.
Маска важных контуров
Маска важных контуров
Размытое вне маски.
Размытое вне маски.
Обложка с пониженными шумами.
Обложка с пониженными шумами.

Вот теперь всё.

Насколько доктринальна данная метода?

Ни на сколько. Можно применять не только "Гауссово размывание", а любое размывание из "Фильтры"->"Размытие". Так же нет ограничение на то, что использовать для замены зон вне зон контуров. Возможно также применение в сочетании с какими то плагинами. Но! Всё это уже за пределами данной статьи.

Теги:
Хабы:
+12
Комментарии12

Публикации

Ближайшие события