StartAlgorytmyPrzetwarzanie obrazówAkcent kolorystyczny
Baza Wiedzy
Wersja offline serwisu przeznaczona na urządzenia z systemem Android.

Darowizny
darowiznaWspomóż rozwój serwisu


Nagłówki RSS
Kanał artykuły
Kanał implementacje
Kanał komentarze
Kanał forum


Bookmarki









Sonda
Implementacji w jakim języku programowania poszukujesz?
 
Akcent kolorystyczny
Ocena użytkowników:+++-- / 8
SłabyŚwietny 
Wpisany przez Tomasz Lubiński
czwartek, 19 sierpnia 2010 08:35
Akcent kolorystyczny, czy też akcent koloru (ang. color accent), jest efektem, w którym wszystkie szczegóły na obrazie poza jednym kolorem pozostają w odcieniach szarości. Zadanie to łatwo jest wykonać posługując się modelem HSV. Składowa h w tym modelu przyjmuje wartości od 0 do 359.99... i niesie ze sobą informację o kolorze. By wykonać akcent kolorystyczny, należy zatem dla każdego punktu obrazu odczytać jego wartość h w modelu HSV (w tym celu najczęściej potrzebna będzie konwersja z modelu RGB, w którym najczęściej przechowywane są obrazy na model HSV). Jeżeli odczytana wartość h jest równa wartości koloru, który chcemy zaakcentować wówczas, do obrazu wynikowego przenosimy ten punkt bez zmian, w przeciwnym wypadku zamieniamy ten punkt, na punkt w skali szarości.

By móc zaakcentować całe przedmioty w danym kolorze, musimy zaakcentować nie dokładnie jedną wartość h, ale cały przedział. Czyli wybieramy kolor, który chcemy zaakcentować, niech będzie to haccent, oraz szerokość przedziału range. Zatem przedział, w którym będziemy akcentować kolor (przenosić punkty obrazu bez zmian) będzie wynosić od h1 = (haccent - range/2 + 360) mod 360 do h2 = (haccent + range/2) mod 360.

Operacje modulo 360 wprowadzone są ponieważ h w modelu HSV opisuje funckję koła, zatem jeżeli przy dodawaniu przekraczamy wartość 359.99... to znajdujemy się z powrotem w 0, podobnie przy odejmowaniu jeżeli przekraczamy 0 to znajdujemy się w 359.99...

Z tego też powodu przy obliczaniu zakresu akcentu możemy natrafić na dwa przypadki:

Na przykład jeżeli haccent jest równe 250 i szerokość przedziału jest równa 20 to h1 = 240, h2 = 260 zatem zaakcentowane będą wszystkie punkty o wartościach h pomiędzy 240 a 260. Natomiast jeżeli haccent jest równe 355 a szerokość przedziału jest równa 20 to h1 = 345, h2 = 5 zatem zaakcentowane będą wszystkie punkty o wartościach większych lub równych 345 oraz punkty o wartościach mniejszych lub równych 5. Podobnie sytuacja wyglądać będzie, gdy haccent jest równe 5 i szerokość przedziału jest równa 20, wówczas h1 = 355, h2 = 15 zatem zaakcentowane będą wszystkie punkty o wartościach większych lub równych 355 oraz punkty o wartościach mniejszych lub równych 15.

Na przykładzie poniżej obraz oryginalny oraz obraz z zaakcentowanym kolorem czerwonym (szerokość przedziału 50).

akcent kolorystyczny - czerwony

Na przykładzie poniżej obraz oryginalny oraz obraz z zaakcentowanym kolorem zielonym (szerokość przedziału 50).

akcent kolorystyczny - zielony




Autor Język programowania Komentarz Otwórz Pobierz Ocena
Tomasz Lubiński C/C++ Borland Builder 6
Implementacja w C/C++
Implementacja w C/C++
+++-- / 3
Tomasz Lubiński Delphi/Pascal Borland Delphi 5
Implementacja w Delphi/Pascal
Implementacja w Delphi/Pascal
+++-- / 4
 
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: poniedziałek, 13 czerwca 2011 21:15

Dodaj komentarz

Kod antysapmowy
Odśwież