Как исправить неравномерное / градиентное освещение на холсте с белым фоном?

24

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

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

Ниже приведен пример изображения; оригинал около 3 см в ширину.

Как это можно отредактировать так, чтобы фон был равномерно белым?

Исходное изображение с неравномерным освещением

-Редактировать-

Результаты сканирования приведены ниже, без исправлений и исправлений. Хотя на первый взгляд это выглядит довольно многообещающе, к сожалению, это полное разрешение, которое вы видите здесь (шириной 600 пикселей); сканер может работать с разрешением 300 точек на дюйм, а ширина рисунка составляет около одного дюйма. Это немного меньше по сравнению с камерой 5000 пикселей.

Кроме того, нескорректированное сканирование намекает на то, что графит действительно отражает хорошую часть света, в отличие от метода кросс-поляризатора.

Сканирование неисправлено Сканирование с исправленной кривой

Саймон А. Эугстер
источник
Есть ли причина, по которой вы фотографируете его, а не сканируете?
Коул Джонсон
Да; холст может быть больше, чем A4. Но я собираюсь сравнить результаты вечером. Я немного подозрительно отношусь к отражению, которое может возникнуть на графите.
Саймон Эугстер
@ColeJohnson Scan добавлен выше.
Саймон Эугстер
Что-то еще, чтобы попробовать: возьмите стол с подсветкой или просто повесьте свой рисунок и осветите его ярким светом с задней стороны, и сфотографируйте его светом, проходящим через него (позволяя бумаге действовать как рассеиватель). Конечно, это не будет работать с непрозрачными красками, или если что-то нарисовано на обратной стороне, но для односторонних карандашей, цветных карандашей, чернил или акварельных изображений стоит попробовать.
Ильмари Каронен,

Ответы:

8

Метод, который я использовал сам, похож на ваш , но использует плагин Resynthesizer (для GIMP) или Content-Aware Fill (для Photoshop) для восстановления градиента:

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

    • Начните с использования фильтра обнаружения кромок, такого как « Разница Гаусса», в (копии) вашего сканирования, чтобы грубо извлечь рисунок:

      Шаг 1.1: Извлечение рисунка с различием гауссиан

    • Если результат не контрастен, используйте инструмент Уровни , чтобы затемнить его:

      Шаг 1.2: отрегулируйте уровни

    • Примените Gaussian Blur :

      Шаг 1.3: примени гауссово размытие

    • Используйте инструмент « Порог» , чтобы получить маску, покрывающую весь рисунок, и выберите «Выбрать по цвету», чтобы выбрать ее:

      Шаг 1.4: Используйте пороговый инструмент для получения маски

  2. Когда у вас есть выделение, охватывающее чертеж, сделайте копию исходного слоя сканирования и используйте Heal Selection / Content-Aware Fill, чтобы заполнить его. В идеале, ваш скопированный слой должен теперь выглядеть как изображение чистого листа бумаги:

    Шаг 2: исцелить выбор, чтобы восстановить чистый лист бумаги

  3. Установите режим отредактированного слоя на Разделить, как в вашем собственном ответе. Если вы хотите сохранить некоторые текстуры бумаги и / или затенения, вы можете немного уменьшить непрозрачность слоя и, возможно, применить небольшое размытие:

    Шаг 3: разделить на чистый слой бумаги

    (На изображении выше залитый слой Гаусса размыт на 10 пикселей, а непрозрачность установлена ​​на 95%.)

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

    Шаг 4: Настройте уровни

(Ps. Нажмите на изображения половинного размера, чтобы просмотреть их в полном размере.)

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

Илмари Каронен
источник
Это очень круто и на самом деле то, что я хотел сделать в первую очередь, но я не нашел Resynthesizer! Попробую это завтра с некоторыми рисунками. Любопытно, когда большие части рисунка покрыты. Ваш результат уже выглядит великолепно.
Саймон А. Эугстер
Кажется, я не могу зарегистрировать Heal Selection в Gimp, к сожалению ...
Саймон Эугстер
Это странно. Вы на Windows или Linux? Возможно, у вас нет Python или GIMP может не найти его по какой-то причине. В этом случае «Выбор исцеления» может не работать, но базовый « Фильтр»> «Карта»> «Повторный синтез» (который может делать все, что может выбрать «Выбор исцеления», даже если пользовательский интерфейс может быть не очень удобным), все равно должен быть доступен.
Илмари Каронен
Я на Linux и должен был скомпилировать плагин самостоятельно. Карта> Resynthesize действительно доступен. Как я могу проверить, находит ли Gimp требуемую версию Python? У меня установлены 2.7.5 и 3.3.2.
Саймон А. Эугстер
Я не совсем уверен; Я сам пользуюсь Ubuntu и просто позволяю APT позаботиться обо всем. Имеет ли Подменит Python-Fu появится для вас на всех? Если нет, вам может понадобиться установить GIMP-Python (если он доступен отдельно от самого GIMP) и / или перекомпилировать GIMP с включенной поддержкой Python. Опять же, я действительно просто догадываюсь здесь.
Илмари Каронен
18

Редактировать: я написал сценарий Gimp, который выполняет шаги ниже, и еще один для ответа Ilmaris . Оба скрипта доступны для скачивания на GitHub . Предлагаемый путь - вот этот .


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

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

    В Gimp: выберите rпрямоугольник сверху вниз, содержащий фон, вставьте Shift+Ctrl+Vего в новое изображение и разверните Filter > Map > Tileего до размера изображения, запустите гауссово размытие над ним, а затем скопируйте его обратно в изображение в качестве нового слоя.

  2. Установите режим слоя на Разделение .

  3. Уменьшите непрозрачность слоя по желанию, например, до 90%. Держать его на 100% обычно слишком ярко.

Шаги деления

По сути, это то, что фоновый слой определяет значение RGB w«white» для каждого пикселя. Затем режим слоя разделения растягивает значение на изображении с [0,w]до [0,255](см. Режимы слоя GIMP ) на пиксель.

(Плохо) Пример использования кривых и линейного градиента

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

Попытка с линейным градиентом

(Лучше) Пример использования деления

Деление дает гораздо лучшие результаты; освещение фиксируется равномерно, и нет сгоревших участков, особенно в левой части рисунка.

Используя разделение

Саймон А. Эугстер
источник
Или просто измените настройку уровней в фотошопе
SaturnsEye
3
Для еще лучших результатов, особенно в случае непостоянных / нелинейных теней в обоих направлениях, можно сделать снимок белого листа бумаги, применить небольшое размытие, чтобы избавиться от шума камеры, и использовать это как основа корректирующего слоя.
PlasmaHH
1
@SaturnsEye Попробуйте с входным изображением выше. Не работает;) Если бы бумага была ровной серой, например 10%, то да, это был бы самый простой способ.
Саймон Эугстер
@PlasmaHH Это потребует от меня использования штатива, чтобы получить постоянное расстояние, но это хорошее решение, особенно для сильно окрашенных фотографий. Обратная сторона бумаги обычно белая, поэтому ее можно использовать для корректирующего слоя. (Мы используем разные виды бумаги с разными оттенками серого / коричневого).
Саймон А. Эугстер
@ SimonA.Eugster: Если бы я делал это несколько раз, я бы использовал штатив и настраиваемую систему освещения для получения стабильных результатов в любом случае.
PlasmaHH
5

Этот ответ описывает самый надежный из известных мне подходов, основанный на ответе Ильмари Канорена . Это полуавтоматический; автоматическая маска не работает для твердых изображений, как показано ниже, потому что в некоторых частях рисунка нет краев.

Этот сценарий Gimp автоматизирует шаги 3 и 4 (обратите внимание, что требуется Resynthesizer), поэтому рабочий процесс прост: создайте выделение, запустите сценарий. Сценарию требуется 15 секунд для создания 15-мегапиксельной картинки на моем 3-летнем ноутбуке.

введите описание изображения здесь

Шаг 1 (необязательно): отрегулируйте кривые для глубокого черного

Черная точка

Шаг 2: Выберите объект

В Gimp Quick Mask Shift+Q- это быстрый способ. Используйте карандаш Nи нарисуйте объект белым, нажмите еще Shift+Qраз, чтобы преобразовать маску в выделение.

Объект выбран

Шаг 3: воссоздать фон

  • Дублируйте изображение и масштабируйте до 400 × 400 пикселей
  • Используйте Heal Selection или Content-based fill, чтобы исцелить объект (остается только фон)
  • Используйте Gaussian Blur, 40 × 40 px
  • Уменьшите изображение до исходного размера и скопируйте его обратно как слой к исходному изображению.

Задний план

Шаг 4: Режим деления

Установите режим слоя на Деление и немного уменьшите непрозрачность, если хотите.

Фиксированное изображение

Саймон А. Эугстер
источник
1

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

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

Вы можете указать штатив лицом вниз и положить рисунок на пол.

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

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

Рафаэль
источник
Я знаю об окружающем освещении. Скорее всего, это даст лучшие результаты в отношении градиента, хотя на этом расстоянии линза, скорее всего, уже начнет отбрасывать тень на бумагу. Поляризатор здесь действительно необходим, потому что поверхность бумаги не ровная, а графит удивительно хорошо отражает свет тем темнее, чем вы хотите область;) Кроме того, более сильное нажатие карандашом может создать углубления, при которых окружающий свет может снова отражаться. ,
Саймон А. Эугстер