Przejdź do zawartości

HSV (grafika)

Z Wikipedii, wolnej encyklopedii

HSV (ang. Hue Saturation Value) – model opisu przestrzeni barw zaproponowany w 1978 roku przez Alveya Raya Smitha[1].

Stożek przestrzeni barw HSV.

Model HSV nawiązuje do sposobu, w jakim widzi ludzki narząd wzroku, gdzie wszystkie barwy postrzegane są jako światło pochodzące z oświetlenia. Według tego modelu wszelkie barwy wywodzą się ze światła białego, gdzie część widma zostaje wchłonięta, a część odbita od oświetlanych przedmiotów.

Symbole w nazwie modelu to pierwsze litery nazw angielskich dla składowych opisu barwy: H – odcień światła (ang. Hue) wyrażona kątem na kole barw przyjmująca wartości od 0° do 360°. Model jest rozpatrywany jako stożek, którego podstawą jest koło barw[2].

Wymiary stożka opisuje składowa S – nasycenie koloru (ang. Saturation) jako promień podstawy oraz składowa V – (ang. Value) równoważna nazwie B – moc światła białego (ang. Brightness) jako wysokość stożka.

Przyporządkowanie częstotliwości fal świetlnych na kole barw w modelu HSV jest takie samo jak w modelach HSL, tzn. centrum barwy czerwonej odpowiada kąt 0°[2] lub 360°[2]. Centrum barwy zielonej odpowiada kąt 120°[2]. Centrum barwy niebieskiej odpowiada kąt 240°[2]. Pozostałe barwy pośrednie dla składowej Hue są odpowiednio rozłożone pomiędzy kolorami czerwonym, zielonym i niebieskim.

Konwersja modelu RGB na HSV (Delphi/Object Pascal)

[edytuj | edytuj kod]

Aby zamienić składowe RGB na HSV, można skorzystać z poniższej funkcji konwertującej. Przy czym należy pamiętać, aby do listy używanych modułów włączyć moduł matematyczny (w Delphi do listy uses należy dodać moduł Math). Rekordy TRGB i THSV mają następującą budowę:

  TRGB = record
    red : byte;
    green : byte;
    blue : byte;
  end;
  THSV = record
    hue : word;         // przyjmuje wartości od 0 do 359
    saturation : byte;  // przyjmuje wartości od 0 do 100
    value : byte;       // przyjmuje wartości od 0 do 100
  end;

Jako parametr funkcji podajemy wypełniony rekord typu TRGB, funkcja zwraca wypełniony rekord typu THSV.

function KonwertujRGBnaHSV(RGB : TRGB) : THSV;
var
  temp : integer;
begin
  temp := MIN(MIN(RGB.red, RGB.green), RGB.blue);

  // Obliczanie składowej Value
  Result.value := MAX(MAX(RGB.red, RGB.green), RGB.blue);

  // Zmienna TEMP jest teraz najmniejszą składową, a zmienna Result.value największą składową

  // Obliczanie składowej HUE
  if temp = Result.value then
    Result.hue := 0
  else begin
    if RGB.red=Result.value then
      Result.hue := 0 + ((RGB.green-RGB.blue)*60 div (Result.value-temp));
    if RGB.green=Result.value then
      Result.hue := 120 + ((RGB.blue-RGB.red)*60 div (Result.value-temp));
    if RGB.blue=Result.value then
      Result.hue := 240 + ((RGB.red-RGB.green)*60 div (Result.value-temp));
  end;

  if Result.hue<0 then
    Result.hue := Result.hue+360;

  // Obliczanie składowej SATURATION
  if (Result.value=0) then
    Result.saturation := 0
  else
    Result.saturation := (Result.value-temp)*100 div Result.value;

  // Obliczanie składowej VALUE
  Result.value := (100*Result.value) div 255;
end;

Paleta kolorów

[edytuj | edytuj kod]
H = 180° H = 0°
L \ S 1 3/4 1/2 1/4 0 1/4 1/2 3/4 1
1                  
7/8                  
3/4                  
5/8                  
1/2                  
3/8                  
1/4                  
1/8                  
0                  
H = 210° H = 30°
L \ S 1 3/4 1/2 1/4 0 1/4 1/2 3/4 1
1                  
7/8                  
3/4                  
5/8                  
1/2                  
3/8                  
1/4                  
1/8                  
0                  
H = 240° H = 60°
L \ S 1 3/4 1/2 1/4 0 1/4 1/2 3/4 1
1                  
7/8                  
3/4                  
5/8                  
1/2                  
3/8                  
1/4                  
1/8                  
0                  
H = 270° H = 90°
L \ S 1 3/4 1/2 1/4 0 1/4 1/2 3/4 1
1                  
7/8                  
3/4                  
5/8                  
1/2                  
3/8                  
1/4                  
1/8                  
0                  
H = 300° H = 120°
L \ S 1 3/4 1/2 1/4 0 1/4 1/2 3/4 1
1                  
7/8                  
3/4                  
5/8                  
1/2                  
3/8                  
1/4                  
1/8                  
0                  
H = 330° H = 150°
L \ S 1 3/4 1/2 1/4 0 1/4 1/2 3/4 1
1                  
7/8                  
3/4                  
5/8                  
1/2                  
3/8                  
1/4                  
1/8                  
0                  

Zobacz też

[edytuj | edytuj kod]

Przypisy

[edytuj | edytuj kod]
  1. Alvy Ray Smith. Color gamut transform pairs. „Computer Graphics”. 12 (3), s. 12–19, sierpień 1978. DOI: 10.1145/965139.807361. 
  2. a b c d e Jankowski 1990 ↓, s. 229.

Bibliografia

[edytuj | edytuj kod]

Linki zewnętrzne

[edytuj | edytuj kod]
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy