Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Hjørne- og Blobdeteksjon | Bildebehandling med OpenCV
Grunnleggende Datamaskinsyn

bookHjørne- og Blobdeteksjon

Hjørnedeteksjon

Hjørnedeteksjon brukes til å identifisere skarpe endringer i intensitet der to kanter møtes. Dette er nyttig for funksjonsmatching, objektsporing og strukturidentifikasjon.

Populære metoder:

  • Harris hjørnedetektor (cv2.cornerHarris): detekterer hjørner basert på gradientendringer;
# 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
Merk

Parametere:

  • src: inngående gråtonebilde (må være float32);
  • blockSize: størrelse på det lokale vinduet for beregning av gradienter;
  • ksize: aperturstørrelse for Sobel-operatoren (oddetall, f.eks. 3, 5, 7);
  • k: fri parameter for Harris-detektoren (typiske verdier: 0.04 - 0.06).
  • Shi-Tomasi hjørnedetektor (cv2.goodFeaturesToTrack): velger de sterkeste hjørnene i et bilde;
# 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
Merk

Parametere:

  • image: inngående gråtonebilde;
  • maxCorners: maksimalt antall hjørner som skal oppdages;
  • qualityLevel: minimumskvalitet for oppdagede hjørner (område: 0.01 - 0.1);
  • minDistance: minste avstand mellom oppdagede hjørner.
Note
Les mer

Parametere for cv2.circle()-metoden for å fremheve objekter:

  • image: bildet hvor sirkelen skal tegnes;
  • center_coordinates: sentrumkoordinatene til sirkelen, representert som en tuple med to verdier: (X, Y);
  • radius: radiusen til sirkelen;
  • color: fargen på sirkelens kant. I BGR-format, gitt som en tuple (f.eks. (255, 0, 0) for blå);
  • thickness: tykkelsen på sirkelens kant i piksler. En verdi på -1 fyller hele sirkelen med den angitte fargen.

Blob Detection

Blob-deteksjon finner områder med lik intensitet i et bilde, nyttig for objektdeteksjon og sporing.

En av de populære metodene for blob-deteksjon er SimpleBlobDetector

  • cv2.SimpleBlobDetector: oppdager nøkkelpunkter som representerer blobs basert 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
Merk

Parametere:

  • minThreshold, maxThreshold: intensitetsområde for blob-deteksjon;
  • filterByArea: aktiverer filtrering basert på blob-størrelse;
    • minArea, maxArea: angir størrelsesbegrensninger for detekterte blobs;
  • filterByCircularity: aktiverer filtrering basert på rundhet;
    • minCircularity: lavere verdier oppdager avlange blobs;
  • filterByConvexity: aktiverer filtrering basert på konveksitet;
    • minConvexity: lavere verdier tillater konkave former;
  • filterByInertia: aktiverer filtrering basert på avlanghet;
    • minInertiaRatio: lavere verdier oppdager avlange blobs.
Oppgave

Swipe to start coding

Du får bilder av fabrikk (factory) og solsikker (sunflowers):

  • Konverter factory-bildet til gråtoner og lagre i variabelen gray_factory;
  • Konverter sunflowers-bildet til gråtoner og lagre i variabelen gray_sunflowers;
  • For Harris-detektoren må bildepikselmatrisen konverteres til float32, gjør dette og lagre i gray_float;
  • Bruk Harris hjørnedeteksjon og lagre i harris_corners (anbefalte parametere: blockSize=2, ksize=3, k=0.04);
  • Bruk dilate() for å forbedre synligheten av harris_corners;
  • Bruk Shi-Tomasi hjørnedeteksjon på bildet og lagre i shi_tomasi_corners (anbefalte parametere: gray_factory, maxCorners=100, qualityLevel=0.01, minDistance=10)
  • Opprett et SimpleBlobDetector_Params-objekt for å initialisere parameterne og lagre i params;
  • Opprett en blob-detektor med de angitte parameterne og lagre i detector;
  • Oppdag blob-nøkkelpunkter og lagre i keypoints.

Løsning

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 2. Kapittel 8
single

single

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

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 Blobdeteksjon

Sveip for å vise menyen

Hjørnedeteksjon

Hjørnedeteksjon brukes til å identifisere skarpe endringer i intensitet der to kanter møtes. Dette er nyttig for funksjonsmatching, objektsporing og strukturidentifikasjon.

Populære metoder:

  • Harris hjørnedetektor (cv2.cornerHarris): detekterer hjørner basert på gradientendringer;
# 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
Merk

Parametere:

  • src: inngående gråtonebilde (må være float32);
  • blockSize: størrelse på det lokale vinduet for beregning av gradienter;
  • ksize: aperturstørrelse for Sobel-operatoren (oddetall, f.eks. 3, 5, 7);
  • k: fri parameter for Harris-detektoren (typiske verdier: 0.04 - 0.06).
  • Shi-Tomasi hjørnedetektor (cv2.goodFeaturesToTrack): velger de sterkeste hjørnene i et bilde;
# 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
Merk

Parametere:

  • image: inngående gråtonebilde;
  • maxCorners: maksimalt antall hjørner som skal oppdages;
  • qualityLevel: minimumskvalitet for oppdagede hjørner (område: 0.01 - 0.1);
  • minDistance: minste avstand mellom oppdagede hjørner.
Note
Les mer

Parametere for cv2.circle()-metoden for å fremheve objekter:

  • image: bildet hvor sirkelen skal tegnes;
  • center_coordinates: sentrumkoordinatene til sirkelen, representert som en tuple med to verdier: (X, Y);
  • radius: radiusen til sirkelen;
  • color: fargen på sirkelens kant. I BGR-format, gitt som en tuple (f.eks. (255, 0, 0) for blå);
  • thickness: tykkelsen på sirkelens kant i piksler. En verdi på -1 fyller hele sirkelen med den angitte fargen.

Blob Detection

Blob-deteksjon finner områder med lik intensitet i et bilde, nyttig for objektdeteksjon og sporing.

En av de populære metodene for blob-deteksjon er SimpleBlobDetector

  • cv2.SimpleBlobDetector: oppdager nøkkelpunkter som representerer blobs basert 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
Merk

Parametere:

  • minThreshold, maxThreshold: intensitetsområde for blob-deteksjon;
  • filterByArea: aktiverer filtrering basert på blob-størrelse;
    • minArea, maxArea: angir størrelsesbegrensninger for detekterte blobs;
  • filterByCircularity: aktiverer filtrering basert på rundhet;
    • minCircularity: lavere verdier oppdager avlange blobs;
  • filterByConvexity: aktiverer filtrering basert på konveksitet;
    • minConvexity: lavere verdier tillater konkave former;
  • filterByInertia: aktiverer filtrering basert på avlanghet;
    • minInertiaRatio: lavere verdier oppdager avlange blobs.
Oppgave

Swipe to start coding

Du får bilder av fabrikk (factory) og solsikker (sunflowers):

  • Konverter factory-bildet til gråtoner og lagre i variabelen gray_factory;
  • Konverter sunflowers-bildet til gråtoner og lagre i variabelen gray_sunflowers;
  • For Harris-detektoren må bildepikselmatrisen konverteres til float32, gjør dette og lagre i gray_float;
  • Bruk Harris hjørnedeteksjon og lagre i harris_corners (anbefalte parametere: blockSize=2, ksize=3, k=0.04);
  • Bruk dilate() for å forbedre synligheten av harris_corners;
  • Bruk Shi-Tomasi hjørnedeteksjon på bildet og lagre i shi_tomasi_corners (anbefalte parametere: gray_factory, maxCorners=100, qualityLevel=0.01, minDistance=10)
  • Opprett et SimpleBlobDetector_Params-objekt for å initialisere parameterne og lagre i params;
  • Opprett en blob-detektor med de angitte parameterne og lagre i detector;
  • Oppdag blob-nøkkelpunkter og lagre i keypoints.

Løsning

Switch to desktopBytt til skrivebordet for virkelighetspraksisFortsett der du er med et av alternativene nedenfor
Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 2. Kapittel 8
single

single

some-alt