Понимание гамма-коррекции: методы и примеры кода для улучшения изображения

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

Что такое гамма-коррекция?
Гамма-коррекция – это метод, используемый для компенсации нелинейной зависимости между значениями пикселей и отображаемой яркостью изображения. Человеческое восприятие яркости нелинейно, и устройства отображения, такие как мониторы и телевизоры, также имеют нелинейные характеристики. Гамма-коррекция помогает добиться более приятного и точного представления изображения путем сопоставления значений пикселей с новым диапазоном.

Метод 1: ручная гамма-коррекция
Один простой метод — вручную настроить значение гаммы с помощью степенной функции. Значение гаммы определяет форму гамма-кривой, которая управляет регулировкой яркости или контрастности. Вот пример фрагмента кода на Python:

import numpy as np
import cv2
def gamma_correction(image, gamma):
    # Create a lookup table for gamma correction
    table = np.array([((i / 255.0)  gamma) * 255 for i in range(256)]).astype(np.uint8)
    # Apply gamma correction using the lookup table
    corrected_image = cv2.LUT(image, table)
    return corrected_image
# Load the image
image = cv2.imread('input_image.jpg', 0)  # Read as grayscale
# Apply gamma correction with gamma = 1.5
corrected_image = gamma_correction(image, 1.5)
# Display the results
cv2.imshow('Original Image', image)
cv2.imshow('Corrected Image', corrected_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

Метод 2: автоматическая гамма-коррекция
В некоторых случаях может быть желательно автоматически определить оптимальное значение гаммы для гамма-коррекции. Один из подходов — использовать выравнивание гистограммы для расширения динамического диапазона изображения, а затем применить степенное преобразование. Вот пример фрагмента кода на Python с использованием OpenCV:

import cv2
def auto_gamma_correction(image):
    # Apply histogram equalization
    equalized_image = cv2.equalizeHist(image)
    # Normalize pixel values to the range [0, 1]
    normalized_image = equalized_image / 255.0
    # Apply power-law transformation with automatic gamma value
    gamma = 1.0 / np.mean(normalized_image)  # Calculate gamma as the reciprocal of the mean
    corrected_image = np.power(normalized_image, gamma)
    # Scale the pixel values back to the range [0, 255]
    corrected_image = (corrected_image * 255).astype(np.uint8)
    return corrected_image
# Load the image
image = cv2.imread('input_image.jpg', 0)  # Read as grayscale
# Apply auto gamma correction
corrected_image = auto_gamma_correction(image)
# Display the results
cv2.imshow('Original Image', image)
cv2.imshow('Corrected Image', corrected_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

Гамма-коррекция — важнейший метод обработки изображений, позволяющий улучшить визуальное качество изображений. В этой статье мы исследовали два метода гамма-коррекции: ручную настройку и автоматическую гамма-коррекцию. Приведенные примеры кода демонстрируют, как реализовать эти методы с помощью Python и OpenCV. Применяя гамма-коррекцию, вы можете добиться лучшего качества изображения и обеспечить его точное отображение на различных устройствах отображения.