Temat: Kolorowanie i przedstawianie zespolonej funkcji falowej w przestrzeni RGB


Na podstawie: Folley i in.; Richardson

1 Model przestrzeni kolorów RGB

Model barw RGB (Red, Green, Blue) jest najczęściej stosowanym standardem przestrzeni barw. Jest to przestrzeń zwarta i taka, że punkt (rgb)=(000) odpowiada w niej czerni, a punkt (111) bieli. Na przekątnej (000)-(111) sześcianu RGB leżą odcienie szarości. Innym wierzchołkom sześcianu odpowiadaja barwy podstawowe: czerwona (010), zielona (100) oraz niebieska (001). Pozostałe barwy wierzchołkowe to żółta (110) oraz magenta (011). Pośrednie wartości natężeń rgb dają w wyniku mieszankę barw, a więc barwę złożoną.
rgb//cubergb.gif
Sześcian kolorów RGB i wartości parametrów r, g, b w jego wierzchołkach
Standard RGB stosowany jest w urządzeniach wyświetlających takich, jak monitory oraz lampy kineskopowe TV. Obok modelu RGB stosuje się często model barw HSB (Hue, Saturation, Brightnes). Inne standardy, takie jak CMYK (Cyan, Magenta, Yellow) stosowane są w drukarstwie .
rgb//rgbmod0.gif
Sześcian kolorów RGB i wartości parametrów r, g, b w jego wierzchołkach
rgb//rgb.gif
Sześcian kolorów RGB
Dalej pokażemy, jak odwzorować w przestrzeń RGB funkcję określoną na zespolonej płaszczyźnie C (lub R2) tak by można było śledzić jej wartości oraz fazy. Metoda ta nadaje się np. do przedstawienia rozpraszania kwantowej paczki falowej na dwuwymiarowym potencjale (patrz Richardson).

1.1 Rzutowanie z R2 na przestrzeń RGB

W celu przedstawienia liczby zespolonej (x + i y) lub pola wektorowego z R2 zastosujemy pewne odwzorowanie C w przestrzeń [0,1]3. Jedną z wielu możliwości jest odwzorowanie stereograficzne płaszczyzny na sferę jednostkową S2, polegające na tym, że promienie przechodzą przez biegun północny (0,0,1) sfery oraz punkty (x, y, 0) na płaszczyżnie C. Punkty z wnętrza koła jednostkowego odwzorowywane są na półkulę południową, punkt z=0 na biegun południowy, a punkty leżące poza okręgiem jednostkowym są odwzorowane na półkulę północną. Wszystkim punktom w nieskończoności odpowiada punkt bieguna północnego (0,0,1). Okrąg jednostkowy przechodzi w tym odwzorowaniu w równik sfery. Sytuację przedstawia schematycznie rysunek.
rgb//rtos2.gif
Rzutowanie R2 (C) na S2
Opisane odwzorowanie jest postaci (patrz również rysunek)
(x′, y′, z′) = 2x, 2y, x2 + y2 − 1

x2 + y2 + 1
.
(1)
Następny krok polega na zanurzeniu sfery jednostkowej w przestrzeń kolorów. W tym celu zmniejszymy promień sfery do 1/2 i umieścimy jej środek w punkcie (r,g,b) = (1/2, 1/2, 1/2). Oś południe-północ sfery utożsamimy z kierunkiem przekątnej sześcianu RGB (000)−(111), a więc z szarym kierunkiem czerń-biel w przestrzeni barw. W ten sposób biegun południowy, bliski punktowi (0,0,0) w RGB, jest prawie czerny - brak amplitudy, a biegun północny prawie biały - maksymalna amplituda. Aby określić jednoznacznie orientację azymutalną zażądamy by kierunek osi y przebiegał przez maksimum natężenia czerwieni, a więc przez punkt (010) w przestrzeni RGB. Opisane odwzorowanie dobrze oddaje sytuację dla punktów z sąsiedztwa okręgu jednostkowego. Początek układu oraz punkty w nieskończoności nie są dostatecznie różne. Aby poprawić sytuację, można zamienić sferę parą stożków o wierzchołkach w punktach (0,0,0) i (1,1,1), sklejonych na równiku sfery. W ten sposób nie zepsujemy za bardzo obszaru równikowego i jednocześnie "dodamy więcej punktów" w obszarze biegunów sfery, a więc łatwiej będzie rozróżnić punkty w okolicy początku układu i w nieskończoności (rysunek).
rgb//cones.gif
Dwa stożki zamiast sfery S2
Odwzorowanie to ma postać
(x′, y′, z′)=

2x, 2y, sign(z)(x2+y2−1)√3(x2 + y2 + 1 − 2


x2 + y2
)

x2+y2+1
(2)
Dzieląc przez 2 i obracając tak by osie stożków pokryły się z kierunkiem diagonali sześcianu kolorów oraz przesuwając do środka sześcianu kolorów otrzymamy ostatecznie
r= 1

2
+sign(x2+y2−1)( 1

2



x2+y2

x2+y2+1
) + 2 x

√6 (1+x2+y2)
(3)

g= 1

2
+sign(x2+y2−1)( 1

2



x2+y2

x2+y2+1
) − x

√6 (1+x2+y2)
+ y

√6 (1+x2+y2)
(4)

b= 1

2
+sign(x2+y2−1)( 1

2



x2+y2

x2+y2+1
) − x

√6 (1+x2+y2)
y

√6 (1+x2+y2)
(5)
Przykład tego typu odwzorowania pokazuje rysunek. Przedstawiona funkcja f(x,y) została tylko pomalowana, tzn. (x,y) → (r,g,b) z użyciem algorytmu Richardsona bez specjalnych powodów.
rgb//sample.gif
Pokolorowana algorytmem Richardsona funkcja
Program w JavaTM , który wyznacza kolory podany jest poniżej.
\import java.awt.Color;
    
    ...
    
    private Color toRGB(float x, float y){
      // transform (x,y,z) position to color space rgb
      float xy, sq, iq, eta, q1, q2, q3, r, g, b;
      final float half = 0.5f;
  Color color;
      xy = x*x+y*y;
      sq = (float)Math.sqrt(xy);
      iq = 1f/(xy+1f);
      eta = xy-1<=0?-1f:1f;
      q1 = half+eta*(half-sq*iq);
      q2 = iq/(float)Math.sqrt(6);
      q3 = iq/(float)Math.sqrt(2);
      r = q1 + 2*x*q2;
      g = q1 - x*q2 + y*q3;
      b = q1 - x*q2 - y*q3;
      color = new Color(r, g, b);
      return color;
    }