Rawpy необработанное изображение - PullRequest
0 голосов
/ 10 декабря 2018

Я пытаюсь читать и демозить необработанные изображения в Python с помощью модуля RawPy.К сожалению, модуль не предоставляет простой метод демозаики, но представляет собой полную функцию постобработки, которая не подходит для моего случая, так как я хочу сохранить изображения с плавающей запятой вместо использования 8-битного uint.Я также не хочу применять гамму или любую другую постобработку, поэтому я в конечном итоге демозирую их вручную.Когда я использую raw_pattern метод объекта RawPy, в который я загрузил изображение dng, я получаю следующее:

In[23] : raw_image.raw_pattern
Out[23]: array([[0, 1],
                [3, 2]], dtype=uint8)

Но документация Adobe DNG гласит:

Digital Negative Specification
September 2012
CFAPlaneColor
...
Value  
See below
Default 
0, 1, 2 (red, green, blue)

ИЯ запутался, откуда это 3 ?Если есть и другой способ демонстрации необработанного изображения, он также подходит, поскольку мне легко заменить эту часть проекта.

Спасибо, заранее!

1 Ответ

0 голосов
/ 10 декабря 2018

rawpy (или, точнее, лежащее в основе программное обеспечение libraw / dcraw) обрабатывает два зеленых канала как отдельные каналы.Взгляните на https://en.wikipedia.org/wiki/Bayer_filter, где вы можете видеть, что матрица фильтра Байера состоит из 4-пиксельных квадратов, которые имеют один синий пиксель, один красный пиксель и два зеленых пикселя.Причиной наличия двух зеленых пикселей является то, что человеческое зрение намного более чувствительно к зеленому и будет легче воспринимать шум.Добавляя больше зеленых пикселей, можно снизить уровень шума в зеленом канале во время демозаики / постобработки.

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

with rawpy.imread(path) as raw:
    rgb = raw.postprocess(gamma=(1,1), no_auto_bright=True, output_bps=16)
imageio.imsave('linear.tiff', rgb)
...