Ein wichtiges Thema in der Bildverarbeitung ist die Kantenerkennung. Zum hervorheben von Kanten wird oft der Sobeloperator genutzt. Dies ist ein Faltungskern mit der Eigenschaft Änderungen in der Helligkeit des Bildes zu verdeutlichen. Vergleichbar wie beim Ableiten mathematischer Funktionen. Die Faltungskerne des Sobeloperators sehen folgendermaßen aus:

Sobel X

Sobel Y

Der Sobeloperator in X Richtung lässt Vertikale Kanten sichtbar werden während der Sobeloperator in Y Richtung Horizontale Kanten aufzeigt. Im Ausgabebild der beiden Operatoren erscheinen nun sowohl positive als auch negative Pixel. Beim Aufzeigen dieser Ausgabebilder macht es bei int8 Bildern Sinn, den Null Wert als Grau, -128 als Schwarz und +127 als Weiß darzustellen.

Links Originalbild, mitte Sobel in X Richtung, rechts Sobel in Y Richtung

Um das ganze in Python und Opencv zu programmieren kann die cv2.Sobel() Funktion genutzt werden. Ein Programm das dies tut könnte folgendermaßen aussehen:

import cv2

img = cv2.imread('Bild.jpg',cv2.IMREAD_GRAYSCALE)

sobelx = cv2.Sobel(img,cv2.CV_8U,1,0,ksize=3)+127
sobely = cv2.Sobel(img,cv2.CV_8U,0,1,ksize=3)+127

cv2.imshow('Original',img)
cv2.imshow('Sobel X',sobelx)
cv2.imshow('Sobel Y',sobely)

cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.Sobel gibt eine Bilddatei mit der in den Parametern angegebenen Bitgröße - in diesem Fall 8bit - zurück. Die +127 am Ende der Zeile sorgen dafür, dass wir am Ende keine Werte von -128 bis 127 sondern von 0 bis 255 haben was die Darstellung vereinfacht. Mit dem ksize parameter kann die Größe des Faltungskerns eingestellt werden.


Konnte ich helfen? Ich freue mich über einen Drink! 💙