Как получить цветовую температуру от коррекции цвета

Я пытаюсь выяснить цветовую температуру фото, захваченной камерой.

final CameraCaptureSession.CaptureCallback previewSSession = new CameraCaptureSession.CaptureCallback() { @Override public void onCaptureStarted(@NonNull CameraCaptureSession session, @NonNull CaptureRequest request, long timestamp, long frameNumber) { super.onCaptureStarted(session, request, timestamp, frameNumber); } @Override public void onCaptureCompleted(@NonNull CameraCaptureSession session, @NonNull CaptureRequest request, TotalCaptureResult result) { super.onCaptureCompleted(session, request, result); RggbChannelVector rggbChannelVector = result.get(CaptureResult.COLOR_CORRECTION_GAINS); getColorTemperature(rggbChannelVector); startCamera(); } }; private void getColorTemperature(RggbChannelVector rggbChannelVector) { //rggbChannelVector.getRed() = 2.192929 //rggbChannelVector.getGreenEven() = 1.0 //rggbChannelVector.getGreenOdd() = 1.0 //rggbChannelVector.getBlue() = 1.832323 } 

Кажется, что у iOS есть доступный способ сделать эту температуруAndTintValues

При поиске чего-то подобного (на Java или любом другом языке, который я могу принять) почти все такие методы ожидают значение RGB с диапазоном [0, 255] .

Существует несколько методов преобразования XYZ в CCT (коррелированная цветовая температура), но даже для правильного значения XYZ мне нужны значения RGB с параметрами [0, 255]

Как вы можете видеть, значения из COLOR_CORRECTION_GAINS >1 т. COLOR_CORRECTION_GAINS Больше 255, что не является чем-то необычным, потому что его коэффициент усиления и iOS возвращает аналогичные значения (больше 1).

Solutions Collecting From Web of "Как получить цветовую температуру от коррекции цвета"

Поскольку вы упоминали о методе, предоставленном яблоком, для достижения того же.

Я начинаю с документации Apple по методу

Из документации Apple

Документация Apple относительно temperatureAndTintValues выглядит следующим образом

Преобразует значения коэффициента усиления RGB, специфичные для устройства, к независимым от устройства значениям температуры и оттенка.

Ссылка: Документация от Apple

Та же функциональность, которую мы можем реализовать в android, также следуя приведенным ниже методам.

Узнайте компоненты RGB в позиции

 int x = (int)event.getX(); int y = (int)event.getY(); int pixel = bitmap.getPixel(x,y); int redValue = Color.red(pixel); int blueValue = Color.blue(pixel); int greenValue = Color.green(pixel); 

Коррелированная цветовая температура (CCT), которая измеряется в градусах Кельвина (К) по шкале от 1000 до 10000.

Следующее изображение показывает связь между CCT и некоторыми цветами Введите описание изображения здесь


Вычисление цветовой температуры от значения RGB

Согласно SO Post Color Temperature можно легко вычислить, используя следующие формулы

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

 X=(−0.14282)(R)+(1.54924)(G)+(−0.95641)(B) Y=(−0.32466)(R)+(1.57837)(G)+(−0.73191)(B)=Illuminance Z=(−0.68202)(R)+(0.77073)(G)+(0.56332)(B) 

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

 x=X/(X+Y+Z) y=Y/(X+Y+Z) 

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

 CCT=449n3+3525n2+6823.3n+5520.33 where n=(x−0.3320)/(0.1858−y) 

Консолидированная формула (CCT от RGB)

 CCT=449n3+3525n2+6823.3n+5520.33 where n=((0.23881)R+(0.25499)G+(−0.58291)B)/((0.11109)R+(−0.85406)G+(0.52289)B) 

Android

Выполните одно и то же уравнение с помощью java.

Примечание: Справочный документ

Вычисление цветовой температуры и освещенности с использованием цифрового цветного датчика TAOS TCS3414CS


Подобные реализации на других платформах

PHP – сообщение SO

Python – SO Post

Заметка:

Проблема с преобразованием из RGB в цветовую температуру – это около 16 миллионов цветов RGB, но только очень маленькое подмножество этих цветов действительно соответствует цветовой температуре.

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

Почему Зеленый исключен? Читайте: Почему нет фиолетовых или зеленых звезд?


Многие из объяснений взяты с других сайтов,

Надеюсь, все подводит итог вашим потребностям!