Mengapa L * = 0 tidak sesuai dengan hitam di ruang warna L * a * b *?

8

Menurut dua sumber yang saya temukan, dalam ruang warna CIELAB LAB nilai L * = 0 sesuai dengan hitam. Mengutip Wikipedia :

Tiga koordinat CIELAB mewakili kecerahan warna (L * = 0 menghasilkan hitam dan L * = 100 menunjukkan putih difus ...)

dan mengutip Phil Cruse :

Sumbu L * mewakili Lightness. Ini vertikal; dari 0, yang tidak memiliki cahaya (yaitu hitam absolut) ...

Namun, ini tampaknya tidak terjadi. Misalnya, menggunakan L * = 0, a * = 127, b * = 0 yang diperoleh dalam Mathematica:

FullForm[ColorConvert[LABColor[0, 1.27, 0], "RGB"]]

(*RGBColor[0.46364605275068677, 0., 0.052627307663056185]*)

... yang bukan hitam.

Tampaknya ini bukan bug Mathematica, seperti juga direproduksi (setidaknya beberapa ara, setidaknya) di Julia menggunakan Color.jlpaket:

convert(RGB, LAB(0,127,0))

# RGB{Float64}(0.46778684693714695,0.0,0.04112312700274846)

Demikian juga, memvisualisasikan kubus warna LAB Colorspace ada di Neat Examplesbagian halaman dokumentasi Mathematica LABColor. Ini dia, dengan L * = 0 permukaan menunjuk ke kamera:

masukkan deskripsi gambar di sini

Dengan pengecualian kubus di sudut, mayoritas kubus jelas tidak hitam. Jadi pertanyaan saya adalah:

  • Mengapa pengaturan L * = 0 tidak harus sesuai dengan hitam dalam ruang warna CIELAB? Bukankah L * seharusnya sesuai dengan persepsi luminositas? Jika demikian, lalu mengapa beberapa bagian dari subruang L * = 0 tampak jauh lebih terang daripada hitam?
DumpsterDoofus
sumber
Untuk apa nilainya, saya memeriksa dan ada tiga pertanyaan CIELAB di Mathematica.SE dan 45 tentang StackOverflow.
hardmath
2
Ketika Anda harus mendapatkan nilai RGB linier negatif, maka rumus tidak akan berfungsi dengan baik kecuali kemungkinan itu telah diperhitungkan secara eksplisit. Jika Anda memeriksa konversi ke XYZ, Anda melihat bahwa Y menjadi nol untuk L sama dengan nol dan Anda juga dapat melihat bahwa ketika RG dan B tidak semuanya nol, Anda hanya bisa mendapatkan Y sama dengan nol jika beberapa nilai RGB adalah negatif.
Hitung Iblis
@ CountIblis: Terima kasih, tapi saya masih sedikit bingung; apakah Anda mengatakan bahwa alasan non-kegelapan terjadi adalah karena warna LAB(0,127,0)tidak ada dalam ruang RGB, dan karenanya konversi menghasilkan kesalahan numerik yang menyebabkannya tampak non-hitam?
DumpsterDoofus
Ya, itulah intinya. Cara terbaik untuk membaca tentang konversi dari Lab ke XYZ, dan kemudian dari XYZ ke RGB linier, transformasi dari RGB linier ke sRGB hanyalah transformasi gamma yang dimodifikasi. Anda akan melihat bahwa dari Lab ke XYZ tidak ada masalah, Y akan menjadi nol ketika L adalah nol. Tetapi dari XYZ ketika Anda menetapkan Y = 0 sementara X dan atau Z bukan nol akan dinyalakan nilai negatif untuk satu atau lebih komponen RGB, jelas jika total brigness seharusnya nol ketika tidak semua komponen RGB nol, beberapa pasti negatif. Sebagian besar dijelaskan di sini en.wikipedia.org/wiki/Lab_color_space
Count Iblis
Mungkin lebih mudah untuk melihat:Manipulate[ ArrayPlot@ Table[LABColor[l, a, b], {a, -1, 1, .05}, {b, -1, 1, .05}], {{l, 0}, -1, 2} ]
Szabolcs

Jawaban:

5

Apa pun ruang warna "RGB" (sRGB?) Yang Anda masukkan sebagai tujuan di Mathematica, ia memiliki rentang warna terbatas yang dijelaskan oleh nilai R, G, dan B, biasanya serupa dengan apa yang dihasilkan oleh monitor, printer dapat mencetak dll dan jauh lebih kecil dari Lab. Karena hanya ada jumlah nilai terbatas (256 per saluran warna dalam 8-bit), ruang warna RGB mencoba untuk tidak membuang nilai pada warna yang tidak dapat direproduksi untuk menghindari efek samping yang buruk.

Konversi dari Lab ke RGB berakhir dengan warna gamut dan program kemudian mencoba memetakan warna Lab ke warna terdekat yang ada dalam ruang warna RGB target, biasanya dengan memangkas nilai apa pun <0 atau> 1 ke 0 dan 1.

Jika Anda cenderung bermain dengannya, ini adalah alat yang hebat di web, CIE Color Calculator oleh Bruce Lindbloom, yang dapat digunakan untuk konversi interaktif cepat

Mire
sumber
2

Jawabannya cukup sederhana: Warna yang Anda tentukan tidak valid (tidak ada). Ketahuilah bahwa mungkin dalam banyak model warna untuk menentukan "warna" yang tidak ada.

Khususnya Anda menentukan L * = 0 (tidak ada cahaya), tetapi Anda juga menentukan * = 1.27. Bagaimana bisa ada komponen warna jika tidak ada cahaya?

Jika Anda memeriksa tabel berikut (dari beberapa karya saya yang tidak dipublikasikan), Anda akan melihat bahwa untuk nilai di bawah L * = 3.14 saturasi maksimum adalah nol (seperti untuk L * = 100). Nilai Chroma maksimum untuk LCh (ab)

Tabel menunjukkan saturasi maksimum yang dapat dilihat untuk warna h(vertikal) pada intensitas yang berbeda L(horisontal). Maksimum dicetak dalam huruf tebal.

Sumber tabelnya adalah: [Int10] International Color Consortium. Spesifikasi ICC.1: 2010 (Versi profil 4.3.0.0), 12 2010. [Online: http://www.color.org/ spesifikasi / ICC1v43_2010-12.pdf; Stand 15. November 2011].

U. Windl
sumber