1. Histogrammausgleich (Histogram Equalization)
Der Histogrammausgleich ist eine Technik zur Verbesserung des Kontrasts in Bildern. Diese Methode passt die Helligkeitswerte an, sodass das Histogramm des Bildes gleichmäßiger verteilt wird.
Beispiel: Histogrammausgleich in einem Graustufenbild
import cv2
# Installieren Sie Matplotlib, falls es noch nicht installiert ist. (pip install matplotlib)
from matplotlib import pyplot as plt
# Ein Bild laden
bild = cv2.imread('beispielbild.jpg', 0) # 0 für Graustufen
# Histogrammausgleich anwenden
bild_eq = cv2.equalizeHist(bild)
# Originales und verbessertes Bild anzeigen
plt.figure(figsize=(12, 6))
plt.subplot(1, 2, 1)
plt.imshow(bild, cmap='gray')
plt.title('Originales Bild')
plt.axis('off')
plt.subplot(1, 2, 2)
plt.imshow(bild_eq, cmap='gray')
plt.title('Histogrammausgeglichens Bild')
plt.axis('off')
plt.show()
Ausgabe:

2. Bildglättung (Image Smoothing)
Bildglättungstechniken werden verwendet, um Rauschen in Bildern zu reduzieren. Häufig verwendete Methoden sind einfache Unschärfe, Gaußsche Unschärfe und Medianfilter.
2.1. Einfache Unschärfe
import cv2
from matplotlib import pyplot as plt
# Ein Bild laden
bild = cv2.imread('beispielbild.jpg')
# Einfache Unschärfe anwenden
bild_blur = cv2.blur(bild, (5, 5))
# BGR zu RGB für die Anzeige in Matplotlib
bild_rgb = cv2.cvtColor(bild, cv2.COLOR_BGR2RGB)
bild_blur_rgb = cv2.cvtColor(bild_blur, cv2.COLOR_BGR2RGB)
# Originales und geglättetes Bild anzeigen
plt.figure(figsize=(12, 6))
plt.subplot(1, 2, 1)
plt.imshow(bild_rgb)
plt.title('Originales Bild')
plt.axis('off')
plt.subplot(1, 2, 2)
plt.imshow(bild_blur_rgb)
plt.title('Einfach geglättetes Bild')
plt.axis('off')
plt.show()
Ausgabe:

2.2. Gaußsche Unschärfe
import cv2
from matplotlib import pyplot as plt
# Ein Bild laden
bild = cv2.imread('beispielbild.jpg')
# Gaußsche Unschärfe anwenden
bild_gaussian = cv2.GaussianBlur(bild, (5, 5), 0)
# BGR zu RGB für die Anzeige in Matplotlib
bild_rgb = cv2.cvtColor(bild, cv2.COLOR_BGR2RGB)
bild_gaussian_rgb = cv2.cvtColor(bild_gaussian, cv2.COLOR_BGR2RGB)
# Originales und geglättetes Bild anzeigen
plt.figure(figsize=(12, 6))
plt.subplot(1, 2, 1)
plt.imshow(bild_rgb)
plt.title('Originales Bild')
plt.axis('off')
plt.subplot(1, 2, 2)
plt.imshow(bild_gaussian_rgb)
plt.title('Gaußsche geglättetes Bild')
plt.axis('off')
plt.show()
2.3. Medianfilter
import cv2
from matplotlib import pyplot as plt
# Ein Bild laden
bild = cv2.imread('beispielbild.jpg')
# Medianfilter anwenden
bild_median = cv2.medianBlur(bild, 5)
# BGR zu RGB für die Anzeige in Matplotlib
bild_rgb = cv2.cvtColor(bild, cv2.COLOR_BGR2RGB)
bild_median_rgb = cv2.cvtColor(bild_median, cv2.COLOR_BGR2RGB)
# Originales und geglättetes Bild anzeigen
plt.figure(figsize=(12, 6))
plt.subplot(1, 2, 1)
plt.imshow(bild_rgb)
plt.title('Originales Bild')
plt.axis('off')
plt.subplot(1, 2, 2)
plt.imshow(bild_median_rgb)
plt.title('Median-geglättetes Bild')
plt.axis('off')
plt.show()

3. Schärfen und Kantendetektion
Schärfungstechniken betonen die Kanten und Details in einem Bild. Die Kantendetektion wird häufig verwendet, um die Konturen von Objekten im Bild zu erkennen.
3.1. Bildschärfung
import cv2
from matplotlib import pyplot as plt
import numpy as np
# Ein Bild laden
bild = cv2.imread('beispielbild.jpg')
# Schärfungsfilter anwenden
kernel = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]])
bild_sharp = cv2.filter2D(bild, -1, kernel)
# BGR zu RGB für die Anzeige in Matplotlib
bild_rgb = cv2.cvtColor(bild, cv2.COLOR_BGR2RGB)
bild_sharp_rgb = cv2.cvtColor(bild_sharp, cv2.COLOR_BGR2RGB)
# Originales und geschärftes Bild anzeigen
plt.figure(figsize=(12, 6))
plt.subplot(1, 2, 1)
plt.imshow(bild_rgb)
plt.title('Originales Bild')
plt.axis('off')
plt.subplot(1, 2, 2)
plt.imshow(bild_sharp_rgb)
plt.title('Geschärftes Bild')
plt.axis('off')
plt.show()

3.2. Kantendetektion mit Canny
import cv2
from matplotlib import pyplot as plt
# Ein Bild laden
bild = cv2.imread('beispielbild.jpg', 0) # 0 für Graustufen
# Canny-Kantendetektion anwenden
edges = cv2.Canny(bild, 100, 200)
# Originales und Kantendetektionsbild anzeigen
plt.figure(figsize=(12, 6))
plt.subplot(1, 2, 1)
plt.imshow(bild, cmap='gray')
plt.title('Originales Bild')
plt.axis('off')
plt.subplot(1, 2, 2)
plt.imshow(edges, cmap='gray')
plt.title('Canny-Kantendetektion')
plt.axis('off')
plt.show()
Ausgabe:

Diese Techniken zur Bildverbesserung können verwendet werden, um den Kontrast zu erhöhen, Rauschen zu reduzieren, Details zu betonen und Kanten zu erkennen. Jede Methode hat ihre eigenen Anwendungen und kann auf unterschiedliche Arten von Bildern angewendet werden, um die gewünschte Verbesserung zu erzielen.