Глубокое обучение полностью изменило дисциплины компьютерного зрения и обработки изображений. Мы хорошо осведомлены о том, как компьютерное зрение изменилось благодаря исследованиям, связанным с классификацией объектов, обнаружением объектов, сегментацией объектов, распознаванием человеческого лица, оценкой позы человека и многим другим. Но для меня было весьма удивительно, когда я наткнулся на романы в области обработки изображений. Я хотел бы упомянуть здесь две очень известные исследовательские работы: LSID и ProGANSR, проверьте их, если вы еще не сделали.

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

В этой части я объясню концепцию выравнивания гистограммы изображений для улучшения контраста. Код этого блога доступен в моем репозитории - › https://github.com/akanimax/multithreaded-histogram-equalization-cpp . Код написан на C ++ и использует OpenCV только для чтения изображений. Я также отклоняюсь от моих обычных реализаций Python, поскольку это серия статей Назад к основам. Итак, я подумал, что здесь более уместно использование C ++.

Вступление

Иногда изображения, полученные из разных источников, не имеют достаточного контраста и выглядят размытыми. Хотя они могут быть достаточно яркими, они все равно выглядят так, будто с ними что-то не так.

Яркость изображений связана с амплитудой их сигнала, в то время как их низкая контрастность является ошибкой в ​​частоте сигнала. На приведенной выше диаграмме показаны примеры двух низкоконтрастных изображений. Слева - низкоконтрастное рентгеновское изображение грудной клетки, а справа - низкоконтрастная версия известного снимка Лены (это изображение широко используется при обработке изображений).

Для простоты я рассматриваю изображения в оттенках серого. но эту концепцию можно применить и к цветным изображениям RGB.

Есть ли способ математически обработать эти сигналы и исправить их? К счастью, их немного. Во-первых, очень простая техника под названием Линейное контрастное растяжение. Но я не буду здесь подробно объяснять это. Взгляните на формулу выполнения этой растяжки:

R (x, y) = (I (x, y) - Imin) * ((Lmax - Lmin) / (Imax - Imin)) + Lmin

I (x, y) = ›input Изображение, определенное как функция координат

Imax, Imin = ›максимальное и минимальное значения изображения

Lmax, Lmin = ›максимальный и минимальный диапазон значений сигнала (обычно 255, 0).

Можно увидеть, как диапазон значений входного изображения расширяется до полного диапазона возможных значений сигнала. Обратите внимание, что для конкретной реализации мы должны округлить значения R (x, y) до ближайших целых чисел, чтобы оборудование могло отображать значения пикселей изображения.

Хотя этот метод довольно полезен и прост в реализации, он уязвим для выбросов в пикселях. Предположим, что в изображении есть все пиксели в диапазоне [200–255], кроме одного, который полностью черный, т.е. имеет значение 0, тогда растяжение контраста не будет работать вообще.

Более надежным методом является выравнивание гистограммы.

Выравнивание гистограммы

Гистограмма - это структура данных, в которой хранятся частоты всех уровней пикселей в изображениях. Под частотой я просто подразумеваю количество пикселей в изображении, которые имеют это конкретное значение интенсивности пикселей. Количество интервалов для гистограммы в этом случае принимается равным количеству уровней интенсивности пикселей в изображении. Обычно это 0–255.

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

T (x, y) = (L - 1) * (сумма (k, {0 - P (I (x, y))}, P k (I (x, y))) )

sum (k, {a, b}, f k (x)) = ›суммирование по f (x), где k идет от a к b .

Чтобы понять приведенную выше формулу, нам необходимо знать концепцию C umulative M ass F unction (CMF ). CMF случайной величины при определенном значении дает вероятность того, что случайная величина может принять данное значение. Итак, в основном в формуле HE мы преобразуем значение интенсивности входного пикселя в такое значение, которое синхронизируется с CMF входного изображения. Это действительно сложно передать, но вы поймете лучше, если изучите код. Эта операция обеспечивает выравнивание гистограммы результирующего изображения.

Реализация

Учитывая все математические объяснения метода, я написал реализацию на C ++ для выполнения этой операции. Обратите внимание, что я использовал OpenCV только для чтения изображений. Основная логика выравнивания гистограмм не использует никаких библиотек. Для повышения производительности я применил многопоточность на базе ЦП. Учитывая количество потоков в качестве аргумента командной строки, я делю изображение на это множество вертикальных полос и передаю их нескольким потокам для обработки. Обратите внимание, что вычисление гистограммы по-прежнему выполняется последовательно, поскольку для этого требуется глобальная информация.

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

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

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

Заключительные комментарии

Это первая часть серии под названием Back-2-Basics, в которой я буду рассматривать и объяснять некоторые из основных концепций, которые важны и образуют основу для более сложных концепций. По завершении серии я создам RI со ссылками на все статьи этой серии.

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