Zum Inhalt springen

Sensorische Systeme/ Computermodelle/Deskriptive Simulationen der visuellen Informationsverarbeitung

Aus Wikibooks

Computersimulation des visuellen Systems

[Bearbeiten]

In diesem Abschnitt wird ein Überblick über die Simulation der Verarbeitung auf den frühen Ebenen des visuellen Systems gegeben. Die Implementierung zur Nachbildung der Aktionen des visuellen Systems wird dabei mit MATLAB und seinen Toolboxen durchgeführt. Die Verarbeitung durch das frühe visuelle System wurde im vorangegangenen Abschnitt besprochen und kann zusammen mit einigen der Funktionen, die sie ausführen, in der folgenden schematischen Übersicht dargestellt werden. Eine gute Beschreibung der Bildverarbeitung findet sich in (Cormack 2000).

Schematischer Überblick über die Verarbeitung durch das frühe visuelle System
Struktur Operationen 2D Fourier Ebene
Welt
Optik Räumliche Tiefpassfilterung
Photorezeptor-Array Sampling, weitere Tiefpassfilterung, zeitliche Tiefpassfilterung, -Filterung, Verstärkungsregelung, Ansprechkompression
LGN Cells Räumlich-zeitliche Bandpassfilterung, -Filterung, mehrfache parallele Darstellungen
Primäre visuelle kortikale Neuronen: Einfach und komplex Einfache Zellen: Orientierung, Phase, Bewegung, binokulare Disparität und -Filterung
Komplexe Zellen: keine Phasenfilterung (Erkennung der Kontrastenergie)

Auf der linken Seite sind einige der wichtigsten zu besprechenden Strukturen abgebildet; in der Mitte, sind einige der wichtigsten Operationen, die an der zugehörigen Struktur durchgeführt werden; rechts sind die 2-D-Fourier-Darstellungen der Welt, des Netzhautbildes und der Empfindlichkeiten, die für eine Ganglionzelle und eine kortikale Zelle typisch sind. (Von Handbook of Image and Video Processing, A. Bovik)


Wie aus der obigen Übersicht hervorgeht, müssen verschiedene Stufen der Bildverarbeitung berücksichtigt werden, um die Reaktion des visuellen Systems auf einen Reiz zu simulieren. Der nächste Abschnitt wird daher eine kurze Diskussion über die Bildverarbeitung geben. Zunächst werden wir uns jedoch mit der Simulation der Komponenten der Sinnesorgane befassen.

Komponenten der Sinnesorgane simulieren

[Bearbeiten]

Anatomische Parameter des Auges

[Bearbeiten]

Das durchschnittliche Auge hat einen vorderen Krümmungsradius der Hornhaut von und einen Brechungsindex des Kammerwassers von 1,336. Die Länge des Auges beträgt . Die Iris ist annähernd flach, und der Rand der Iris (auch Limbus genannt) hat einen Radius von .

Die Optik des Augapfels

[Bearbeiten]

Die Optik des Augapfels wird durch seine räumliche 2-D Impulsantwortfunktion, die Punktspreizfunktion (PSF), charakterisiert

wobei die radiale Entfernung in Bogenminuten vom Bildmittelpunkt ist.

Praktische Umsetzung
[Bearbeiten]

Die Wirkung auf ein bestimmtes digitales Bild hängt natürlich von der Entfernung des Bildes zu den Augen ab. Als einfacher Platzhalter ersetzt man diesen Filter durch einen Gauß-Filter mit der Höhe 30 und einer Standardabweichung von 1,5.

In einer Dimension wird eine Gaussglocke wie folgt beschrieben

Aktivität von Ganglionzellen

[Bearbeiten]
Ricker wavelet, mit : = 1:1.6

Ignorieren wir

  • die zeitliche Reaktion
  • die Wirkung der Wellenlänge (insbesondere für die Zapfen)
  • die Öffnung der Iris
  • die Probennahme und Verteilung der Photorezeptoren
  • das Bleichen des Fotopigments

können wir die Antwort der Ganglionzellen mit einer Gauß-Differenz (DOG, Wikipedia [1]) approximieren.


Die Werte von und stehen in einem Verhältnis von etwa 1:1,6, variieren jedoch in Abhängigkeit von der Exzentrizität. Für Zwergzellen (oder P-Zellen) beträgt die Größe des rezeptiven Feldes (RFS) ungefähr

und für dir M-Zellen etwa

wobei der RFS in Bogenminuten und die Exzentrizität in mm Abstand vom Zentrum der Fovea angegeben wird (Cormack 2000).

Aktivität der einfachen Zellen im primären visuellen Kortex (V1)

[Bearbeiten]

Ebenfalls unter Vernachlässigung zeitlicher Eigenschaften kann die Aktivität einfacher Zellen im primären visuellen Kortex (V1) mit Hilfe von Gabor-Filtern modelliert werden (Wikipedia [2]). Ein Gabor-Filter ist ein linearer Filter, dessen Impulsantwort durch eine harmonische Funktion (Sinusoid) multipliziert mit einer Gauß-Funktion definiert ist. Die Gaußsche Funktion bewirkt, dass die Amplitude der harmonischen Funktion in der Nähe des Ursprungs abnimmt, aber in der Nähe des Ursprungs dominieren die Eigenschaften der harmonischen Funktion

wobei

und

In dieser Gleichung steht für die Wellenlänge des Kosinusfaktors, für die Orientierung der Normalen zu den parallelen Streifen einer Gabor-Funktion (Wikipedia [3]), ist der Phasenunterschied, ist das Sigma der Gauß'schen Hüllkurve und ist das räumliche Seitenverhältnis und gibt die Elliptizität der Unterstützung der Gabor-Funktion an.

Die Größe der rezeptiven Felder der "simple-cell" hängt von ihrer Position relativ zur Fovea ab, allerdings weniger streng als bei den retinalen Ganglionzellen. Die kleinsten Felder in und in der Nähe der Fovea sind etwa ein Viertel mal ein Viertel Grad groß, wobei der zentrale Bereich nur wenige Bogenminuten groß ist (das entspricht dem Durchmesser der kleinsten rezeptiven Feldzentren der retinalen Ganglionzellen). In der Netzhautperipherie können die rezeptiven Felder der Einzelzellen etwa 1 mal 1 Grad groß sein. [1].

Gabor-ähnliche Funktionen ergeben sich auf natürliche Weise, einfach aus der Statistik alltäglicher Szenen [2].


Gabor Funktion, mit = 1, = 1, = 4, = 2, = 1

Dies ist eine Beispielimplementierung in MATLAB:

function gb = gabor_fn(sigma,theta,lambda,psi,gamma)
 
  sigma_x = sigma;
  sigma_y = sigma/gamma;
 
  % Bounding box
  nstds = 3;
  xmax = max(abs(nstds*sigma_x*cos(theta)),abs(nstds*sigma_y*sin(theta)));
  xmax = ceil(max(1,xmax));
  ymax = max(abs(nstds*sigma_x*sin(theta)),abs(nstds*sigma_y*cos(theta)));
  ymax = ceil(max(1,ymax));
  xmin = -xmax;
  ymin = -ymax;
  [x,y] = meshgrid(xmin:0.05:xmax,ymin:0.05:ymax);
 
  % Rotation
  x_theta = x*cos(theta) + y*sin(theta);
  y_theta = -x*sin(theta) + y*cos(theta);
 
  gb = exp(-.5*(x_theta.^2/sigma_x^2+y_theta.^2/sigma_y^2)).* cos(2*pi/lambda*x_theta+psi);
 
end

Und eine äquivalente Pyhon-Implementierung wäre:

import numpy as np
import matplotlib.pyplot as mp

def gabor_fn(sigma = 1, theta = 1, g_lambda = 4, psi = 2, gamma = 1):
    # Calculates the Gabor function with the given parameters
        
    sigma_x = sigma
    sigma_y = sigma/gamma
    
    # Boundingbox:
    nstds = 3
    xmax = max( abs(nstds*sigma_x * np.cos(theta)), abs(nstds*sigma_y * np.sin(theta)) )
    ymax = max( abs(nstds*sigma_x * np.sin(theta)), abs(nstds*sigma_y * np.cos(theta)) )
    
    xmax = np.ceil(max(1,xmax))
    ymax = np.ceil(max(1,ymax))
    
    xmin = -xmax
    ymin = -ymax
    
    numPts = 201    
    (x,y) = np.meshgrid(np.linspace(xmin, xmax, numPts), np.linspace(ymin, ymax, numPts) ) 
    
    # Rotation
    x_theta =  x * np.cos(theta) + y * np.sin(theta)
    y_theta = -x * np.sin(theta) + y * np.cos(theta)
    gb = np.exp( -0.5* (x_theta**2/sigma_x**2 + y_theta**2/sigma_y**2) ) * \
         np.cos( 2*np.pi/g_lambda*x_theta + psi )
    
    return gb

if __name__ == '__main__':
    # Main function: calculate Gabor function for default parameters and show it
    gaborValues = gabor_fn()
    mp.imshow(gaborValues)
    mp.colorbar()
    mp.show()

Bildbearbeitung

[Bearbeiten]

Ein wichtiges technisches Werkzeug, das man verstehen muss, ist die Art und Weise, wie ein Computer mit Bildern umgeht. Wir müssen wissen, wie wir Bilder bearbeiten können und welche Techniken wir haben, um Bilder neu anzuordnen.

Bilddarstellung

[Bearbeiten]
Graustufen
[Bearbeiten]
Darstellung von Graustufenbildern.

Für einen Computer ist ein Bild nichts anderes als eine riesige Menge kleiner Quadrate. Diese Quadrate werden "Pixel" genannt. In einem Graustufenbild trägt jedes dieser Pixel eine Zahl n, . Die Variable "n" repräsentiert die exakte Farbe des Quadrats im gegebenen Bild. Diese Darstellung ermöglicht die Verwendung von 256 verschiedenen Graustufen in einem Graustufenbild, wobei der Wert 255 einen weißen Bereich darstellt und der Wert 0 angibt, dass das Quadrat schwarz ist. Man könnte sogar mehr als 256 verschiedene Graustufen verwenden. Auf die genannte Weise wird für jedes Pixel genau 1 Byte (oder 8 Bit) Speicherplatz benötigt. (Aufgrund des Binärsystems eines Computers gilt: 28=256) Wenn man mehr verschiedene Graustufen in einem Bild benötigen, ist das kein Problem. Man kann einfach mehr Speicherplatz verwenden, um das Bild zu speichern. Aber es ist darauf zu achten, dass dies bei großen Bildern eine schwierige Aufgabe sein kann. Außerdem gibt es oft das Problem, dass das Messgerät (z. B. der Monitor) nicht mehr als diese 256 verschiedenen Grautöne darstellen kann.

Farbe
[Bearbeiten]

Die Darstellung eines farbigen Bildes ist nur wenig komplizierter als die eines Graustufenbildes. Dazu muss man nur wissen, dass der Computer mit einer additiven Farbmischung der drei Hauptfarben Rot, Grün und Blau arbeitet. Dies sind die so genannten RGB-Farben. Nun erfordert jeder Pixel nun drei Werte im Bereich von 0 bis 256, wobei jeder dieser Werte eine Farbkomponente repräsentiert. Es sind also 2563= 16.777.216 verschiedene Farben, die dargestellt werden können. Ähnlich wie bei den Graustufenbildern gilt auch hier, dass keine Farbe schwarz bedeutet, und alle Farben weiß bedeuten. Das heißt, die Farbe (0,0,0) ist schwarz, während (0,0,255) blau und (255,255,255) weiß bedeutet.

Orientierungen
[Bearbeiten]

ACHTUNG - Es gibt zwei gängige, aber unterschiedliche Möglichkeiten, die Lage eines Punktes in 2 Dimensionen zu beschreiben: 1) Die x/y-Notation, wobei x normalerweise nach links zeigt 2) Die Zeilen/Spalten Ausrichtung Es muss sorgfältig darauf geachtet werden, welche Koordinaten zur Beschreibung der Daten verwendet werden, da die beiden Beschreibungen nicht konsistent sind!

Bildfilterung

[Bearbeiten]
1D Filter
[Bearbeiten]

In vielen technischen Anwendungen finden wir einige primitive Grundlagen, mit denen wir leicht Eigenschaften beschreiben können. In eindimensionalen Szenarien sind Filter verhältnismäßig unkompliziert, was die Möglichkeit eröffnet, solche Filter zur Bildmanipulation einzusetzen. Der so genannte "Savitzky-Golay-Filter" ermöglicht die Glättung eingehender Signale. Das Filter wurde 1964 von Abraham Savitzky und Marcel J. E. Golay beschrieben. Es handelt sich um einen impulsgesteuerten Filter (IR).

Zum besseren Verständnis sehen wir uns ein Beispiel an. In 1d haben wir es normalerweise mit Vektoren zu tun. Einen solchen gegebenen Vektor nennen wir x und es gilt: . Unser Ziel ist es, diesen Vektor x zu glätten. Dazu benötigen wir nur einen weiteren Vektor , diesen Vektor nennen wir einen Gewichtsvektor.

Mit haben wir nun einen geglätteten Vektor y. Dieser Vektor ist glatter als der vorherige Vektor, da wir nur den Durchschnitt über einige Einträge im Vektor speichern. Das bedeutet, dass der neu gefundene Vektor von einigen Einträgen rechts und links des zu glättenden Eintrags abhängt. Ein großer Nachteil dieses Ansatzes ist, dass der neu gefundene Vektor y nur n-m Einträge hat, statt n wie der ursprüngliche Vektor x. Die Darstellung dieses neuen Vektors würde zur selben Funktion wie zuvor führen, jedoch mit reduzierter Amplitude. Dadurch gehen keine Daten verloren, stattdessen verringern sich lediglich die Schwankungen.

2D Filter
[Bearbeiten]

Um von einer eindimensionalen Situation zum zweidimensionalen Übergang zu gelangen, genügt es, die Vektoren in Matrizen umzuwandeln. Wie bereits erwähnt, ist ein Graustufenbild für einen Computer oder für ein Softwaretool wie MATLAB nichts anderes als eine riesige Matrix, die mit natürlichen Zahlen gefüllt ist, oft zwischen 0 und 255.

Der Gewichtsvektor ist nun eine Gewichtsmatrix. Aber wir verwenden den Filter immer noch, indem wir verschiedene Matrix-Element-Multiplikationen addieren.

Ausdehnung und Erosion

[Bearbeiten]

Für lineare Filter gilt, wie schon gesehen, dass sie kommutativ sind: Mit anderen Worten: Es spielt keine Rolle, wie viele und in welcher Reihenfolge die verschiedenen linearen Filter verwendet werden. Wenn beispielsweise ein Savitzky-Golay-Filter auf einen Datensatz angewandt wird und daraufhin ein zweiter Savitzky-Golay-Filter zur Berechnung der ersten Ableitung verwendet wird, ergibt sich das gleiche Ergebnis, als wenn die Reihenfolge der Filter umgekehrt würde. Es lässt sich sogar feststellen, dass ein einzelner Filter existiert, der denselben Effekt erzielt wie die Anwendung der zweier Filter nacheinander.


Im Gegensatz dazu handelt es sich bei morphologischen Operationen an einem Bild um nicht-lineare Operationen, bei denen das finale Ergebnis von der Reihenfolge der Anwendung abhängt. Wenn wir uns ein Bild vorstellen, wird dieses durch Pixel mit den Werten xij charakterisiert. Zusätzlich nehmen wir an, dass es sich bei diesem Bild um eine Schwarz-Weiß-Darstellung handelt, somit gilt:

Um eine morphologische Operation zu definieren, ist es notwendig, ein Strukturelement (SE) festzulegen. Dies könnte beispielsweise eine 3x3-Matrix sein, die als Teil des Bildes fungiert.

Die Definition von Erosion E sagt:


Wenn auch nur ein einziger Pixel im Strukturelement M den Wert 0 aufweist, bewirkt die Erosion, dass der Wert des entsprechenden Pixels im Bild auf Null gesetzt wird. Andernfalls ist E(M)=1 Und für die Ausdehnung D gilt: Wenn irgendein Wert in SE 1 ist, wird die Ausdehnung von M, D(M), auf 1 gesetzt.

.

Morphologische Operationen an diesem Bild ... ... führen zu den folgenden Ergebnissen:

Kompositionen von Ausdehnung und Erosion: Öffnen und Schließen von Bildern
[Bearbeiten]

Es gibt zwei Zusammensetzungen von Ausdehnung und Erosion. Die eine heißt Öffnen, die andere Schließen. Es gilt:


References

[Bearbeiten]
  1. author or editor. Eye, Brain, and Vision. Henry Holt and Company, year.
  2. Olshausen,B.A. and Field,D.J.. “Emergence of simple-cell receptive field properties by learning a sparse code for natural images”. Nature, 381:607-609, 1996.