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

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