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

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

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

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

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

Source image with uneven lighting

-Edit-

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

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

Scan uncorrected Scan with corrected curve

Ответы [ 4 ]

18 голосов
/

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


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

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

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

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

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

Division steps

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

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

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

Attempt with a linear gradient

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

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

Using division

7 голосов
/

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

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

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

      Step 1.1: Extract drawing with Difference of Gaussians

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

      Step 1.2: Adjust levels

    • Применить немного Размытие по Гауссу :

      Step 1.3: Apply Gaussian blur

    • Используйте инструмент Threshold , чтобы получить маску, покрывающую весь рисунок, и используйте Select by Color , чтобы выбрать его:

      Step 1.4: Use the threshold tool to obtain mask

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

    Step 2: Heal selection to reconstruct blank paper

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

    Step 3: Divide by blank paper layer

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

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

    Step 4: Adjust levels

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

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

4 голосов
/

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

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

enter image description here

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

Black point

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

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

Object selected

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

  • Дублируйте изображение и масштабируйте до 400 × 400 пикселей
  • Используйте Выбор исцеления или Заполнение с учетом содержимого , чтобы исцелить объект (остается только фон)
  • Использовать размытие по Гауссу, 40 × 40 px
  • Уменьшите изображение до исходного размера и скопируйте его обратно как слой к исходному изображению

Background

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

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

Fixed image

1 голос
/

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

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

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

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

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

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