Я вижу цветовое пространство HSV, используемое повсеместно: для отслеживания, обнаружения людей и т. Д. Мне интересно, почему? Что такого в этом цветовом пространстве, что делает его лучше, чем использование RGB?
Я вижу цветовое пространство HSV, используемое повсеместно: для отслеживания, обнаружения людей и т. Д. Мне интересно, почему? Что такого в этом цветовом пространстве, что делает его лучше, чем использование RGB?
Ответы:
Простой ответ заключается в том, что в отличие от RGB , HSV отделяет яркость или интенсивность изображения от цветности или цветовой информации. Это очень полезно во многих приложениях. Например, если вы хотите выполнить выравнивание гистограммы цветного изображения, вы, вероятно, хотите сделать это только для компонента интенсивности и оставить компоненты цвета в покое. В противном случае вы получите очень странные цвета.
В компьютерном зрении вы часто хотите отделить цветовые компоненты от интенсивности по различным причинам, таким как устойчивость к изменениям освещения или удаление теней.
Однако обратите внимание, что HSV является одним из многих цветовых пространств, которые отделяют цвет от интенсивности (см. YCbCr, Lab и т. Д.). HSV часто используется просто потому, что код для преобразования между RGB и HSV широко доступен и также может быть легко реализован. Например, панель инструментов обработки изображений для MATLAB включает функции rgb2hsv
и hsv2rgb
.
Информация о цвете обычно намного более шумная, чем информация о HSV.
Позвольте мне привести вам пример: я и некоторые друзья участвовали в проекте, касающемся распознавания дорожных знаков в реальных видеороликах сцены (присутствуют шум, тени и иногда окклюзия). Это было частью более крупного проекта, поэтому у нас было время попробовать разные подходы к этой конкретной проблеме (и повторно использовать более старые подходы). Я сам не пробовал основанный на цвете подход, но помню интересную информацию: _ Доминирующий компонент RGB в знаке СТОП часто не был красным! (в основном из-за теней)
Обычно вы можете получить лучшую информацию из цветового пространства HSV . Позвольте мне еще раз привести личный опыт: попробуйте представить, что у вас есть изображение одноцветной плоскости с тенью на ней. В цветовом пространстве RGB теневая часть, скорее всего, будет иметь очень отличающиеся характеристики, чем часть без теней. В цветовом пространстве HSV компонент оттенка обоих патчей с большей вероятностью будет схожим: тень будет в первую очередь влиять на значение или, возможно, компонент насыщенности , а оттенок - на основной «цвет» (без его яркости и разбавленности белым цветом). / черный) не должен так сильно меняться.
Если эти объяснения не кажутся вам интуитивно понятными, я предлагаю:
попытайтесь понять причины, по которым были разработаны эти виды цветового представления: оно всегда каким-то образом основано на некотором взгляде на человеческую интерпретацию цвета
например, детям на самом деле не нравятся ярко окрашенные == ценные объекты, они предпочитают сильно насыщенные объекты, объекты, в которых цвет интенсивный и неразбавленный
после того, как вы это поймете и выработаете некоторую интуицию, вы должны поиграть с изображениями: попробуйте разложить различные изображения в их компонентах RGB и HSV
Ваша цель - увидеть и понять разницу в этих разложениях для изображений, содержащих тени, сильное освещение, отражение света.
если у вас есть определенный тип изображений, с которыми вы хотели бы поиграть, попробуйте их разложить: кто знает, может быть, RGB действительно больше подходит для ваших нужд, чем HSV :)
Использование только компонента Hue делает алгоритм менее чувствительным (если не инвариантным) к изменениям освещения.
Другой популярный вариант - цветовое пространство LAB, где каналы AB представляют цвет, а евклидовы расстояния в пространстве AB лучше соответствуют восприятию цвета человеком. Опять же, игнорирование L-канала (яркости) делает алгоритм более устойчивым к различиям освещения.
Лучший ответ, который я могу представить: RGB имеет отношение к «деталям реализации», касающимся того, как RGB отображает цвет, а HSV - к компонентам «фактического цвета». Другой способ сказать, что RGB - это то, как компьютеры воспринимают цвет, а HSV пытается уловить компоненты того, как мы, люди, воспринимаем цвет.
Я уточню:
Цвет - это восприятие, основанное на электромагнитных волнах. Естественными свойствами этих волн являются, например, интенсивность и частота. Если мы изменяем частоту световых волн от инфракрасного до ультрафиолетового, мы визуально воспринимаем изменение цвета вдоль цветов радуги. Цвета радуги можно считать «чистыми цветами», потому что они представлены одночастотными волнами.
Теперь человеческий глаз может реагировать или «резонировать» только на три основные частоты света, что неудивительно: красный, зеленый и синий. Дело в том, что этот отклик нелинейный, поэтому сетчатка может различать данный чистый цвет (и неявно его «частоту») по объединенному отклику трех цветовых компонентов .
Цветовое пространство RGB существует как таковое только для имитации внутренней работы нашей сетчатки, так что подавляющее большинство цветов может быть представлено на компьютерных дисплеях с помощью удобного (с компьютерной точки зрения) цвета 24 бит на пиксель кодирование. Цветовое пространство RGB не имеет внутренней связи ни с естественными цветовыми свойствами, ни с человеческой интерпретацией цвета.
Например, любая арифметическая операция, выполняемая по каналам в пространстве RGB (например, генерация цветовых градиентов), дает очень грубые или даже явно «неправильные» результаты. Вот почему рекомендуется создавать цветовые карты путем преобразования цветовых остановок из RGB в другие цветовые пространства (HLS, Lab и т. Д.), Выполняя интерполяцию, а затем преобразовывая интерполированные значения обратно в RGB.
Надеюсь это поможет!
HSV означает Hue-Saturation-Value. На самом деле это тип представления цветовой плоскости (например, RGB, YCbCr и т. Д.).
Это независимый от устройства формат представления цвета: представление цвета HSV полезно для определения определенных типов цвета, например: цвет кожи, цвет огня и т. Д.
Matlab
Функция для преобразования изображения RGB в плоскость HSV есть rgb2hsv('/inputimage_name')
.
Я дам вам пример, чтобы понять. Как наша рука имеет много частей ладони, задней ладони и ниже этого. мы можем видеть различные цветовые вариации в этих областях, но оттенок для всех этих областей не сильно различается, поэтому значение оттенка может быть полезным при сегментации руки.
Я ничего не знаю о том, что особенно лучше с HSV по сравнению с YUV или LAB, что сделало бы его лучше для выделения объектов и инвариантности освещения или визуализации. Я думаю, что HSV является наиболее часто используемым из-за соглашения и преемственности: легче сравнивать результаты и общаться друг с другом, если вы оба используете одно и то же цветовое пространство.
С учетом вышесказанного, HSV (в отличие от RGB) используется в компьютерном зрении по двум известным мне причинам:
Как уже упоминалось, выгодно отделять яркость от цветности. Яркость в сцене сильно варьируется в зависимости от количества света, падающего на объект. С другой стороны, цветность лучше коррелирует с внутренними свойствами объекта, и для правильно сбалансированных изображений белого цвета более или менее инвариантна.
Однако я хотел бы добавить, что HSV, HSL или фактически любое цветовое пространство с поляризованной параметризацией плоскости цветности являются плохим выбором для этой цели. Это потому, что они вводят сингулярность на линии серого (какой оттенок - серый?), Делая их очень чувствительными к шуму и балансу белого. Кроме того, сравнение двух цветов в полярной системе координат не так просто. Также обратите внимание, что ни значение в HSV, ни легкость в HSL не соответствуют воспринимаемой человеком легкости или любой другой физической мере измерения энергии.
Существует множество линейных цветовых пространств, которые дают одинаковое разделение яркости и цветности при сохранении линейности (YCbCr, YUV) или правильно моделируют зрение человека (LUV, LAB). С ними вы можете сравнить два цвета, используя евклидову норму L2 по их цветности, в результате чего в целом получается более надежный алгоритм.
Почему HSV / HSL используются так часто? Трудно дать объективный ответ. По моему опыту, это происходит главным образом из-за незнания и наличия процедур преобразования RGB-> HSV. Приходилось работать с кодом, авторы которого не понимали гамма-коррекцию, не говоря уже о разных цветовых пространствах. Видимый код, который конвертировал RGB в HSV, затем сегментировал изображение на основе оттенка, игнорируя тот факт, что это модульная величина. Я думаю, мы можем согласиться с тем, что это не были осознанные решения, подкрепленные какой-либо причиной.