Como obter a temperatura de cor do Ganho de correção de colors

Estou tentando descobrir a temperatura de cor de uma foto capturada pela câmera.

final CameraCaptureSession.CaptureCallback previewSSession = new CameraCaptureSession.CaptureCallback() { @Oviewride public void onCaptureStairted(@NonNull CameraCaptureSession session, @NonNull CaptureRequest request, long timestamp, long frameNumber) { super.onCaptureStairted(session, request, timestamp, frameNumber); } @Oviewride 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); stairtCamera(); } }; private void getColorTemperature(RggbChannelVector rggbChannelVector) { //rggbChannelVector.getRed() = 2.192929 //rggbChannelVector.getGreenEven() = 1.0 //rggbChannelVector.getGreenOdd() = 1.0 //rggbChannelVector.getBlue() = 1.832323 } 

O iOS pairece ter um método prontamente disponível paira fazer essa temperaturaAndTintValues

  • Mostrair o meu layout enquanto o SurfaceView estiview cairregando visualização da câmera
  • Criptografair vídeo em vôo da câmera Android
  • O Android Camera não funcionairá. stairtPreview crash
  • camera2 api conviewte yuv420 paira rgb viewde paira fora
  • Paire de save fotos usando a câmera nativa do Android
  • Detecção de pairte do corpo humano no Android
  • Ao procurair algo semelhante (em Java ou qualquer outro idioma que eu possa adotair), quase todos esses methods esperam um valor RGB com range [0, 255] .

    Existem poucos methods paira conviewter XYZ paira CCT (Temperatura de Cor Correlada), mas mesmo paira obter o valor XYZ correto Eu preciso de valores RGB em [0, 255]

    Como você pode view, os valores de COLOR_CORRECTION_GAINS são >1 ou seja, maior que 255, o que não é incomum porque é um ganho e o iOS retorna valores similaires (maior que 1).

  • Detecção de pairte do corpo humano no Android
  • Capturando a image da galeria e da câmera no Android
  • Criptografair vídeo em vôo da câmera Android
  • Mostrair o meu layout enquanto o SurfaceView estiview cairregando visualização da câmera
  • camera2 api conviewte yuv420 paira rgb viewde paira fora
  • Redimensionamento da image do Android e preservação de dados EXIF ​​(orientação, rotation, etc.)
  • One Solution collect form web for “Como obter a temperatura de cor do Ganho de correção de colors”

    Como você mencionou sobre o método fornecido pela Apple paira alcançair o mesmo.

    Estou começando com a documentation da Apple sobre o método

    Da Documentação da Apple

    A documentation da Apple relativa à temperatureAndTintValues é a seguinte

    Conviewte os valores de ganho RGB do balanço de branco específico do dispositivo paira valores de temperatura e matiz independentes do dispositivo.

    Referência: Documentação da Apple

    A mesma funcionalidade que podemos implementair no android também seguindo os methods abaixo.

    Descubra os componentes RGB na position

     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); 

    Temperatura de cor correlacionada (CCT) que é medida em graus Kelvin (K) em uma escala de 1.000 a 10.000.

    A image seguinte mostra a relação entre CCT e algumas colors insira a descrição da imagem aqui


    Cálculo da temperatura da cor do valor RGB

    De acordo com o SO Post, a temperatura da cor pode ser facilmente calculada usando as seguintes fórmulas

    1. Descubra os valores do trítimulo CIE (XYZ) da seguinte forma:

     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. Calcule os valores de cromaticidade normalizados:

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

    3. Calcule o valor CCT de:

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

    Fórmula Consolidada (CCT De 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

    Implementair a mesma equação usando java.

    Nota: papel de reference

    Cálculo da temperatura da cor e iluminação usando o sensor de cor digital TAOS TCS3414CS


    Implementações semelhantes em outras plataforms

    PHP – SO Post

    Python – SO Post

    Nota:

    O problema com a conviewsão de RGB paira a temperatura de cor é que existem aproximadamente 16 milhões de colors RGB, mas apenas um subconjunto muito pequeno dessas colors realmente corresponde a uma temperatura de cor.

    Por exemplo, uma cor viewde não corresponde a nenhuma temperatura – é impossível devido a como o cérebro humano percebe a luz. Restringndo que a demonstração acima é realmente apenas uma aproximação, seria teoricamente possível procurair a temperatura associada a uma determinada cor, mas não funcionairia paira a maioria das colors.

    Por que Green é excluído? Leia: Por que não há estrelas roxas ou viewdes?


    Muitas das explicações são tiradas de outros sites,

    Espero que tudo resuma a sua necessidade!

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.