Wpisany przez Dariusz Rorat,
16 sierpnia 2010 18:19
Algorytm zmiany barwy / nasycenia / jasności opiera się na zastosowaniu przestrzeni barw HSV. Jest to algorytm o podobnym działaniu do funkcji programu Adobe Photoshop – dopasowywanie barwy /nasycenia.
Model HSV jest modelem przestrzeni barw który nawiązuje do sposobu w jakim widzi ludzkie oko. Według tego modelu wszystkie barwy wywodzą się ze światła białego, gdzie część widma jest odbita a pozostała pochłonięta przez oświetlane przedmioty.
Symbole w nazwie tego modelu to:
H – barwa (ang. Hue), wyrażona jest kątem w kole barw od 0 do 360 stopni
S – nasycenie koloru (ang. Saturation), promień podstawy stożka HSV
V – (ang. Value) równoważna mocy światła białego (ang. Brightness) i jest to wysokość stożka
Zmiana barwy / nasycenia / jasności obrazu sprowadza się do konwersji modelu RGB na HSV, odpowiednich operacjach na modelu HSV i ponowna konwersja z HSV na RGB. W tym celu najpierw odczytujemy wartość koloru dla danego piksela obrazu i wydzielamy składowe R, G, B. Następnie dokonujemy konwersji RGB na HSV. Barwy podstawowe RGB przyjmują wartości od 0 do 255 dla każdej z barw. Po dokonaniu konwersji z RGB na HSV można wykonywać żądane operacje na tych wartościach.
Zmiana wartości barwy H następuje przez dodanie odpowiedniej wartości h w przedziale od -180 do +180 (umownie). W ten sposób oryginalny kolor może być zamieniony na inny dowolny kolor w kole barw (np. czerwony na zielony, czerwony na żółty itd.). W ten sposób można uzyskać efekt tzw. „fałszywych kolorów”. Przykład został przedstawiony poniżej.
Zmiana wartości nasycenia S następuje przez dodanie odpowiednio ustawionej wartości s mieszczącej się w umownym przedziale od -100 do 100. W ten sposób można uzyskać zmianę nasycenia barw. Ustawienie wartości S na 0 daje obraz w skali szarości. Zwiększenie oryginalnej wartości nasycenia S zwiększa nasycenie barw w obrazie (upiększanie obrazu). Przykład został przedstawiony poniżej.
Jasność obrazu można regulować dodając do składowej V inną wartość w przedziale od -255 do 255 (przedział może być węższy). Przykład został przedstawiony poniżej.
Należy podkreślić że jeżeli w przypadku dodania do oryginalnej wartości S lub V innej żądanej wartości następuje przekroczenie zakresu tej składowej, należy temu zapobiec ograniczając wartości do minimalnej lub maksymalnej. W przypadku wartości H mamy do czynienia z funkcją koła tak więc w przypadku przekroczenia wartości z góry należy wynik podzielić modulo 360, a w przypadku otrzymania wartości ujemnej dodać do niej 360. Zakresy zmian h, s, v ustala się podczas tworzenia oprogramowania. Operacje przedstawione powyżej matematycznie można zapisać następująco:
Model HSV jest modelem przestrzeni barw który nawiązuje do sposobu w jakim widzi ludzkie oko. Według tego modelu wszystkie barwy wywodzą się ze światła białego, gdzie część widma jest odbita a pozostała pochłonięta przez oświetlane przedmioty.
Symbole w nazwie tego modelu to:
H – barwa (ang. Hue), wyrażona jest kątem w kole barw od 0 do 360 stopni
S – nasycenie koloru (ang. Saturation), promień podstawy stożka HSV
V – (ang. Value) równoważna mocy światła białego (ang. Brightness) i jest to wysokość stożka
Zmiana barwy / nasycenia / jasności obrazu sprowadza się do konwersji modelu RGB na HSV, odpowiednich operacjach na modelu HSV i ponowna konwersja z HSV na RGB. W tym celu najpierw odczytujemy wartość koloru dla danego piksela obrazu i wydzielamy składowe R, G, B. Następnie dokonujemy konwersji RGB na HSV. Barwy podstawowe RGB przyjmują wartości od 0 do 255 dla każdej z barw. Po dokonaniu konwersji z RGB na HSV można wykonywać żądane operacje na tych wartościach.
Zmiana wartości barwy H następuje przez dodanie odpowiedniej wartości h w przedziale od -180 do +180 (umownie). W ten sposób oryginalny kolor może być zamieniony na inny dowolny kolor w kole barw (np. czerwony na zielony, czerwony na żółty itd.). W ten sposób można uzyskać efekt tzw. „fałszywych kolorów”. Przykład został przedstawiony poniżej.
Zmiana wartości nasycenia S następuje przez dodanie odpowiednio ustawionej wartości s mieszczącej się w umownym przedziale od -100 do 100. W ten sposób można uzyskać zmianę nasycenia barw. Ustawienie wartości S na 0 daje obraz w skali szarości. Zwiększenie oryginalnej wartości nasycenia S zwiększa nasycenie barw w obrazie (upiększanie obrazu). Przykład został przedstawiony poniżej.
Jasność obrazu można regulować dodając do składowej V inną wartość w przedziale od -255 do 255 (przedział może być węższy). Przykład został przedstawiony poniżej.
Należy podkreślić że jeżeli w przypadku dodania do oryginalnej wartości S lub V innej żądanej wartości następuje przekroczenie zakresu tej składowej, należy temu zapobiec ograniczając wartości do minimalnej lub maksymalnej. W przypadku wartości H mamy do czynienia z funkcją koła tak więc w przypadku przekroczenia wartości z góry należy wynik podzielić modulo 360, a w przypadku otrzymania wartości ujemnej dodać do niej 360. Zakresy zmian h, s, v ustala się podczas tworzenia oprogramowania. Operacje przedstawione powyżej matematycznie można zapisać następująco:
H = H + h
S = S + s
V = V + v
gdzie H, S, V to oryginalne wartości, a h, s, v to zadane wartości.
Po wykonaniu operacji na modelu HSV należy dokonać konwersji z powrotem z HSV na RGB i dokonać syntezy koloru z tych barw podstawowych. Operacje przeprowadzamy dla każdego piksela obrazu.
S = S + s
V = V + v
gdzie H, S, V to oryginalne wartości, a h, s, v to zadane wartości.
Po wykonaniu operacji na modelu HSV należy dokonać konwersji z powrotem z HSV na RGB i dokonać syntezy koloru z tych barw podstawowych. Operacje przeprowadzamy dla każdego piksela obrazu.
Implementacje
Autor | Język programowania | Komentarz | Otwórz | Pobierz | Ocena |
Dariusz Rorat | Delphi/Pascal | Borland Delphi 7 | .pas | .pas | ***** / 1 |
Poprawiony: 01 sierpnia 2012 18:55