Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Hjørne- og Blobdetektion | Billedbehandling med OpenCV
Computer Vision Essentials

bookHjørne- og Blobdetektion

Hjørnedetektion

Hjørnedetektion bruges til at identificere skarpe ændringer i intensitet, hvor to kanter mødes. Det anvendes til feature matching, objektsporing og strukturgenkendelse.

Populære metoder:

  • Harris-hjørnedetektor (cv2.cornerHarris): detekterer hjørner baseret på gradientændringer;
# 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
Bemærk

Parametre:

  • src: input gråtonebillede (skal være float32);
  • blockSize: størrelse på det lokale vindue til beregning af gradienter;
  • ksize: aperturstørrelse for Sobel-operatoren (ulige, f.eks. 3, 5, 7);
  • k: Harris-detektorens frie parameter (typiske værdier: 0.04 - 0.06).
  • Shi-Tomasi-hjørnedetektor (cv2.goodFeaturesToTrack): vælger de stærkeste hjørner i et billede;
# 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
Bemærk

Parametre:

  • image: input gråtonebillede;
  • maxCorners: maksimalt antal hjørner der skal detekteres;
  • qualityLevel: minimumskvalitet for detekterede hjørner (interval: 0.01 - 0.1);
  • minDistance: minimumsafstand mellem detekterede hjørner.
Note
Læs Mere

Parametre for cv2.circle()-metoden til fremhævning af objekter:

  • image: billedet, hvorpå cirklen skal tegnes;
  • center_coordinates: centrumkoordinaterne for cirklen, repræsenteret som et tuple med to værdier: (X, Y);
  • radius: cirklens radius;
  • color: farven på cirklens kant. I BGR-format, angivet som et tuple (f.eks. (255, 0, 0) for blå);
  • thickness: tykkelsen på cirklens kant i pixels. En værdi på -1 udfylder hele cirklen med den angivne farve.

Blobdetektion

Blobdetektion finder områder med ensartet intensitet i et billede, hvilket er nyttigt til objektdetektion og -sporing.

En af de populære metoder til blobdetektion er SimpleBlobDetector

  • cv2.SimpleBlobDetector: detekterer nøglepunkter, der repræsenterer blobs baseret på størrelse, form og intensitet.
# 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
Bemærk

Parametre:

  • minThreshold, maxThreshold: intensitetsinterval for blob-detektion;
  • filterByArea: aktiverer filtrering baseret på blob-størrelse;
    • minArea, maxArea: angiver størrelsesbegrænsninger for detekterede blobs;
  • filterByCircularity: aktiverer filtrering baseret på rundhed;
    • minCircularity: lavere værdier detekterer aflange blobs;
  • filterByConvexity: aktiverer filtrering baseret på konveksitet;
    • minConvexity: lavere værdier tillader konkave former;
  • filterByInertia: aktiverer filtrering baseret på aflanghed;
    • minInertiaRatio: lavere værdier detekterer aflange blobs.
Opgave

Swipe to start coding

Du får billederne af fabrikken (factory) og solsikkerne (sunflowers):

  • Konverter factory-billedet til gråtoner og gem det i variablen gray_factory;
  • Konverter sunflowers-billedet til gråtoner og gem det i variablen gray_sunflowers;
  • Det er nødvendigt for Harris Detector at konvertere billedmatricen til float32, gør dette og gem i gray_float;
  • Anvend Harris hjørnedetektion og gem resultatet i harris_corners (anbefalede parametre: blockSize=2, ksize=3, k=0.04);
  • Brug dilate() for at forbedre synligheden af harris_corners;
  • Anvend Shi-Tomasi hjørnedetektion på billedet og gem resultatet i shi_tomasi_corners (anbefalede parametre: gray_factory, maxCorners=100, qualityLevel=0.01, minDistance=10)
  • Opret et SimpleBlobDetector_Params-objekt for at initialisere parametrene og gem det i params;
  • Opret en blobdetektor med de angivne parametre og gem den i detector;
  • Detekter blob-nøglepunkter og gem dem i keypoints.

Løsning

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 2. Kapitel 8
single

single

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

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

bookHjørne- og Blobdetektion

Stryg for at vise menuen

Hjørnedetektion

Hjørnedetektion bruges til at identificere skarpe ændringer i intensitet, hvor to kanter mødes. Det anvendes til feature matching, objektsporing og strukturgenkendelse.

Populære metoder:

  • Harris-hjørnedetektor (cv2.cornerHarris): detekterer hjørner baseret på gradientændringer;
# 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
Bemærk

Parametre:

  • src: input gråtonebillede (skal være float32);
  • blockSize: størrelse på det lokale vindue til beregning af gradienter;
  • ksize: aperturstørrelse for Sobel-operatoren (ulige, f.eks. 3, 5, 7);
  • k: Harris-detektorens frie parameter (typiske værdier: 0.04 - 0.06).
  • Shi-Tomasi-hjørnedetektor (cv2.goodFeaturesToTrack): vælger de stærkeste hjørner i et billede;
# 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
Bemærk

Parametre:

  • image: input gråtonebillede;
  • maxCorners: maksimalt antal hjørner der skal detekteres;
  • qualityLevel: minimumskvalitet for detekterede hjørner (interval: 0.01 - 0.1);
  • minDistance: minimumsafstand mellem detekterede hjørner.
Note
Læs Mere

Parametre for cv2.circle()-metoden til fremhævning af objekter:

  • image: billedet, hvorpå cirklen skal tegnes;
  • center_coordinates: centrumkoordinaterne for cirklen, repræsenteret som et tuple med to værdier: (X, Y);
  • radius: cirklens radius;
  • color: farven på cirklens kant. I BGR-format, angivet som et tuple (f.eks. (255, 0, 0) for blå);
  • thickness: tykkelsen på cirklens kant i pixels. En værdi på -1 udfylder hele cirklen med den angivne farve.

Blobdetektion

Blobdetektion finder områder med ensartet intensitet i et billede, hvilket er nyttigt til objektdetektion og -sporing.

En af de populære metoder til blobdetektion er SimpleBlobDetector

  • cv2.SimpleBlobDetector: detekterer nøglepunkter, der repræsenterer blobs baseret på størrelse, form og intensitet.
# 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
Bemærk

Parametre:

  • minThreshold, maxThreshold: intensitetsinterval for blob-detektion;
  • filterByArea: aktiverer filtrering baseret på blob-størrelse;
    • minArea, maxArea: angiver størrelsesbegrænsninger for detekterede blobs;
  • filterByCircularity: aktiverer filtrering baseret på rundhed;
    • minCircularity: lavere værdier detekterer aflange blobs;
  • filterByConvexity: aktiverer filtrering baseret på konveksitet;
    • minConvexity: lavere værdier tillader konkave former;
  • filterByInertia: aktiverer filtrering baseret på aflanghed;
    • minInertiaRatio: lavere værdier detekterer aflange blobs.
Opgave

Swipe to start coding

Du får billederne af fabrikken (factory) og solsikkerne (sunflowers):

  • Konverter factory-billedet til gråtoner og gem det i variablen gray_factory;
  • Konverter sunflowers-billedet til gråtoner og gem det i variablen gray_sunflowers;
  • Det er nødvendigt for Harris Detector at konvertere billedmatricen til float32, gør dette og gem i gray_float;
  • Anvend Harris hjørnedetektion og gem resultatet i harris_corners (anbefalede parametre: blockSize=2, ksize=3, k=0.04);
  • Brug dilate() for at forbedre synligheden af harris_corners;
  • Anvend Shi-Tomasi hjørnedetektion på billedet og gem resultatet i shi_tomasi_corners (anbefalede parametre: gray_factory, maxCorners=100, qualityLevel=0.01, minDistance=10)
  • Opret et SimpleBlobDetector_Params-objekt for at initialisere parametrene og gem det i params;
  • Opret en blobdetektor med de angivne parametre og gem den i detector;
  • Detekter blob-nøglepunkter og gem dem i keypoints.

Løsning

Switch to desktopSkift til skrivebord for at øve i den virkelige verdenFortsæt der, hvor du er, med en af nedenstående muligheder
Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 2. Kapitel 8
single

single

some-alt