Skip to article
Görkem Yıldız, home
Available for October

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.

· 5 min readTürkçeRead in English

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:

Code
a' = a * cos(phi) - b * sin(phi)
b' = a * sin(phi) + b * cos(phi)
L' = L  // lightness degismez

Bu 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:

Code
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.

Code
STRESS farki = 0.0000000000

Literal 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:

Hue Hizalamasi: Rotasyon Oncesi vs Sonrasi sRGB ana renklerinin beklenen vs gercek hue acilari Rotasyon Oncesi R Y G B hue_max = 48.4° Rotasyon Sonrasi (phi = -28.2°) R Y G B hue_max = 20.2°

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

Terminal
npm install helmlab
Code
import { 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 ayni

Teknik Ozet

Rijit Rotasyon: Oncesi vs Sonrasi Metrik Rotasyon Oncesi Rotasyon Sonrasi COMBVD STRESS 23.2155 23.2155 Hue RMS hatasi 25.9° 16.1° En kotu hue hatasi 48.4° 20.2° Rotasyon acisi 0° -28.2° Dogruluk maliyeti SIFIR (STRESS farki = 0.0000000000)

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.

Terminal
npm install helmlab

Kaynak kod: GitHub | Paket: npm

Bu yazi, Helmlab serisi 16 blog yazisinin onuncusudur. Bir sonraki yazida: Renk paletiniz neden yanlis — tasarim sistemlerinde algisal duzgunluk sorunu.

Görkem Yıldız

Helmlab, a family of perceptual color spaces for UI design systems (arXiv:2602.23010)

I'm Görkem, a UI/UX designer and engineer based in Ankara, leading the design team at [PushBrands](https://pushbrands.app/en), a Saudi UGC marketplace. I've spent over eight years designing and building digital products, and lately the systems underneath them: Helmlab, a color space trained on 64,000 human color judgments that now ships in Color.js; open-source tools for icons, sound and the terminal; and, as Orbit Design, Figma plugins with more than 100,000 users.

Book a call

Talk about color, design systems or Helmlab.

Saturdays 19:00–21:00 Istanbul time, on Google Meet.

Book a call