Computational Photography and Capture - Exam.pdf

Computational Photography and Capture - Exam
Computational Photography and Capture - Exam Aufgabe 1) Eine moderne Digitalkamera besteht aus mehreren optischen und elektronischen Komponenten, die zusammenarbeiten, um Bilder zu erfassen und zu verarbeiten. Diese Komponenten umfassen die Optik, wie Linsen und Blenden, sowie verschiedene Arten von Sensoren wie CCD und CMOS. Die Belichtung wird durch ISO, Verschlusszeit und Blende (f/-Wert) geste...

© StudySmarter 2024, all rights reserved.

Computational Photography and Capture - Exam

Aufgabe 1)

Eine moderne Digitalkamera besteht aus mehreren optischen und elektronischen Komponenten, die zusammenarbeiten, um Bilder zu erfassen und zu verarbeiten. Diese Komponenten umfassen die Optik, wie Linsen und Blenden, sowie verschiedene Arten von Sensoren wie CCD und CMOS. Die Belichtung wird durch ISO, Verschlusszeit und Blende (f/-Wert) gesteuert, während die Bildverarbeitung Bayer-Pattern, Signal-Rausch-Verhältnis und Dynamikumfang berücksichtigt. Die Bildgeometrie wird durch Perspektivprojektion und Verzeichnung beschrieben, und die Kalibration beinhaltet sowohl intrinsische als auch extrinsische Parameter sowie Radialverzerrung. Angenommen, Du hast eine Kamera, die Du kalibrieren und für optimalen Einsatz konfigurieren möchtest.

a)

1. Optische Komponenten: Beschreibe die Rolle von Linsen und Blenden in einer Kamera. Wie beeinflussen Brennweite und Blendenwert (f/-Wert) die Tiefenschärfe eines Bildes?

Lösung:

  • Linsen in einer Kamera: Linsen sind optische Komponenten, die Lichtstrahlen bündeln und auf einen Sensor oder Film fokussieren. Ihre Hauptaufgabe besteht darin, ein scharfes und klares Bild des Motivs zu erzeugen. Durch das Verstellen der Linsen kann der Fokuspunkt verändert werden.
  • Blenden in einer Kamera: Die Blende ist eine einstellbare Öffnung innerhalb des Objektivs, die die Lichtmenge steuert, die auf den Sensor trifft. Sie wird in Blendenwerten (f/-Wert) angegeben. Eine kleinere Blendenzahl (z.B. f/2.8) bedeutet eine größere Öffnung und mehr Licht, während eine größere Blendenzahl (z.B. f/16) eine kleinere Öffnung und weniger Licht bedeutet.
  • Brennweite: Die Brennweite ist der Abstand zwischen der Linse und dem Sensor, wenn das Motiv im Fokus ist. Sie beeinflusst den Bildausschnitt und die Vergrößerung. Kürzere Brennweiten (z.B. 24mm) bieten ein weites Sichtfeld (Weitwinkelobjektiv), während längere Brennweiten (z.B. 200mm) das Motiv näher heranholen (Teleobjektiv).
  • Tiefenschärfe: Die Tiefenschärfe bezeichnet den Bereich im Bild, der scharf abgebildet wird. Sie wird von zwei Hauptfaktoren beeinflusst:
    • Blendenwert (f/-Wert): Eine größere Blendenöffnung (kleinerer f/-Wert) führt zu einer geringeren Tiefenschärfe, was bedeutet, dass nur ein kleiner Bereich des Bildes scharf ist. Eine kleinere Blendenöffnung (größerer f/-Wert) erhöht die Tiefenschärfe, sodass mehr Bereiche des Bildes scharf sind.
    • Brennweite: Längere Brennweiten reduzieren die Tiefenschärfe, während kürzere Brennweiten diese erhöhen. Ein Teleobjektiv (lange Brennweite) hat eine geringere Tiefenschärfe im Vergleich zu einem Weitwinkelobjektiv (kurze Brennweite).

b)

2. Sensoren: Vergleiche CCD- und CMOS-Sensoren hinsichtlich ihres Aufbaus und ihrer Verwendung in Kameras. Welche Vor- und Nachteile haben die beiden Sensorarten in Bezug auf Bildqualität und Energieverbrauch?

Lösung:

  • Aufbau von CCD- und CMOS-Sensoren:
    • CCD-Sensor (Charge-Coupled Device): CCD-Sensoren bestehen aus einer Reihe lichtempfindlicher Elemente, die elektrische Ladungen in analoge Signale umwandeln. Diese Ladungen werden dann in einer bestimmten Reihenfolge ausgelesen und in digitale Informationen umgewandelt.
    • CMOS-Sensor (Complementary Metal-Oxide-Semiconductor): CMOS-Sensoren haben eine ähnliche Struktur, aber jedes lichtempfindliche Element wird direkt in ein digitales Signal umgewandelt. Jede Einheit ist eigenständig und kann individuell ausgelesen werden.
  • Verwendung in Kameras:
    • CCD-Sensoren: CCD-Sensoren wurden traditionell in hochwertigen Kameras und wissenschaftlichen Anwendungen verwendet. Sie sind bekannt für ihre hervorragende Bildqualität und Genauigkeit bei der Lichtempfindlichkeit.
    • CMOS-Sensoren: CMOS-Sensoren sind heutzutage weit verbreitet in digitalen Kameras, einschließlich Smartphones und DSLR-Kameras. Sie sind effizienter und günstiger in der Herstellung.
  • Vor- und Nachteile in Bezug auf Bildqualität und Energieverbrauch:
    • CCD-Sensoren:
      • Vorteile:
        • Höhere Bildqualität mit geringem Rauschen
        • Bessere Lichtempfindlichkeit
        • Gleichmäßiges Auslesen aller Pixel
      • Nachteile:
        • Höherer Energieverbrauch
        • Kostenintensiver herzustellen
        • Größere Wärmeentwicklung
    • CMOS-Sensoren:
      • Vorteile:
        • Niedrigerer Energieverbrauch
        • Kostengünstiger in der Herstellung
        • Schnelleres Auslesen der Bilddaten
      • Nachteile:
        • Erhöhtes Bildrauschen
        • Mögliche Verzerrungen bei der Lichtempfindlichkeit
        • Höherer Bedarf an Signalverarbeitung

c)

3. Belichtung: Eine korrekte Belichtung ist essentiell für ein gutes Bild. Erläutere, wie ISO, Verschlusszeit und Blende zusammenwirken, um die Belichtung eines Bildes zu bestimmen. Verwende die Belichtungsdreieck-Formel, um zu erklären, wie Änderungen in einem Parameter durch Anpassungen in den anderen ausgeglichen werden können.

Lösung:

  • Belichtung in der Fotografie: Die Belichtung eines Bildes wird durch die Menge des Lichts bestimmt, das auf den Kamerasensor trifft. Drei Hauptparameter steuern die Belichtung: ISO, Verschlusszeit und Blende. Zusammen bilden sie das Belichtungsdreieck.
  • Die Parameter des Belichtungsdreiecks:
    • ISO: Der ISO-Wert bestimmt die Lichtempfindlichkeit des Sensors. Ein niedriger ISO-Wert (z.B. 100) bedeutet geringe Empfindlichkeit und ist ideal bei viel Licht, während ein hoher ISO-Wert (z.B. 3200) die Empfindlichkeit erhöht und für Situationen mit wenig Licht geeignet ist. Allerdings führt ein höherer ISO-Wert auch zu mehr Bildrauschen.
    • Verschlusszeit: Die Verschlusszeit bestimmt, wie lange der Kameraverschluss geöffnet bleibt und Licht auf den Sensor trifft. Eine kurze Verschlusszeit (z.B. 1/1000 Sekunde) friert schnelle Bewegungen ein, während eine lange Verschlusszeit (z.B. 1 Sekunde) Bewegungen verwischt und mehr Licht einfängt. Lange Verschlusszeiten erfordern jedoch oft ein Stativ, um Verwacklungen zu vermeiden.
    • Blende (f/-Wert): Die Blende steuert die Größe der Öffnung im Objektiv, durch die das Licht eintritt. Ein kleiner f/-Wert (z.B. f/2.8) bedeutet eine große Öffnung und lässt viel Licht herein, während ein großer f/-Wert (z.B. f/16) eine kleine Öffnung bedeutet und weniger Licht durchlässt. Die Blende beeinflusst auch die Tiefenschärfe des Bildes.
  • Belichtungsdreieck-Formel: Das Belichtungsdreieck beschreibt, wie ISO, Verschlusszeit und Blende zusammenwirken, um die Belichtung zu bestimmen. Eine Änderung eines Parameters muss oft durch Anpassungen der anderen Parameter ausgeglichen werden, um die gleiche Belichtung zu bewahren.
  • Beispiele zur Veranschaulichung:
    • Wenn Du die Verschlusszeit verkürzt (z.B. von 1/125 Sekunde auf 1/250 Sekunde), um Bewegungen scharf einzufangen, erhält der Sensor weniger Licht. Um dies auszugleichen, könntest Du die ISO erhöhen (z.B. von ISO 100 auf ISO 200) oder die Blende weiter öffnen (z.B. von f/5.6 auf f/4), um die gleiche Belichtung beizubehalten.
    • Wenn Du die Blende schließt (z.B. von f/2.8 auf f/5.6), um mehr Tiefenschärfe zu erreichen, erhält der Sensor weniger Licht. Um dies auszugleichen, könntest Du die Verschlusszeit verlängern (z.B. von 1/250 Sekunde auf 1/125 Sekunde) oder die ISO erhöhen (z.B. von ISO 100 auf ISO 400).
    • Wenn Du den ISO-Wert erhöhst (z.B. von ISO 200 auf ISO 800), um bei schwachem Licht zu fotografieren, kann das zu mehr Bildrauschen führen. Um die Belichtung beizubehalten, könntest Du die Verschlusszeit verkürzen (z.B. von 1/125 Sekunde auf 1/250 Sekunde) oder die Blende weiter öffnen (z.B. von f/4 auf f/2.8).

Durch das Verständnis und die Anwendung des Belichtungsdreiecks kannst Du besser kontrollieren, wie viel Licht den Sensor erreicht und die gewünschte Bildqualität erzielen.

d)

4. Kalibration: Erkläre den Unterschied zwischen intrinsischen und extrinsischen Parametern bei der Kamerakalibration. Führe die Bedeutung der Radialverzerrung aus und beschreibe ein Verfahren zur Kalibration einer Kamera, um diese Verzerrung zu minimieren.

Lösung:

  • Kalibration einer Kamera: Die Kalibration ist der Prozess der Bestimmung spezifischer Parameter einer Kamera, um Bilder korrekt abzubilden, Verzerrungen zu minimieren und genaue Messungen zu ermöglichen. Dabei unterscheidet man zwischen intrinsischen und extrinsischen Parametern.
  • Intrinsische Parameter: Diese Parameter beziehen sich auf die Eigenheiten der Kamera selbst und beinhalten:
    • Brennweite (f): Die effektive Brennweite des Objektivs.
    • Bildhauptpunkt (cx, cy): Der Punkt im Bild, an dem die optische Achse das Bildsensor trifft. Er liegt normalerweise in der Bildmitte.
    • Skalierungsfaktor und Scherungsfaktor: Diese Parameter berücksichtigen die Pixelgröße und die Verzerrung durch Scherung.
  • Extrinsische Parameter: Diese Parameter beschreiben die Lage und Ausrichtung der Kamera im Raum und beinhalten:
    • Translation (t): Die Verschiebung der Kamera relativ zu einem Weltkoordinatensystem.
    • Rotation (R): Die Drehung der Kamera relativ zu einem Weltkoordinatensystem.
  • Radialverzerrung: Die Radialverzerrung tritt auf, weil Linsen nicht perfekt sind und zu Verzerrungen führen, vor allem am Rand des Bildes. Diese Verzerrung wird durch radiale Verzerrungskoeffizienten modelliert, die die Verkrümmung der Lichtstrahlen beschreiben.
  • Kalibrationsverfahren zur Minimierung der Radialverzerrung: Ein gängiges Kalibrationsverfahren ist die Verwendung von Kalibrierungsbildern eines bekannten Musters, wie z.B. eines Schachbrettmusters. Hier sind die Schritte zur Kalibration einer Kamera:
    • Schritt 1 – Aufnahme von Kalibrierungsbildern: Fotografiere ein Schachbrettmuster aus verschiedenen Winkeln und Abständen, um eine Vielzahl von Perspektiven zu erhalten.
    • Schritt 2 – Erkennung der Eckpunkte: Verwende eine Bildverarbeitungssoftware, um die Eckpunkte des Schachbrettmusters in den Bildern zu erkennen.
    • Schritt 3 – Berechnung der intrinsischen und extrinsischen Parameter: Verwende die erkannten Eckpunkte, um die intrinsischen Parameter (Brennweite, Bildhauptpunkt, Verzerrungskoeffizienten) und die extrinsischen Parameter (Rotation und Translation) zu berechnen.
    • Schritt 4 – Optimierung: Verwende eine Optimierungsroutine, wie z.B. das Levenberg-Marquardt-Algorithmus, um die Parameter zu verfeinern und die Fehler zu minimieren.
    • Schritt 5 – Anwendung der Kalibrierung: Verwende die berechneten Parameter, um die Radialverzerrung in den aufgenommenen Bildern zu korrigieren und ein geometrisch korrektes Bild zu erzeugen.

Durch die Kalibration und die Korrektur der Radialverzerrung wird sichergestellt, dass die Kamera präzise und verzerrungsfreie Bilder liefert.

Aufgabe 2)

In der Vorlesung 'Computational Photography and Capture' hast Du verschiedene Methoden zur Rauschreduktion und Bildverbesserung kennengelernt. Eine zentrale Rolle spielen hierbei verschiedene Filtertechniken und die Fourier-Analyse.

Ausgehend davon, dass Du ein Bild mit sichtbarem Rauschen (Gauss-, Salz-und-Pfeffer- oder speckle-Rauschen) gegeben hast, sollen in den folgenden Aufgaben unterschiedliche Filtermethoden angewendet und deren Effektivität bewertet werden.

a)

a) Medianfilter

  • Erkläre die Funktionsweise des Medianfilters und warum er besonders gut bei Salz-und-Pfeffer-Rauschen geeignet ist.
  • Implementiere den Medianfilter in Python mit einer beliebigen Kernelgröße. Anhand eines Bilds (verwende dazu z.B. ein öffentlich zugängliches Testbild), füge Salz-und-Pfeffer-Rauschen hinzu und filtere das Bild mit dem Medianfilter.
  • Berechne und interpretiere den PSNR-Wert des gefilterten Bildes im Vergleich zum Originalbild.
def median_filter(image, kernel_size):    # Deine Implementierung hier...

Lösung:

a) Medianfilter

  • Funktionsweise des Medianfilters

Der Medianfilter ist ein nicht-linearer Filter, der häufig zur Rauschreduktion in Bildern verwendet wird, insbesondere bei Salz-und-Pfeffer-Rauschen. Der Filter arbeitet, indem er für jedes Pixel im Bild ein Kernel (auch Fenster genannt) definiert, das eine bestimmte Größe hat (z. B. 3x3, 5x5). Innerhalb dieses Fensters wird der Medianwert der Pixelintensitäten berechnet und das zentrale Pixel durch diesen Medianwert ersetzt. Der Medianwert ist der zentrale Wert der sortierten Intensitäten im Fenster, was bedeutet, dass extreme Werte (Rauschen) eliminiert werden, ohne die Kanten im Bild zu verwischen.

  • Implementierung des Medianfilters in Python

Hier ist eine Implementierung des Medianfilters und ein Beispiel, wie man Salz-und-Pfeffer-Rauschen zu einem Bild hinzufügt und den Filter anwendet:

import cv2import numpy as npimport matplotlib.pyplot as plt# Funktion zur Erstellung eines Testbilds mit Salz-und-Pfeffer-Rauschendef add_salt_and_pepper_noise(image, salt_prob, pepper_prob):    noisy_image = np.copy(image)    num_salt = np.ceil(salt_prob * image.size)    num_pepper = np.ceil(pepper_prob * image.size)    # Salz    coords = [np.random.randint(0, i - 1, int(num_salt)) for i in image.shape]    noisy_image[coords[0], coords[1]] = 1    # Pfeffer    coords = [np.random.randint(0, i - 1, int(num_pepper)) for i in image.shape]    noisy_image[coords[0], coords[1]] = 0    return noisy_image# Medianfilter-Funktiondef median_filter(image, kernel_size):    return cv2.medianBlur(image, kernel_size)# Originalbild ladenimage = cv2.imread('path_to_image', cv2.IMREAD_GRAYSCALE)# Rauschen hinzufügensalt_prob = 0.05pepper_prob = 0.05noisy_image = add_salt_and_pepper_noise(image, salt_prob, pepper_prob)# Medianfilter anwendenkernel_size = 3filtered_image = median_filter(noisy_image, kernel_size)# Ergebnis anzeigenplt.subplot(1, 3, 1)plt.title('Original')plt.imshow(image, cmap='gray')plt.subplot(1, 3, 2)plt.title('Mit Rauschen')plt.imshow(noisy_image, cmap='gray')plt.subplot(1, 3, 3)plt.title('Gefiltert')plt.imshow(filtered_image, cmap='gray')plt.show()
  • Berechnung und Interpretation des PSNR-Werts

Der Peak Signal-to-Noise Ratio (PSNR) ist ein Maß für die Qualität eines rekonstruierten Bildes im Vergleich zu einem Referenzbild. Er wird häufig verwendet, um die Effektivität von Bildverarbeitungsalgorithmen zu bewerten.

Die PSNR-Berechnung erfolgt folgendermaßen:

import math# Funktion zur Berechnung des PSNR-Wertsdef calculate_psnr(original, filtered):    mse = np.mean((original - filtered) ** 2)    if mse == 0:        return float('inf')    pixel_max = 1.0    psnr = 20 * math.log10(pixel_max / math.sqrt(mse))    return psnr# PSNR-Wert berechnenpsnr_value = calculate_psnr(image, filtered_image)print(f'PSNR-Wert: {psnr_value} dB')

Ein hoher PSNR-Wert weist auf eine hohe Qualität der Bildrekonstruktion hin, während ein niedriger PSNR-Wert auf größere Fehler hinweist. Typischerweise wird ein PSNR-Wert über 30 dB als gute Bildqualität angesehen.

b)

b) Gaussfilter

  • Beschreibe die Grundlagen und die mathematische Definition eines Gaussfilters. Gehe dabei auch auf die Eigenschaft der Weichzeichnung ein.
  • Implementiere eine Funktion in Python, die ein Bild mittels Gaussfilter glättet. Füge Gauss-Rauschen zu einem Testbild hinzu und wende den Filter an.
  • Vergleiche die Ergebnisse qualitativ und quantitativ (PSNR, SSIM) mit denen des Medianfilters aus Aufgabe a).
def gauss_filter(image, sigma):    # Deine Implementierung hier...

Lösung:

b) Gaussfilter

  • Grundlagen und mathematische Definition des Gaussfilters

Ein Gaussfilter, auch Gaußfilter genannt, ist ein linearer Filter, der hauptsächlich zur Glättung von Bildern verwendet wird. Er ist besonders gut geeignet, um Rauschen zu reduzieren und gleichzeitig die Bilddetails zu glätten. Der Gaussfilter verwendet eine Gaußfunktion, um die Gewichtung der Nachbarpixel zu bestimmen.

Die mathematische Definition eines zweidimensionalen Gaußfilters lautet:

\[H(x, y) = \frac{1}{2 \, \pi \, \sigma^2} \, \exp \left( -\frac{x^2 + y^2}{2 \, \sigma^2} \right)\]

wobei \(x\) und \(y\) die Pixelkoordinaten sind und \(\sigma\) die Standardabweichung der Gaußfunktion darstellt. Ein größerer \(\sigma\) führt zu einer stärkeren Glättung.

  • Implementierung der Gaussfilter-Funktion in Python

Hier ist eine Implementierung, die ein Bild mittels Gaussfilter glättet. Zusätzlich wird Gauss-Rauschen zu einem Testbild hinzugefügt und der Filter darauf angewendet:

import cv2import numpy as npimport matplotlib.pyplot as pltfrom skimage.metrics import structural_similarity as ssimimport math# Funktion zur Erstellung eines Testbilds mit Gauss-Rauschendef add_gaussian_noise(image, mean, var):    sigma = var ** 0.5    gaussian = np.random.normal(mean, sigma, image.shape)    noisy_image = np.clip(image + gaussian, 0, 255).astype(np.uint8)    return noisy_image# Gaussfilter-Funktiondef gauss_filter(image, sigma):    return cv2.GaussianBlur(image, (0, 0), sigma)# Originalbild ladenimage = cv2.imread('path_to_image', cv2.IMREAD_GRAYSCALE)# Rauschen hinzufügenmean = 0var = 50noisy_image = add_gaussian_noise(image, mean, var)# Gaussfilter anwendensigma = 2filtered_image = gauss_filter(noisy_image, sigma)# Ergebnis anzeigenplt.subplot(1, 3, 1)plt.title('Original')plt.imshow(image, cmap='gray')plt.subplot(1, 3, 2)plt.title('Mit Rauschen')plt.imshow(noisy_image, cmap='gray')plt.subplot(1, 3, 3)plt.title('Gefiltert')plt.imshow(filtered_image, cmap='gray')plt.show()
  • Qualitativer und quantitativer Vergleich der Filterergebnisse

Um die Ergebnisse des Gaussfilters mit denen des Medianfilters aus Aufgabe a) zu vergleichen, verwenden wir die Metriken PSNR (Peak Signal-to-Noise Ratio) und SSIM (Structural Similarity Index).

Die PSNR-Berechnung:

import math# Funktion zur Berechnung des PSNR-Wertsdef calculate_psnr(original, filtered):    mse = np.mean((original - filtered) ** 2)    if mse == 0:        return float('inf')    pixel_max = 255.0    psnr = 20 * math.log10(pixel_max / math.sqrt(mse))    return psnr# PSNR-Wert berechnenpsnr_value_gauss = calculate_psnr(image, filtered_image)print(f'PSNR-Wert (Gaussfilter): {psnr_value_gauss} dB')

Die SSIM-Berechnung:

from skimage.metrics import structural_similarity as ssim# SSIM-Wert berechnenssim_value_gauss = ssim(image, filtered_image, data_range=filtered_image.max() - filtered_image.min())print(f'SSIM-Wert (Gaussfilter): {ssim_value_gauss}')

Vergleich der Filtertechniken:• Der Medianfilter ist besonders gut bei der Entfernung von Salz-und-Pfeffer-Rauschen, da er extreme Werte effektiv herausfiltern kann.• Der Gaussfilter hingegen ist besser geeignet für die Glättung von Gauss-Rauschen, da er eine weichere und kontinuierlichere Gewichtung der Pixelwerte vornimmt.

Mit diesen Berechnungen kannst Du die Effektivität der beiden Filtertechniken sowohl qualitativ als auch quantitativ vergleichen.

c)

c) Bilateraler Filter

  • Erläutere das Verfahren und die Vorteile des bilateralen Filters im Vergleich zu Median- und Gaussfiltern. Warum ist der bilaterale Filter besser bei der Kantenschärfung?
  • Implementiere den bilateralen Filter in Python. Wende ihn auf ein Bild mit speckle-Rauschen an.
  • Bewerte die Ergebnisse anhand der Metriken PSNR und SSIM. Diskutiere die Vor- und Nachteile der bilateralen Filterung.
def bilateral_filter(image, sigma_color, sigma_space):    # Deine Implementierung hier...

Lösung:

c) Bilateraler Filter

  • Verfahren und Vorteile des bilateralen Filters

Der bilaterale Filter ist ein nicht-linearer Filter, der sowohl räumliche Nähe als auch Farbähnlichkeit berücksichtigt, um die Glättung anzuwenden. Im Gegensatz zum Median- und Gaussfilter, die nur die räumliche Nähe berücksichtigen, gewichtet der bilaterale Filter die benachbarten Pixel basierend auf ihrer Entfernung und ihrer Farbähnlichkeit.

Die mathematische Definition eines bilateralen Filters lautet:

\[I_{filtered}(x, y) = \frac{1}{W_{p}} \, \sum_{\xi, \eta} I(\xi, \eta) \, f_r (I(\xi, \eta) - I(x, y)) \, f_d (\sqrt{(\xi - x)^2 + (\eta - y)^2})\]

wobei \(f_r\) eine Gaußfunktion der Intensitätsdifferenz und \(f_d\) eine Gaußfunktion der räumlichen Differenz ist. \(W_{p}\) ist ein Normalisierungsfaktor.

  • Der bilaterale Filter ist besser bei der Kantenschärfung, weil er Kanten bewahrt, indem er benachbarte Pixel mit ähnlichen Intensitäten stärker gewichtet und stark unterschiedliche Intensitäten geringer gewichtet. Dadurch werden Kanten weniger geglättet.
  • Implementierung des bilateralen Filters in Python

Hier ist eine Implementierung eines bilateralen Filters und die Anwendung auf ein Bild mit speckle-Rauschen:

import cv2import numpy as npimport matplotlib.pyplot as pltfrom skimage.util import random_noisedef add_speckle_noise(image):    noisy_image = random_noise(image, mode='speckle', mean=0, var=0.1)    noisy_image = (255 * noisy_image).astype(np.uint8)    return noisy_image# Bilateraler Filter-Funktiondef bilateral_filter(image, sigma_color, sigma_space):    return cv2.bilateralFilter(image, d=9, sigmaColor=sigma_color, sigmaSpace=sigma_space)# Originalbild ladenimage = cv2.imread('path_to_image', cv2.IMREAD_GRAYSCALE)# Rauschen hinzufügennoisy_image = add_speckle_noise(image)# Bilateralen Filter anwendenfiltered_image = bilateral_filter(noisy_image, sigma_color=75, sigma_space=75)# Ergebnis anzeigenplt.subplot(1, 3, 1)plt.title('Original')plt.imshow(image, cmap='gray')plt.subplot(1, 3, 2)plt.title('Mit Rauschen')plt.imshow(noisy_image, cmap='gray')plt.subplot(1, 3, 3)plt.title('Gefiltert')plt.imshow(filtered_image, cmap='gray')plt.show()
  • Bewertung der Ergebnisse anhand der Metriken PSNR und SSIM

Um die Ergebnisse zu bewerten, verwenden wir die Metriken PSNR (Peak Signal-to-Noise Ratio) und SSIM (Structural Similarity Index).

Die PSNR-Berechnung:

import math# Funktion zur Berechnung des PSNR-Wertsdef calculate_psnr(original, filtered):    mse = np.mean((original - filtered) ** 2)    if mse == 0:        return float('inf')    pixel_max = 255.0    psnr = 20 * math.log10(pixel_max / math.sqrt(mse))    return psnr# PSNR-Wert berechnenpsnr_value_bilateral = calculate_psnr(image, filtered_image)print(f'PSNR-Wert (bilateraler Filter): {psnr_value_bilateral} dB')

Die SSIM-Berechnung:

from skimage.metrics import structural_similarity as ssim# SSIM-Wert berechnenssim_value_bilateral = ssim(image, filtered_image, data_range=filtered_image.max() - filtered_image.min())print(f'SSIM-Wert (bilateraler Filter): {ssim_value_bilateral}')
  • Vorteile:
  • Kantenschärfung: Der bilaterale Filter bewahrt Kanten besser als der Median- und der Gaussfilter.
  • Rauschreduzierung: Er kann das Rauschen effektiv reduzieren, ohne die Originalstruktur des Bildes stark zu beeinträchtigen.
  • Nachteile:
  • Rechenaufwand: Der bilaterale Filter ist rechenintensiver und langsamer als Median- und Gaussfilter, besonders für große Bilder.
  • Parameterabhängigkeit: Die Effektivität hängt stark von den gewählten Parametern für \(\sigma\) ab, und das Finden der optimalen Werte kann schwierig sein.

d)

d) Fourier-Analyse

  • Erkläre die Verwendung der Fourier-Analyse zur Rauschunterdrückung in Bildern. Was bedeutet es, ein Bild mittels Tiefpassfilter zu glätten?
  • Implementiere eine Funktion, die die Fourier-Transformierte eines Bildes berechnet, ein Tiefpassfilter anwendet und die inverse Fourier-Transformierte berechnet, um das gefilterte Bild zu erhalten.
  • Analysiere und kommentiere die Ergebnisse im Vergleich zu den räumlichen Filtermethoden (Median-, Gauss-, bilateral). Betrachte dabei insbesondere die Erhaltung von Bilddetails und Kanten.
def fourier_lowpass_filter(image, cutoff_frequency):    # Deine Implementierung hier...

Lösung:

d) Fourier-Analyse

  • Verwendung der Fourier-Analyse zur Rauschunterdrückung in Bildern

Die Fourier-Analyse ist ein mächtiges Tool zur Bildverarbeitung, das Bilder in ihre Frequenzkomponenten zerlegt. Dies ermöglicht die Identifikation und Manipulation spezifischer Frequenzbereiche, um bestimmte Merkmale des Bildes zu beeinflussen.

Ein Bild mittels Tiefpassfilter zu glätten bedeutet, hochfrequente Komponenten (die oft Rauschen und feine Details enthalten) zu entfernen und nur die niederfrequenten Komponenten (die groben Strukturen des Bildes) zu behalten. Dadurch wird das Bild geglättet und unerwünschtes Rauschen reduziert.

  • Implementierung der Fourier-Transformierten und eines Tiefpassfilters in Python

Die folgende Implementierung zeigt, wie man die Fourier-Transformierte eines Bildes berechnet, einen Tiefpassfilter anwendet und die inverse Fourier-Transformierte berechnet, um das gefilterte Bild zu erhalten:

import numpy as npimport cv2import matplotlib.pyplot as plt# Funktion zur Berechnung der Fourier-Transformierten und Anwendung eines Tiefpassfiltersdef fourier_lowpass_filter(image, cutoff_frequency):    # Fourier-Transformierte des Bildes berechnen    f = np.fft.fft2(image)    fshift = np.fft.fftshift(f)    magnitude_spectrum = 20 * np.log(np.abs(fshift))    # Tiefpassfilter erstellen    rows, cols = image.shape    crow, ccol = rows // 2 , cols // 2    mask = np.zeros((rows, cols), np.uint8)    mask[crow-cutoff_frequency:crow+cutoff_frequency, ccol-cutoff_frequency:ccol+cutoff_frequency] = 1    # Filter auf Fourier-Transformierte anwenden    fshift = fshift * mask    f_ishift = np.fft.ifftshift(fshift)    img_back = np.fft.ifft2(f_ishift)    img_back = np.abs(img_back)    return img_back, magnitude_spectrum, mask# Originalbild ladenimage = cv2.imread('path_to_image', cv2.IMREAD_GRAYSCALE)# Tiefpassfilter anwenden (mit einem beispielhaften cutoff_frequency von 30)cutoff_frequency = 30filtered_image, magnitude_spectrum, mask = fourier_lowpass_filter(image, cutoff_frequency)# Ergebnis anzeigenplt.subplot(2, 2, 1)plt.title('Original')plt.imshow(image, cmap='gray')plt.subplot(2, 2, 2)plt.title('Magnitude Spectrum')plt.imshow(magnitude_spectrum, cmap='gray')plt.subplot(2, 2, 3)plt.title('Filtermaske')plt.imshow(mask, cmap='gray')plt.subplot(2, 2, 4)plt.title('Gefiltertes Bild')plt.imshow(filtered_image, cmap='gray')plt.show()
  • Analyse und Kommentar der Ergebnisse im Vergleich zu räumlichen Filtermethoden

Wie die Fourier-Analyse im Vergleich zu den räumlichen Filtermethoden (Median-, Gauss- und bilateraler Filter) abschneidet, untersuchen wir durch folgende Punkte:

  • Erhaltung von Bilddetails:Räumliche Filter wie der Medianfilter und der bilaterale Filter sind besser darin, Kanten zu bewahren, während sie Rauschen entfernen, da sie lokal auf die Pixelwerte einwirken. Der Gaussfilter glättet zwar, kann aber feine Kanten verwischen. Der Tiefpassfilter in der Fourier-Analyse behält nur niederfrequente Informationen bei und kann daher feine Details und Kanten verlieren.
  • Rauschreduzierung:Alle Filtermethoden sind effektiv in der Rauschreduzierung. Die Fourier-Tiefpassfilter können jedoch unerwünschte Frequenzen im Bild drastisch entfernen, was zu einer stärkeren Glättung führen kann.
  • Rechenaufwand:Die Fourier-Analyse kann rechenintensiv sein, insbesondere bei großen Bildern. Räumliche Filter sind oft schneller zu berechnen.

Um die quantitative Analyse zu vervollständigen, verwenden wir erneut die Metriken PSNR und SSIM:

# PSNR-Berechnungdef calculate_psnr(original, filtered):    mse = np.mean((original - filtered) ** 2)    if mse == 0:        return float('inf')    pixel_max = 255.0    psnr = 20 * np.log10(pixel_max / np.sqrt(mse))    return psnr# PSNR-Wert berechnenpsnr_value_fourier = calculate_psnr(image, filtered_image)print(f'PSNR-Wert (Fourier-Tiefpassfilter): {psnr_value_fourier} dB')# SSIM-Berechnungfrom skimage.metrics import structural_similarity as ssimssim_value_fourier = ssim(image, filtered_image, data_range=filtered_image.max() - filtered_image.min())print(f'SSIM-Wert (Fourier-Tiefpassfilter): {ssim_value_fourier}')

Vor- und Nachteile der Fourier-Analyse:

  • Vorteile: Effektive Rauschreduzierung durch die Entfernung spezifizierter Frequenzbereiche; Möglichkeit, komplexe Frequenzmuster zu analysieren.
  • Nachteile: Verlust feiner Details und Kanten bei Verwendung von Tiefpassfiltern; höherer Rechenaufwand im Vergleich zu räumlichen Filtern.

Zusammenfassend lässt sich sagen, dass die Fourier-Analyse ein mächtiges Werkzeug zur Rauschunterdrückung ist, aber im Vergleich zu räumlichen Filtern wie dem bilateralen Filter einen höheren Detailverlust verursacht.

Aufgabe 3)

Kantendetektion und SegmentierungKantendetektion identifiziert Kanten in Bildern durch Analyse der Intensitätsänderungen. Segmentierung zerlegt ein Bild in mehrere zusammenhängende Regionen.

  • Kantendetektionsmethoden: Sobel, Canny, Prewitt
  • Mathematische Grundlage: Gradientenberechnung, G = \sqrt{G_x^2 + G_y^2}
  • Segmentierungstechniken: Thresholding, Region Growing, Clustering
  • Segmentierungsalgorithmen: K-Means, Graph-Cut, Watershed
  • Kantenerhaltung wichtig bei Segmentierung

b)

Berechne die Gradientenintensität G für die folgenden Intensitäten in einem 3x3-Ausschnitt eines Bildes unter Verwendung des Sobel-Operators. Die Intensitäten sind:

  • 1, 2, 0
  • 4, 5, 1
  • 6, 8, 3
Der Sobel-Operator ist wie folgt definiert:G_x = \begin{bmatrix} -1 & 0 & 1 \ -2 & 0 & 2 \ -1 & 0 & 1 \end{bmatrix} und G_y = \begin{bmatrix} -1 & -2 & -1 \ 0 & 0 & 0 \ 1 & 2 & 1 \end{bmatrix}Summiere die Produkte der entsprechenden Elemente, um die Gradienten G_x und G_y zu berechnen, und benutze die Formel G = \sqrt{G_x^2 + G_y^2}, um die Gesamtgradientenintensität G zu berechnen.

Lösung:

Hauptkontext der Übung:Kantendetektion und SegmentierungKantendetektion identifiziert Kanten in Bildern durch Analyse der Intensitätsänderungen. Segmentierung zerlegt ein Bild in mehrere zusammenhängende Regionen.

  • Kantendetektionsmethoden: Sobel, Canny, Prewitt
  • Mathematische Grundlage: Gradientenberechnung, G = \sqrt{G_x^2 + G_y^2}
  • Segmentierungstechniken: Thresholding, Region Growing, Clustering
  • Segmentierungsalgorithmen: K-Means, Graph-Cut, Watershed
  • Kantenerhaltung wichtig bei Segmentierung
Teilaufgabe:Berechne die Gradientenintensität G für die folgenden Intensitäten in einem 3x3-Ausschnitt eines Bildes unter Verwendung des Sobel-Operators. Die Intensitäten sind:
  • 1, 2, 0
  • 4, 5, 1
  • 6, 8, 3
Der Sobel-Operator ist wie folgt definiert:\(G_x = \begin{bmatrix} -1 & 0 & 1 \ -2 & 0 & 2 \ -1 & 0 & 1 \end{bmatrix} \) und \(G_y = \begin{bmatrix} -1 & -2 & -1 \ 0 & 0 & 0 \ 1 & 2 & 1 \end{bmatrix}\)Summiere die Produkte der entsprechenden Elemente, um die Gradienten \(G_x\) und \(G_y\) zu berechnen, und benutze die Formel \(G = \sqrt{G_x^2 + G_y^2}\), um die Gesamtgradientenintensität \(G\) zu berechnen.Schritt 1: Berechnung von \(G_x\)\[G_x = \begin{bmatrix} 1 & 2 & 0 \ 4 & 5 & 1 \ 6 & 8 & 3 \end{bmatrix} \times \begin{bmatrix} -1 & 0 & 1 \ -2 & 0 & 2 \ -1 & 0 & 1 \end{bmatrix}\]\[G_x = (-1*1) + (0*2) + (1*0) + (-2*4) + (0*5) + (2*1) + (-1*6) + (0*8) + (1*3)\]\[G_x = -1 + 0 + 0 - 8 + 0 + 2 - 6 + 0 + 3\]\[G_x = -10\]Schritt 2: Berechnung von \(G_y\)\[G_y = \begin{bmatrix} 1 & 2 & 0 \ 4 & 5 & 1 \ 6 & 8 & 3 \end{bmatrix} \times \begin{bmatrix} -1 & -2 & -1 \ 0 & 0 & 0 \ 1 & 2 & 1 \end{bmatrix}\]\[G_y = (-1*1) + (-2*2) + (-1*0) + (0*4) + (0*5) + (0*1) + (1*6) + (2*8) + (1*3)\]\[G_y = -1 - 4 + 0 + 0 + 0 + 0 + 6 + 16 + 3\]\[G_y = 20\]Schritt 3: Berechnung der Gesamtgradientenintensität \(G\)\[G = \sqrt{G_x^2 + G_y^2}\]\[G = \sqrt{(-10)^2 + 20^2}\]\[G = \sqrt{100 + 400}\]\[G = \sqrt{500}\]\[G \approx 22.36\] Die Gesamtgradientenintensität \(G\) beträgt also ungefähr 22.36.

Aufgabe 4)

Du arbeitest als Praktikant in einem Forschungslabor, das sich mit der Entwicklung von autonomen Fahrzeugen beschäftigt. Teil Deiner Aufgabe ist die Implementierung eines Stereo-Vision-Systems, das verwendet wird, um Tiefeninformationen der Umgebung des Fahrzeugs zu erfassen. Es werden zwei Kameras verwendet, die in einem festen Abstand zueinander montiert sind und Bilder der Umgebung aufnehmen. Die Disparität, d.h. die Differenz der Positionen eines Objekts in den beiden Bildern, kann gemessen werden. Deine primäre Zielsetzung ist es, die Tiefe eines Hindernisses vor dem Fahrzeug basierend auf den Stereo-Aufnahmen zu berechnen.

b)

Angenommen, das Stereo-Vision-System muss für eine neue Fahrzeugserie mit einer veränderten Kameraanordnung angepasst werden. In dieser neuen Anordnung beträgt der Basisabstand 0,75 Meter und die Brennweite der Kameras beträgt 0,015 Meter. Wie würde sich die Veränderung der Konfiguration auf die Tiefenberechnung auswirken? Berechne die Tiefe eines Hindernisses, wenn die Disparität 50 Pixel beträgt. Diskutiere auch, wie der veränderte Basisabstand und die Brennweite die Genauigkeit des Systems beeinträchtigen könnten.

Lösung:

Neue Konfiguration und ihre Auswirkungen

Um die Tiefe eines Hindernisses basierend auf den neuen Kameraspezifikationen zu berechnen, gehen wir wie folgt vor:

  • Berechnung der Tiefe (Z) basierend auf der neuen Basisdistanz und der Brennweite
  • Diskussion über die Auswirkungen der veränderten Parameter auf die Genauigkeit des Systems

Berechnung der Tiefe

Die Formel zur Berechnung der Tiefe (Z) lautet weiterhin:

 Z = \frac{f \times B}{d}  

Hierbei sind:

  • f = Brennweite = 0,015 Meter
  • B = Basisabstand = 0,75 Meter
  • d = Disparität = 50 Pixel

Setzen wir die neuen Werte in die Formel ein:

 Z = \frac{0,015 \times 0,75}{50}  Z = \frac{0,01125}{50}  Z = 0,000225 Meter  

Ergebnis

Die Tiefe des Hindernisses beträgt 0,000225 Meter oder 0,225 Millimeter.

Diskussion über die Genauigkeit des Systems

Der Basisabstand und die Brennweite beeinflussen die Genauigkeit des Stereo-Vision-Systems auf verschiedene Weise:

  • Basisabstand (B): Ein größerer Basisabstand erhöht die Disparität für ein gegebenes Hindernis, was zu einer genaueren Tiefenberechnung führt. Dadurch wird die Präzision des Systems verbessert, besonders bei größeren Entfernungen.
  • Brennweite (f): Eine kürzere Brennweite führt zu einem größeren Sichtfeld, was zwar mehr Umgebungserfassung ermöglicht, aber auch die Disparität verringert. Dies kann die Genauigkeit der Tiefenmessung beeinträchtigen.
  • Zusammengefasst:
    • Der größere Basisabstand von 0,75 Metern in der neuen Konfiguration sollte die Genauigkeit der Tiefenmessung verbessern, da die Disparität größer wird.
    • Die kürzere Brennweite von 0,015 Metern kann jedoch die Präzision leicht beeinträchtigen, da das System eine geringere Auflösung in der Tiefenmessung haben könnte.

Diese beiden Faktoren im Zusammenspiel müssen sorgfältig kalibriert werden, um optimale Ergebnisse im Stereo-Vision-System zu erzielen.

Sign Up

Melde dich kostenlos an, um Zugriff auf das vollständige Dokument zu erhalten

Mit unserer kostenlosen Lernplattform erhältst du Zugang zu Millionen von Dokumenten, Karteikarten und Unterlagen.

Kostenloses Konto erstellen

Du hast bereits ein Konto? Anmelden