OpenCV (45) --- Обработка выравнивания гистограммы: устранение дымки

OpenCV
OpenCV (45) --- Обработка выравнивания гистограммы: устранение дымки

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

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

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

Реализовать размытие изображения в градациях серого

В OpenCV он предоставляет функцию cv2.equalizeHist() для достижения выравнивания гистограммы, Полное определение этой функции выглядит следующим образом:

def equalizeHist(src, dst=None):

src: необработанное изображение, должно быть 8-битным одноканальным необработанным изображением.

dst: возвращаемое значение, возвращает результат обработки усреднения гистограммы

Далее, давайте использовать эту функцию для достижения выравнивания гистограммы изображения в градациях серого.Код выглядит следующим образом:

import cv2
import matplotlib.pyplot as plt

img = cv2.imread("45.jpg", 0)
equ = cv2.equalizeHist(img)

cv2.imshow("1",img)
cv2.imshow("2",equ)
plt.figure("原始图像直方图")
plt.hist(img.ravel(), 256)
plt.figure("均衡化图像直方图")
plt.hist(equ.ravel(), 256)
plt.show()

cv2.waitKey()
cv2.destroyAllWindows()

После запуска эффект следующий:

在这里插入图片描述

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

原始图像

处理后的图像

Реализовать устранение дымки цветного изображения

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

Давайте используем код для реализации выравнивания гистограммы цветного изображения.Код выглядит следующим образом:

import cv2
import matplotlib.pyplot as plt

img = cv2.imread("50.jpg")

blue = img[:, :, 0]
green = img[:, :, 1]
red = img[:, :, 2]
blue_equ = cv2.equalizeHist(blue)
green_equ = cv2.equalizeHist(green)
red_equ = cv2.equalizeHist(red)
equ = cv2.merge([blue_equ, green_equ, red_equ])

cv2.imshow("1",img)
cv2.imshow("2",equ)
plt.figure("原始图像直方图")
plt.hist(img.ravel(), 256)
plt.figure("均衡化图像直方图")
plt.hist(equ.ravel(), 256)
plt.show()

cv2.waitKey()
cv2.destroyAllWindows()

Здесь нам просто нужно использовать функцию equalizeHist() для выравнивания каждого цвета цветного изображения. Конечно, важно отметить, что после того, как мы обработали каждый цвет, нам нужно снова объединить изображения. После запуска эффект следующий:

彩色图像处理