Восстановление неравномерно освещенных изображений

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

image image

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

Исходное изображение
image

Алгоритм Autolevel
image

Гамма коррекция
image

Линейная коррекция
image

Multi-Scale Retinex
image

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

Алгоритм Autolevel


Алгоритм Autolevel базируется на принципе: самый темный цвет на изображении является черным, а самый светлый белым. То есть, если изображения содержит небольшие очень яркие или очень темные участки, то есть большая вероятность что алгоритм не даст желаемого результата. Также Autolevel очень чувствителен к импульсному шуму.

Пример

Исходное изображение
image

Алгоритм Autolevel
image

Гамма-коррекция


Алгоритм «Гамма-коррекция» основан на степенном преобразовании интенсивностей пикселей изображения. В этом алгоритме интенсивность темных пикселей изображения увеличивается больше чем интенсивность светлых пикселей.

Гамма-коррекция
image

Retinex


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

Алгоритм SSR (Single-Scale Retinex) выравнивает освещенность изображения, сохраняя локальный контраст в плохо и ярко освещенных областях. Коррекция происходит по формуле:

R(x, y, sigma) = log[I(x, y)] — log[I(x, y)*G(x, y, sigma)]

где G — Ггауссиан, sigma — коэффициента размытия, а "*" — оператор свертки.
После применения SSR, основная часть полученных пикселей принадлежит диапазону [-1; 1], для визуализации изображения, значения необходимо нормализовать по формуле:
I = 255*I + 127

Алгоритм Single-Scale Retinex, sigma = 18
image

Алгоритм Single-Scale Retinex, sigma = 400
image

Алгоритм Single-Scale Retinex, sigma = 4000
image

Алгоритм MSR (Multi-Scale Retinex) — это взвешенная сумма SSR с разными коэффициентами размытия.
MSR = w1·SSR1 + w2·SSR2 +… + wn·SSRn
причем w1+w2+...+wn=1. Обычно, на практике n=3

Алгоритм Multi-Scale Retinex, sigma=7, 480, 4800
image

Алгоритмы Retinex применяется к яркостному каналу, поэтому, после него необходимо скорректировать хроматические компоненты, например линейно увеличив контрастность или насыщенность

Алгоритм Multi-Scale Retinex + коррекция контраста
image

Источники


  • Все изображения взяты с сайта nasa.gov
  • Информация об алгоритмах SSR и MSR тут
  • Все фотографии обработаны с помощью онлайн фоторедактора retinex.net
AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 38

    +4
    На приведенных фото нормальный результат только с Autolevel.
    А прочитав название статьи, решил что речь пойдёт про некое подобие градиентного фильтра в Lightroom… Ан нет…
      0
      Скорее уж что-то на подобии D-lighting
        +1
        На мой взгляд MSR лучше ввсего справился с задачей выравнивания освещения по всему изображению. Все объекты что на фото с маяком что на фото с девочкой стали хорошо видны
          0
          MSR из фотографии сделал эффект веб-камеры 0.3 мегапикселя, с узким световым диапазоном.
        +7
        По моему все алгоритмы делают только хуже.
          +3
          Согласен. Наименее «хуже» сделал автолевел, остальные точно испортили изображение.
            0
            Угу, ладно бы если оно только с цветом что-то делало, а то добавило тени, которых в оригинале попросту не было.
              0
              Угу, ладно бы если оно только с цветом что-то делало, а то добавило тени, которых в оригинале попросту не было

              Тень от белого в алгоритме это ок.
              0
              Не согласен. Исходное изображение с маяком темное, объекты типа машины и деревья на заднем плане совсем не видны. MSR делает все объекты хорошо видимыми, но фотография становится менее естественна. Гамма коррекция оставляет фото естественным, но алгоритм либо высветляет либо затемняет изображение, что не всегда хорошо. А автолевел сделал маяк слишком белым, а машина и деревья слева так и не видны.
                0
                Поэтому я говорю, что всё плохо. Зачем этот топик не понятно. Уж лучше бы серию переводов статей по Lightroom написал кто нибудь.
                  +1
                  На исходном изображении с маяком хотя бы понятно, какое время суток. В общем, исходные изображения подобраны плохо.
              +2
              Также согласен. Вот пример как можно улучшить изображение
              image
              Полная статья здесь
              И хотя там совершенно другой метод обработки требующий 3 снимков с разной экспозицией, можно попробовать применить его к нескольким снимкам, полученным с одного.
                0
                Кстати у моей камеры есть подобный режим съёмки. Она делает три снимка с разной экспозицией а потом на основе их делает один. По такому же принципу есть режим и с разным фокусным расстоянием.
                  0
                  Камера Sony? ;)
                  У меня тоже есть такой режим, но результат мне не нравится. Всегда выходит «пере-hdr».
                    0
                    Canon PowerShot SX40 HS. Достаточно норм выходит, но никогда не пользуюсь, люблю мануально всё настроить.
                      +3
                      Такой режим называется брекетинг экспозиции. И к данной статье не имеет никакого отношения. Равно как и статья не имеет отношения к улучшению (восстановлению) фотографии.
                        –1
                        Статья про «Восстановление неравномерно освещенных изображений». А несколько снимков с разной экспозицией например можно получить из одиночного RAW снимка.
                          –1
                          Несколько снимков с разной экспозицией не нужно получать из одиночного RAW. Это метод-костыль придуман для того, чтобы обманывать софт для tone-mapping, который не понимает RAW на входе. Тон-маппинг и приведенные выше алгоритмы могут быть применены к RAW-данным непосредственно, в общем случае.
                        0
                        Не «пере-hdr», опять же, а задранный выше крыши локальный контраст…
                      0
                      Ну да, если есть хорошая камера и задача стоит сделать хорошие снимки, то этот метод обработки актуален.
                      А когда задача стоит улучшить восприятие практически не видимых объектов на данной фотографии, то MSR и Гамма коррекция могут прекрасно с этим справится.
                        +2
                        3 снимка — это называется «брекетинг». для HDR — незаменимая штука.
                          0
                          Статья кажется про улучшение уже сделанных изображений?
                      0
                      Только результат AutoLevel можно воспринимать как естественный.
                        +1
                        задача не сделать изображение более естественным, а «выровнять» освещение. иногда это необходимо при распознавании образов
                          +1
                          Вот в такой постановке уже можно о чем-то говорить.
                          К сожалению, ни в заголовке, ни в описании нет указания, что цель — распознавание образов.
                          Впрочем, тогда нужно рассматривать другие критерии — насколько такие улучшения могут исказить образ
                            +3
                            А почему тогда в статье написано «Для улучшения визуального качества изображений»?
                              –1
                              Потому что качество изображения после обработки улучшилось. А именно, стали видными такие объекты как: фонарь, машина, деревья.
                              image
                              image
                                +4
                                визуальное качество изображения как раз-таки ухудшилось: появились пересветы на стене дома, непонятная тень вокруг маяка, изменилось время суток. А фонарь, машину, деревья, табличку, подпорки у дерева — всё это было видно и так.
                                  0
                                  Никак не могу с вами согласиться. Видимо, сколько людей столько и мнений.
                                    +1
                                    В том то и дело, что эти методы, гхм, не совсем для людей (и совсем не для людей).
                                    Если перестать говорить «улучшилось», а начать пользоваться строгими терминами, вроде «повышен локальный контраст» или что-то в этом духе, все встанет на свои места…
                          +10
                          Исходное изображение
                          image
                          autolevel
                          image
                          Multi-Scale Retinex
                          image
                            +17
                            Вот с этого и надо было начинать…
                            Потому как слово «улучшение» может соответствовать чему угодно — от модной нынче «обработки фотографий» до алгоритмов машинного зрения.
                            Художественной ценности вышеописанные алгоритмы фотографиям явно не прибавляют. А вот ориентирующийся в дыму и тумане робот за такое улучшение будет благодарен. Как и дорожная камера.
                            0
                            Вопрос не по теме: а нет ли в numpy быстрого оператора свертки, который бы передавал функции на питоне окно исходного массива, и быстро пробегал бы этим окном весь массив?
                              +1
                              Я иногда для вытаскивания объектов из тени пользуюсь Enfuse-ом (open-source утилита).
                              Беру фотографию, делаю из нее несколько с разной экспозицией (подтягиваю уровень белого, чтобы линейно увеличить яркость).
                              А потом загоняю их все в Enfuse. На выходе получается фотография с выровненной экспозицией без потери цвета и прочих искажений.
                              Алгоритм получается похожим на Multi-Scale Retinex, но Enfuse аккуратно обращается с границами объектов, поэтому артефактов со свечением и тенями вокруг объекта не возникает.
                              Детали можно узнать тут.
                                0
                                Адаптивная чуствительность нужна фотоаппаратам… Как у живого глаза, чтобы в яркое вглядывался меньше, а затенённое — больше, и давал картинку с относительно выровненной яркостью… когда придумают?..
                                  0
                                  HDR (при склейке из нескольких фотографий с разной экспозицией) является примерно тем, что описываете.
                                    0
                                    С одним отличием — я говорю, что это хорошо бы делать на лету, самому фотоаппарату. Возможно, за счет архитектуры матрицы…

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