Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer Hoek- en Blobdetectie | Sectie
Toegepaste Computer Vision
Sectie 1. Hoofdstuk 11
single

single

bookHoek- en Blobdetectie

Veeg om het menu te tonen

Hoekdetectie

Hoekdetectie wordt gebruikt om scherpe veranderingen in intensiteit te identificeren waar twee randen samenkomen. Het ondersteunt kenmerkherkenning, objecttracking en structuurherkenning.

Populaire methoden:

  • Harris-hoekdetector (cv2.cornerHarris): detecteert hoeken op basis van gradiëntveranderingen;
# 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
Opmerking

Parameters:

  • src: invoer grijswaardenafbeelding (moet float32 zijn);
  • blockSize: grootte van het lokale venster voor het berekenen van gradiënten;
  • ksize: apertuurgrootte van de Sobel-operator (oneven, bijv. 3, 5, 7);
  • k: vrije parameter van de Harris-detector (typische waarden: 0.04 - 0.06).
  • Shi-Tomasi-hoekdetector (cv2.goodFeaturesToTrack): selecteert de sterkste hoeken in een afbeelding;
# 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
Opmerking

Parameters:

  • image: invoer grijswaardenafbeelding;
  • maxCorners: maximaal aantal te detecteren hoeken;
  • qualityLevel: minimale kwaliteit van gedetecteerde hoeken (bereik: 0.01 - 0.1);
  • minDistance: minimale afstand tussen gedetecteerde hoeken.
Note
Meer Bestuderen

Parameters van de cv2.circle()-methode voor het markeren van objecten:

  • image: de afbeelding waarop de cirkel wordt getekend;
  • center_coordinates: de coördinaten van het middelpunt van de cirkel, weergegeven als een tuple van twee waarden: (X, Y);
  • radius: de straal van de cirkel;
  • color: de kleur van de cirkelrand. In BGR-formaat, doorgegeven als een tuple (bijv. (255, 0, 0) voor blauw);
  • thickness: de dikte van de cirkelrand in pixels. Een waarde van -1 vult de gehele cirkel met de opgegeven kleur.

Blobdetectie

Blobdetectie vindt gebieden met vergelijkbare intensiteit in een afbeelding, nuttig voor objectdetectie en -tracking.

Een van de populaire methoden voor blobdetectie is SimpleBlobDetector

  • cv2.SimpleBlobDetector: detecteert keypoints die blobs vertegenwoordigen op basis van grootte, vorm en intensiteit.
# 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
Opmerking

Parameters:

  • minThreshold, maxThreshold: intensiteitsbereik voor blobdetectie;
  • filterByArea: inschakelen van filtering op basis van blobgrootte;
    • minArea, maxArea: geeft de groottebeperkingen voor gedetecteerde blobs aan;
  • filterByCircularity: inschakelen van filtering op basis van rondheid;
    • minCircularity: lagere waarden detecteren langwerpige blobs;
  • filterByConvexity: inschakelen van filtering op basis van convexiteit;
    • minConvexity: lagere waarden staan concave vormen toe;
  • filterByInertia: inschakelen van filtering op basis van langgerektheid;
    • minInertiaRatio: lagere waarden detecteren langwerpige blobs.
Taak

Swipe to start coding

Je krijgt de afbeeldingen van een fabriek (factory) en zonnebloemen (sunflowers):

  • Zet de afbeelding factory om naar grijswaarden en sla deze op in de variabele gray_factory;
  • Zet de afbeelding sunflowers om naar grijswaarden en sla deze op in de variabele gray_sunflowers;
  • Voor de Harris Detector is het noodzakelijk om de afbeeldingsmatrix om te zetten naar float32, doe dit en sla op in gray_float;
  • Pas Harris-hoekdetectie toe en sla het resultaat op in harris_corners (aanbevolen parameters: blockSize=2, ksize=3, k=0.04);
  • Gebruik dilate() om de zichtbaarheid van harris_corners te verbeteren;
  • Pas Shi-Tomasi-hoekdetectie toe op de afbeelding en sla het resultaat op in shi_tomasi_corners (aanbevolen parameters: gray_factory, maxCorners=100, qualityLevel=0.01, minDistance=10)
  • Maak een SimpleBlobDetector_Params-object aan om de parameters te initialiseren en sla dit op in params;
  • Maak een blobdetector met de opgegeven parameters en sla deze op in detector;
  • Detecteer blob keypoints en sla deze op in keypoints.

Oplossing

Switch to desktopSchakel over naar desktop voor praktijkervaringGa verder vanaf waar je bent met een van de onderstaande opties
Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 1. Hoofdstuk 11
single

single

Vraag AI

expand

Vraag AI

ChatGPT

Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.

some-alt