Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Ecken- und Blob-Erkennung | Bildverarbeitung mit OpenCV
Grundlagen der Computer Vision

bookEcken- und Blob-Erkennung

Eckenerkennung

Die Eckenerkennung wird verwendet, um starke Intensitätsänderungen zu identifizieren, an denen sich zwei Kanten treffen. Sie unterstützt das Feature-Matching, das Objekt-Tracking und die Strukturerkennung.

Gängige Methoden:

  • Harris-Eckendetektor (cv2.cornerHarris): erkennt Ecken basierend auf Gradientenänderungen;
# Load image and convert to grayscale
image = cv2.imread("image.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# Convert to float32
gray = np.float32(gray)

# Apply Harris Corner Detection
harris_corners = cv2.cornerHarris(gray, blockSize=2, ksize=3, k=0.04)
harris_corners = cv2.dilate(harris_corners, None)  # Improve visibility

# Mark detected corners in red
image[harris_corners > 0.01 * harris_corners.max()] = [0, 0, 255]
Note
Hinweis

Parameter:

  • src: Eingabebild in Graustufen (muss float32 sein);
  • blockSize: Größe des lokalen Fensters zur Gradientenberechnung;
  • ksize: Aperturgröße des Sobel-Operators (ungerade Zahl, z. B. 3, 5, 7);
  • k: Freier Parameter des Harris-Detektors (typische Werte: 0.04 - 0.06).
  • Shi-Tomasi-Eckendetektor (cv2.goodFeaturesToTrack): wählt die stärksten Ecken in einem Bild aus;
# Load image and convert to grayscale
image = cv2.imread("image.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# Detect corners
corners = cv2.goodFeaturesToTrack(gray, maxCorners=100, qualityLevel=0.01, minDistance=10)

# Draw detected corners in blue
for corner in corners:
    x, y = np.int32(corner[0])
    cv2.circle(image, (x, y), 5, (255, 0, 0), -1)
Note
Hinweis

Parameter:

  • image: Eingabebild in Graustufen;
  • maxCorners: maximale Anzahl zu erkennender Ecken;
  • qualityLevel: Mindestqualität der erkannten Ecken (Bereich: 0.01 - 0.1);
  • minDistance: Mindestabstand zwischen erkannten Ecken.
Note
Mehr erfahren

Parameter der Methode cv2.circle() zum Hervorheben von Objekten:

  • image: das Bild, auf dem der Kreis gezeichnet werden soll;
  • center_coordinates: die Mittelpunktkoordinaten des Kreises, dargestellt als Tupel mit zwei Werten: (X, Y);
  • radius: der Radius des Kreises;
  • color: die Farbe des Kreisrandes. Im BGR-Format, übergeben als Tupel (z. B. (255, 0, 0) für Blau);
  • thickness: die Dicke des Kreisrandes in Pixel. Ein Wert von -1 füllt den gesamten Kreis mit der angegebenen Farbe aus.

Blob-Erkennung

Die Blob-Erkennung findet Regionen mit ähnlicher Intensität in einem Bild und ist nützlich für Objekt-Erkennung und -Verfolgung.

Eine der gängigen Methoden zur Blob-Erkennung ist der SimpleBlobDetector

  • cv2.SimpleBlobDetector: erkennt Keypoints, die Blobs anhand von Größe, Form und Intensität repräsentieren.
# Set up SimpleBlobDetector parameters
params = cv2.SimpleBlobDetector_Params()

# Adjust parameters for better detection
params.minThreshold = 5
params.maxThreshold = 255
params.filterByArea = True
params.minArea = 100
params.maxArea = 5000
params.filterByCircularity = True
params.minCircularity = 0.02
params.filterByConvexity = True
params.minConvexity = 0.5
params.filterByInertia = True
params.minInertiaRatio = 0.001

# Create detector and detect blobs
detector = cv2.SimpleBlobDetector_create(params)
keypoints = detector.detect(gray)

# Draw blobs on the image
image_with_blobs = cv2.drawKeypoints(image, keypoints, None, (0, 255, 0),
                                     cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
Note
Hinweis

Parameter:

  • minThreshold, maxThreshold: Intensitätsbereich für die Blob-Erkennung;
  • filterByArea: Aktiviert das Filtern basierend auf der Blob-Größe;
    • minArea, maxArea: Gibt die Größenbeschränkungen für erkannte Blobs an;
  • filterByCircularity: Aktiviert das Filtern basierend auf der Rundheit;
    • minCircularity: Niedrigere Werte erkennen längliche Blobs;
  • filterByConvexity: Aktiviert das Filtern basierend auf der Konvexität;
    • minConvexity: Niedrigere Werte erlauben konkave Formen;
  • filterByInertia: Aktiviert das Filtern basierend auf der Streckung;
    • minInertiaRatio: Niedrigere Werte erkennen längliche Blobs.
Aufgabe

Swipe to start coding

Sie erhalten die Bilder einer Fabrik (factory) und von Sonnenblumen (sunflowers):

  • Konvertieren Sie das Bild factory in Graustufen und speichern Sie es in der Variable gray_factory;
  • Konvertieren Sie das Bild sunflowers in Graustufen und speichern Sie es in der Variable gray_sunflowers;
  • Für den Harris-Detektor muss die Bildmatrix in float32 umgewandelt werden; führen Sie dies durch und speichern Sie das Ergebnis in gray_float;
  • Wenden Sie die Harris-Eckendetektion an und speichern Sie das Ergebnis in harris_corners (empfohlene Parameter: blockSize=2, ksize=3, k=0.04);
  • Verwenden Sie dilate(), um die Sichtbarkeit der harris_corners zu verbessern;
  • Wenden Sie die Shi-Tomasi-Eckendetektion auf das Bild an und speichern Sie das Ergebnis in shi_tomasi_corners (empfohlene Parameter: gray_factory, maxCorners=100, qualityLevel=0.01, minDistance=10)
  • Erstellen Sie ein SimpleBlobDetector_Params-Objekt, um die Parameter zu initialisieren, und speichern Sie es in params;
  • Erstellen Sie einen Blob-Detektor mit den angegebenen Parametern und speichern Sie ihn in detector;
  • Erkennen Sie Blob-Keypoints und speichern Sie diese in keypoints.

Lösung

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 2. Kapitel 8
single

single

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

Suggested prompts:

Can you explain the difference between Harris and Shi-Tomasi corner detectors?

How do I choose between corner detection and blob detection for my application?

Can you provide more details on tuning the parameters for SimpleBlobDetector?

close

Awesome!

Completion rate improved to 3.45

bookEcken- und Blob-Erkennung

Swipe um das Menü anzuzeigen

Eckenerkennung

Die Eckenerkennung wird verwendet, um starke Intensitätsänderungen zu identifizieren, an denen sich zwei Kanten treffen. Sie unterstützt das Feature-Matching, das Objekt-Tracking und die Strukturerkennung.

Gängige Methoden:

  • Harris-Eckendetektor (cv2.cornerHarris): erkennt Ecken basierend auf Gradientenänderungen;
# Load image and convert to grayscale
image = cv2.imread("image.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# Convert to float32
gray = np.float32(gray)

# Apply Harris Corner Detection
harris_corners = cv2.cornerHarris(gray, blockSize=2, ksize=3, k=0.04)
harris_corners = cv2.dilate(harris_corners, None)  # Improve visibility

# Mark detected corners in red
image[harris_corners > 0.01 * harris_corners.max()] = [0, 0, 255]
Note
Hinweis

Parameter:

  • src: Eingabebild in Graustufen (muss float32 sein);
  • blockSize: Größe des lokalen Fensters zur Gradientenberechnung;
  • ksize: Aperturgröße des Sobel-Operators (ungerade Zahl, z. B. 3, 5, 7);
  • k: Freier Parameter des Harris-Detektors (typische Werte: 0.04 - 0.06).
  • Shi-Tomasi-Eckendetektor (cv2.goodFeaturesToTrack): wählt die stärksten Ecken in einem Bild aus;
# Load image and convert to grayscale
image = cv2.imread("image.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# Detect corners
corners = cv2.goodFeaturesToTrack(gray, maxCorners=100, qualityLevel=0.01, minDistance=10)

# Draw detected corners in blue
for corner in corners:
    x, y = np.int32(corner[0])
    cv2.circle(image, (x, y), 5, (255, 0, 0), -1)
Note
Hinweis

Parameter:

  • image: Eingabebild in Graustufen;
  • maxCorners: maximale Anzahl zu erkennender Ecken;
  • qualityLevel: Mindestqualität der erkannten Ecken (Bereich: 0.01 - 0.1);
  • minDistance: Mindestabstand zwischen erkannten Ecken.
Note
Mehr erfahren

Parameter der Methode cv2.circle() zum Hervorheben von Objekten:

  • image: das Bild, auf dem der Kreis gezeichnet werden soll;
  • center_coordinates: die Mittelpunktkoordinaten des Kreises, dargestellt als Tupel mit zwei Werten: (X, Y);
  • radius: der Radius des Kreises;
  • color: die Farbe des Kreisrandes. Im BGR-Format, übergeben als Tupel (z. B. (255, 0, 0) für Blau);
  • thickness: die Dicke des Kreisrandes in Pixel. Ein Wert von -1 füllt den gesamten Kreis mit der angegebenen Farbe aus.

Blob-Erkennung

Die Blob-Erkennung findet Regionen mit ähnlicher Intensität in einem Bild und ist nützlich für Objekt-Erkennung und -Verfolgung.

Eine der gängigen Methoden zur Blob-Erkennung ist der SimpleBlobDetector

  • cv2.SimpleBlobDetector: erkennt Keypoints, die Blobs anhand von Größe, Form und Intensität repräsentieren.
# Set up SimpleBlobDetector parameters
params = cv2.SimpleBlobDetector_Params()

# Adjust parameters for better detection
params.minThreshold = 5
params.maxThreshold = 255
params.filterByArea = True
params.minArea = 100
params.maxArea = 5000
params.filterByCircularity = True
params.minCircularity = 0.02
params.filterByConvexity = True
params.minConvexity = 0.5
params.filterByInertia = True
params.minInertiaRatio = 0.001

# Create detector and detect blobs
detector = cv2.SimpleBlobDetector_create(params)
keypoints = detector.detect(gray)

# Draw blobs on the image
image_with_blobs = cv2.drawKeypoints(image, keypoints, None, (0, 255, 0),
                                     cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
Note
Hinweis

Parameter:

  • minThreshold, maxThreshold: Intensitätsbereich für die Blob-Erkennung;
  • filterByArea: Aktiviert das Filtern basierend auf der Blob-Größe;
    • minArea, maxArea: Gibt die Größenbeschränkungen für erkannte Blobs an;
  • filterByCircularity: Aktiviert das Filtern basierend auf der Rundheit;
    • minCircularity: Niedrigere Werte erkennen längliche Blobs;
  • filterByConvexity: Aktiviert das Filtern basierend auf der Konvexität;
    • minConvexity: Niedrigere Werte erlauben konkave Formen;
  • filterByInertia: Aktiviert das Filtern basierend auf der Streckung;
    • minInertiaRatio: Niedrigere Werte erkennen längliche Blobs.
Aufgabe

Swipe to start coding

Sie erhalten die Bilder einer Fabrik (factory) und von Sonnenblumen (sunflowers):

  • Konvertieren Sie das Bild factory in Graustufen und speichern Sie es in der Variable gray_factory;
  • Konvertieren Sie das Bild sunflowers in Graustufen und speichern Sie es in der Variable gray_sunflowers;
  • Für den Harris-Detektor muss die Bildmatrix in float32 umgewandelt werden; führen Sie dies durch und speichern Sie das Ergebnis in gray_float;
  • Wenden Sie die Harris-Eckendetektion an und speichern Sie das Ergebnis in harris_corners (empfohlene Parameter: blockSize=2, ksize=3, k=0.04);
  • Verwenden Sie dilate(), um die Sichtbarkeit der harris_corners zu verbessern;
  • Wenden Sie die Shi-Tomasi-Eckendetektion auf das Bild an und speichern Sie das Ergebnis in shi_tomasi_corners (empfohlene Parameter: gray_factory, maxCorners=100, qualityLevel=0.01, minDistance=10)
  • Erstellen Sie ein SimpleBlobDetector_Params-Objekt, um die Parameter zu initialisieren, und speichern Sie es in params;
  • Erstellen Sie einen Blob-Detektor mit den angegebenen Parametern und speichern Sie ihn in detector;
  • Erkennen Sie Blob-Keypoints und speichern Sie diese in keypoints.

Lösung

Switch to desktopWechseln Sie zum Desktop, um in der realen Welt zu übenFahren Sie dort fort, wo Sie sind, indem Sie eine der folgenden Optionen verwenden
War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 2. Kapitel 8
single

single

some-alt