Kanten zählen mit Python und OpenCV

Computer Vision 

Heute stellen wir und der Aufgabe, die Schärfe eines auf dem Datenträger vorliegenden Bildes automatisch zu ermitteln. Hierzu habe ich mir von Pixabay ein Bild ((https://pixabay.com/de/youtuber-blogger-drehbuchautor-2838945 vielen Dank an Lucas!) besorgt und mit Photoshop über den Gaußschen Weichzeichner 3 verschiedene Schärfe-Muster erstellt. Das erste Bild ist unverändert (also scharf), die folgenden wurden mit dem Gaußschen Weichzeichner jeweils mit Einstellung 2px bearbeitet.

Der Lösungsansatz für die Schärfeermittlung ist es, über Python 3.6 und OpenCV 3.x  die Anzahl der Kanten in den Bildern zu ermitteln. Voraussetzung ist, wie bei allen Computer -Vision-Projekten hier, das die OpenCV-Bibliothek auf dem Entwicklungssystem installiert ist. Den verwendeten Algorithmus und Quelltext werde ich in den nächsten Tagen gerne detailliert erklären, falls das gewünscht wird. 

Das lauffähige Code-Snipplet (Python 3.6, OpenCV 3.x) für das Zählen der Kanten (Schärfeermittlung) in einem Bild:

import numpy as np
import cv2
image = cv2.imread("test07.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blurred = cv2.GaussianBlur(gray, (11, 11), 0)
cv2.imshow("blurred", image)
canny = cv2.Canny(image, 30, 150)
cv2.imshow("Canny-Algorithmus", canny)
edged = cv2.Canny(blurred, 30, 150)
cv2.imshow("Kanten", edged)
(_, cnts, _) = cv2.findContours(edged.copy(), cv2.RETR_EXTERNAL,
cv2.CHAIN_APPROX_SIMPLE)
anz= str(len(cnts))
kanten = image.copy()
cv2.putText(kanten, "gezaehlt: "+ anz + " Kanten", (50, 50), cv2.FONT_HERSHEY_SIMPLEX,
0.75, (0, 255, 0), 2)
cv2.drawContours(kanten, cnts, -1, (0, 255, 0), 2)
cv2.imshow("Kanten", kanten)
cv2.waitKey(0)
cv2.destroyAllWindows()

Das sind die 3 Ausgangsbilder, derminimale Schärfeverlust von Bild zu Bild ist mit dem Auge kaum feststellbar

trotzdem fallen die Zählergebnisse des Kantenzählalgorithmus signifikant unterschiedlich aus, was eine sichere automatische Schärfebeurteilung erlaubt.

Zusammenfassung

Der vorgestellte Algorithmus ist sehr gut in der Lage, die Schärfe eines Bildes durch Zählen der Kanten im Bild zu beurteilen. Mit bloßem Auge kaum wahrnehmbare Unterschiede in der Schärfe wirken sich signifikant in der Anzahl der Kanten aus.