Отрегулируйте экспозицию изображения RAW на основе значения EV

--data-urlencode отправит POST, а URL-адрес закодирует тело. Вы должны использовать -G или --get , чтобы отправить запрос GET & amp; добавьте данные, указанные в --data-urlencode в URL:

curl -G -v \
     -H 'Content-Type: application/json' \
     --data-urlencode "pretty=true" \
     --data-urlencode "q=+year:>1980 +title:star wars" \
     '127.0.0.1:9200/movies/movie/_search' 

2
задан QuantumHoneybees 20 January 2019 в 02:30
поделиться

1 ответ

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

Увеличение значения экспозиции (EV) на 1 соответствует удвоению экспозиции. Экспозиция - это линейная мера количества света, которое достигает каждого пикселя. Удвоение экспозиции удваивает количество света. Поскольку в фотографии обычно думают о долях текущей экспозиции, имеет смысл говорить об «увеличении EV на 1», а не о «умножении экспозиции на 2».

Таким образом, действительно, чтобы увеличить значение экспозиции на n , умножьте значения пикселей на 2 n .

Если входное изображение представляет собой файл JPEG или TIFF, скорее всего, оно находится в цветовом пространстве sRGB. Это нелинейное цветовое пространство, предназначенное для увеличения видимого диапазона файла 8-битного изображения. Прежде чем изменять экспозицию, необходимо сначала преобразовать sRGB в линейный RGB. Это может быть достигнуто приблизительно путем увеличения значения каждого пикселя до степени 2,2, Википедия имеет точную формулировку .


Проблемы в ОП вызваны неточным уровнем черного. raw.black_level_per_channel возвращает 528 для данного изображения (это одинаковое значение для каждого из каналов, хотя я полагаю, что это не обязательно имеет место для других моделей камер), а не 512. Кроме того, код записывает raw.raw_image_visible обратно в [113 ], что не правильно.

Следующий код дает правильные результаты:

import rawpy
import numpy as np
from PIL import Image

bit_depth = 12
exposure = 5

path = "/001_ev0.DNG"
raw = rawpy.imread(path)
black_level = raw.black_level_per_channel[0] # assume they're all the same

im = raw.raw_image
im = np.maximum(im, black_level) - black_level # changed order of computation
im *= 2**exposure
im = im + black_level
im = np.minimum(im, 2**12 - 1)
raw.raw_image[:,:] = im
im = raw.postprocess(use_camera_wb=True, no_auto_bright=True)
img = Image.fromarray(im, 'RGB')
img.show()
0
ответ дан Cris Luengo 20 January 2019 в 02:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: