Heim >Backend-Entwicklung >Python-Tutorial >Histogrammausgleich in Python

Histogrammausgleich in Python

Jennifer Aniston
Jennifer AnistonOriginal
2025-02-26 11:19:13619Durchsuche

Bildverstärkung mit Python: Ein Histogrammausgleich Tutorial

wurde jemals enttäuscht von einem verschwommenen Bild von geringer Qualität? Stellen Sie sich vor, Sie verbessern dieses Bild, um knackige Details und verbesserte Klarheit zu enthüllen. Dieses Tutorial zeigt Ihnen, wie Sie dies mit Python und der Leistung der Histogrammausgleich erreichen können.

Die Ausgleich von

Histogramm ist eine Technik, die den Bildkontrast erheblich stärkt. Es ist ein grundlegender Prozess, der in fast allen Kamerasystemen zur Verbesserung der Bildqualität verwendet wird. Am Ende dieses Tutorials werden Sie verstehen, warum.

Wir werden untersuchen, was Histogramme und Histogrammausgleiche sind, wie sie Bilder beeinflussen, und dann die Technik in Python implementieren. Beginnen wir!

Bildhistogramme verstehen

Ein Histogramm repräsentiert visuell die Verteilung numerischer Daten. Die x-Achse zeigt Datenbereiche (Behälter) an, und die y-Achse zeigt die Häufigkeit von Werten in jedem Behälter an.

In der Bildverarbeitung hat jedes Pixel eine Farbe und Intensität. Die Farben werden typischerweise durch rot, grün und blau (RGB) -Kanalwerte dargestellt, von 0 (keine Farbe) bis 255 (volle Farbe). Ein Histogramm für einen Farbkanal zeigt die Frequenz jedes Intensitätswerts (0-255) für diesen Kanal. Graustufenbilder haben ein einzelnes Histogramm, da die RGB -Werte für jedes Pixel identisch sind.

Bilder mit Histogrammen, die in einem engen Intensitätsbereich konzentriert sind, fehlen häufig Klarheit und Details. Ein ausgewogenes Bild weist eine breitere, gleichmäßigere Verteilung der Intensitäten auf.

Was ist Histogrammausgleich?

Histogramm Equalization erstreckt sich über das Histogramm eines Bildes, um den vollen Intensitätsbereich zu verwenden. Dies bedeutet, dass die Intensitätswerte sowohl dunkle als auch helle Bereiche ausbreiten, was zu einem höheren Kontrast und einer verbesserten Sichtbarkeit von Details führt. Obwohl es nicht immer ideal für die Standardfotografie ist, ist es für Anwendungen, die erweiterte Details erfordern, von unschätzbarem Wert, z. B. Satelliten oder thermische Bildgebung.

Wir werden ein Graustufen -Affenbild (mit reduziertem Kontrast) als Beispiel verwenden:

Histogram Equalization in Python

Zugriff auf Pixelintensitäten

Lassen Sie uns untersuchen, wie Sie mit Python und OpenCV auf Pixelintensitätswerte zugreifen:

<code class="language-python">import cv2, random

img = cv2.imread('monkey.jpg')
img_shape = img.shape
height = img_shape[0]
width = img_shape[1]

for row in range(width):
    for column in range(height):
        if random.randint(0, width) == row and row:
            print(img[column][row])</code>
Dieser Code liest das Bild, bestimmt seine Abmessungen und druckt ein Beispiel von Pixelwerten. OpenCV verwendet BGR -Bestellung (blau, grün, rot), daher ist

eine Intensität von 113 für jeden Kanal. [113 113 113]

Histogrammausgleich verändert diese Pixelintensitäten, um den Kontrast zu verbessern. Wir können dies mit Histogrammen visualisieren: einen für jeden Farbkanal (oder ein einzelnes Histogramm für Graustufen). Die x-Achse zeigt Intensitätswerte und die y-Achse zeigt ihre Frequenz.

Verwenden von Code aus einem separaten Bildhistogrammartikel, das Histogramm für unser Beispielbild sieht folgendermaßen aus:

Histogram Equalization in Python

Dieses Histogramm zeigt die Verteilung über die BGR -Kanäle. Eine Stichprobenausgabe aus dem Pixelwertcode zeigt die konsistenten Intensitätswerte über Kanäle hinweg:

<code class="language-python">import cv2, random

img = cv2.imread('monkey.jpg')
img_shape = img.shape
height = img_shape[0]
width = img_shape[1]

for row in range(width):
    for column in range(height):
        if random.randint(0, width) == row and row:
            print(img[column][row])</code>

Histogramm Equalization zielt darauf ab, dieses Histogramm zu verflachten und Intensitäten gleichmäßiger über den Bereich zu verteilt.

Analyse der Intensitätsfrequenz

Dieser Python -Code berechnet die Häufigkeit der Pixelintensitäten:

<code>[113 113 113]
[110 110 110]
[106 106 106]
...</code>

Der Ausgang zeigt die häufigsten Intensitätswerte und ihre Zählungen und zeigt die Konzentration in einem begrenzten Bereich hervor.

Implementierung der Histogrammausgleich in Python

Wir werden OpenCVs equalizeHist() -Funktion verwenden, aber sie funktioniert nur auf Graustufenbildern. Daher werden wir in den YUV -Farbton konvertieren, den Y -Kanal (Luminanz) ausgleichen und in BGR zurückkehren:

<code class="language-python">import cv2

img = cv2.imread('monkey.jpg')
img_shape = img.shape
height = img_shape[0]
width = img_shape[1]

frequency = {}

for row in range(width):
    for column in range(height):
        intensity = img[column][row][0]
        count = frequency.get(intensity, 0)
        frequency[intensity] = count + 1

print("Unique Intensities", len(frequency))

most_frequent = dict(sorted(frequency.items(), key=lambda elem: elem[1], reverse=True))
intensity_values = most_frequent.keys()

i = 0
for intensity in intensity_values:
    i += 1
    if i <= 5:
        print(intensity, most_frequent[intensity])</code>

Vollständiges Beispiel und Ergebnisse

Hier ist der vollständige Code:

<code class="language-python">import cv2
import numpy

img = cv2.imread('monkey.jpg')
img_to_yuv = cv2.cvtColor(img, cv2.COLOR_BGR2YUV)
img_to_yuv[:, :, 0] = cv2.equalizeHist(img_to_yuv[:, :, 0])
hist_equalization_result = cv2.cvtColor(img_to_yuv, cv2.COLOR_YUV2BGR)
cv2.imwrite('result.jpg', hist_equalization_result)</code>

Das resultierende Bild (result.jpg):

Histogram Equalization in Python

Ein Vergleich von originalen und erweiterten Bildern:

Histogram Equalization in Python

Das erweiterte Bild zeigt eine deutlich verbesserte Klarheit. Das Histogramm des erweiterten Bildes ist flacher und zeigt die gleichmäßige Verteilung der Intensitäten. Die Intensitätsfrequenzanalyse zeigt auch eine gleichmäßigere Verteilung der Werte.

Schlussfolgerung

Dieses Tutorial zeigte, wie der Bildkontrast unter Verwendung der Histogrammausgleich in Python mit OpenCV verbessert wird. Die Ergebnisse unterstreichen die Effektivität dieser Technik bei der Verbesserung der Bildqualität und zur Detailssicht. Das resultierende flachere Histogramm bestätigt die erfolgreiche Umverteilung der Pixelintensitäten.

Das obige ist der detaillierte Inhalt vonHistogrammausgleich in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn