Необработанные изображения DNG импортированы как 16-битные, но неожиданный результат plt.show()

Попытка обработать необработанные изображения DNG в Python с rawpy заканчивается странными результатами.

import rawpy
import imageio
from matplotlib import pyplot as plt

path = '/home/stefan/AIJ/RAW.DNG'
with rawpy.imread(path) as raw:
    rgb = raw.postprocess()
plt.imshow(rgb)
plt.show()

В результате получается массив изображений rgb с 8-битными значениями, а моя камера генерирует 14-битные необработанные изображения.

Визуализация rgb массив дает ожидаемый результат:

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

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

Я использовал следующие параметры в функции postprocess:

rgb = raw.postprocess(output_bps=16,demosaic_algorithm=None,output_color = rawpy.ColorSpace.Adobe)

Теперь rgb массив содержит 16-битные значения, но визуализирует результаты в следующем:

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

Может кто-нибудь сказать мне, как я мог получить визуализацию, похожую на первый результат, но обрабатывая 16-битные значения?

Сначала я думал, что это связано с тем, что моя камера выдает 14-битные изображения, а не 16-битные, но изменяет параметр output_bps в 14 дает еще худшие результаты визуализации.

Заранее спасибо!

По запросу я бы добавил сюда необработанную картинку с PENTAX K-5, но она имеет размер 18 МБ, а форум имеет ограничение 2 МБ (может быть, это еще один способ передать вам файл?).

1 ответ

Решение

Я не думаю, что проблема связана с тем, как вы читаете изображение, как imshow не отображает 16-битные изображения RGB. Так что, если вы заинтересованы в визуальной проверке результатов чтения в 16-битном изображении, я бы предложил либо осмотреть полосы по отдельности, с

plt.imshow(rgb[:, :, 0])

и так далее для каждой группы; или преобразование RGB в 8-битный и отображение, с

rgb8 = (rgb / 256).astype('uint8')
plt.imshow(rgb8)
Другие вопросы по тегам