Локальная версия «Баланса белого» в GIMP для очистки фотографии документа - Фотопедия
4 голосов
/ 23 ноября 2016

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

На фото есть несколько проблем:

  • Текст немного размыт.
  • В целом шум даже в белых областях.
  • Фон выглядит не совсем белым, а немного желтоватым.
  • Самое важное: Некоторые области изображения, даже области, которые должны быть белыми, темнее других.

Я бы хотел убрать эту картину. Я нахожусь на Linux.

Фильтр «Цвета> Авто> Баланс белого» в GIMP дает многообещающие результаты. Тем не менее, он не выравнивает фон в разных областях изображения.

Но если я выберу только подобласть изображения, фильтр «Баланс белого» на самом деле лучше работает в этой области.

Так что я представляю, что постепенное применение «Баланса белого» в локальных областях изображения будет работать очень хорошо.

Я представляю, что фильтр "Баланс белого" реализован так:

  1. Сбор статистики цвета всей картинки.
  2. Создайте матрицу преобразования цветов и примените ее глобально.

Итак, что бы я хотел вместо этого:

  1. Собирать локальную статистику цвета для каждой области, например, 100 * 100 пикселей.
  2. Создание локальных матриц преобразования цветов.
  3. Построить непрерывную функцию матриц преобразования на пиксель.
  4. Применить локально на пиксель.

Знаете ли вы что-нибудь подобное, существующее в GIMP или в качестве независимого программного обеспечения, например, для командной строки Linux?

Ответы [ 4 ]

8 голосов
/ 24 ноября 2016

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

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

Альтернативным подходом может быть дублирование слоя (я сфотографировал рукой, затеняя половину карты, чтобы воспроизвести проблему):

Размыть, пока текст не исчезнет:

enter image description here

А затем вычтите полученный слой из исходного , выберите режим смешивания «Извлечение зерна», чтобы обратить вспять неравномерность освещения:

enter image description here

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

Также обратите внимание, что эта операция также исправляет баланс белого, поскольку инвертирует цветовые кривые.

В качестве последнего штриха я применил настройку «Кривые» для увеличения контраста.

enter image description here

Возможно, он не идеален, но я на самом деле удивлен тем, как он вышел.

1 голос
/ 29 августа 2018

... режим смешивания как «Экстракт зерна»

Режим «Деление» также создает приятные эффекты для документов (более контрастные)

1 голос
/ 23 ноября 2016

Вы, вероятно, добьетесь некоторого успеха, выполнив уровни в каналах, которые темнее (если изображение выглядит желтым, осветите синий канал и т. Д.). Вы можете сделать это глобально. Скорее всего, это будет в дополнение к (до) уровням в канале * value. В канале значений можно переместить входные черные и белые точки ближе друг к другу, а затем, возможно, увеличить гамму, чтобы осветлить бумагу, на которую влияет размытие из печати. ​​

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

I Не Рекомендуем Порог , если только вам не нужно обеспечить черно-белый режим, поскольку оттенки серого имеют эффект сглаживания.

Как только ваш фон станет белым (255 255 255 руб.) Далеко от текста, может потребоваться локальное удаление пятен.

0 голосов
/ 06 января 2017

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

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

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

Затем вы применяете медиану или «нижнюю медиану» с радиусом, превышающим средний символ. Это означает, что для каждого пикселя (и каждого цветового канала):

  • Соберите все пиксели поблизости, например, 100 = 10x10 пикселей.
  • Сортировка по яркости.
  • Используйте значение 50-го самого яркого цвета в качестве нового значения цвета для центрального пикселя. Или 10-е значение самого темного цвета для «нижней медианы».

Это дает вам оценку фона. Однако, это, вероятно, будет содержать «шаги» в цветах из-за того, как работают медианы. Может быть, есть что-то даже умнее этих медиан.

При желании используйте некоторое сглаживание (большой радиус), чтобы исключить эти шаги.

Теперь вычтите этот слой из исходного изображения.

При желании используйте «баланс белого» для результата (если вы работаете с GIMP).

Я не знаю, какой инструмент выбрать, если я хочу все это реализовать. До сих пор я использовал PHP, но я не уверен, что это лучшее решение вообще.

...