Распознавание дорожных знаков основывается на анализе изображений, полученных с камер, установленных на автомобиле. Эффективность работы такой системы зависит от корректной предварительной обработки изображений, в частности – от точного выделения области, содержащей дорожный знак. Основой этой процедуры выступает цветовая сегментация, поскольку большинство дорожных знаков обладают характерной цветовой окраской (например, красный, синий, жёлтый), позволяющей отличить их от фона.

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

1. Цветовая сегментация с использованием HSV

HSV (Hue – оттенок, Saturation – насыщенность, Value – яркость) является одним из часто используемых цветовых пространств для цветовой сегментации, которая позволяет выделять объекты на основе их цветовых характеристик, в нашем случае дорожные знаки, как правило, обладают отчетливыми цветами, в основном такими как красный, желтый и синий [1].

Это пространство представлено в полярной системе координат, где оттенок определяет угол, насыщенность и яркость – радиус и высоту соответственно (рисунок 1). В данном пространстве оттенок позволяет различать цвета, насыщенность определяет их интенсивность, а яркость регулирует уровень освещения [3].

Рисунок 1 – Цветовое пространство HSV
Рисунок 1 – Цветовое пространство HSV

Для сегментации потенциального объекта интереса создаются бинарные маски – изображения, полученные путем пороговой обработки. Данные маски позволяют изолировать объекты, такие как дорожные знаки, от основного фона, что помогает сосредоточиться на важных областях изображения в процессе распознавания.

Для наглядности представления цветового пространства HSV преобразуем изображение из RGB в данное цветовое пространство (рисунок 2):

Рисунок 2 – Преобразование изображения из RGB в HSV
Рисунок 2 – Преобразование изображения из RGB в HSV

На основе полученного изображения, выполняется пороговая сегментация, в которой используются заранее заданные минимальные и максимальные значения для каждого из компонентов HSV. Для выделения конкретных цветов на изображении используется формула (1).

\begin{cases} H_{\min} \leq H \leq H_{\max} \\ S_{\min} \leq S \leq S_{\max} \\ V_{\min} \leq V < V_{\max} \end{cases}   \tag1

В результате выполнения пороговой обработки с параметрам:

H_{min }=0;H_{max}=250; S_{min }=110,S_{max}=255; V_{min}=110; V_{max}= 255;

Получим следующую маску и отсегментированное изображение (рисунок 3):

Рисунок 3 – Маска и отсегментированное изображение с использованием цветового пространства HSV
Рисунок 3 – Маска и отсегментированное изображение с использованием цветового пространства HSV

На основе этих же параметров произведем сегментацию на следующих изображениях (рисунок 4-5):

Рисунок 4 - Маска и отсегментированное второе изображение с использованием цветового пространства HSV
Рисунок 4 - Маска и отсегментированное второе изображение с использованием цветового пространства HSV
Рисунок 5 – Маска и отсегментированное третье изображение с использованием цветового пространства HSV
Рисунок 5 – Маска и отсегментированное третье изображение с использованием цветового пространства HSV

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

Среднее время выполнения преобразования трех изображений из RGB в HSV и их сегментации представлено в таблице.

Номер изображения

Разрешение

Время выполнения

1

1024x675

0.012000 с

2

2048x1536

0.055000 с

3

1322x800

0.017000 с

2. Цветовая сегментация с использованием LAB

Пороговая сегментация в цветовом пространстве LAB также эффективна для выделения объектов по цвету, но она отличается от HSV тем, что учитывает яркость и оттенки независимо друг от друга.

Данное цветовое пространство представляется в декартовой системе координат (рисунок 6) и состоит из 3-х компонентов: светлота (Lightness), оттенок между красным и зеленым (RedGreen Axis) и оттенок между желтым и синим (Yellow-Blue Axis).

Рисунок 6 – Цветовое пространство LAB
Рисунок 6 – Цветовое пространство LAB

Для наглядности представления цветового пространства LAB преобразуем изображение из RGB в данное цветовое пространство (рисунок 7):

Рисунок 7 – Преобразование изображения из RGB в LAB
Рисунок 7 – Преобразование изображения из RGB в LAB

На основе полученного изображения, выполняется пороговая сегментация, таким же образом, как и с использованием HSV. Для этого используется формула (2).

\begin{cases} L_{\min} \leq L \leq L_{\max} \\ A_{\min} \leq A \leq A_{\max} \\ B_{\min} \leq B < B_{\max} \end{cases}    \tag 2

В результате выполнения пороговой обработки с параметрами:

L_{min}=5;L_{max}=255; A_{min}=120,A_{max}=255; B_{min}=80; B_{max}= 255;

Получим следующую маску и отсегментированное изображение (рисунок 8):

Рисунок 8 – Маска и отсегментированное изображение с использованием цветового пространства LAB
Рисунок 8 – Маска и отсегментированное изображение с использованием цветового пространства LAB

На основе этих же параметров произведем сегментацию на других изображениях (рисунок 9-10):

Рисунок 9 – Маска и отсегментированное второе изображение с использованием цветового пространства LAB
Рисунок 9 – Маска и отсегментированное второе изображение с использованием цветового пространства LAB
Рисунок 10 – Маска и отсегментированное третье изображение с использованием цветового пространства LAB
Рисунок 10 – Маска и отсегментированное третье изображение с использованием цветового пространства LAB

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

Среднее время выполнения преобразования трех изображений из RGB в LAB и их сегментации представлено в таблице. В данном случае алгоритм был ускорен путем использования Look Up Table (LUT) для значений гаммы.

Номер изображения

Разрешение

Время выполнения

1

1024x675

0.023000 с

2

2048x1536

0.098000 с

3

1322x800

0.036000 с

3. Цветовая сегментация с использованием LAB и HSV

Поскольку при сегментации в цветовом пространстве LAB удаляются области, которые остаются при сегментации в HSV, можно комбинировать полученные маски, используя морфологические преобразования – граничную дилатацию – и побитовую операцию «И» [2]. В результате объединения получим границы объектов интереса, которые можно использовать для выделения знака на исходном изображении (рисунок 11).

Рисунок 11 – Результат сегментации с использованием HSV и LAB
Рисунок 11 – Результат сегментации с использованием HSV и LAB

По полученным результатам видно, что данный способ адаптирован для изображений с переменным освещением и удаляет ненужные области. Кроме этого, данный способ сегментации определяет знаки более точно, чем сегментация в цветовом пространстве HSV или LAB. Похожий метод был использован для сегментации знаков в статье [1]. Результат работы описанной системы представлен на рисунке 12.

Рисунок 12 – Работа системы на основе сегментации с использованием HSV и LAB
Рисунок 12 – Работа системы на основе сегментации с использованием HSV и LAB

Среднее время выполнения преобразования трех изображений из RGB в LAB, HSV и их сегментации представлено в таблице.

Номер изображения

Разрешение

Время выполнения

1

1024x675

0.058000 с

2

2048x1536

0.251000 с

3

1322x800

0.087000 с

4. Адаптивная цветовая сегментация с использованием IHLS

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

Однако существует более быстрый и точный способ, использующий одно цветовое пространство, – адаптивную сегментацию в IHLS. Этот метод позволяет эффективно учитывать локальные особенности изображения в RGB и изменять пороги сегментации во время преобразования из RGB в IHLS в зависимости от условий освещения [5].

IHLS (Improved Hue, Lightness, Saturation) — это улучшенная версия традиционного цветового пространства HLS (рисунок 13), которая устраняет проблемы, связанные с зависимостью параметров насыщенности и светлость, возникающие из-за нормализации [1], что позволяет более точно сегментировать изображения в различных условиях освещения [6].

Рисунок 13 – Цветовое пространство HSL
Рисунок 13 – Цветовое пространство HSL

Для наглядности представления цветового пространства IHLS преобразуем изображения из RGB в данное цветовое пространство (рисунок 14):

Рисунок 14 – Преобразование изображения из RGB в HSL
Рисунок 14 – Преобразование изображения из RGB в HSL

Реализация данного метода включает в себя следующие шаги:

1. Определение распределения яркости пикселей на исходном изображении в RGB путем анализа гистограмм для каждого из его компонентов.

2. Выполнение преобразования исходного изображения из RGB в IHLS с использованием пороговых значений, определенных на основе анализа гистограмм в пункте 1. Это позволит избавиться от ненужных объектов, таких как небо, деревья или трава, до этапа сегментации в пространстве IHLS.

3. Выполнение цветовой сегментации на полученном изображении IHLS.

4.1. Анализ гистограмм исходного изображения

Анализ гистограмм позволяет динамически подстраивать пороговые значения для цветовых каналов RGB, учитывая локальные особенности распределения яркости в различных областях изображения [5]. Этот метод основан на разбиении гистограммы на три зоны, что позволяет выявить освещённость сцены:

1. Левая зона – соответствует темным областям изображения, включая тени и недостаточное освещение. Такая зона распределения яркости характерна для сцен, снятых в ночных условиях.

2. Средняя зона – охватывает области с умеренной освещённостью, представляя собой баланс между тёмными и светлыми участками сцены. Чаще всего такая зона преобладает в изображениях, сделанных в условиях дождя или тумана.

3. Правая зона – соответствует ярким и светлым участкам изображения. В данном случае, такая зона будет соответствовать изображениям, сделанным при дневном освещении.

Данные распределения яркости для описанных сцен представлены на рисунке 14.

Рисунок 14 – Цветовая гистограмма трех типов сцен
Рисунок 14 – Цветовая гистограмма трех типов сцен

Распределение яркости пикселей по зонам гистограммы определяется формулой (3):

f_n =  \frac{ \sum\limits_{i \in Z_n} H(i),\ \text{ if } H(i) \geq 0.3 \cdot \max(H(i)) }{ \sum\limits_{i=0}^{255} H(i) }, \quad n \in \{1, 2, 3\} \tag{3}

Где H(i)– количество пикселей с яркостью i (значение гистограммы для каждого оттенка);  Z_1=[0,85],Z_2=[86,170],Z_3=[171,255] – диапазоны значений яркости, соответствующие левой, средней, правым зонам соответственно; max⁡(H(i)) – максимальное количество пикселей среди всех уровней яркости; f_n – нормированное количество пикселей в каждой зоне.

На основе полученных f_n для каждого канала определяются пороговые значения –  ζ и γ , которые необходимы для отсеивания ненужных объектов, таких как трава, деревья и небо, при преобразовании исходного изображения из RGB в IHLS. Это достигается путем нахождения максимального значения f_n для каждого канала по формуле (4), где n – зона, соответствующая максимальному количеству пикселей, распределённых в данной области:

\begin{cases} k_1 = \max(f_1^R,\ f_2^R,\ f_3^R) \\ k_2 = \max(f_1^G,\ f_2^G,\ f_3^G) \\ k_3 = \max(f_1^B,\ f_2^B,\ f_3^B) \end{cases} \tag{4}

где k_1 , k_2и k_3 – это максимальные значения f_n для красного, зеленого, синего канала соответственно.
Используя найденные максимальные значения, можно установить соответствующие пороговые значения – ζ и  γ по формуле (5):

4.2. Пороговое преобразование исходного изображения в IHLS

На основе полученных пороговых значений можно выполнить преобразование в необходимое нам цветовое пространство (рисунок 15) с избавлением не интересующих объектов по формуле (6):

где IHSL(x,y) – значение пикселя в пространстве IHLS в позиции (x,y) ; I_R (x,y),I_G (x,y),I_B (x,y)  – значения цветовых каналов RGB;  F_{IHSL}– стандартная функция преобразования пикселя в IHLS.

Рисунок 15 – Пороговое преобразование в IHLS
Рисунок 15 – Пороговое преобразование в IHLS

4.3. Цветовая сегментация с использованием IHLS

Выполним пороговую сегментацию в IHLS используя пороговые значения по формуле (7), а также морфологические преобразования – дилатацию [2]. В результате отсегментированные знаки (рисунок 16).

где  Mask(x,y) – значение пикселя в бинарной маске в позиции  (x,y);  H(x,y), S(x,y), L(x,y) – значения цветовых компонентов цветового пространства IHLS.

Рисунок 16 – Результат сегментации для трех рассмотренных изображений использованием IHLS
Рисунок 16 – Результат сегментации для трех рассмотренных изображений использованием IHLS

Среднее время выполнения сегментации трех первых изображений представлено в таблице.

Номер изображения

Разрешение

Время выполнения

1

1024x675

0.045000 с

2

2048x1536

0.198000 с

3

1322x800

0.064000 с

5. Сравнение методов по времени и точности

В результате анализа времени сегментации для каждого из методов видно, что самым быстрым является способ сегментации с использованием пространства HSV. Метод IHLS, хотя и немного медленнее, но показывает хорошие результаты по времени по сравнению с подходом HSV + LAB, достигая оптимального соотношения скорости обработки и точности результатов (рисунок 17).

Рисунок 17 – График времени от метода сегментации
Рисунок 17 – График времени от метода сегментации

Анализ точности методов сегментации показывает, что метод IHLS продемонстрировал наименьшее количество промахов и шума, что подтверждает его высокую эффективность в задачи сегментации дорожных знаков (рисунок 18).      

Рисунок 18 – График количества промахов и шума от метода сегментации
Рисунок 18 – График количества промахов и шума от метода сегментации

Во время исследования рассматривались четыре метода цветовой сегментации изображения, применяемые для предобработки и дальнейшего распознавания и классификации дорожных знаков. Среди них метод, основанный на адаптивной сегментации с использованием цветового пространства IHLS [6], показал наиболее эффективные результаты, поскольку он оказался быстрым, что является важным аспектом для реализации системы ADAS, работающей в условиях реального дорожного движения.

Ссылки:

          1. Лапин К.П. Распознавание дорожных знаков в реальном времени на основе обработки видеопотока и нейронных сетей // Межвузовский сборник научных трудов «Методы и средства обработки и хранения информации». – Рязань: Рязанский государственный радиотехнический университет имени В.Ф. Уткина, 2025. – 287 с. – ISBN 978-5-907811-88-1.

          2. Гонсалес Р. К., Вудс Р. Е. Цифровая обработка изображений / Р. К. Гонсалес, Р. Е. Вудс. – 3-е изд., испр. и доп. – Москва: Техносфера, 2012. – 1104 с. – ISBN 978-5-94836-331-8.

        3. Vipul. RGB to HSV Conversion for Image Processing // International Journal of Computer Applications. 2018. Vol. 180, No. 22. URL: https://www.ijcaonline.org/archives/volume180/number22/vipul-2018-ijca-916507.pdf (дата обращения: 10.04.2025).

        4. Measure Colour. CIE Lab Color Scale [Электронный ресурс] / Measure Colour. – 2019. – URL: https://measurecolour.com.my/wp-content/uploads/2019/02/CIE-Lab-Color-Scale-an07_96a.pdf (дата обращения: 10.11.2025).

        5. Youssef A., Albani D., Nardi D., Bloisi D.D. Fast Traffic Sign Recognition Using Color Segmentation and Deep Convolutional Networks // Lecture Notes in Computer Science. – 2016. – DOI: 10.1007/978-3-319-48680-2_19.

        6. Hanbury A., Serra J. Colour Image Analysis in 3D-Polar Coordinates // Lecture Notes in Computer Science. – 2003. – DOI: 10.1007/978-3-540-45243-0_17.

Комментарии (9)


  1. U235a
    17.06.2025 14:45

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


    1. kirilllapi Автор
      17.06.2025 14:45

      Возможно это и будет работать, но есть вероятность появление шума и выделения не только знаков, но и не нужных объектов. Степень ошибок сегментации будет варьироваться в зависимости от яркости изображения и других факторов.

      P.S.: В данном случае подбиралось значение HSV для представленных изображений, что позволило получить более менее нормальный результат.


      1. U235a
        17.06.2025 14:45

        Каких ненужных объектов? У вас знаки - красные, других ярких красных объектов нет. Понимаете, красные оттенки имеют разрыв в HSB из-за цикличности компоненты цветового тона H -от 0 до 360 градусов. Оттенки с H=359 и H=1 - весьма близкие.


  1. dom1n1k
    17.06.2025 14:45

    А где-то можно подробнее почитать про IHSL, кроме вашей собственной статьи издательства рязанского госуниверситета, которая не гуглится?


    1. kirilllapi Автор
      17.06.2025 14:45

      Ссылка на статью:
      Hanbury A., Serra J. Colour Image Analysis in 3D-Polar Coordinates // Lecture Notes in Computer Science. – 2003. – DOI: 10.1007/978-3-540-45243-0_17.

      Электронный вариант:
      https://www.researchgate.net/publication/221114392_Colour_Image_Analysis_in_3D-Polar_Coordinates


      1. dom1n1k
        17.06.2025 14:45

        А. Там авторы используют наименование IHLS, а я искал IHSL, как написано в данной статье, и не находил.


        1. kirilllapi Автор
          17.06.2025 14:45

          Подправил, спасибо.


  1. kirilllapi Автор
    17.06.2025 14:45

    Прикреплю код на C, который использовался для преобразования RGB в IHSL.

    uint32_t ZETTA;
    uint32_t GAMMA;
    
    typedef enum
    {
        cn_grayscale = 1,
        cn_rgb = 3
    
    } channel;
    
    typedef struct image_mat_structure
    {
        unsigned char *data;
        unsigned int width;
        unsigned int height;
        channel cn;
    
    } *image_mat;
    
    
    
    void rgb_to_ihsl_mask(const image_mat image_src, image_mat image_dst)
    {
        uint32_t size_mat = image_src->height * image_src->width;
    
        // Объявление переменных
        uint8_t H, S, L;
        uint8_t R, G, B;
        
        // Угол в цветовом пространстве HSL;
        double theta;
        double denominator;
        double argument;
    
    
        // Максимально и минимальное значение пикселей в каналах
        uint8_t max, min;
    
    
        for (uint32_t i = 0; i < size_mat; i++)
        {
    
            R = (image_src->data)[i * 3];
            G = (image_src->data)[i * 3 + 1];
            B = (image_src->data)[i * 3 + 2];
    
            denominator = sqrt((double)R*R + (double)G*G + (double)B*B - (double)R*G - (double)R*B - (double)G*B);
            argument = ((double)R - (double)G / 2.0 - (double)B / 2.0) / denominator;
    
            if (argument < -1.0) argument = -1.0;
            if (argument > 1.0) argument = 1.0;
    
            // Нахождение угла
            theta = acos(argument);
       
            // Находждение Hue
            if (B <= G)
            {
                H = (uint8_t) theta * (180.0 / M_PI_MY);
            }
            else 
            {
                H = (uint8_t) (360 - theta * (180.0 / M_PI_MY));
            }
    
            if (argument < -1.0) argument = -1.0;
            if (argument > 1.0) argument = 1.0;
         
            // Нахождение максимального значения пикселя из 3-х каналов
            max = (R > G ? (R > B ? R : B) : (G > B ? G : B));
            min = (R < G ? (R < B ? R : B) : (G < B ? G : B));
    
            // Нахождение Saturation
            S = max - min;
    
            // Нахождение Luminance
            L = (uint8_t)(0.212 * R + 0.715 * G + 0.072 * B);
    
            if (max == G || ((abs(R - G) < ZETTA) && (abs(B - G) < GAMMA)))
            {
                // (image_dst->data)[i * 3] = 0;
                // (image_dst->data)[i * 3 + 1] = 0;
                // (image_dst->data)[i * 3 + 2] = 0;
                (image_dst->data)[i] = 0;
            }       
            else
            {
                if ((61 <= H && H <= 150 && S >= 20 && L >= 0) ||   // Зеленые
                    (150 <= H && H <= 250 && S >= 20 && L >= 10) || // Синие
                    (30 <= H && H <= 60 && S >= 90 && S <= 255 && L >= 80)) // Желтые
            
                { 
                    //Сохраняем значения в HSL
                    // (image_dst->data)[i * 3] = H;
                    // (image_dst->data)[i * 3 + 1]  = S;
                    // (image_dst->data)[i * 3 + 2]  = L;
                    (image_dst->data)[i] = 255;
                }
                // Сохраняем значения в RGB
                // (image_dst->data)[i] = 255;
            }
        }    
    }


  1. saege5b
    17.06.2025 14:45

    "Дорожникам" давно пора держать актуальными открытые карты дорожной ситуации/обстановки/режимов.