У меня есть фотография карандашного рисунка на бумаге, сделанная со вспышкой горячего башмака на зеркальной фотокамере и двумя поляризационными фильтрами ( метод перекрестного поляризатора для фотографии на холсте).
Теперь проблема в том, что при приближении к рисунку освещение становится неравномерным, так как объектив отбрасывает тень на часть изображения. Это создает градиент на изображении, который является приблизительно, но не совсем линейным.
Ниже приведен пример изображения; оригинал имеет ширину около 3 см.
Как это можно отредактировать, чтобы фон был равномерно белым?
Отсканированные результаты ниже, неисправленные и исправленные. Хотя на первый взгляд это выглядит довольно многообещающе, к сожалению, это полное разрешение , которое вы видите здесь (ширина 600 пикселей); сканер может делать 300 точек на дюйм, а рисунок имеет ширину примерно один дюйм. Это немного меньше по сравнению с 5000 px от камеры.
Кроме того, нескорректированное сканирование намекает на то, что графит действительно отражает значительную часть света, в отличие от метода кросс-поляризатора.
Метод, который я использовал сам, похож на ваш , но использует плагин Resynthesizer (для GIMP) или Content-Aware Fill (для Photoshop) для восстановления градиента:
Создайте выделение, полностью покрывающее рисунок. Вы можете сделать это вручную или использовать высокочастотную фильтрацию для вычисления маски выделения следующим образом:
Начните с использования фильтра обнаружения краев, такого как Difference of Gaussians , на (копии) вашего скана, чтобы грубо извлечь рисунок:
Если результату не хватает контраста, используйте инструмент « Уровни » , чтобы затемнить его:
Примените размытие по Гауссу :
Используйте инструмент « Порог » , чтобы получить маску, покрывающую весь рисунок, и используйте «Выбор по цвету», чтобы выбрать его:
Когда у вас есть выделение, покрывающее рисунок, сделайте копию исходного отсканированного слоя и используйте « Исправить выделение» / « Заливка с учетом содержимого», чтобы заполнить его. В идеале ваш скопированный слой теперь должен выглядеть как изображение чистого листа бумаги:
Установите режим редактируемого слоя на «Разделить», как в вашем собственном ответе. Если вы хотите сохранить часть текстуры бумаги и/или тени, вы можете немного уменьшить непрозрачность слоя и, возможно, применить небольшое размытие:
(На картинке выше заполненный слой Gaussian размыт на 10 пикселей, а непрозрачность установлена на 95%.)
При желании после слияния слоев отрегулируйте уровни, чтобы установить точку черного (совет: используйте представление логарифмической гистограммы) и увеличьте контраст:
(Ps. Щелкните изображения половинного размера, чтобы просмотреть их в полном размере.)
Преимущество этого метода в том, что он может работать достаточно хорошо даже для довольно нелинейных градиентов затенения. Конечно, она не идеальна — если на бумаге есть, скажем, пятно неправильной формы, граница которого частично лежит под рисунком, заливка с учетом содержимого вряд ли правильно восстановит его. Тем не менее, как видно выше, это часто дает довольно приличные результаты.
Редактировать: я написал скрипт Gimp , который выполняет следующие шаги, и еще один для Ilmaris answer . Оба скрипта доступны для скачивания на GitHub . Предлагаемый путь - этот .
Я отвечаю на это прямо здесь, потому что я довольно долго искал решение и нашел простое и работающее. Перейдем сразу к результату:
Создайте фоновый слой, скопировав только вертикальную полосу фона и растянув ее до размера исходного изображения.
В Gimp: выберите r
прямоугольник сверху вниз, содержащий фон, вставьте Shift+Ctrl+V
в новое изображение и увеличьте Filter > Map > Tile
его до размера изображения, запустите над ним размытие по Гауссу, затем скопируйте его обратно на изображение в качестве нового слоя.
Установите режим слоя на Division .
Уменьшите непрозрачность слоя по желанию, например, до 90 %. Сохранение его на 100% обычно слишком яркое.
По сути, это означает, что фоновый слой определяет значение RGB w
«белого» для каждого пикселя. Затем режим разделения слоя растягивает значение изображения от [0,w]
до [0,255]
(см. Режимы слоя GIMP ) на пиксель.
Первые попытки всегда заключались в дублировании слоя, изменении яркости таким образом, чтобы самая темная часть внизу была освещена должным образом, и добавлении маски слоя с линейным градиентом, чтобы осветлить только более темные области. Чем сильнее градиент, тем хуже это выглядело.
Разделение дает гораздо лучшие результаты; освещение зафиксировано равномерно, а выгоревших участков, особенно в левой части рисунка, нет.
Этот ответ описывает самый быстрый надежный подход, который я знаю, на основе ответа Илмари Канорена . он полуавтоматический; автоматическая маска не работает для жестких изображений, таких как приведенное ниже, потому что в некоторых частях рисунка нет краев.
Этот скрипт Gimp автоматизирует шаги 3 и 4 (обратите внимание, что требуется Resynthesizer), поэтому рабочий процесс просто: создать выделение, запустить скрипт. Сценарию требуется 6 секунд, чтобы создать 15-мегапиксельное изображение на моем 3-летнем ноутбуке.
В Gimp Quick Mask Shift+Q
— это быстрый способ. Используйте карандаш N
и покрасьте объект в белый цвет, нажмите Shift+Q
еще раз, чтобы преобразовать маску в выделение.
Установите режим слоя на Разделение и немного уменьшите непрозрачность, если хотите.
Это форум фотографии, поэтому я буду использовать фотографический подход. Конечно, для идеального белого вам, вероятно, все еще нужны некоторые настройки постобработки.
Вместо вспышки вы можете попробовать использовать естественный свет. Избегайте прямых солнечных лучей, а также не стойте слишком близко к окну, но не ближе 2 метров от окна. Это делается для того, чтобы уменьшить разницу в освещении между самой близкой и самой дальней частью рисунка. (Но поскольку это маленькое изображение, расстояние может быть не так важно.)
Вы можете поставить штатив лицом вниз и положить рисунок на пол.
Или, если у вас нет штатива, вы можете расположить обложку книги или коробку с хлопьями, чтобы изображение располагалось вертикально на столе, и устойчиво поставить камеру на тот же стол. (Подложите под рисунок белый лист бумаги, чтобы не видеть фоновые изображения или текстуры.)
Упомянутая вами техника поляризатора применяется в том случае, если у вас есть рисунок за стеклом и когда у вас есть яркие объекты или отражения. Но если ваш источник света находится под косым углом, вам, вероятно, не нужно использовать фильтр.
Коул Тобин
Саймон А. Югстер
Саймон А. Югстер
Ильмари Каронен