Rijit Rotasyon: Bedava Bir Matematiksel Optimizasyon
ab düzleminde rotasyon STRESS'i değiştirmez ama hue hatasını yarıya indirir. φ=-28.2° ile bedava bir iyileştirme.
Optimizasyon calismalarinda nadiren gercek bir "bedava oglen yemegi" bulursunuz. Genellikle bir metrigi iyilestirmek icin baska bir metrikten odun verirsiniz. Ama bazen matematik size beklenmedik bir hediye sunar: sifir maliyetle anlamli bir kazanc.
Bu yazida Helmlab'in gelistirme surecinde kesfedilen boyle bir hediyeyi anlatiyoruz: ab duzleminde rijit rotasyon. Bu islem, renk farki dogrulugunu (COMBVD STRESS) birebir ayni tutarken hue acilarini dramatik olarak iyilestiriyor. Matematiksel ispati, pratik sonuclari ve Helmlab'a nasil entegre edildigini inceliyoruz.
Kesfin Hikayesi
Helmlab'in 72 parametreli pipeline'i, 64.000+ insan gozlemi uzerinde optimize edildikten sonra, sonuclarin hue acilari incelendi. sRGB ana renkleri (kirmizi, yesil, mavi, sari, cyan, magenta) Helmlab koordinatlarinda belirli hue acilarinda konumlaniyordu -- ama bu acilar sezgisel beklentilerden sapiyordu. Ornegin mavi, beklenen ~270 derece yerine farkli bir acida cikiyordu.
Ilk dusunce, hue acilarini iyilestirmek icin pipeline parametrelerini yeniden optimize etmekti. Ancak bu, STRESS'i bozma riski tasiyordu. Sonra matematiksel bir gozlem yapildi: ab duzleminde rijit rotasyon, Oklid mesafesini degistirmez. Peki Helmlab'in mesafe formulu icin de boyle mi?
Matematiksel Ispat: Neden COMBVD Degismiyor?
Rijit rotasyon, ab duzleminde tum noktalari ayni aci kadar dondurur. Eger iki rengin orijinal koordinatlari (L, a, b) ise, rotasyondan sonra:
a' = a * cos(phi) - b * sin(phi)
b' = a * sin(phi) + b * cos(phi)
L' = L // lightness degismezBu donusumun kritik ozelligi: da^2 + db^2 = da'^2 + db'^2. Yani iki renk arasindaki a ve b farklarinin kareler toplami rotasyondan etkilenmez. Bu, lineer cebirde iyi bilinen bir gercektir: rotasyon matrisleri ortogonaldir ve Oklid normunu korur.
Helmlab'in Mesafe Formulu
CIE Lab'in basit Oklid mesafesinden farkli olarak, Helmlab CIEDE2000 benzeri cift-bagimli agirliklar kullanir:
DE = ((dL/SL)^2 + wC * ((da/SC)^2 + (db/SC)^2))^(p/2)Burada SL ve SC, cift-bagimli agirliklardir:
- SL = 1 + sl * (L_avg - 0.5)^2 -- ortalama lightness'a bagimli
- SC = 1 + sc * C_avg -- ortalama chroma buyuklugune bagimli
Kritik soru su: SL ve SC rotasyondan etkilenir mi?
- SL: Yalnizca L_avg'a bagimli. L rotasyondan degismiyor. SL degismez.
- SC: C_avg = sqrt(a_avg^2 + b_avg^2) ile hesaplanir. Rotasyon buyuklugu korudugu icin C_avg da degismez. SC degismez.
Sonuc: Mesafe formulundeki her bileseni -- dL, da^2+db^2, SL, SC ve wC -- rotasyondan etkilenmez. Dolayisiyla COMBVD STRESS da birebir ayni kalir.
Ampirik Dogrulama
Teoriyi dogrulamak icin, COMBVD veri setindeki tum 3.813 renk cifti uzerinde STRESS hesaplamasi yapildi: rotasyon oncesi ve sonrasi.
STRESS farki = 0.0000000000Literal olarak sifir. Bu, yalnizca bir yaklasim degil; matematiksel bir zorunluluktur. Rotasyon bir izometridir ve izometri mesafeyi korur.
Minimax Optimizasyon: phi = -28.2 derece
Rotasyonun STRESS'i degistirmedigini bildigimize gore, soru su olur: hangi aci en iyi hue hizalamasini verir?
sRGB ana renklerinin (kirmizi, sari, yesil, cyan, mavi, magenta) beklenen hue acilarini referans alarak, her rotasyon acisi icin "en kotu hue hatasi" (hue_max) hesaplandi. Minimax optimizasyonu, en kotu durumu minimize eden aciyi bulur:
Sonuclar:
- Rotasyon oncesi: hue_rms = 25.9 derece, hue_max = 48.4 derece
- Rotasyon sonrasi (phi = -28.2 derece): hue_rms = 16.1 derece, hue_max = 20.2 derece
- COMBVD STRESS farki: 0.0000000000
En kotu hue hatasi neredeyse yarim yarildi. Ortalama hue hatasi %38 azaldi. Ve bunun maliyeti: kesinlikle sifir.
"Bedava Oglen Yemegi" Neden Mumkun?
Normal sartlarda, hue acilarini iyilestirmek pipeline parametrelerini degistirmeyi gerektirir -- bu da STRESS'i bozar. Helmlab'in onceki versiyonlarinda (v17) hue iyilestirmesi icin lambda_hue agirlik kullanildi ve STRESS ciddi bicimde artti (23.2'den 31.35'e).
Rijit rotasyon farkli bir mekanizmadir: pipeline parametrelerini degistirmez, sadece cikis koordinatlarini dondurur. Bu dondurmede:
- Lightness (L) degismez
- Chroma buyuklugu (C = sqrt(a^2+b^2)) degismez
- Iki renk arasindaki da^2+db^2 degismez
- SL agirligini (L'ye bagimli) degistirmez
- SC agirligini (C buyuklugune bagimli) degistirmez
Dolayisiyla mesafe formulunun hicbir bileseni etkilenmez. Degisen tek sey hue acisidir -- ve bu tam olarak iyilestirmek istedigimiz seydir.
Dikkat: Hue-Bagimli Metrikler
Bu invarians, mesafe formulunun hue acisina dogrudan bagimli olmamasi kosuluna baglidir. Eger mesafe formulune hue-dependent terimler eklenseydi (ornegin CIEDE2000'in SH terimi gibi), rotasyon STRESS'i degistirirdi. Helmlab'in mevcut mesafe formulu yalnizca L, C buyuklugu ve da^2+db^2'ye bagimlidir -- bu, rotasyon invariansini garanti eder.
Diger Renk Uzaylariyla Karsilastirma
Rijit rotasyonun "belesce" elde edildigi Helmlab ile diger renk uzaylarinin hue hizalama yaklasimlari farklidir:
- CIE Lab: Hue acilari sabit, iyilestirme mekanizmasi yok. Mavi bolgesi bilinen bicimde bozuk.
- Oklab: Matris parametreleri hue hizalamasini da icerecek sekilde optimize edilmis, ama bu STRESS ile trade-off yaratir.
- CIEDE2000: Mesafe formulunde hue-dependent SH terimi var, ama koordinat sistemi CIE Lab'a bagimli kaldigi icin hue hizalamasi yapilamaz.
- Helmlab: Pipeline optimizasyonu (STRESS) ve hue hizalamasi (rotasyon) birbirinden bagimsizdir. Sifir trade-off.
Kod Ornegi: Rotasyonun Etkisi
npm install helmlabimport { Helmlab } from 'helmlab';
const hl = new Helmlab();
// Helmlab varsayilan olarak -28.2 derece rotasyon uygular.
// Hue acilari sezgisel konumlara hizalidir.
// sRGB ana renklerinin hue acilari
const colors = {
'Kirmizi': '#ff0000',
'Sari': '#ffff00',
'Yesil': '#00ff00',
'Cyan': '#00ffff',
'Mavi': '#0000ff',
'Magenta': '#ff00ff',
};
for (const [name, hex] of Object.entries(colors)) {
const info = hl.info(hex);
console.log(`${name}: H = ${info.H.toFixed(1)} derece`);
}
// Renk farki rotasyondan etkilenmez:
const d = hl.deltaE('#e74c3c', '#3498db');
// Bu deger, rotasyon olmadan da BIREBIR aynidir.
// Izometri: mesafe korunur, aci degisir.
// Palet uretimi de ayni kalir:
const scale = hl.semanticScale('#3B82F6');
// Hue acilari daha sezgisel, paletler birebir ayniTeknik Ozet
Sonuc
Rijit rotasyon, matematiksel optimizasyonun nadir "bedava oglen yemegi" orneklerinden biridir. ab duzleminde -28.2 derecelik bir dondurue, renk farki dogrulugunu kesinlikle degistirmeden hue acilarini dramatik olarak iyilestirir.
Bu mumkundur cunku Helmlab'in mesafe formulu yalnizca L, C buyuklugu ve da^2+db^2'ye bagimlidir -- hue acisina degil. Rotasyon bu buyuklukleri korur (izometri), dolayisiyla mesafe formulu "rotasyonu farketmez."
Sonuc olarak Helmlab, STRESS 23.2 dogrulugunu korurken, hue acilarini sezgisel konumlara hizalar. En kotu hue hatasi 48.4 dereceden 20.2 dereceye duser -- tamamen bedavaya.
npm install helmlabKaynak kod: GitHub | Paket: npm
Bu yazi, Helmlab serisi 16 blog yazisinin onuncusudur. Bir sonraki yazida: Renk paletiniz neden yanlis — tasarim sistemlerinde algisal duzgunluk sorunu.