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?
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?
Odpowiedzi:
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 rgb2hsv
i hsv2rgb
.
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 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 :)
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.
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!
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.
Matlab
jest funkcja konwersji obrazu RGB na płaszczyznę HSV rgb2hsv('/inputimage_name')
.
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.
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:
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.