Rawpy необработанное изображение

Я пытаюсь читать и показывать необработанные изображения в 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 ответ

Решение

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)
Другие вопросы по тегам