Bagaimana cara menghitung suhu warna sumber cahaya yang menerangi gambar?

14

Bagaimana saya bisa menghitung suhu warna (setara dengan benda hitam) dari sumber cahaya yang menerangi gambar yang diberikan? Di bawah ini adalah screenshot dari Adobe Lightroom memanipulasi suhu warna dan pergeseran dalam Histogram RGB. Mengingat komponen RGB dari gambar, bagaimana cara menghitungnya? Saya harus mengharapkan nilai tunggal - Suhu setara tubuh hitam dari sumber penerangan, bukan?

4600K 23810K

Tuan Loh.
sumber
Saya tidak yakin itu masuk akal. Temperatur warna adalah sifat cahaya, seperti lampu yang digunakan untuk menerangi pemandangan saat gambar diambil. Saya tidak tahu apakah gambar itu sendiri memiliki suhu warna. Seperti, berapa suhu warna gambar hijau polos? Hijau bahkan tidak ada dalam spektrum benda hitam. Apakah benda itu diproduksi oleh benda hijau gelap yang diterangi oleh sumber suhu tinggi, atau benda hijau terang diterangi oleh sumber suhu rendah?
endolit
Bagian terakhir dari pertanyaan saya - "Saya harus mengharapkan nilai tunggal - Temperatur setara tubuh hitam dari sumber penerangan, bukan?" Apakah saya tidak jelas? Jika demikian, jangan ragu untuk menyarankan suntingan. Jika Anda memiliki permukaan hijau, itu akan terlihat berbeda tergantung pada sumber iluminasi. Saya mencoba melihat warna hijau dan menghitung suhu (setara dengan benda hitam) dari sumber pencahayaan - Bagaimana cara Photoshop dan Light Room melakukannya ?. Bahkan objek hijau polos tidak akan muncul sebagai - # 00FF00 (rgb hex).
Tuan Loh.
@endolith - Saya membuat beberapa perubahan. Apakah Anda pikir pertanyaannya lebih jelas sekarang?
Tuan Loh.
Ok, itu lebih masuk akal, tapi saya masih tidak yakin itu mungkin. Tidak bisakah dua warna hijau menyala oleh sumber suhu warna yang berbeda menghasilkan gambar output yang identik? Jadi bagaimana Anda bisa mengetahui suhu warna iluminasi tanpa mengetahui sifat-sifat objek dan kamera?
Endolith
@endolith - Bisakah? Saya tidak yakin. Saya pikir itu mungkin. Kamera telah dibangun di kontrol White balance. Tetapi sebagian besar gambar memiliki banyak corak dan ini tampaknya dianalisis dengan histogram - secara stokastik. Jadi mungkin ada interval kepercayaan berada pada suhu tertentu. Selain itu, kamera dan gambar juga memiliki beberapa data meta. Saya merasa bahwa persamaan untuk ini adalah drive ahli - seseorang (ahli) dikalibrasi untuk memberikan nomor. Sama seperti * C atau * F - Siapa yang memutuskan bahwa titik beku air harus ditetapkan ke 0 * C atau 32 * F?
Tuan Loh.

Jawaban:

10

Makalah ini (unduhan pdf) memberikan rumus berikut untuk menghitung Temperatur Warna Korelasi (CCT). Mereka tidak secara eksplisit mengatakan (atau saya melewatkannya), tetapi contoh mereka membuat saya menyimpulkan bahwa mereka mengasumsikan nilai RGB dalam kisaran 0-255.

1. Konversikan nilai RGB ke nilai tristimulus CIE (XYZ) sebagai berikut:

X=(-0,14282)(R)+(1.54924)(G)+(-0,95641)(B)
Y=(-0,32466)(R)+(1.57837)(G)+(-0,73191)(B)=sayallkamumsayanSebuahnce
Z=(-0,68202)(R)+(0.77073)(G)+(0,56332)(B)

2. Hitung nilai kromatisitas yang dinormalisasi:

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

3. Hitung nilai CCT dari:

CCT=449n3+3525n2+6823.3n+5520.33

dimana n=(x-0,3320)/(0,1858-y)

Yang dapat digabungkan untuk membentuk persamaan berikut:

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)

I am not sure about applying this to an image, but if you just want a single, generalizing number, than you could perhaps use some sort of averaging? Either find an acceptable "average" RGB value for the image (eg. the centroid) and use that to calculate a temperature or (a much more computationally expensive option) calculate the temperature for each pixel in the image and take the average of those results.

Juga, ingatlah bahwa CCT hanya perkiraan metrik untuk sebagian besar warna, karena hanya kurva tunggal dalam ruang warna yang benar-benar mewakili warna yang dapat diperoleh dari radiator benda hitam dunia nyata. Jadi untuk semua warna lain, suhu warna yang dihitung hanyalah perkiraan suhu tubuh hitam yang paling dekat diwakilinya. Jadi, untuk beberapa warna (terutama hijau) sebenarnya bisa menjadi nilai yang agak tidak berarti, setidaknya dalam arti fisik. Ini diilustrasikan dengan baik pada gambar berikut (dari artikel wikipedia pada suhu warna ).

Garis hitam pada gambar melambangkan Planckian Locus of colors yang sebenarnya bisa dihasilkan oleh radiasi tubuh. Garis persilangan yang lebih kecil mewakili isoterm dari perkiraan CCT di dekatnya.

Juga, karena pertanyaan Anda secara spesifik merujuk pada Adobe Lightroom, saya menemukan ini ketika mencari di sekitar:

Penggeser [dalam Adobe Lightroom] tidak menyesuaikan suhu tubuh hitam cahaya, tetapi kompensasi yang diterapkan pada gambar untuk mengkompensasi suhu tubuh hitam cahaya. Ini sebaliknya.

Jadi ingatlah bahwa suhu warna yang Anda lihat pada slider Lightroom tidak akan sama dengan yang dihitung dari formula di atas.

Sam Maloney
sumber
Harap diperhatikan bahwa transformasi RGB-XYZ yang digunakan di atas tampaknya khusus untuk ruang warna yang digunakan oleh perangkat keras tertentu. Ini tentu saja tidak benar untuk sRGB, yang kemungkinan besar digunakan dalam kasus OP. Lihat transformasi yang benar dalam standar sRGB
awdz9nld
Perhatikan juga bahwa komponen Y dalam CIE 1931 menunjukkan pencahayaan, yang bertentangan dengan pencahayaan
awdz9nld
0

Saya telah menghitung beberapa warna sesuai dengan rumus Anda, dan seperti yang saya lihat dalam beberapa kasus itu berfungsi, sementara dalam beberapa kasus lain - seperti merah (255 0 0) dan biru (0 0 255) - itu memberikan jawaban yang salah:

  • putih (255 255 255): n = 0,4049, CCT = 8890,77 K -> tampaknya benar
  • kuning (255 255 0): n = -0.6646, CCT = 2410.65 K -> tampaknya benar
  • hijau (0 255 0): n = -0.2986, CCT = 3785.42 K -> tampaknya benar
  • cyan (0 255 255): n = 0,9902, CCT = 16168,7 K -> tampaknya benar
  • magenta (255 0 255): n = -0.5428, CCT = 2783.54 K -> tampaknya benar

namun:

  • merah (255 0 0): n = 2.1497, CCT = 40938.6 K -> tampaknya salah

  • biru (0 0 255): n = -1.1148, CCT = 1672.45 K -> tampaknya salah

Tamas
sumber