Как рассчитать цветовую температуру источника света, освещающего изображение?

14

Как я могу рассчитать (эквивалент черного тела) цветовую температуру источника света, освещающего данное изображение? Ниже приведены скриншоты Adobe Lightroom, управляющие цветовой температурой и смещением гистограмм RGB. Учитывая RGB-компоненты изображения, как мне рассчитать его? Я должен ожидать единственное значение - температура, эквивалентная черному телу источника освещения, верно?

4600K 23810K

Лорд лох
источник
Я не уверен, что это имеет смысл. Цветовая температура является свойством света, как лампы, используемые для освещения сцены во время съемки изображения. Я не знаю, имеют ли сами изображения цветовую температуру. Мол, какова цветовая температура простого зеленого изображения? Зеленый даже не в спектре черного тела. Был ли он произведен темно-зеленым объектом, освещенным источником высокой температуры, или светло-зеленым объектом, освещенным источником низкой температуры?
эндолит
Последняя часть моего вопроса - «Я должен ожидать единственное значение - температура черного тела, эквивалентная температуре источника освещения, верно?» Я был неясен? Если это так, пожалуйста, не стесняйтесь предлагать изменения. Если у вас зеленая поверхность, она будет выглядеть по-разному в зависимости от источника освещения. Я пытаюсь увидеть зеленый цвет и вычислить (эквивалент черного тела) температуру источника освещения - как это делают Photoshop и Light Room ?. Даже простой зеленый объект не должен отображаться как - # 00FF00 (rgb hex).
Лорд Ло.
@endolith - я сделал некоторые изменения. Как вы думаете, теперь вопрос яснее?
Лорд Ло.
Хорошо, это имеет больше смысла, но я все еще не уверен, что это возможно. Разве два оттенка зеленого, подсвеченные разными источниками цветовой температуры, не могут создавать идентичные выходные изображения? Итак, как вы можете определить цветовую температуру источника света, не зная свойств объекта и камеры?
эндолит
@endolith - Может ли это? Я не уверена. Я думаю, что может. Камеры имеют встроенный контроль баланса белого. Но большинство изображений имеют несколько оттенков, и это, кажется, анализируется с помощью гистограмм - стохастически. Так что может быть доверительный интервал нахождения при определенной температуре. Кроме того, камеры и изображения также имеют некоторые метаданные. У меня такое чувство, что уравнение для этого - экспертный драйв - кто-то (эксперт) откалибровал его, чтобы дать число. Также как * C или * F - Кто решил, что температура замерзания воды должна быть установлена ​​на 0 * C или 32 * F?
Лорд Ло.

Ответы:

10

Эта статья (скачать в формате pdf) дает следующие формулы для расчета коррелированной цветовой температуры (CCT). Они прямо не говорят (или я пропустил это), но их пример приводит меня к выводу, что они принимают значения RGB в диапазоне 0-255.

1. Преобразуйте значения RGB в значения CIE tristimulus (XYZ) следующим образом:

Иксзнак равно(-0,14282)(р)+(1,54924)(грамм)+(-0,95641)(В)
Yзнак равно(-0,32466)(р)+(1,57837)(грамм)+(-0,73191)(В)знак равнояLLUмяNaNсе
Zзнак равно(-0,68202)(р)+(0,77073)(грамм)+(0,56332)(В)

2. Рассчитать нормализованные значения цветности:

Иксзнак равноИкс/(Икс+Y+Z)
Yзнак равноY/(Икс+Y+Z)

3. Вычислите значение CCT из:

ССTзнак равно449N3+3525N2+6823,3N+5520,33

где Nзнак равно(Икс-0,3320)/(0,1858-Y)

Который может быть объединен, чтобы сформировать следующее уравнение:

ССTзнак равно449N3+3525N2+6823,3N+5520,33
где Nзнак равно((0,23881)р+(0,25499)грамм+(-0,58291)В)/((0,11109)р+(-0,85406)грамм+(0,52289)В)

Я не уверен насчет применения этого к изображению, но если вам нужно только одно обобщающее число, чем вы могли бы использовать какое-то усреднение? Либо найдите приемлемое «среднее» значение RGB для изображения (например, центроид) и используйте его для расчета температуры, либо (гораздо более дорогостоящий вариант) рассчитайте температуру для каждого пикселя в изображении и возьмите среднее из этих результатов. ,

Кроме того, имейте в виду, что CCT является лишь приблизительной метрикой для большинства цветов, поскольку только одна кривая в цветовом пространстве фактически представляет цвет, который можно получить из реального излучателя черного тела. Таким образом, для всех других цветов рассчитанная цветовая температура является просто приближением температуры черного тела, которую оно представляет наиболее близко. Таким образом, для некоторых цветов (особенно зеленых) это может быть несколько бессмысленным значением, по крайней мере, в физическом смысле. Это хорошо видно на следующем рисунке (из статьи в Википедии о цветовой температуре ).

Черная линия на изображении представляет собой планковский локус цветов, которые фактически могут быть получены излучением блочного тела. Меньшие линии пересечения представляют изотермы приближения CCT поблизости.

Кроме того, поскольку ваш вопрос конкретно относится к Adobe Lightroom, я нашел это во время поиска:

Ползунки [в Adobe Lightroom] регулируют не температуру черного тела при освещении, а компенсацию, применяемую к изображению для компенсации температуры черного тела при освещении. Это идет наоборот.

Имейте в виду, что цветовая температура, которую вы видите на слайдере Lightroom, не будет такой же, как рассчитанная по приведенным выше формулам.

Сэм Малони
источник
Обратите внимание, что приведенное выше преобразование RGB-XYZ, по-видимому, относится к цветовому пространству, используемому определенным оборудованием. Это, безусловно, не правильно для sRGB, который, скорее всего, используется в случае OP. Обратитесь к правильным преобразованиям в стандарте sRGB
awdz9nld
Также обратите внимание, что компонент Y в CIE 1931 обозначает яркость, а не яркость
awdz9nld
0

Я рассчитал некоторые цвета в соответствии с вашими формулами, и, как я вижу, в некоторых случаях это работает, а в некоторых других - например, красный (255 0 0) и синий (0 0 255) - дает неправильный ответ:

  • белый (255 255 255): n = 0,4049, CCT = 8890,77 K -> кажется правильным
  • желтый (255 255 0): n = -0,6646, CCT = 2410,65 K -> кажется правильным
  • зеленый (0 255 0): n = -0,2986, CCT = 3785,42 K -> кажется правильным
  • голубой (0 255 255): n = 0,9992, CCT = 16168,7 K -> кажется правильным
  • пурпурный (255 0 255): n = -0,5428, CCT = 2783,54 K -> кажется правильным

тем не мение:

  • красный (255 0 0): n = 2,1497, CCT = 40938,6 K -> кажется неправильным

  • синий (0 0 255): n = -1.1148, CCT = 1672.45 K ->, похоже, неправильно

Тамас
источник