<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Sobel-Operator</id>
	<title>Sobel-Operator - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Sobel-Operator"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Sobel-Operator&amp;action=history"/>
	<updated>2026-05-28T08:53:33Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Sobel-Operator&amp;diff=165490&amp;oldid=prev</id>
		<title>imported&gt;AsepTisch: Änderungen von ~2025-28543-40 (Diskussion) wurden auf die letzte Version von Dennisgmt zurückgesetzt: keine Verbesserung</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Sobel-Operator&amp;diff=165490&amp;oldid=prev"/>
		<updated>2025-10-12T17:56:14Z</updated>

		<summary type="html">&lt;p&gt;Änderungen von &lt;a href=&quot;/index.php/Spezial:Beitr%C3%A4ge/~2025-28543-40&quot; title=&quot;Spezial:Beiträge/~2025-28543-40&quot;&gt;~2025-28543-40&lt;/a&gt; (&lt;a href=&quot;/index.php?title=Benutzer_Diskussion:~2025-28543-40&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Benutzer Diskussion:~2025-28543-40 (Seite nicht vorhanden)&quot;&gt;Diskussion&lt;/a&gt;) wurden auf die letzte Version von &lt;a href=&quot;/index.php?title=Benutzer:Dennisgmt&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Benutzer:Dennisgmt (Seite nicht vorhanden)&quot;&gt;Dennisgmt&lt;/a&gt; zurückgesetzt: keine Verbesserung&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Der &amp;#039;&amp;#039;&amp;#039;Sobel-Operator&amp;#039;&amp;#039;&amp;#039;&amp;lt;ref&amp;gt;Irwin Sobel, 2014, [https://www.researchgate.net/publication/239398674_An_Isotropic_3_3_Image_Gradient_Operator &amp;#039;&amp;#039;Geschichte und Definition des Sobel-Operators&amp;#039;&amp;#039; (englisch)]&amp;lt;/ref&amp;gt; ist ein einfacher [[Kantendetektion]]s-[[Filter (Bildverarbeitung)|Filter]], der in der [[Bildverarbeitung]] häufig Anwendung findet und dort mithilfe der [[Faltung (Mathematik)|Faltung]] als [[Algorithmus]] eingesetzt wird. Dieser berechnet die erste [[Differentialrechnung|Ableitung]] der [[Pixel|Bildpunkt]]-Helligkeitswerte, wobei gleichzeitig [[Orthogonalität|orthogonal]] zur Ableitungsrichtung geglättet wird.&lt;br /&gt;
&lt;br /&gt;
Der [[Algorithmus]] nutzt eine [[Faltung (Mathematik)|Faltung]] mittels einer 3×3-[[Matrix (Mathematik)|Matrix]] ([[Faltungsmatrix]]), die aus dem Originalbild ein [[Gradient (Mathematik)|Gradienten]]-Bild erzeugt. Mit diesem werden hohe Frequenzen im Bild mit [[Grauwert]]en 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 [[Schwellenwertverfahren|Schwellenwert]]-Funktion angewandt. Der Algorithmus kann allerdings auch auf andere [[2D|zweidimensionale]] Signale angewandt werden.&lt;br /&gt;
&lt;br /&gt;
== In Formeln ==&lt;br /&gt;
Aus dem Originalbild &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; wird für jedes [[Pixel]] immer nur ein Ausschnitt, genauer gesagt die Umgebung des zu betrachtenden Pixels, verwendet. Nun werden mittels der Sobel-Operatoren&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\mathbf{S}_x = \begin{bmatrix} &lt;br /&gt;
1 \\&lt;br /&gt;
2 \\&lt;br /&gt;
1&lt;br /&gt;
\end{bmatrix} * \begin{bmatrix}&lt;br /&gt;
-1 &amp;amp; 0 &amp;amp; 1  &lt;br /&gt;
\end{bmatrix} &amp;lt;/math&amp;gt; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; und &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;lt;math&amp;gt;&lt;br /&gt;
\mathbf{S}_y = \left[\begin{array}{r}&lt;br /&gt;
-1 \\&lt;br /&gt;
0 \\&lt;br /&gt;
1  &lt;br /&gt;
\end{array}\right] * \begin{bmatrix} &lt;br /&gt;
1 &amp;amp; 2 &amp;amp; 1&lt;br /&gt;
\end{bmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
die gefalteten Resultate&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\mathbf{G}_x=\mathbf{S}_x * A = \begin{bmatrix}&lt;br /&gt;
-1 &amp;amp; 0 &amp;amp; 1 \\&lt;br /&gt;
-2 &amp;amp; 0 &amp;amp; 2 \\&lt;br /&gt;
-1 &amp;amp; 0 &amp;amp; 1&lt;br /&gt;
\end{bmatrix} * A&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
und&lt;br /&gt;
:&amp;lt;math&amp;gt;\mathbf{G}_y=\mathbf{S}_y * A = \left[\begin{array}{r}&lt;br /&gt;
-1 &amp;amp; -2 &amp;amp; -1 \\&lt;br /&gt;
0 &amp;amp; 0 &amp;amp; 0 \\&lt;br /&gt;
1 &amp;amp; 2 &amp;amp; 1&lt;br /&gt;
\end{array}\right] * A&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
berechnet. Dabei wird die &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;-Koordinate als nach rechts und die &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt;-Koordinate als nach unten wachsend angesehen.&lt;br /&gt;
Durch Ausnutzung der [[Separierbarkeit]] kann die [[Rechenzeit]] deutlich reduziert werden.&lt;br /&gt;
&lt;br /&gt;
Anschließend werden alle Elemente der [[Matrix (Mathematik)|Matrix]] aufsummiert, um ihren [[Grauwert]] zu erhalten (siehe [[Grauwertematrix]]). Eine richtungsunabhängige [[Information]] kann man durch die Kombination beider Ergebnisse erhalten:&lt;br /&gt;
:&amp;lt;math&amp;gt;\mathbf{G} = \sqrt{ \mathbf{G}_x^2 + \mathbf{G}_y^2 }.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die [[Richtung]] eines [[Gradient (Mathematik)|Gradienten]] erhält man über die [[Formel]]&lt;br /&gt;
:&amp;lt;math&amp;gt;\Theta = \operatorname{arctan2}\left( \mathbf{G}_x , \mathbf{G}_y \right)&amp;lt;/math&amp;gt;,&lt;br /&gt;
wobei [[arctan2]] der [[Arkustangens und Arkuskotangens|Arkustangens]] mit zwei [[Argument (Informatik)|Argumenten]] ist. Durch den Wert &amp;lt;math&amp;gt;\Theta = 0&amp;lt;/math&amp;gt; wird eine vertikale Kante beschrieben, mit negativem [[Gradient]]en in &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;-[[Richtung]]. Die [[Winkel]] nehmen zu bei einer [[Drehung]] im [[Uhrzeigersinn]].&lt;br /&gt;
&lt;br /&gt;
== Programmierung ==&lt;br /&gt;
Das folgende Beispiel in der [[Programmiersprache]] [[C-Sharp|C#]] zeigt die Implementierung des Sobel-Operators. Die hier gezeigte [[Methode (Programmierung)|Methode]] erzeugt aus einem Originalbild ein [[Gradient (Mathematik)|Gradienten]]-Bild. Die [[Pixel]] haben als Farbwerte den richtungsunabhängigen Gradienten &amp;lt;math&amp;gt;\mathbf{G}&amp;lt;/math&amp;gt;.&amp;lt;ref&amp;gt;https://stackoverflow.com/questions/17815687/image-processing-implementing-sobel-filter&amp;lt;/ref&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;c#&amp;quot;&amp;gt;&lt;br /&gt;
// Erzeugt ein richtungsunabhängiges Gradienten-Bild aus einem Originalbild mithilfe der Sobel-Operatoren S_x und S_y&lt;br /&gt;
public Bitmap GetGradientImage(string imageFilePath)&lt;br /&gt;
{&lt;br /&gt;
	Bitmap image = new Bitmap(imageFilePath); // Lädt ein Bitmap aus einer Bilddatei.&lt;br /&gt;
	&lt;br /&gt;
	// Initialisiert ein 2-dimensionales Array für den Sobel-Operator S_x&lt;br /&gt;
	double[][] S_x = new double[][]{new double[]{-1,0,1}, new double[]{-2,0,2}, new double[]{-1,0,1}};&lt;br /&gt;
	// Initialisiert ein 2-dimensionales Array für den Sobel-Operator S_y&lt;br /&gt;
	double[][] S_y = new double[][]{new double[]{-1,-2,-1}, new double[]{0,0,0}, new double[]{1,2,1}};&lt;br /&gt;
	&lt;br /&gt;
	// Erzeugt ein neues Bitmap für das Gradienten-Bild.&lt;br /&gt;
	Bitmap gradientImage = new Bitmap(image.Width, image.Height);&lt;br /&gt;
	&lt;br /&gt;
	// Durchläuft das Originalbild entlang der x-Achse.&lt;br /&gt;
	for (int x = 0; x &amp;lt; image.Width - 2; x++)&lt;br /&gt;
	{&lt;br /&gt;
		// Durchläuft das Originalbild entlang der y-Achse.&lt;br /&gt;
		for (int y = 0; y &amp;lt; image.Height - 2; y++)&lt;br /&gt;
		{&lt;br /&gt;
			// Berechnet den Gradienten G_x&lt;br /&gt;
			double G_x = (S_x[0][0] * image.GetPixel(x,y).R)   + (S_x[0][1] * image.GetPixel(x+1,y).R)   + (S_x[0][2] * image.GetPixel(x+2,y).R)   +&lt;br /&gt;
						 (S_x[1][0] * image.GetPixel(x,y+1).R) + (S_x[1][1] * image.GetPixel(x+1,y+1).R) + (S_x[1][2] * image.GetPixel(x+2,y+1).R) +&lt;br /&gt;
						 (S_x[2][0] * image.GetPixel(x,y+2).R) + (S_x[2][1] * image.GetPixel(x+1,y+2).R) + (S_x[2][2] * image.GetPixel(x+2,y+2).R);&lt;br /&gt;
			// Berechnet den Gradienten G_y&lt;br /&gt;
			double G_y = (S_y[0][0] * image.GetPixel(x,y).R)   + (S_y[0][1] * image.GetPixel(x+1,y).R)   + (S_y[0][2] * image.GetPixel(x+2,y).R)   +&lt;br /&gt;
						 (S_y[1][0] * image.GetPixel(x,y+1).R) + (S_y[1][1] * image.GetPixel(x+1,y+1).R) + (S_y[1][2] * image.GetPixel(x+2,y+1).R) +&lt;br /&gt;
						 (S_y[2][0] * image.GetPixel(x,y+2).R) + (S_y[2][1] * image.GetPixel(x+1,y+2).R) + (S_y[2][2] * image.GetPixel(x+2,y+2).R);&lt;br /&gt;
			&lt;br /&gt;
			// Berechnet den richtungsunabhängigen Gradienten G.&lt;br /&gt;
			int G = (int) Math.Sqrt((G_x * G_x) + (G_y * G_y));&lt;br /&gt;
			// Setzt den Farbwert für das Pixel des Gradienten-Bilds.&lt;br /&gt;
			gradientImage.SetPixel(x, y, Color.FromArgb(G, G, G));&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	return gradientImage; // Gibt das Gradienten-Bild als Rückgabewert der Methode zurück.&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Beispielbilder ==&lt;br /&gt;
{|&lt;br /&gt;
 | valign=&amp;quot;top&amp;quot; |[[Datei:Camera obscura.jpg|mini|Originalbild &amp;quot;Camera Obscura&amp;quot;, das zur weiteren Berechnung verwendet wurde.]]&lt;br /&gt;
 | valign=&amp;quot;top&amp;quot; |[[Datei:Camera obscura-Sobel-Horizontal.jpg|mini|Camera Obscura mit Sobel-Operator &amp;lt;math&amp;gt;\mathbf{G_x}&amp;lt;/math&amp;gt; gefiltert (detektiert vertikale Kanten). Da auch negative Werte entstehen, wird der Nullpunkt als mittleres Grau dargestellt]]&lt;br /&gt;
 | valign=&amp;quot;top&amp;quot; |[[Datei:Camera obscura-Sobel-Vertikal.jpg|mini|Camera Obscura mit Sobel-Operator &amp;lt;math&amp;gt;\mathbf{G_y}&amp;lt;/math&amp;gt; gefiltert (detektiert horizontale Kanten). Da auch negative Werte entstehen, wird der Nullpunkt als mittleres Grau dargestellt]]&lt;br /&gt;
 | valign=&amp;quot;top&amp;quot; |[[Datei:Camera obscura-Sobel-Kombination.jpg|mini|Camera Obscura mit Sobel-Operatoren &amp;lt;math&amp;gt;\mathbf{G}_x&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;\mathbf{G}_y&amp;lt;/math&amp;gt; gefiltert, kombiniert und mit Absolutwerten dargestellt.]]&lt;br /&gt;
 |}&lt;br /&gt;
== Software ==&lt;br /&gt;
Der Sobel-Operator kann mit dem [[Grafikprogramm]] [[GIMP]]&amp;lt;ref&amp;gt;{{Internetquelle |autor= |url=https://docs.gimp.org/2.8/de/plug-in-sobel.html |titel=7.6. Sobel |werk=GNU Image Manipulation Program - Benutzerhandbuch |hrsg=GIMP |datum= |zugriff=2018-11-29}}&amp;lt;/ref&amp;gt; über die Menüaufrufe Filter → Kanten finden → Sobel ausgeführt werden. In den freien Bildverarbeitungsbibliotheken [[Scikit-image]]&amp;lt;ref&amp;gt;{{Internetquelle |autor= |url=https://scikit-image.org/docs/dev/api/skimage.filters.html#skimage.filters.sobel |titel=Module: filters — skimage v0.15.dev0 docs |werk= |hrsg= |datum= |zugriff=2018-11-29 |sprache=en}}&amp;lt;/ref&amp;gt; und [[OpenCV]]&amp;lt;ref&amp;gt;{{Internetquelle |autor= |url=https://docs.opencv.org/master/d2/d2c/tutorial_sobel_derivatives.html |titel=OpenCV: Sobel Derivatives |werk= |hrsg= |datum= |zugriff=2018-11-29 |sprache=en}}&amp;lt;/ref&amp;gt; ist er ebenfalls implementiert.&lt;br /&gt;
&lt;br /&gt;
== Scharr-Operator ==&lt;br /&gt;
Der Sobel-Operator hat keine perfekte [[Rotationssymmetrie]]. Besser berücksichtigt wird dies mit dem Scharr-Operator&amp;lt;ref&amp;gt;[https://nbn-resolving.org/urn/resolver.pl?urn=urn:nbn:de:bsz:16-opus-9622 &amp;#039;&amp;#039;Scharr, Hanno. Optimale Operatoren in der Digitalen Bildverarbeitung. Dissertation: Ruprecht-Karls-Universität Heidelberg, 2000&amp;#039;&amp;#039;].&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\mathbf{G}_x= \begin{bmatrix}&lt;br /&gt;
47 &amp;amp; 0 &amp;amp; -47 \\&lt;br /&gt;
162 &amp;amp; 0 &amp;amp; -162 \\&lt;br /&gt;
47 &amp;amp; 0 &amp;amp; -47&lt;br /&gt;
\end{bmatrix} * A&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
und&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\mathbf{G}_y= \begin{bmatrix}&lt;br /&gt;
47 &amp;amp; 162 &amp;amp; 47 \\&lt;br /&gt;
0 &amp;amp; 0 &amp;amp; 0 \\&lt;br /&gt;
-47 &amp;amp; -162 &amp;amp; -47&lt;br /&gt;
\end{bmatrix} * A&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 5×5 Sobel Varianten ==&lt;br /&gt;
Es gibt auch Ansätze die Sobel-Faltungsmatrix auf 5×5 zu vergrößern&amp;lt;ref&amp;gt;[https://www.mathship.com/730/SobelGradients5x5.pdf &amp;#039;&amp;#039; G. Levkine. Sobel and Scharr 3x3 and 5x5 convolution kernels for image gradient calculations, (2020)&amp;#039;&amp;#039;].&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[https://www.researchgate.net/publication/49619233_Image_Segmentation_using_Extended_Edge_Operator_for_Mammographic_Images &amp;#039;&amp;#039;Prof. Kekre. Image Segmentation using Extended Edge Operator for Mammographic Images, (2010)&amp;#039;&amp;#039;].&amp;lt;/ref&amp;gt;. Alternativ kann man vorab einen Weichzeichner (z.&amp;amp;nbsp;B. 3×3 Blur) anwenden mit ähnlichem Ergebnis.&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* [[Kantendetektion]]&lt;br /&gt;
&lt;br /&gt;
* [[Prewitt-Operator]]&lt;br /&gt;
* [[Roberts-Operator]]&lt;br /&gt;
* [[Canny-Algorithmus]]&lt;br /&gt;
* [[Laplace-Filter]]&lt;br /&gt;
* [[Kirsch-Operator]] (nicht linear)&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Kantendetektion]]&lt;br /&gt;
[[Kategorie:Bildverarbeitung]]&lt;/div&gt;</summary>
		<author><name>imported&gt;AsepTisch</name></author>
	</entry>
</feed>