Эквализация гистограмм для повышения качества изображений

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

    Для простоты начнём рассмотрение с монохромных изображений (т.е. изображений содержащих информацию только о яркости, но не о цвете пикселей). Гистограммой изображения будем называть дискретную функцию H, определённую на множестве значений [0;2bpp], где bpp – количество бит, отводимое для кодирования яркости одного пиксела. Хоть это и не является обязательным, но гистограммы часто нормируют в диапазон [0;1], выполняя деление каждого значения функции H[i] на общее количество пикселов изображения. В Табл. 1 представлены примеры тестовых изображений и гистограмм, построенных на их основе:
    Табл. 1. Изображения и их гистограммы

    Внимательно изучив соответствующую гистограмму можно сделать некоторые выводы и о самом исходном изображении. Например, гистограммы очень тёмных изображений характеризуются тем, что ненулевые значения гистограммы сконцентрированы около нулевых уровней яркости, а для очень светлых изображений наоборот – все ненулевые значения сконцентрированы в правой части гистограммы.
    Интуитивно можно сделать вывод, что наиболее удобным для восприятия человеком будет изображение, у которого гистограмма близка к равномерному распределению. Т.е. для улучшения визуального качества к изображению надо применить такое преобразование, чтобы гистограмма результата содержала все возможные значения яркости и при этом в примерно одинаковом количестве. Такое преобразование называется эквализацией гистограммы и может быть выполнено с помощью кода, приведённого в Листинг 1.
    Листинг 1. Реализация процедуры эквализации гистограммы
    1. procedure TCGrayscaleImage.HistogramEqualization;
    2. const
    3.   k = 255;
    4. var
    5.   h: array [0 .. k] of double;
    6.   i, j: word;
    7. begin
    8.   for i := 0 to k do
    9.     h[i] := 0;
    10.   for i := 0 to self.Height - 1 do
    11.     for j := 0 to self.Width - 1 do
    12.       h[round(* self.Pixels[i, j])] := h[round(* self.Pixels[i, j])] + 1;
    13.   for i := 0 to k do
    14.     h[i] := h[i] / (self.Height * self.Width);
    15.  
    16.   for i := 1 to k do
    17.     h[i] := h[- 1] + h[i];
    18.   for i := 0 to self.Height - 1 do
    19.     for j := 0 to self.Width - 1 do
    20.       self.Pixels[i, j] := h[round(* self.Pixels[i, j])];
    21. end;
    22.  

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

    Легко можно заметить, что гистограммы после эквализации имеют своеобразные заметные разрывы. Это связано с тем, что динамический диапазон выходного изображения шире диапазона исходного. Очевидно, что в этом случае рассмотренное в Листинг 1 отображение не может обеспечить ненулевые значения во всех карманах гистограммы. Если всё-таки необходимо добиться более естественного вида выходной гистограммы, можно использовать случайное распределение значений i-ого кармана гистограммы в некоторой его окрестности.
    Очевидно, что эквализация гистограмм позволяет легко повышать качество монохромных изображений. Естественно хочется применить подобный механизм и к цветным изображениям.
    Большинство не очень опытных разработчиков представляют изображение в виде трёх цветовых каналов RGB и пытаются применить процедуру эквализации гистограммы к каждому цветовому в отдельности. В некоторых редких случаях это позволяет добиться успеха, но в большинстве случаев результат так себе (цвета получаются неестественными и холодными). Это связано с тем, что модель RGB неточно отображает цветовосприятие человека.
    Вспомним о другом цветовом пространстве – HSI. Эта цветовая модель (и другие родственные ей) очень широко используются иллюстраторами и дизайнерам так как позволяют оперировать более привычными для человека понятиями цветового тона, насыщенности и интенсивности.
    Если рассмотреть проекцию RGB-куба в направлении диагонали белый-чёрный, то получится шестиугольник, углы которого соответствуют первичным и вторичным цветам, а все серые оттенки (лежащие на диагонали куба) при этом проецируются в центральную точку шестиугольника (см. Рис. 1):

    Рис. 1. Проекция цветового куба
    Чтобы с помощью этой модели можно было закодировать все цвета, доступные в RGB-модели, необходимо добавить вертикальную ось светлоты (или интенсивности) (I). В итоге получается шестигранный конус (Рис. 2, Рис. 3):

    Рис. 2. Пирамида HSI (вершины)
    В этой модели цветовой тон (H) задаётся углом относительно оси красного цвета, насыщенность (S) характеризует чистоту цвета (1 означает совершенно чистый цвет, а 0 соответствует оттенку серого). При нулевом значении насыщенности тон не имеет смысла и не определен.

    Рис. 3. Пирамида HSI
    В Табл. 3 показано разложение изображения по компонентам HSI (белые пикселы в канале тона соответствуют нулевой насыщенности):
    Табл. 3. Цветовое пространство HSI

    Считается, что для повышения качества цветных изображений наиболее эффективно применять процедуру эквализации к каналу интенсивности. Именно это и продемострировано в Табл. 4
    Табл. 4. Эквализация различных цветовых каналов

    Надеюсь, этот материал показался вам как минимум интересным, как максимум полезным. Спасибо.
    Share post
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 31

      +7
      Скажите, в каком смысле имеется ввиду «повышение качества»? Если речь о художественной фотографии, то изображение в низком ключе (тёмное, с гистограммой около нуля) может быть одним из выразительных приёмов; своим «повышением качества» вы уничтожаете идею.

      Хорошо видно на двух иллюстрациях в конце. Оригинальная фотография выглядит естественно — так, как видит эту сцену глаз. Эквализация RGB искажает цвета, интенсивности — меньше, но обе они вытягивают ужасные шумы и выглядят явно пересвеченными, а также явно «полосят» (особенно заметно около ярких пятен). Самая качественная в эти тройках — первая фотка, а ваше «улучшение» весьма сомнительно.

      Определите, пожалуйста, конкретный параметр «качества», который вы повышаете обработкой, то есть критерий, по которому нужно судить, что лучше, а что хуже.
        0
        на самом деле суть метода в его названии («выравнивание гистограммы», можно было бы и перевести, вместо того чтобы ломать язык об эквализацию)
        и повышает он не качество, а контрастность.
        Эквализация RGB искажает цвета
        так как метод может работать только с 1 каналом, то когда его применяешь отдельно к R,G,B компонентам цвета «разбегаются»
        это один из самых простых алгоритмов обработки изображений, поэтому не стоит ожидать от него много, тем более на цветных изображениях для которых он не предназначался
          0
          я не против. Я прекрасно понимаю, как он работает и почему. Вопрос был — «почему это называется повышением качества, когда оно визуально ухудшилось», что именно за качество мы повышали.

          Вообще говоря, контрастность в целом он не улучшил. Посмотрите на две последних фотки: вокруг ярких пятен были чётко различимые детали, после обработки они «засвечены» и неразличимы.

          А чтобы этот эффект «выпирающих светов» при эквализации не был так явно выражен, надо было работать в Lab, а не в HSI, но это уже к статье не относится.
            0
            Разумеется, ведь это же глобальный метод повышения контраста. Так что контраст он повысил именно что «в целом», а локально мог и понизить.
              0
              На практике этот алгоритм никто не будет применять для обработки фотографий.

              Вообще, в статье довольно плохо объяснено, как алгоритм работает и в чём его цель. Суть метода в том, чтобы интегральная гистограмма была как можно ближе к линейной функции. В википедии это хорошо показано (чёрная линия на гистограммах): en.wikipedia.org/wiki/Histogram_equalization#Full-sized_image Глядя на результаты на обычных гистограммах. это осознать непросто, потому что-то сложно сравнить на глаз редкие высокие столбики с частыми низкими.

              В той же статье в википедии написано, что метод полезен при работе со специфическими изображениями, например, снимками с тепловизора или рентгеновскими снимками. В моей практике метод использовался, чтобы привести картинки к одному диапазону перед тем, как считать разницу между ними. Опять-таки это было для карт салиентности, полученных разными методами, а не для обычных изображений.
          0
           
            +4
            Честно говоря на сколько улучшилась картинка сложно понять по малюсеньким превьюшкам. Боюсь на темных фотках попутно вылезли все прелести шумов матрицы, а светлые участки просто исчезли для глаза (или у меня что-то с монитором). Третья фотография в начале (с какой то игрой), откровенно говоря стала заметно хуже. Единственное что понравилось — печатная машинка стала заметнее. Но всё это не открытие, баловство с кривыми и уровнями (на разных каналах в разном цветовом пространстве в том числе) наверное самое первое что делают при обработке фотографий в графических редакторах.

            По мне — повышение качества изображения, это когда убираются артефакты (шумы, пыль и прочее), регулируется экспозиция по интересующим объектам (например по лицам) и при этом не страдает детализация картинки, не пропадают пересвеченные/недосвеченные объекты и цвета не становятся жутко неестественными (привет переHDRщникам).
              0
              Вспомним о другом цветовом пространстве – HSI.


              А если эквализировать одну или три компоненты в пространстве YCbCr?
                0
                Ничего хорошего. Эквализация Y примерно аналогична эквализации I (она же V, если считать что это HSV). Каналы Cb и Cr лучше не трогать, результат будет ещё непредсказуемее чем с RGB.
                +4
                Тема очень интересная, статья — совершенно капитанская. Непонятны множество деталей. Вот например, почему на новой гичтограмме печатной машинки столбики расположены с разной плотностью? слева реже, справа чаще. Как это определяется, зачем, какие формулы?
                  +4
                  Раз уж это кусок из целой монографии:
                  1) В чём новизна работы?
                  2) Каковы критерии качества результата?
                    0
                    Такие методики хороши для фотографий снятых совсем зелеными «любителями», профи фотографы и энтузиасты с подтянутой матчастью почти 90% обработки сводят к тонкому тюнингу передаточной кривой, которая разрушается такими методиками. Выше верно подметили, художественное фото помимо композиции дополняется тональностью.
                      +1
                      Как фамилия руководителя? Дайте ссылку на сайт вашей кафедры/лаборатории/компании.
                        0
                        В NASA давно всё придумали. Retinex. :)
                        Ещё примеры.

                        Про эквализацию гистограммы столько всего написано. Во всех книжках по обработке изображений.
                          +4
                          Проблема и HSL/HSI, и HSV/HSB в том, что они используют линейные преобразования яркости/насыщенности, тогда как глаз — нелинейная система. Потому при изменении в этих системах яркости/насыщенности меняются и воспринимаемые глазом оттенки цвета — что очень хорошо видно на иллюстрациях к данной статье.

                          Для того, чтобы этого не происходило, необходимо использовать цветовые пространства, учитывающие особенности цветовосприятия. Например, CIE L*a*b*.
                            +1
                            Плюсую, CIElab штука отличная и здесь была бы очень уместна, но автору, думаю, создаст проблем с кодированием :). Опять же ему придется тогда задуматься о исходном цветовом пространстве, а в эти подробности мало кто рискует лезть :).
                            HSL и иже с ними народ использует потому как реализуется легко (и много где уже реализовано штатно)
                            0
                            А можно попросить простым языком сказать, чем эквализация отличается от процедуры: photoshop --> Shift+Ctrl+L
                              0
                              Эквализация — автоматический подбор «кривых» (Curves) такой, что гистограмма в инструменте «уровни» (Levels) становится примерно горизонтальной.

                              То есть, это несколько более общий инструмент, чем авто-уровни. Я уверен, что в фотошопе есть автоэквализация, и можно вызвать её в любом цветовом пространстве и на любых каналах (а не только на RGB или канале I в HSI, как в статье). Ну а если нет встроенной, наверняка есть плагин.
                              +7
                              Забавно. Кто-то открыл для себя Гонзалеса&Вудза двадцатилетней давности…
                                0
                                А был еще Гонсалес и Уинтц 35-летней давности…
                                0
                                Во-первых, это не эквализация, а нормирование гистограммы, строго говоря. Потому что выравнивания распределения значений по всему диапазону не происходит, происходит только линейное отображение исходного диапазона значений на максимальный.
                                Во-вторых, динамический диапазон изображения не меняется, потому что не меняется число градаций значения (яркости).
                                  +2
                                  Там нелинейное отображение, явно видно же по результату. По коду — вначале формируется обычная гистограмма, затем её превращают в кумулятивную ф-ю распределения и под конец по этой ф-и цвет каждого пикселя заменяют на % пикселей имеющих равную или меньшую с этим пикселем яркость умноженный на соответствующий коэф. для нормировки.

                                  Про динамический диапазон тоже неверно — DR есть соотношение между максимально представимым и минимально представимым уровнем сигнала различимого от шума. Число градаций накладывает ограничения на DR из-за шумов квантования, но все же является самостоятельным параметром. Хотя автору конечно следовало говорить о кажущемся динамическом диапазоне, технически-то новых деталей действительно не появляется.
                                  –2
                                  Я не совсем понял суть стереометрических операций. Что мешало взять классические семь цветов, а не транпонировать несчастное RGB пространство в 6. Более наукообразно бы происходило, имхо.
                                    0
                                    В «семь цветов» (если речь о спектре) преобразовывать замучаетесь, плюс это даст лишь одну координату из трех нужных для описания цвета+яркости пикселя. А по-научному надо в CIElab бы преобразовать, оно специально для этого проектировалось
                                      +2
                                      Боже, вы из какого класса? Не обижайтесь, просто давите в себе эти детские стереотипы про семь цветов (которых вообще бесконечное число, и любой монохроматический свет может быть с полным правом назван «базовым») и семь нот (которых в европейской музыке двенадцать, а на самом деле семь относится к числу ступеней звукоряда. Хотя бывает и пентатоника — пять ступеней).

                                      «Семь цветов» имеет смысл только для запоминания порядка их при разложении белого цвета в спектроскопе. Они никакие не базовые, и в общем эта примитивизация приносит больше вреда, чем пользы. В европейских странах, опять же, их традиционно «шесть», как это в знаменитом трактате Ньютона о цвете (где он изложил очень много заблуждений относительно его природы — вот так неразвита была эта часть физики в его время).

                                      Рэлей (физик, известный работами в волновой физике) хвастался, что различает волны, отличающиеся на 1 нм. Он, значит, видел 360 разных чистых цветов. И с полным правом мог сказать, что их не 6 и не 7, а вот 360.

                                      И наконец, мы говорим о цветовом пространстве в компьютере. Во первых, здесь есть не-спектральные (смешанные) цвета, такие, как пурпурный — его вообще нет в радуге (монохроматического света, который создаёт такое цветовое ощущение, не существует). Во вторых, мы пытаемся представить цвет в некотором роде в цилиндрической системе координат (ρ=яркость, φ=цвет, z=насыщенность), где цвет представляется угловой координатой, а полный круг φ в градусах имеет значение 360, делится нацело на 60, что удобно при рассмотрении (получаются понятные круглые числа).
                                        0
                                        Я как раз был ПРОТИВ СТЕРЕОТИПА о трех составляющих (хотя я в курсе про колбочки и палочки). Мне хотелось понять почему автор так к ней был привязан. Вам же хочу посоветовать «давить в себе стереотипы», что стоит переходить на личности — обсуждайте вопрос, а не оппонента. Можете заняться популяризацией науки, но прошу вас не быть навязчивым с тривиальными фактами.
                                          0
                                          Извините, я не уловил в вашем сообщении никакого сарказма. Думал, вы на полном серьёзе предлагаете рассматривать семь цветов радуги.

                                          Ну, «три составляющих» имеет вполне конкретное обоснование, в отличие от «семи цветов радуги». И это как раз не стереотип, а вполне работоспособная модель цветового восприятия большого числа людей. Не всех, некоторые видят больше цветов. Часто это женщины, т.к. цветовосприятие сцеплено с полом (гены в X-хромосоме), а у них таких хромосом две, и поэтому могут образовываться колбочки не трёх, а большего числа типов (теоретически должно быть возможно получить женщину с пятью типами колбочек, плюс палочки — в неокоторых условиях это будет давать шесть типов разных по спектральной чувствительности сенсоров, т.е. гексахроматизм).
                                            0
                                            Я как-то работал в рекламе (тв и пресса на региональном рынке), часто приходилось переводить из одного цветового пространства в другое. Там, у продвинутых полиграфистов, популярны книги Дэна Моргулиса, который ратует за использование Lab-пространства для режима редактирования изображений (используя гистограммы и кривые в том числе). Комментируя, я хотел указать что использование RGB-пространства не вполне корректно, но, так как я занимался полиграфией лет 15 назад, то решил что сейчас, наверное, есть более точные методы, чем использование Lab. И предложил школьный курс оптики (в незнании которого вы меня обвинили). Я заложил погрешность в своем предложении используя слово «наукообразность», а не «научность», т.е. указывал на иронию. Да, могу дополнить вашу коллекцию фактов о цветах, что самым разборчивым в цветовых оттенках, среди художников, был Куинджи (цветовой диапазон его картины «Лунная ночь на Днепре» кагбе намекает). В записках Репина это есть, и там было про прибор для измерения чувствительности глаза к тонким нюансам изобретенным Дмитрием Ивановичем Менделеевым).
                                      0
                                      Студенческая работа, средненький уровень. Новизной конечно и не пахнет, но плюсик за использование HSI.
                                      Как сделать работу получше:
                                      1) Посмотреть более одного метода нормализации :), сравнить их между собой. Желательно включить что-нибудь из HDR tone mapping поинтереснее
                                      2) Нормальные иллюстрации нормального размера с врезками деталей
                                      3) Разбор не только достоинств но и недостатков описываемых методов :D
                                      4) Не изобретайте велосипедов, для обработки изображений специально создавалось пространство CIElab.
                                        0
                                        Мы как раз пытались определять через image magic цветная ли фотография или нет.
                                        Переводим изоражение в HSL и смотрим коэфицент S, посчитанный со всех пикселей.
                                        Но входные данные были со сканера и несли в себе оттенок на серых изображениях. И получалось так, что бледные цветные очень плохо отличались от серых с оттенком. Эквализация трех каналов легко исправила это. Оттенок с серых фотографий пропадал на 99% и стал легко детектироваться по порогу насыщенности.
                                          –1
                                          Спасибо за статью. Главное, — ясно и четко описали преобразование в HSI.

                                          Only users with full accounts can post comments. Log in, please.