Назад
62

Матчинг гистограмм: метод доменной адаптации

62

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

Такой метод может быть полезен для аугментации. В albumentations есть реализация этого метода: HistogramMatching. Он окажется нужным, когда у вас не хватит картинок из какого-нибудь домена, а вы захотите быстро набрать побольше похожих картинок.

Например, у вас в датасете много фотографий в светлом помещении, а на проде внезапно появились фото в темном помещении. Вы берете матчинг гистограмм, превращаете некоторые светлые картинки из датасета в темные, добавляете себе в сет и переобучаете модель! Это, конечно, будут не трушные размеченные данные с камер, но зато быстро и дешево 🙂

Гистограмма и CDF

Вспомним, что такое гистограмма изображения. Сначала рассмотрим Изображение 1 с пикселями яркостью в диапазоне [0, 3]:

Нам также понадобится функция распределения (CDF, или cumulative distribution function): \( CDF_{X}(x) = P(X \leq x) \)

Эквализация, или выравнивание гистограммы

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

Почему именно такая формула? Это связано с тем, что мы маппим именно на равномерное распределение. Более подробно можно прочитать в книге “Цифровая обработка изображений” Р. Гонсалеса (“3.3.1. Эквализация гистограммы”)

Применим получившийся маппинг и получим эквализованное изображение 1:

Алгоритм матчинга

  1. Эквализуем гистограмму изображения 1;
  2. Эквализуем гистограмму изображения 2;
  3. Формируем таблицу матчинга и матчим 🙂

Рассмотрим Изображение 2 и нарисуем CDF Изображения 1 и 2 вместе:

Эквализуем гистограммы этих двух изображений и найдем маппинг между исходным и эквализованным изображениями:

Составим общую таблицу значений яркости пикселей и найдем матчинг из CDF Изображения 1 в CDF Изображения 2:

Можно не делать эквализацию, а матчить значения CDF напрямую. На графике это выглядит так:

В итоге мы получим Изображение 1, сматченное на Изображение 2:

Замечания

Зачем мы вообще делаем эквализацию, если можно матчить CDF напрямую?

Эквализация может улучшить результат матчинга. Особенно важно это в том случае, если изображения слишком разные по контрасту и яркости.

А как быть с цветными картинками?

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

Телеграм-канал

DeepSchool

Короткие посты по теории ML/DL, полезные
библиотеки и фреймворки, вопросы с собеседований
и советы, которые помогут в работе

Открыть Телеграм

Увидели ошибку?

Напишите нам в Telegram!