Выравнивание гистограммы CLAHE – OpenCV
Выравнивание гистограммы – это метод, используемый при обработке изображений для повышения контрастности изображения путем перераспределения интенсивности пикселей таким образом, чтобы максимизировать общую яркость и детализацию. Этот метод работает путем настройки частотного распределения значений пикселей изображения так, чтобы результирующее изображение имело однородную гистограмму. Равномерная гистограмма гарантирует, что каждый пиксель изображения имеет равную вероятность появления, в результате чего получается хорошо распределенное изображение с повышенной контрастностью.
Выравнивание гистограмм является важным инструментом обработки изображений и широко используется в различных приложениях, включая медицинскую визуализацию, дистанционное зондирование и компьютерное зрение. Этот метод особенно полезен для улучшения изображений с плохой контрастностью или яркостью, например, снятых в условиях низкой освещенности или переэкспонированных.
Выравнивание гистограмм является важным инструментом обработки изображений и широко используется в различных приложениях, включая медицинскую визуализацию, дистанционное зондирование и компьютерное зрение. Этот метод особенно полезен для улучшения изображений с плохой контрастностью или яркостью, например, снятых в условиях низкой освещенности или переэкспонированных.
Несмотря на свою эффективность в повышении контрастности изображения, выравнивание гистограммы может привести к некоторым артефактам в результирующем изображении, таким как чрезмерное усиление шума и потеря деталей. Поэтому с годами были разработаны различные варианты и улучшения этого метода, такие как адаптивное выравнивание гистограммы, адаптивное выравнивание гистограммы с ограничением контраста и локальное выравнивание гистограммы, среди других.
Теперь давайте немного разберемся с CLAHE.
КЛЭ
Адаптивное выравнивание гистограммы с ограниченным контрастом (CLAHE) — это вариант выравнивания гистограммы, который широко используется в приложениях обработки изображений для улучшения контрастности изображения, избегая при этом чрезмерного усиления шума и сохраняя детали изображения. Основная идея CLAHE заключается в том, чтобы выполнить выравнивание гистограммы локально, в меньших областях изображения, а не глобально.
При традиционном выравнивании гистограммы изображение делится на небольшие непересекающиеся области или фрагменты изображений, и каждый фрагмент изображения выравнивается индивидуально. Этот процесс может привести к чрезмерному усилению шума на фрагментах изображений с низкой контрастностью, что приводит к зашумленному и искусственно выглядящему изображению. Напротив, CLAHE делит изображение на перекрывающиеся области и применяет выравнивание гистограммы к каждой области отдельно. Это позволяет улучшить контрастность, сохраняя при этом локальные детали и избегая чрезмерного усиления шума.
CLAHE включает два основных этапа: усиление контраста и ограничение контраста. На первом этапе к каждой небольшой области изображения применяется локальное выравнивание гистограммы, что приводит к увеличению контрастности. На втором этапе контрастность изображения ограничивается путем применения к гистограмме нелинейной функции, так что количество пикселей с очень высокой или очень низкой интенсивностью уменьшается. Нелинейная функция определяется параметром, называемым пределом клиппирования, который определяет величину применяемого ограничения контрастности.
Предел клипа — важный параметр в CLAHE. Он определяет максимальную степень усиления контраста, которую можно выполнить в каждой области, прежде чем контраст будет ограничен. Если предел обрезки установлен слишком высоко, изображение может стать чрезмерно улучшенным и иметь искусственные эффекты, такие как ореолы по краям или общий размытый вид. С другой стороны, если предел ограничения установлен слишком низко, усиление контрастности может быть недостаточным, и изображение может выглядеть тусклым.
CLAHE имеет несколько преимуществ по сравнению с традиционным выравниванием гистограммы. Во-первых, он позволяет сохранить локальные детали и более эффективно усилить контраст. Во-вторых, это позволяет избежать чрезмерного усиления шума, что особенно важно в приложениях медицинской визуализации, где изображения могут быть зашумлены. Наконец, это простой и эффективный в вычислительном отношении алгоритм, что делает его пригодным для приложений реального времени.
В заключение, CLAHE — это мощный метод повышения контрастности изображения при сохранении локальных деталей и предотвращении чрезмерного усиления шума. Он широко используется в различных приложениях, включая медицинскую визуализацию, дистанционное зондирование и компьютерное зрение. Его способность адаптироваться к локальным изменениям контрастности и избегать чрезмерного усиления шума делает его ценным инструментом для улучшения изображений во многих областях.
В этом уроке будет продемонстрирован процесс использования адаптивного выравнивания гистограммы с ограниченной контрастностью (CLAHE) для выравнивания изображений.
С помощью этого алгоритма можно повысить контрастность изображений. Кроме того, CLAHE можно применять к цветным изображениям, причем лучшие результаты достигаются при применении алгоритма исключительно к каналу яркости изображения HSV, а не при выравнивании всех каналов изображения BGR.
При использовании CLAHE важно помнить о двух параметрах: clipLimit и tileGridSize.
ClipLimit устанавливает порог ограничения контрастности и имеет значение по умолчанию 40. Между тем, tileGridSize определяет количество плиток в каждой строке и столбце при разделении изображения для приложения CLAHE, и его значение по умолчанию — 8x8.
Теперь достаточно теории, давайте рассмотрим, как мы можем использовать CLAHE для выравнивания гистограммы.
Прежде чем мы перейдем к коду, нам сначала нужно убедиться, что модуль opencv установлен на нашем компьютере, а если нет, то нам нужно запустить команду, показанную ниже.
Команда
pip3 install opencv-python
Рассмотрим код, показанный ниже.
Пример
import cv2
import numpy as np
# Reading the image from the present directory
image = cv2.imread("aircraft-ww2.jpeg")
# Resizing the image for compatibility
image = cv2.resize(image, (500, 600))
# The initial processing of the image
# image = cv2.medianBlur(image, 3)
image_bw = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# The declaration of CLAHE
# clipLimit -> Threshold for contrast limiting
clahe = cv2.createCLAHE(clipLimit = 5)
final_img = clahe.apply(image_bw) + 30
# Ordinary thresholding the same image
_, ordinary_img = cv2.threshold(image_bw, 155, 255, cv2.THRESH_BINARY)
# Showing all the three images
cv2.imshow("ordinary threshold", ordinary_img)
cv2.imshow("CLAHE image", final_img)
cv2.waitKey()
Объяснение
Этот код выполняет простую задачу обработки изображений с использованием библиотеки OpenCV на Python.
Сначала импортирует необходимые библиотеки: OpenCV и NumPy. Затем он считывает изображение с именем «aircraft-ww2.jpeg» из текущего каталога и изменяет его размер до 500x600 для совместимости.
Затем изображение преобразуется в оттенки серого с помощью функции cv2.cvtColor(). Результирующая переменная image_bw сохраняет изображение в оттенках серого.
После этого код применяет адаптивное выравнивание гистограммы с ограниченной контрастностью (CLAHE) к изображению в оттенках серого с помощью функции cv2.createCLAHE(). Параметр clipLimit имеет значение 5, которое определяет порог ограничения контрастности. Полученное изображение затем корректируется путем добавления значения 30, чтобы увеличить его яркость.
В дополнение к изображению CLAHE код также выполняет обычную пороговую обработку изображения в оттенках серого с помощью функции cv2.threshold(). Пороговое значение установлено на 155, что означает, что любое значение пикселя выше 155 устанавливается на 255 (белый), а любое значение ниже 155 устанавливается на 0 (черный). Полученное изображение сохраняется в переменнойnormal_img.
Наконец, код отображает все три изображения с помощью функции cv2.imshow(), где «обычный порог» представляет собой обычное изображение с пороговым значением, а «изображение CLAHE» представляет изображение, улучшенное с помощью CLAHE. Код ожидает нажатия клавиши, прежде чем закрывать окна с помощью cv2.waitKey().
Чтобы запустить приведенный выше код, нам нужно запустить команду, показанную ниже.
Команда
python3 main.py
После запуска приведенной выше команды мы можем ожидать, что результат будет таким же, как показано ниже.
Выход
Слева у нас есть исходное изображение без CLAHE, а изображение справа — то, где мы использовали CLAHE.
Теперь давайте воспользуемся еще одним примером.
Где мы изменим cliplimit и titleGridSize.
Рассмотрим код, показанный ниже.
Пример
import cv2
import numpy as np
# Reading the image from the present directory
image = cv2.imread("aircraft-ww2.jpeg")
# Resizing the image for compatibility
image = cv2.resize(image, (500, 600))
# The initial processing of the image
# Uncomment the line below to apply median filtering
# image = cv2.medianBlur(image, 3)
image_bw = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# The declaration of CLAHE
# clipLimit -> Threshold for contrast limiting
# tileGridSize -> Number of tiles in the row and column
clahe = cv2.createCLAHE(clipLimit=10, tileGridSize=(8, 8))
final_img = clahe.apply(image_bw)
# Adjust the brightness of the output
final_img = cv2.add(final_img, 50)
# Showing all the three images
cv2.imshow("Original image", image)
cv2.imshow("CLAHE image", final_img)
cv2.waitKey()
Объяснение
Сначала импортируем необходимые библиотеки OpenCV и NumPy.
Затем мы читаем изображение с именем «aircraft-ww2.jpeg» из текущего каталога с помощью функции cv2.imread() и сохраняем его в переменной «image». Изменяем размер изображения до 500 x 600 пикселей, чтобы обеспечить совместимость с окном дисплея.
Затем мы преобразуем изображение в оттенки серого с помощью функции cv2.cvtColor() и сохраняем его в новой переменной с именем «image_bw».
Затем мы создаем объект адаптивного выравнивания гистограммы с ограниченным контрастом (CLAHE), используя функцию cv2.createCLAHE(). Мы установили параметр clipLimit равным 10, который устанавливает порог ограничения контрастности, и параметр tileGridSize равным (8,8), который устанавливает количество плиток в строке и столбце.
Затем мы применяем алгоритм CLAHE к изображению в оттенках серого, используя метод apply() объекта CLAHE, и сохраняем результат в новой переменной с именем «final_img».
Наконец, мы регулируем яркость выходного изображения, добавляя значение 50 к переменной Final_img с помощью функции cv2.add(). Мы показываем исходное изображение и изображение, улучшенное CLAHE, бок о бок с помощью функции cv2.imshow() и ждем нажатия клавиши с помощью функции cv2.waitKey().
Чтобы запустить приведенный выше код, нам нужно запустить команду, показанную ниже.
Команда
python3 main.py
После запуска приведенной выше команды мы можем ожидать, что результат будет таким же, как показано ниже.
Выход
Заключение
В заключение, адаптивное выравнивание гистограммы с ограниченной контрастностью (CLAHE) — это мощный метод улучшения изображения, который может улучшить контрастность и динамический диапазон изображения.
С помощью OpenCV легко реализовать CLAHE на изображениях в оттенках серого и цветных изображениях. Настраивая параметры clipLimit и tileGridSize, мы можем точно настроить производительность алгоритма CLAHE в соответствии с нашими потребностями. В целом CLAHE — полезный инструмент для обработки изображений, который может помочь улучшить визуальное качество изображений в различных приложениях.