# Sobel-Operator

Der Sobel-Operator ist ein einfacher Kantendetektions-Filter, der in der Bildverarbeitung häufig Anwendung findet und dort mithilfe der Faltung als Algorithmus eingesetzt wird. Dieser berechnet die erste Ableitung der Bildpunkt-Helligkeitswerte, wobei gleichzeitig orthogonal zur Ableitungsrichtung geglättet wird.
Der Algorithmus nutzt eine Faltung mittels einer 3×3-Matrix (Faltungsmatrix), die aus dem Originalbild ein Gradienten-Bild erzeugt. Mit diesem werden hohe Frequenzen im Bild mit Grauwerten dargestellt. Die Bereiche der größten Intensität sind dort, wo sich die Helligkeit des Originalbildes am stärksten ändert und somit die größten Kanten darstellt. Daher wird zumeist nach der Faltung mit dem Sobel-Operator eine Schwellenwert-Funktion angewandt. Der Algorithmus kann allerdings auch auf andere zweidimensionale Signale angewandt werden.

## In Formeln

Aus dem Originalbild $A$ wird für jedes Pixel immer nur ein Ausschnitt, genauer gesagt die Umgebung des zu betrachtenden Pixels, verwendet. Nun werden mittels der Sobel-Operatoren
    $\mathbf {S} _{x}={\begin{bmatrix}1\\2\\1\end{bmatrix}}*{\begin{bmatrix}-1&0&1\end{bmatrix}}$   und   $\mathbf {S} _{y}=\left[{\begin{array}{r}-1\\0\\1\end{array}}\right]*{\begin{bmatrix}1&2&1\end{bmatrix}}$
die gefalteten Resultate
    $\mathbf {G} _{x}=\mathbf {S} _{x}*A={\begin{bmatrix}-1&0&1\\-2&0&2\\-1&0&1\end{bmatrix}}*A$
und
    $\mathbf {G} _{y}=\mathbf {S} _{y}*A=\left[{\begin{array}{r}-1&-2&-1\\0&0&0\\1&2&1\end{array}}\right]*A$
berechnet. Dabei wird die $x$-Koordinate als nach rechts und die $y$-Koordinate als nach unten wachsend angesehen. Durch Ausnutzung der Separierbarkeit kann die Rechenzeit deutlich reduziert werden.
Anschließend werden alle Elemente der Matrix aufsummiert, um ihren Grauwert zu erhalten (siehe Grauwertematrix). Eine richtungsunabhängige Information kann man durch die Kombination beider Ergebnisse erhalten:
    $\mathbf {G} ={\sqrt {\mathbf {G} _{x}^{2}+\mathbf {G} _{y}^{2}}}.$
Die Richtung eines Gradienten erhält man über die Formel
    $\Theta =\operatorname {arctan2} \left(\mathbf {G} _{x},\mathbf {G} _{y}\right)$,
wobei arctan2 der Arkustangens mit zwei Argumenten ist. Durch den Wert $\Theta =0$ wird eine vertikale Kante beschrieben, mit negativem Gradienten in $x$-Richtung. Die Winkel nehmen zu bei einer Drehung im Uhrzeigersinn.

## Programmierung

Das folgende Beispiel in der Programmiersprache C# zeigt die Implementierung des Sobel-Operators. Die hier gezeigte Methode erzeugt aus einem Originalbild ein Gradienten-Bild. Die Pixel haben als Farbwerte den richtungsunabhängigen Gradienten $\mathbf {G}$.

## Beispielbilder

| Originalbild "Camera Obscura", das zur weiteren Berechnung verwendet wurde. | Camera Obscura mit Sobel-Operator $\mathbf {G_{x}}$ gefiltert (detektiert vertikale Kanten). Da auch negative Werte entstehen, wird der Nullpunkt als mittleres Grau dargestellt | Camera Obscura mit Sobel-Operator $\mathbf {G_{y}}$ gefiltert (detektiert horizontale Kanten). Da auch negative Werte entstehen, wird der Nullpunkt als mittleres Grau dargestellt | Camera Obscura mit Sobel-Operatoren $\mathbf {G} _{x}$ und $\mathbf {G} _{y}$ gefiltert, kombiniert und mit Absolutwerten dargestellt. |

## Software

Der Sobel-Operator kann mit dem Grafikprogramm GIMP über die Menüaufrufe Filter → Kanten finden → Sobel ausgeführt werden. In den freien Bildverarbeitungsbibliotheken Scikit-image und OpenCV ist er ebenfalls implementiert.

## Scharr-Operator

Der Sobel-Operator hat keine perfekte Rotationssymmetrie. Besser berücksichtigt wird dies mit dem Scharr-Operator:
    $\mathbf {G} _{x}={\begin{bmatrix}47&0&-47\\162&0&-162\\47&0&-47\end{bmatrix}}*A$
und
    $\mathbf {G} _{y}={\begin{bmatrix}47&162&47\\0&0&0\\-47&-162&-47\end{bmatrix}}*A$

## 5×5 Sobel Varianten

Es gibt auch Ansätze die Sobel-Faltungsmatrix auf 5×5 zu vergrößern. Alternativ kann man vorab einen Weichzeichner (z. B. 3×3 Blur) anwenden mit ähnlichem Ergebnis.