Algorithmus zum Histogrammausgleich

Der Histogrammausgleich ist ein Bildverarbeitungsalgorithmus, der den Kontrast und die Details des Bildes durch Anpassen der Graustufenverteilung des Bildes verbessert. Im Folgenden sind die grundlegenden Schritte des Histogrammausgleichsalgorithmus aufgeführt:

  1. Zählen Sie das Graustufenhistogramm des Originalbilds: Durchlaufen Sie das gesamte Bild und berechnen Sie die Häufigkeit jeder Graustufenstufe.

  2. Berechnen Sie das kumulative Histogramm: Akkumulieren Sie die Grauhistogramme, um die kumulative Häufigkeit jeder Graustufe und aller vorherigen Graustufen zu erhalten.

  3. Berechnen Sie die Zuordnungsfunktion: Normalisieren Sie das kumulative Histogramm auf den gewünschten Graustufenbereich (normalerweise 0 bis 255), um eine Zuordnungsfunktion zu erhalten.

  4. Wenden Sie die Zuordnungsfunktion an: Durchlaufen Sie das Originalbild und konvertieren Sie den Grauwert jedes Pixels gemäß der Zuordnungsfunktion in einen neuen Grauwert.

  5. Erzeugen Sie ein entzerrtes Bild: Ersetzen Sie die entsprechenden Pixelwerte im Originalbild durch konvertierte Graustufenwerte.

Durch den Histogrammausgleich wird die Graustufenverteilung des Bildes flacher, wodurch der Kontrast des Bildes erhöht wird. Durch diesen Vorgang können Bilddetails klarer dargestellt werden, sodass sowohl dunkle als auch helle Details besser erkennbar sind. Es ist wichtig zu beachten, dass der Histogrammausgleich den Gesamtton des Bildes verändern kann und daher vor der Anwendung entsprechend den spezifischen Anforderungen angepasst und bewertet werden muss.

Das Folgende ist eine einfache Routine für den Histogrammausgleichsalgorithmus am Beispiel der Python-Sprache:

import cv2
import numpy as np

def histogram_equalization(image):
    # 统计原始图像的灰度直方图
    hist, bins = np.histogram(image.flatten(), 256, [0,256])
    
    # 计算累积直方图
    cdf = hist.cumsum()
    cdf_normalized = cdf * hist.max() / cdf.max()
    
    # 计算映射函数
    mapping = np.interp(image.flatten(), bins[:-1], cdf_normalized)
    
    # 应用映射函数,生成均衡化后的图像
    equalized_image = mapping.reshape(image.shape).astype(np.uint8)
    
    return equalized_image

# 读取原始图像
image = cv2.imread('input.jpg', 0)  # 灰度图像读取

# 执行直方图均衡化
equalized_image = histogram_equalization(image)

# 显示原始图像和均衡化后的图像
cv2.imshow('Original Image', image)
cv2.imshow('Equalized Image', equalized_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

Guess you like

Origin blog.csdn.net/wangjiaweiwei/article/details/131924181