Убираем шум с однотонных участков изображений

Изображение 1

При работе над сайтом HerlufBidstrup.com, посвященному творчеству датского художника-карикатуриста Херлуфа Бидструпа и о котором я рассказывал в предыдущей статье, я столкнулся с проблемой при оцифровке иллюстраций. Из-за некачественной печати на черных однородных областях присутствовало много шума. Этот шум при векторизации воспринимался программой как значимые детали и также становился частью векторного изображения.

Шум на однородных черных областях

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

Первое что нужно сделать - повысить контрастность изображения. Это поможет алгоритму правильно определять области на следующем шаге. Если контрастность изображения и так хорошая этот шаг можно пропустить.

Повышаем контрастность изображения

Далее нужно выделить все однотонные области. Для этого можно воспользоваться инструментом “Волшебная палочка”. Этот инструмент выделяет смежные области по схожести цвета. Порог чувствительности нужно подстраивать под каждое конкретное изображение, чтобы инструмент не выделял лишнего, но и не пропускал то что нужно выделить. В результате все однотонные области на изображении должны быть обведены пунктиром. После этого нужно создать новый слой такого же цвета, как и области с которыми мы работаем. В данном случае это черный цвет.

Выделенные объекты

На этом этапе Вы увидите сколько осталось невыделенных участков из-за того самого шума. Это хорошо заметно при увеличении изображения. Чтобы избавиться от них нужно увеличить выделение на 1 пиксель. Что это даст? В основном шум состоит из мелких точек 1-2 пикселя. Если увеличить выделение, то невыделенные области, образовавшиеся из-за этих точек, будут поглощены выделением. Таким образом мы от них легко избавимся.

Увеличиваем выделение на 1 пиксель

В результате этой операции шум пропал, но выделение увеличилось не только в местах скопления шума, но и по краям. Чтобы вернуть границы выделенных областей назад нужно провести обратную операцию - уменьшить выделение. Можно уменьшить выделение также на 1 пиксель. Но дело в том, что при операции последовательного увеличения и уменьшения выделения, контуры могут немного измениться. И мы уже не получим точно такой же контур, который был до этого. Поэтому уменьшить выделение лучше не на 1 пиксель, а на 2. Такой прием позволит оставить реальные контуры объектов без изменений.

Уменьшаем выделение на 1 пиксель

После этой операции нужно добавить маску к нашему черному слою выбрав источником выделение.

Применяем маску слоя

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

Готовое изображение без шума

Сравните изображение до обработки и после неё. Как говорится результат на лицо. Далее полученное “чистое” изображение можно легко перевести в вектор для дальнейшего использования.

До и после