HSV () – model opisu przestrzeni barw zaproponowany w 1978 roku przez Alveya Raya Smitha. thumb|300px|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. ) 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.

Wymiary stożka opisuje składowa S – nasycenie koloru (ang. ) jako promień podstawy oraz składowa V – (ang. ) równoważna nazwie B – moc światła białego (ang. ) 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° lub 360°. Centrum barwy zielonej odpowiada kąt 120°. Centrum barwy niebieskiej odpowiada kąt 240°. 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) 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 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ż CMY, CMYK CIELab, CIEXYZ HSL RGB

Przypisy

Bibliografia

Linki zewnętrzne http://www.algorytm.org/index.php?option=com_content&task=view&id=129&Itemid=28

Kategoria:Przestrzenie barw