13 Aşamalı Dönüşüm: Helmlab Pipeline Anatomisi
Helmlab XYZ'den Lab'a 13 aşamada nasıl ulaşır? Her aşamanın ne yaptığını, neden gerektiğini ve 72 parametreyi inceliyoruz.
Cogu renk uzayi tek bir matris carpimiyla isini bitirir. Oklab: bir 3x3 matris, kup kok, bir 3x3 matris daha — toplam 18 parametre. CIE Lab: bir kup kok fonksiyonu — sifir serbest parametre. Helmlab ise 13 asamali bir pipeline kullanir, toplam 72 optimize edilmis parametre. Bu "fazla karmasik" gibi gorunebilir. Ama bu 13 asama, insan gorsel sisteminin yaklasik 150 milyon yillik evrimsel karmasikligina yanit veriyor. Her asamanin bir nedeni var. Bu yazida o nedenleri inceliyoruz.
Neden Pipeline? Tek Bir Matris Yetmiyor mu?
Insan renk algisi dogrusal degil. Bir matris carpimi dogrusal donusumleri ifade eder: eksenleri dondurur, olcekler, kaydirabilir. Ama algi daha fazlasini yapar:
- Guc sikistrima — Retina, isik siddetine logaritmik yakin bir cevap verir. Iki kat fiziksel isik iki kat parlak gorunmez.
- Ton bagimli duzeltmeler — Gozumuz her tonu esit hassasiyetle algilamaz. Mavi-yesil gecisindeki tonlarda daha duyarliyiz, kirmizi-turuncu gecisinde daha az.
- Parlaklik-doygunluk etkilesimi — Doygun renkler, ayni luminanstaki grilerden daha parlak gorunur (Helmholtz-Kohlrausch etkisi, Post 6'da inceledik).
- Karanlik bolge ozel davranisi — Cok koyu renkler icin algisal farklar farkli olceklenir.
- Krominans-parliklik baglantisi — Cok acik ve cok koyu renklerde chroma algisi degisir.
Tek bir matris bu davranislarin hicbirini yakalayamaz. Iki matris ve bir guc fonksiyonu (Oklab'in yaklasimi) birkacini yakalayabilir. Ama tamamini modellemek icin, her biri belirli bir algisal fenomeni hedefleyen bir asamalar dizisi gerekir. Helmlab'in pipeline'i bu dizinin kendisidir.
13 Asama: Pipeline'in Tam Haritasi
Asagidaki akis semasindan sonra her asamayi ayrintili olarak acikliyoruz.
Asama 1: XYZ → M1 (9 parametre)
Giris noktasi CIE XYZ koordinatlaridir — fiziksel isik olcumlerinin standart temsili. M1, 3x3'luk bir matris carpimi ile XYZ'yi "kon benzeri" cevaplara donusturur. Neden dogrudan LMS (kon cevabi) kullanmiyoruz? Cunku klasik LMS matrisleri (Hunt-Pointer-Estevez, Bradford) insan deneylerinden degil, fizyolojik olcumlerden turemidir. M1'in her elemani, algisal mesafe verisi uzerinde optimize edilerek algisal dogru kon cevaplarina ulasilir.
Asama 2: Guc Sikistrima (3 parametre)
Her kanal bagimsiz olarak x → x^gamma donusumune tabi tutulur. Gamalar: [0.395, 0.421, 0.434]. Bunlar kup kokun (0.333) yakininda ama kanaldan kanala farkli — cunku her kon tipi farkli bir sikistrima profiline sahip. Bu bagimsiz gamalar v19'un kritik bir tasarim karari: paylasimli gamma (v18'de denendi) 4 serbestlik derecesini kaybettirir ve performansi dusurir.
Asama 3: M2 → Lab (9 parametre)
Ikinci 3x3 matris, sikistrilmis kon cevaplarini karsit renk kanallarinda (opponent channels) ayirir: bir parlaklik ekseni (L) ve iki krominans ekseni (a, b). Bu, retinadan sonra gorsel korteksin yaptigi ayrimanin analitik karsiligidir. Oklab burada durur — Helmlab daha yeni basliyor.
Asama 4: Ton Duzeltmesi (8 parametre)
Ilk uc asama dogru bir ton dairesi garantilemez. Ornegin, fiziksel olarak esit aralikli dalga boylarini esit algisal adimlarla temsil etmeyebilir. Bu asama, 4 harmonikli bir Fourier serisi ile ab duzlemindeki ton acisini duzeltir:
// Ton acisi duzeltmesi: h' = h + f(h)
// f(h) = sum(a_k * cos(k*h) + b_k * sin(k*h)), k=1..4
// 8 parametre: 4 kosinus, 4 sinus katsayisiSonuc: algisal olarak esit ton adimlarinin gercekten esit acilarla temsil edildigi bir ton dairesi.
Asama 5: Helmholtz-Kohlrausch Gomme (3 parametre)
Doygun renkler, ayni luminanstaki grilerden daha parlak gorunur (Post 6'da detayli inceledik). Bu asama, chroma'ya bagimli bir L kaymasi ekler: L += w * C^p * hueFactor(h). Parametre sayisi 3: agirlik, us ve ton modulasyonu. Ton modulasyonu, 4. asamanin Fourier serisinden yararlanir. Bu, Oklab ve CIE Lab'in en buyuk kor noktalarini kapatir.
Asama 6: Tona Bagimli Parlaklik (8 parametre)
H-K etkisinin otesinde, bazi tonlar algisal olarak daha "agir" veya "hafif" gorunur. Sari, diger tonlardan daha parlak algilanir — sadece luminans degeri dusuk olsa bile. Bu asama, 4 harmonikli bir Fourier serisi ile L'ye ton-bagimli ince ayar yapar.
Asama 7: Kubik L Duzeltmesi (2 parametre)
Guc fonksiyonlari orta aralikta iyi calisir ama uclarda — cok koyu ve cok acik — algisal farklar farkli olceklenir. Kubik bir polinom, L ekseninin bu uc bolgelerini duzeltir. Sadece 2 parametreyle buyuk bir iyilesme saglar.
Asama 8: Karanlik L Sikistrima (4 parametre)
Karanlik bolge ozel bir dikkat gerektirir: gozumuz karanliktaki kucuk luminans farklarina daha duyarlidir (Weber-Fechner yasasi). Bu asama, ton-bagimli bir sikistrima ile koyu renklerin L degerlerini ince ayarlar. Ornegin, koyu mavi ve koyu yesil farkli sikistrma profillerine sahiptir.
Asama 9: Chroma Olcekleme (8 parametre)
Her tonun chroma araligi farklidir. Kirmizi genis bir chroma araligina sahipken, sari daha dar bir aralikta doygunlasir. 4 harmonikli Fourier serisi, chroma'yi tona gore olcekleyerek bu farklari dengeler.
Asama 10: Chroma Guc Fonksiyonu (1 parametre)
Yuksek doygunluktaki renkler icin algisal chroma, fiziksel chroma'dan daha yavas buyur. Tek bir us parametresiyle C → C^p donusumu bu sikistrmayi modeller.
Asama 11: L-Bagimli Chroma Olcekleme (2 parametre)
Chroma algisi aydinliga bagli olarak degisir. Cok acik ve cok koyu renkler icin chroma algilama kapasitemiz azalir. Iki parametre, L'nin chroma'ya etkisini olcekler.
Asama 12: Notr Duzeltme — NC (LUT)
Burasi v19'un en kritik yeniligi. 11 asamadan gecen bir gri (R=G=B), teorik olarak a=b=0 olmali. Ancak 3 bagimsiz gamma ve 2 bagimsiz matrisin birlesimi, grilerin kucuk ama sifir olmayan a, b degerlerine dusmesine yol acar. NC, 256 noktalik bir LUT (lookup table) ile bu sapmayi hesaplar ve cikarir:
// NC: pipeline sonunda gri duzeltmesi
// a_err(L), b_err(L): gri tonlarin sapmalari (PCHIP interpolasyon)
// Duzeltme: a -= a_err(L), b -= b_err(L)
// Sonuc: tum griler icin a=b=0 GARANTisiNeden pipeline sonunda? NC'yi daha erken (ornegin M2'den hemen sonra) uygulamak felaket yaratir. Erken duzeltme ton acisini kaydirarak, sonraki asamalarin (H-K, chroma olcekleme, dark_L) tamamen farkli bir yoldan ilerlemesine neden olur. Uc renkler icin L degeri 0.94'ten 7.27'ye sapabilir. Pipeline sonunda uygulamak, onceki asamalarin orijinal tonu gormesini saglar ve sadece son cikisi duzeltir.
Asama 13: Rijit Rotasyon — -28.2 derece
Son asama, ab duzleminde sabit aciyla bir rotasyondur. Bu asamanin sifir serbest parametresi vardir — aci optimizasyon sonrasi minimax kriteri ile belirlenmistir. Neden STRESS'i degistirmiyor? Cunku mesafe formulundeki da^2 + db^2 terimi rotasyon altinda degismezdir (izometri). Bu bedava bir iyilesmedir:
- Ton RMS hatasi: 25.9° → 16.1°
- Ton maksimum hatasi: 48.4° → 20.2°
- COMBVD (STRESS): degismiyor — kelimesi kelimesine 0.0000000000 fark
Terslenebilirlik: Her Asama Geri Alinabilir
Bir renk uzayinin pratik kullanimi icin Lab → XYZ yonu (ters donusum) en az ileri yon kadar onemlidir. "Bu L, a, b degerlerini hangi fiziksel isik uretir?" sorusunu yanitsiz birakamazsiniz. Helmlab'in 13 asamasinin her biri tam olarak terslenebilirdir:
- Matris asamalari (1, 3) — Matrisin tersini carpmak yeterli:
M1_inv * x. - Guc fonksiyonlari (2, 10) — Ters us:
x^(1/gamma). - Toplama/cikarma asamalari (5, 6, 7, 8, 11, 12) — Ileri yonde eklenen degeri cikar.
- Ton duzeltmesi (4) — Burada Newton iterasyonu gerekir.
h' = h + f(h)denkleminde, verilen h' icin h'yi bulmak icin:h_{n+1} = h_n - (h_n + f(h_n) - h') / (1 + f'(h_n)). Tipik olarak 3-5 iterasyonda makine hassasiyetine yaklasir. - Chroma olcekleme (9) — Ton-bagimli carpan bilindiginde basit bolme.
- Rijit rotasyon (13) — +28.2° ile geri dondur.
Round-trip hatasi (ileri + geri donusum) 1e-6 mertebesindedir — makine hassasiyetine yakin. Bu, Helmlab koordinatlarinin her zaman tekil bir fiziksel renge karsilik geldigini garanti eder.
72 Parametre: Cok Mu Fazla?
72 parametre ilk bakista korkutucu gorunebilir. Ama bu sayiyi baglamina oturtmak gerekir:
Onemli olan salt parametre sayisi degil, parametre basina deger ve asiri uyum riskidir. Uc noktayi inceleyelim:
Parametre basina deger
Helmlab 72 parametreyle STRESS'i 30.3'ten 23.22'ye dusurur — 7.1 puanlik iyilesme. Oklab 18 parametreyle 30.3'ten ~27.5'e dusurur — 2.8 puanlik iyilesme. Parametre basina STRESS iyilesmesi: Helmlab'da 0.099/param, Oklab'da 0.156/param. Oklab parametre basina daha verimli — ama mutlak performans Helmlab'da cok daha iyi. CIEDE2000'in 5 "yama" parametresi ise Lab'a eklenerek 30.3'ten 29.18'e duser — 0.22/param.
Analitik form: dogal duzenleyici
72 parametre bir sinir agi olsaydi asiri uyum ciddi bir risk olurdu. Ama Helmlab'in her parametresi belirli bir matematiksel fonksiyona baglidir: bir matris elemani, bir Fourier katsayisi, bir us degeri. Bu analitik form, parametre uzayini sinirlar. Rastgele egrilere uyum saglayamaz — sadece fiziksel olarak anlamli donusumleri ifade edebilir. Deney verimiz 3813 renk cifti (64.000+ gozlem) icerdiginden, parametre/veri orani 1:53'tur. Buna karsilik tipik bir sinir agi icin bu oran 1:10 bile buyuk sayilir.
Capraz dogrulama
Helmlab %80/%20 train/validation bolunmesiyle egitilir (seed=42). Validation gap yalnizca +1.11 STRESS puanidir — bu, modelin yeni verilere iyi genelleme yaptigini gosterir. Asiri uyumda bu fark cok daha buyuk olurdu.
Mesafe Formulunu: Minkowski + SL/SC
Renk uzayi yalnizca koordinatlari hesaplamaz — iki renk arasindaki algisal farki (deltaE) de olcmelidir. Helmlab'in mesafe formulu, basit Oklid mesafesinin otesinde duzeltmeler icerir:
// Helmlab mesafe formulu
// Giris: iki rengin Lab koordinatlari
const dL = L2 - L1;
const da = a2 - a1;
const db = b2 - b1;
// Cift-bagimli agirliklar (SL, SC)
const L_avg = (L1 + L2) / 2;
const C_avg = (C1 + C2) / 2;
const SL = 1 + sl * (L_avg - 0.5) ** 2; // koyu/acik ciftler
const SC = 1 + sc * C_avg; // kromatik ciftler
// Minkowski mesafe (p ~= 2)
const DE = ((dL / SL) ** 2
+ wC * ((da / SC) ** 2 + (db / SC) ** 2))
** (p / 2);
// Son duzeltmeler
const result = (DE / (1 + c * DE)) ** q;Bu formulun kilit bilesenleri:
- SL: L ortalamasina bagimli agirlik. Koyu ve acik ciftlerde L farkinin algisal onemi degisir. SL bu farki yakalar.
- SC: Chroma ortalamasina bagimli agirlik. Yuksek chroma'li ciftlerde krominans farklari daha az fark edilir. SC bunu modeller.
- wC: Krominans/parlaklik dengesi. Insan gorusu L farklarina mi, renk farklarina mi daha duyarli? wC bu orani ayarlar.
- p: Minkowski usteli. p=2 Oklid mesafesi, p<2 kucuk farklari buyutur. Optimize deger ~1.8.
- q: Son us duzeltmesi (1.1). Buyuk farklarin algisal "doymasini" modeller.
SL ve SC parametreleri, CIEDE2000'in benzer mekanizmalarindan esinlenmistir — ama Helmlab'da bunlar Helmlab Lab koordinatlari uzerinde calisir, CIE Lab degil. Bu ince fark onemlidir: Helmlab'in Lab'i zaten H-K etkisini, ton duzeltmesini ve diger 10 asamayi icerdiginden, mesafe formulu daha temiz bir temel uzerinde calisir.
Pratikte: Ileri ve Geri Donusum
import { Helmlab } from 'helmlab';
const hl = new Helmlab();
// Ileri donusum: sRGB -> Helmlab Lab
const lab = hl.fromSRGB(0.2, 0.6, 0.9);
console.log('L:', lab.L.toFixed(4));
console.log('a:', lab.a.toFixed(4));
console.log('b:', lab.b.toFixed(4));
// Geri donusum: Helmlab Lab -> sRGB
const rgb = hl.toSRGB(lab.L, lab.a, lab.b);
console.log('R:', rgb.r.toFixed(6));
console.log('G:', rgb.g.toFixed(6));
console.log('B:', rgb.b.toFixed(6));
// -> (0.200000, 0.600000, 0.900000)
// Round-trip hatasi: ~1e-6
// Mesafe olcumu
const dE = hl.deltaE(
{ r: 0.2, g: 0.6, b: 0.9 },
{ r: 0.3, g: 0.5, b: 0.8 }
);
console.log('deltaE:', dE.toFixed(4));13 asama, kullanici icin tamamen saydamdir. fromSRGB ve toSRGB cagrilari 13 asamanin hepsini sirayla uygular (veya tersini). API basitligi, iclerin karmasikligini gizler — oldugu gibi olmali.
Sonuc: Karmasiklik Neden Onemli
Helmlab'in 13 asamasi keyfi karmasiklik degil. Her asama, insan gorsel sisteminin belirli bir ozelligini modeller:
- Asamalar 1-3: Temel fizik → algi donusumu (matris + guc)
- Asamalar 4-8: Parlaklik ve ton ince ayarlari (Fourier + polinom)
- Asamalar 9-11: Chroma kalibrasyonu (Fourier + guc + L-baglantisi)
- Asamalar 12-13: Yapisal garantiler (NC + rotasyon)
Her asama cikarilabilir ve cikarildiginda ne kaybedilecegi olculebilir. Hicbiri dekoratif degil. 72 parametre, 64.000+ insan gozlemi uzerinde optimize edilmis, capraz dogrulanmis, ve analitik form sayesinde asiri uyuma karsi korunmustur.
Sonuc: STRESS 23.22 — CIEDE2000'in 29.18'inin ve Oklab'in ~27.5'inin cok altinda. Pipeline karmasikligi, algisal dogruluk icin odenen bedeldir. Ve 10.3 KB'lik npm paketiyle:
npm install helmlabKaynak kod: GitHub | Paket: npm
Bu yazi, Helmlab serisi 16 blog yazisinin yedincisidir. Bir sonraki yazida: Gamut Mapping — sRGB sinirlarinin disindaki renkleri nasil guvende tutarsaniz.