algorytm.org

Zmiana barwy / nasycenia / jasności



Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Zmiana barwy / nasycenia / jasności
Ocena użytkowników:***** / 8
SłabyŚwietny 
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.


model HSV


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 barwy


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.

Zmiana nasycenia



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.

Zmiana barwy



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.

Implementacje
AutorJęzyk
programowania
KomentarzOtwórzPobierzOcena
Dariusz RoratDelphi/PascalBorland Delphi 7
.pas
.pas
***** / 1
 
Dodaj własną implementację tego algorytmu
  • Zaloguj się na stronie
Plik:
Język
programowania:
Komentarz:
  By móc dodać implementacje zaloguj się na stronie

Poprawiony: 01 sierpnia 2012 18:55
Dodaj komentarz