Почему мы так часто используем цветовое пространство HSV при обработке изображений и изображений?

64

Я вижу цветовое пространство HSV, используемое повсеместно: для отслеживания, обнаружения людей и т. Д. Мне интересно, почему? Что такого в этом цветовом пространстве, что делает его лучше, чем использование RGB?

овсяная каша
источник
3
Это очень хороший вопрос. На мой взгляд, было бы полезно быть более подробным: что такое HSV, что такое RGB. Поскольку большинство ответов сравнивают HSV с RGB, заголовок можно перефразировать, чтобы сравнить эти два цветовых пространства.
PhilMacKay
2
Другой хороший вопрос может быть: «Почему HSV используется повсеместно вместо HSL?»
posfan12

Ответы:

60

Простой ответ заключается в том, что в отличие от RGB , HSV отделяет яркость или интенсивность изображения от цветности или цветовой информации. Это очень полезно во многих приложениях. Например, если вы хотите выполнить выравнивание гистограммы цветного изображения, вы, вероятно, хотите сделать это только для компонента интенсивности и оставить компоненты цвета в покое. В противном случае вы получите очень странные цвета.

В компьютерном зрении вы часто хотите отделить цветовые компоненты от интенсивности по различным причинам, таким как устойчивость к изменениям освещения или удаление теней.

Однако обратите внимание, что HSV является одним из многих цветовых пространств, которые отделяют цвет от интенсивности (см. YCbCr, Lab и т. Д.). HSV часто используется просто потому, что код для преобразования между RGB и HSV широко доступен и также может быть легко реализован. Например, панель инструментов обработки изображений для MATLAB включает функции rgb2hsvи hsv2rgb.

Дима
источник
42

Информация о цвете обычно намного более шумная, чем информация о HSV.

Позвольте мне привести вам пример: я и некоторые друзья участвовали в проекте, касающемся распознавания дорожных знаков в реальных видеороликах сцены (присутствуют шум, тени и иногда окклюзия). Это было частью более крупного проекта, поэтому у нас было время попробовать разные подходы к этой конкретной проблеме (и повторно использовать более старые подходы). Я сам не пробовал основанный на цвете подход, но помню интересную информацию: _ Доминирующий компонент RGB в знаке СТОП часто не был красным! (в основном из-за теней)

Обычно вы можете получить лучшую информацию из цветового пространства HSV . Позвольте мне еще раз привести личный опыт: попробуйте представить, что у вас есть изображение одноцветной плоскости с тенью на ней. В цветовом пространстве RGB теневая часть, скорее всего, будет иметь очень отличающиеся характеристики, чем часть без теней. В цветовом пространстве HSV компонент оттенка обоих патчей с большей вероятностью будет схожим: тень будет в первую очередь влиять на значение или, возможно, компонент насыщенности , а оттенок - на основной «цвет» (без его яркости и разбавленности белым цветом). / черный) не должен так сильно меняться.

Если эти объяснения не кажутся вам интуитивно понятными, я предлагаю:

  • попытайтесь лучше понять компоненты, используемые для представления цвета в цветовом пространстве HSV, и познакомить вас с RGB
  • попытайтесь понять причины, по которым были разработаны эти виды цветового представления: оно всегда каким-то образом основано на некотором взгляде на человеческую интерпретацию цвета

    например, детям на самом деле не нравятся ярко окрашенные == ценные объекты, они предпочитают сильно насыщенные объекты, объекты, в которых цвет интенсивный и неразбавленный

  • после того, как вы это поймете и выработаете некоторую интуицию, вы должны поиграть с изображениями: попробуйте разложить различные изображения в их компонентах RGB и HSV

    Ваша цель - увидеть и понять разницу в этих разложениях для изображений, содержащих тени, сильное освещение, отражение света.

  • если у вас есть определенный тип изображений, с которыми вы хотели бы поиграть, попробуйте их разложить: кто знает, может быть, RGB действительно больше подходит для ваших нужд, чем HSV :)

Пенелопа
источник
1
Если это тень, она должна менять только яркость, а не насыщенность.
Андрей Рубштейн
@ Андрей, как я уже сказал, сам не работал над цветовым подходом, но могу предположить, что если бы была не только тень - возможно, какое-то косвенное освещение от окружения или что-то подобное также сыграло свою роль.
Пенелопа
1
Ты прав. Однако в случае непрямого освещения оттенок также может измениться.
Андрей Рубштейн
1
@Andrey Отсюда моя формулировка: «более вероятно», «похоже», «в первую очередь влияние», ... В конце концов, я не объяснял HSV, просто привел несколько примеров и образованных догадок на основе опыта. И лучший способ выбрать наиболее подходящее цветовое пространство для любого приложения - это поэкспериментировать с вашей базой данных изображений и различными цветовыми пространствами
penelope
3
Все, что находится в тени и, следовательно, не освещено первичным источником света (солнцем), освещается вторичным источником света - небом, которое является гигантским, ярким и очень синим светом. Для человеческих глаз красный цвет по-прежнему выглядит красным, поскольку наши глаза выполняют относительные измерения цвета вместо абсолютного цвета, поэтому ваши снимки в помещении без вспышки выглядят более желтыми, чем вы думаете. И я полностью согласен с игрой с вашей собственно базой изображений.
Джон Робертсон
8

Использование только компонента Hue делает алгоритм менее чувствительным (если не инвариантным) к изменениям освещения.

Другой популярный вариант - цветовое пространство LAB, где каналы AB представляют цвет, а евклидовы расстояния в пространстве AB лучше соответствуют восприятию цвета человеком. Опять же, игнорирование L-канала (яркости) делает алгоритм более устойчивым к различиям освещения.

nimrodm
источник
7

Лучший ответ, который я могу представить: RGB имеет отношение к «деталям реализации», касающимся того, как RGB отображает цвет, а HSV - к компонентам «фактического цвета». Другой способ сказать, что RGB - это то, как компьютеры воспринимают цвет, а HSV пытается уловить компоненты того, как мы, люди, воспринимаем цвет.

Я уточню:

Цвет - это восприятие, основанное на электромагнитных волнах. Естественными свойствами этих волн являются, например, интенсивность и частота. Если мы изменяем частоту световых волн от инфракрасного до ультрафиолетового, мы визуально воспринимаем изменение цвета вдоль цветов радуги. Цвета радуги можно считать «чистыми цветами», потому что они представлены одночастотными волнами.

Теперь человеческий глаз может реагировать или «резонировать» только на три основные частоты света, что неудивительно: красный, зеленый и синий. Дело в том, что этот отклик нелинейный, поэтому сетчатка может различать данный чистый цвет (и неявно его «частоту») по объединенному отклику трех цветовых компонентов .

Цветовое пространство RGB существует как таковое только для имитации внутренней работы нашей сетчатки, так что подавляющее большинство цветов может быть представлено на компьютерных дисплеях с помощью удобного (с компьютерной точки зрения) цвета 24 бит на пиксель кодирование. Цветовое пространство RGB не имеет внутренней связи ни с естественными цветовыми свойствами, ни с человеческой интерпретацией цвета.

Например, любая арифметическая операция, выполняемая по каналам в пространстве RGB (например, генерация цветовых градиентов), дает очень грубые или даже явно «неправильные» результаты. Вот почему рекомендуется создавать цветовые карты путем преобразования цветовых остановок из RGB в другие цветовые пространства (HLS, Lab и т. Д.), Выполняя интерполяцию, а затем преобразовывая интерполированные значения обратно в RGB.

Надеюсь это поможет!

heltonbiker
источник
2
Я бы не согласился. Есть три домена, а не два: человек, компьютер и физика. Модель RGB получена из человеческого глаза, который имеет три цветовых рецептора.
MSalters
@MSalters Я думаю, что мы говорим об одних и тех же вещах (хотя, возможно, я не совсем ясно дал понять). Дисплеи RGB сделаны в соответствии с нашей системой восприятия цвета. У них есть компьютерный аналог, (R, G, B) «координаты». Поскольку эти координаты соответствуют реализации, а не физическим свойствам цвета "реальной природы", они не подходят для выполнения некоторой математической обработки, например, перцептивно-линейной градиентной интерполяции, коррекции цвета, операций яркости и насыщенности и т. Д.
Heltonbiker
2

HSV означает Hue-Saturation-Value. На самом деле это тип представления цветовой плоскости (например, RGB, YCbCr и т. Д.).

Это независимый от устройства формат представления цвета: представление цвета HSV полезно для определения определенных типов цвета, например: цвет кожи, цвет огня и т. Д.

MatlabФункция для преобразования изображения RGB в плоскость HSV есть rgb2hsv('/inputimage_name').

Ниша
источник
1

Я дам вам пример, чтобы понять. Как наша рука имеет много частей ладони, задней ладони и ниже этого. мы можем видеть различные цветовые вариации в этих областях, но оттенок для всех этих областей не сильно различается, поэтому значение оттенка может быть полезным при сегментации руки.

crack_addict
источник
1

Я ничего не знаю о том, что особенно лучше с HSV по сравнению с YUV или LAB, что сделало бы его лучше для выделения объектов и инвариантности освещения или визуализации. Я думаю, что HSV является наиболее часто используемым из-за соглашения и преемственности: легче сравнивать результаты и общаться друг с другом, если вы оба используете одно и то же цветовое пространство.

С учетом вышесказанного, HSV (в отличие от RGB) используется в компьютерном зрении по двум известным мне причинам:

  1. Визуализация . Всякий раз, когда у вас есть информация о направлении над изображением, HSV является хорошим цветовым пространством для визуализации. Вместо того, чтобы рисовать маленькие векторы на изображении (они будут загромождать все), вы можете нарисовать цвет с помощью HSV, поместив вектор направления, сопоставленный с H (векторный угол) и S (векторная величина). Это оставляет компонент Value, который можно установить любым количеством способов в зависимости от того, чего вы хотите достичь. Ниже приведен пример из набора данных оптического потока Мидлбери. HSV используется для плотного отображения направлений.

Пример из базы данных Middlebury по оптическому потоку

  1. Извлечение признаков и инвариантность освещения , как объяснено в других ответах.
Стефан Карлссон
источник
0

Как уже упоминалось, выгодно отделять яркость от цветности. Яркость в сцене сильно варьируется в зависимости от количества света, падающего на объект. С другой стороны, цветность лучше коррелирует с внутренними свойствами объекта, и для правильно сбалансированных изображений белого цвета более или менее инвариантна.

Однако я хотел бы добавить, что HSV, HSL или фактически любое цветовое пространство с поляризованной параметризацией плоскости цветности являются плохим выбором для этой цели. Это потому, что они вводят сингулярность на линии серого (какой оттенок - серый?), Делая их очень чувствительными к шуму и балансу белого. Кроме того, сравнение двух цветов в полярной системе координат не так просто. Также обратите внимание, что ни значение в HSV, ни легкость в HSL не соответствуют воспринимаемой человеком легкости или любой другой физической мере измерения энергии.

Существует множество линейных цветовых пространств, которые дают одинаковое разделение яркости и цветности при сохранении линейности (YCbCr, YUV) или правильно моделируют зрение человека (LUV, LAB). С ними вы можете сравнить два цвета, используя евклидову норму L2 по их цветности, в результате чего в целом получается более надежный алгоритм.

Почему HSV / HSL используются так часто? Трудно дать объективный ответ. По моему опыту, это происходит главным образом из-за незнания и наличия процедур преобразования RGB-> HSV. Приходилось работать с кодом, авторы которого не понимали гамма-коррекцию, не говоря уже о разных цветовых пространствах. Видимый код, который конвертировал RGB в HSV, затем сегментировал изображение на основе оттенка, игнорируя тот факт, что это модульная величина. Я думаю, мы можем согласиться с тем, что это не были осознанные решения, подкрепленные какой-либо причиной.

ybungalobill
источник
-1

Цветовая модель HSV более коррелирует с тем, как люди видят цветные объекты, по сравнению с RGB, YUV, Lab и т. Д.

Мы видим, какого цвета объект (Hue), насколько он насыщен (Saturation) и сколько белого света падает на него (Intesity).

Дипак
источник