Dlaczego tak często wykorzystujemy przestrzeń kolorów HSV w przetwarzaniu obrazu i obrazu?

64

Widzę przestrzeń kolorów HSV używaną wszędzie: do śledzenia, wykrywania ludzi itp. Zastanawiam się, dlaczego? Co takiego jest w tej przestrzeni kolorów, że jest lepsza niż używanie RGB?

owsianka
źródło
3
To jest bardzo dobre pytanie. Moim zdaniem przydałoby się trochę bardziej szczegółowe: czym jest HSV, a co RGB. Ponieważ większość odpowiedzi porównuje HSV do RGB, tytuł można przeformułować, aby porównać te dwie przestrzenie kolorów.
PhilMacKay,
2
Innym dobrym pytaniem może być: „Dlaczego HSV jest używany wszędzie zamiast HSL?”
posfan12

Odpowiedzi:

60

Prosta odpowiedź jest taka, że ​​w przeciwieństwie do RGB , HSV oddziela luma lub intensywność obrazu od barwy lub informacji o kolorze. Jest to bardzo przydatne w wielu aplikacjach. Na przykład, jeśli chcesz przeprowadzić korektę histogramu kolorowego obrazu, prawdopodobnie chcesz to zrobić tylko na komponencie intensywności i pozostaw komponenty koloru w spokoju. W przeciwnym razie otrzymasz bardzo dziwne kolory.

W wizji komputerowej często chcesz oddzielić komponenty kolorów od intensywności z różnych powodów, takich jak odporność na zmiany oświetlenia lub usuwanie cieni.

Należy jednak pamiętać, że HSV jest jedną z wielu przestrzeni kolorów oddzielających kolor od intensywności (patrz YCbCr, Lab itp.). HSV jest często używany po prostu dlatego, że kod do konwersji między RGB a HSV jest szeroko dostępny i można go również łatwo wdrożyć. Na przykład Przybornik przetwarzania obrazu dla MATLAB zawiera funkcje rgb2hsvi hsv2rgb.

Dima
źródło
42

Informacja o kolorze jest zwykle znacznie głośniejsza niż informacja HSV.

Pozwól, że podam przykład: ja i niektórzy znajomi byliśmy zaangażowani w projekt dotyczący rozpoznawania znaków drogowych w prawdziwych filmach z nagraniami (hałas, cienie, a czasem występowanie okluzji). Było to częścią większego projektu, więc dało nam to czas na wypróbowanie różnych podejść do tego konkretnego problemu (i ponowne wykorzystanie starszych podejść). Sam nie próbowałem podejścia opartego na kolorach, ale pamiętam ciekawą informację: _ Dominujący składnik RGB w znaku STOP często nie był czerwony! (głównie z powodu cieni)

Zwykle lepsze informacje można uzyskać z przestrzeni kolorów HSV . Pozwólcie, że spróbuję ponownie podać osobisty przykład: wyobraź sobie, że masz obraz jednokolorowej płaszczyzny z cieniem. W przestrzeni kolorów RGB część cienia najprawdopodobniej będzie miała bardzo różne właściwości niż część bez cieni. W przestrzeni kolorów HSV bardziej prawdopodobne jest , że komponent barwy obu łat będzie podobny: cień wpłynie przede wszystkim na wartość , a może komponent satuation , natomiast barwa , wskazująca podstawowy „kolor” (bez jasności i rozcieńczenia przez biel / black) nie powinno się tak bardzo zmieniać.

Jeśli te wyjaśnienia nie brzmią intuicyjnie, sugeruję:

  • spróbuj lepiej zrozumieć komponenty używane do reprezentowania koloru w przestrzeni kolorów HSV i odnowić swoją znajomość RGB
  • spróbuj zobaczyć powody, dla których opracowano tego rodzaju odwzorowanie kolorów: zawsze jest to w jakiś sposób oparte na pewnym postrzeganiu ludzkiej interpretacji koloru

    np dzieci nie faktycznie jak bardzo kolorowych == ceniony obiektów, wolą wysoce satuated przedmiotów, obiektów, w których kolor jest intensywny i nie rozcieńczony

  • po otrzymaniu tego i rozwinięciu intuicji powinieneś grać obrazami: spróbuj rozłożyć różne obrazy w ich komponentach RGB i HSV

    Twoim celem będzie zobaczenie i zrozumienie różnicy w tych rozkładach dla obrazów zawierających cienie, silne oświetlenie, odbicie światła.

  • jeśli masz szczególny rodzaj obrazów, którymi chcesz się bawić, spróbuj je rozłożyć: kto wie, może RGB naprawdę bardziej odpowiada twoim potrzebom niż HSV :)

Penelopa
źródło
1
Jeśli jest to cień, powinien zmieniać tylko jasność, a nie nasycenie.
Andrey Rubshtein
@Andrey, jak powiedziałem, nie pracowałem nad podejściem opartym na kolorach, ale mogę spekulować, że gdyby nie był to tylko cień - pewnie jakieś pośrednie oświetlenie z otoczenia lub coś podobnego również odegrało pewną rolę.
penelopa,
1
Masz rację. Jednak w przypadku oświetlenia pośredniego Barwa może również ulec zmianie.
Andrey Rubshtein,
1
@Andrey Stąd moje sformułowanie: „bardziej prawdopodobne”, „podobne”, „przede wszystkim wywierające wpływ” ... W końcu nie wyjaśniłem HSV, tylko podałem kilka przykładów i zgadłem na podstawie doświadczenia. I najlepszym sposobem na wybranie najbardziej odpowiedniej przestrzeni kolorów dla dowolnej aplikacji jest zabawa z bazą danych obrazów i różnymi przestrzeniami kolorów
Penelope,
3
Wszystko w cieniu i dlatego nie oświetlone przez pierwotne źródło światła (słońce) jest oświetlane przez wtórne źródło światła - niebo, które jest gigantycznym, jasnym i bardzo niebieskim światłem. Dla ludzkich oczu czerwony nadal wygląda na czerwony, ponieważ nasze oczy dokonują względnych pomiarów kolorów zamiast absolutnego koloru, dlatego twoje zdjęcia wewnętrzne bez użycia lampy błyskowej wyglądają na bardziej żółte, niż ci się wydaje. I zgadzam się co do zabawy z twoją właściwie bazą danych obrazów.
John Robertson,
8

Użycie tylko komponentu Barwa powoduje, że algorytm jest mniej wrażliwy (jeśli nie niezmienny) na zmiany oświetlenia.

Inną popularną opcją jest przestrzeń kolorów LAB, w której kanały AB reprezentują kolor, a odległości euklidesowe w przestrzeni AB lepiej pasują do ludzkiej percepcji kolorów. Ponownie, zignorowanie kanału L (luminancji) czyni algorytm bardziej odpornym na różnice w oświetleniu.

nimrodm
źródło
7

Najlepsza odpowiedź na to pytanie: RGB ma związek z „szczegółami implementacji” dotyczącymi sposobu wyświetlania kolorów przez RGB, a HSV z komponentami „rzeczywistego koloru”. Innym sposobem na powiedzenie, że byłby to RGB, jest sposób, w jaki komputery traktują kolor, a HSV próbuje uchwycić elementy sposobu, w jaki ludzie postrzegają kolor.

Opracuję:

Kolor to percepcja oparta na falach elektromagnetycznych. Naturalne właściwości tych fal to na przykład intensywność i częstotliwość. Gdybyśmy zamiatali częstotliwość fali świetlnej od podczerwieni do ultrafioletu, wizualnie dostrzegalibyśmy zmiany kolorów wzdłuż kolorów tęczy. Kolory tęczy można uznać za „czyste kolory”, ponieważ są reprezentowane przez fale o jednej częstotliwości.

Teraz ludzkie oko może reagować lub „rezonować” na trzy główne częstotliwości światła, co nie jest zaskakująco czerwone, zielone i niebieskie. Faktem jest, że ta odpowiedź jest nieliniowa, więc siatkówka może odróżnić dany czysty kolor (i domyślnie jego „częstotliwość”) na podstawie połączonej odpowiedzi trzech składników koloru .

Przestrzeń kolorów RGB istnieje jako taka, aby naśladować wewnętrzne funkcjonowanie naszej siatkówki, dzięki czemu ogromna większość kolorów może być reprezentowana na wyświetlaczach komputerowych za pomocą wygodnego (z komputerowego punktu widzenia) 24-bitowego koloru na piksel kodowanie. Przestrzeń kolorów RGB nie ma żadnego wewnętrznego związku z naturalnymi właściwościami kolorów, ani z interpretacją kolorów przez człowieka.

Na przykład każda operacja arytmetyczna wykonywana kanałowo w przestrzeni RGB (na przykład generowanie gradientów kolorów) daje bardzo surowe lub nawet „błędne” wyniki. Dlatego zaleca się tworzenie map kolorów poprzez konwersję punktów przejścia kolorów z RGB na inne przestrzenie kolorów (HLS, Lab itp.), Wykonywanie interpolacji, a następnie konwersję interpolowanych wartości z powrotem na RGB.

Mam nadzieję że to pomoże!

heltonbiker
źródło
2
Nie zgodziłbym się. Istnieją trzy domeny, a nie dwie: człowiek, komputer i fizyka. Model RGB pochodzi od ludzkiego oka, które ma trzy receptory kolorów.
MSalters
@MSalters Myślę, że mówimy o tych samych rzeczach (chociaż być może nie wyraziłem się całkowicie). Wyświetlacze RGB są dopasowane do naszego systemu postrzegania kolorów. Mają komputerową część przeciwną, „współrzędne” (R, G, B). Ponieważ te współrzędne odwzorowują raczej implementację na fizyczne, „rzeczywiste” właściwości koloru, nie są one odpowiednie do wykonywania niektórych operacji matematycznych, np. Percepcyjnie liniowej interpolacji gradientu, korekcji koloru,
operacji
2

HSV oznacza wartość nasycenia barwy. W rzeczywistości jest to rodzaj reprezentacji płaszczyzny kolorów (jak RGB, YCbCr itp.).

Jest to niezależny od urządzenia format reprezentacji kolorów: reprezentacja kolorów HSV jest przydatna do wykrywania określonych typów kolorów, np .: koloru skóry, koloru ognia itp.

Matlabjest funkcja konwersji obrazu RGB na płaszczyznę HSV rgb2hsv('/inputimage_name').

Nish
źródło
1

Dam ci przykład do zrozumienia. Podobnie jak nasza ręka ma wiele części dłoni, tylnej dłoni i poniżej. widzimy różne różnice kolorów w tych obszarach, ale odcień dla wszystkich tych regionów nie różni się bardzo, więc wartość odcienia może być przydatna w segmentacji ręki.

crack_addict
źródło
1

Nic, co wiem o tym, jest szczególnie lepsze w przypadku HSV w porównaniu z YUV lub LAB, co poprawiłoby ekstrakcję i niezmienność oświetlenia lub wizualizację. Wydaje mi się, że HSV jest częściej używany ze względu na konwencję i ciągłość: łatwiej jest porównywać wyniki i komunikować się ze sobą, jeśli oboje korzystacie z tej samej przestrzeni kolorów.

Powiedziawszy to, HSV (w przeciwieństwie do RGB) jest wykorzystywany w wizji komputerowej z dwóch powodów, o których wiem:

  1. Wizualizacja . Ilekroć masz gęstą informację kierunkową nad obrazem, HSV jest dobrą przestrzenią kolorów do wizualizacji. Zamiast kreślić małe wektory na obrazie (zaśmiecą wszystko), możesz drukować kolory za pomocą HSV, umieszczając wektor kierunkowy odwzorowany na H (kąt wektorowy) i S (wielkość wektorowa). Pozostawia to składnik Value, który można ustawić na wiele sposobów w zależności od tego, co chcesz osiągnąć. Zobacz poniższy przykład z zestawu danych przepływu optycznego Middlebury. HSV służy do gęstego wyświetlania wskazówek.

Przykład z Middlebury DB na temat przepływu optycznego

  1. Wyodrębnianie funkcji i niezmienność oświetlenia , jak wyjaśniono w innych odpowiedziach.
Stefan Karlsson
źródło
0

Jak wspomniano inni, korzystne jest oddzielenie lumy od barwy. Luma różni się znacznie w scenie w zależności od ilości światła padającego na obiekt. Chroma z kolei lepiej koreluje z wewnętrznymi właściwościami obiektu, a dla właściwie zrównoważonych bieli obrazy są mniej więcej niezmienne.

Chciałbym jednak dodać, że HSV, HSL, a właściwie jakakolwiek przestrzeń kolorów z polarną parametryzacją płaszczyzny barwy, są złym wyborem do tego celu. To dlatego, że wprowadzają osobliwość na linii szarości (który odcień jest szary?), Czyniąc je bardzo wrażliwymi na szum i balans bieli. Dodatkowo porównywanie dwóch kolorów w układzie współrzędnych biegunowych nie jest tak proste. Należy również zauważyć, że ani wartość w HSV, ani jasność w HSL nie odpowiadają postrzeganej przez człowieka lekkości ani żadnej innej fizycznej miary energii.

Istnieje wiele liniowych przestrzeni kolorów, które zapewniają tę samą separację barwy luma-chroma, zachowując jednocześnie liniowość (YCbCr, YUV) lub odpowiednio modelując ludzkie widzenie (LUV, LAB). Za pomocą tych można porównać dwa kolory za pomocą normy Euclidean L2 pod względem ich chromatyczności, co daje bardziej solidny algorytm.

Dlaczego więc HSV / HSL są tak często używane? Trudno podać obiektywną odpowiedź. Z mojego doświadczenia wynika to głównie z niewiedzy i dostępności procedur konwersji RGB-> HSV. Musiał pracować z kodem, którego autorzy nie rozumieli korekcji gamma, nie mówiąc już o różnych przestrzeniach kolorów. Widziany kod, który przekonwertował RGB na HSV, a następnie segmentował obraz na podstawie odcienia, nie uwzględniając faktu, że jest to ilość modularna. Myślę, że możemy się zgodzić, że nie były to świadome decyzje poparte z jakiegokolwiek powodu.

ybungalobill
źródło
-1

Model kolorów HSV jest bardziej skorelowany z tym, jak ludzie widzą kolorowe obiekty, w porównaniu z RGB, YUV, Lab itp.

Widzimy, jaki kolor ma obiekt (Barwa), ile jest nasycony (Nasycenie) i ile światła białego na niego pada (Intesity).

Deepak
źródło