Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Hörn- och Blobdetektering | Bildbehandling med OpenCV
Grunder i Datorseende

bookHörn- och Blobdetektering

Hörndetektering

Hörndetektering används för att identifiera skarpa intensitetsförändringar där två kanter möts. Det är användbart vid funktionsmatchning, objektspårning och strukturigenkänning.

Populära metoder:

  • Harris-hörndetektor (cv2.cornerHarris): detekterar hörn baserat på gradientförändringar;
# 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
Notering

Parametrar:

  • src: inmatad gråskalebild (måste vara float32);
  • blockSize: storlek på det lokala fönstret för gradientberäkning;
  • ksize: aperturstorlek för Sobeloperatorn (udda, t.ex. 3, 5, 7);
  • k: fri parameter för Harris-detektorn (typiska värden: 0.04 - 0.06).
  • Shi-Tomasi-hörndetektor (cv2.goodFeaturesToTrack): väljer de starkaste hörnen i en bild;
# 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
Notera

Parametrar:

  • image: inmatad gråskalebild;
  • maxCorners: maximalt antal hörn att detektera;
  • qualityLevel: minsta kvalitet på detekterade hörn (intervall: 0.01 - 0.1);
  • minDistance: minsta avstånd mellan detekterade hörn.
Note
Läs mer

Parametrar för metoden cv2.circle() för att markera objekt:

  • image: bilden där cirkeln ska ritas;
  • center_coordinates: cirkelns mittkoordinater, representerade som en tuppel med två värden: (X, Y);
  • radius: cirkelns radie;
  • color: färgen på cirkelns kant. I BGR-format, anges som en tuppel (t.ex. (255, 0, 0) för blå);
  • thickness: tjockleken på cirkelns kant i pixlar. Värdet -1 fyller hela cirkeln med den angivna färgen.

Blobdetektering

Blobdetektering identifierar områden med liknande intensitet i en bild, användbart för objektdetektering och spårning.

En av de populära metoderna för blobdetektering är SimpleBlobDetector

  • cv2.SimpleBlobDetector: detekterar nyckelpunkter som representerar blobbar baserat på storlek, form och 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
Notering

Parametrar:

  • minThreshold, maxThreshold: intensitetsintervall för blob-detektering;
  • filterByArea: aktiverar filtrering baserat på blob-storlek;
    • minArea, maxArea: anger storleksbegränsningar för detekterade blobbar;
  • filterByCircularity: aktiverar filtrering baserat på rundhet;
    • minCircularity: lägre värden detekterar avlånga blobbar;
  • filterByConvexity: aktiverar filtrering baserat på konvexitet;
    • minConvexity: lägre värden tillåter konkava former;
  • filterByInertia: aktiverar filtrering baserat på utdragning;
    • minInertiaRatio: lägre värden detekterar avlånga blobbar.
Uppgift

Swipe to start coding

Du har fått bilder av en fabrik (factory) och solrosor (sunflowers):

  • Konvertera bilden factory till gråskala och spara i variabeln gray_factory;
  • Konvertera bilden sunflowers till gråskala och spara i variabeln gray_sunflowers;
  • För Harrisdetektorn är det nödvändigt att konvertera bildmatrisen till float32, gör detta och spara i gray_float;
  • Applicera Harris hörndetektering och spara i harris_corners (rekommenderade parametrar blockSize=2, ksize=3, k=0.04);
  • Använd dilate() för att förbättra synligheten av harris_corners;
  • Applicera Shi-Tomasi hörndetektering på bilden och spara i shi_tomasi_corners (rekommenderade parametrar gray_factory, maxCorners=100, qualityLevel=0.01, minDistance=10)
  • Skapa ett SimpleBlobDetector_Params-objekt för att initiera parametrarna och spara i params;
  • Skapa en blobdetektor med angivna parametrar och spara i detector;
  • Detektera blob-nyckelpunkter och spara i keypoints.

Lösning

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 2. Kapitel 8
single

single

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

close

Awesome!

Completion rate improved to 3.45

bookHörn- och Blobdetektering

Svep för att visa menyn

Hörndetektering

Hörndetektering används för att identifiera skarpa intensitetsförändringar där två kanter möts. Det är användbart vid funktionsmatchning, objektspårning och strukturigenkänning.

Populära metoder:

  • Harris-hörndetektor (cv2.cornerHarris): detekterar hörn baserat på gradientförändringar;
# 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
Notering

Parametrar:

  • src: inmatad gråskalebild (måste vara float32);
  • blockSize: storlek på det lokala fönstret för gradientberäkning;
  • ksize: aperturstorlek för Sobeloperatorn (udda, t.ex. 3, 5, 7);
  • k: fri parameter för Harris-detektorn (typiska värden: 0.04 - 0.06).
  • Shi-Tomasi-hörndetektor (cv2.goodFeaturesToTrack): väljer de starkaste hörnen i en bild;
# 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
Notera

Parametrar:

  • image: inmatad gråskalebild;
  • maxCorners: maximalt antal hörn att detektera;
  • qualityLevel: minsta kvalitet på detekterade hörn (intervall: 0.01 - 0.1);
  • minDistance: minsta avstånd mellan detekterade hörn.
Note
Läs mer

Parametrar för metoden cv2.circle() för att markera objekt:

  • image: bilden där cirkeln ska ritas;
  • center_coordinates: cirkelns mittkoordinater, representerade som en tuppel med två värden: (X, Y);
  • radius: cirkelns radie;
  • color: färgen på cirkelns kant. I BGR-format, anges som en tuppel (t.ex. (255, 0, 0) för blå);
  • thickness: tjockleken på cirkelns kant i pixlar. Värdet -1 fyller hela cirkeln med den angivna färgen.

Blobdetektering

Blobdetektering identifierar områden med liknande intensitet i en bild, användbart för objektdetektering och spårning.

En av de populära metoderna för blobdetektering är SimpleBlobDetector

  • cv2.SimpleBlobDetector: detekterar nyckelpunkter som representerar blobbar baserat på storlek, form och 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
Notering

Parametrar:

  • minThreshold, maxThreshold: intensitetsintervall för blob-detektering;
  • filterByArea: aktiverar filtrering baserat på blob-storlek;
    • minArea, maxArea: anger storleksbegränsningar för detekterade blobbar;
  • filterByCircularity: aktiverar filtrering baserat på rundhet;
    • minCircularity: lägre värden detekterar avlånga blobbar;
  • filterByConvexity: aktiverar filtrering baserat på konvexitet;
    • minConvexity: lägre värden tillåter konkava former;
  • filterByInertia: aktiverar filtrering baserat på utdragning;
    • minInertiaRatio: lägre värden detekterar avlånga blobbar.
Uppgift

Swipe to start coding

Du har fått bilder av en fabrik (factory) och solrosor (sunflowers):

  • Konvertera bilden factory till gråskala och spara i variabeln gray_factory;
  • Konvertera bilden sunflowers till gråskala och spara i variabeln gray_sunflowers;
  • För Harrisdetektorn är det nödvändigt att konvertera bildmatrisen till float32, gör detta och spara i gray_float;
  • Applicera Harris hörndetektering och spara i harris_corners (rekommenderade parametrar blockSize=2, ksize=3, k=0.04);
  • Använd dilate() för att förbättra synligheten av harris_corners;
  • Applicera Shi-Tomasi hörndetektering på bilden och spara i shi_tomasi_corners (rekommenderade parametrar gray_factory, maxCorners=100, qualityLevel=0.01, minDistance=10)
  • Skapa ett SimpleBlobDetector_Params-objekt för att initiera parametrarna och spara i params;
  • Skapa en blobdetektor med angivna parametrar och spara i detector;
  • Detektera blob-nyckelpunkter och spara i keypoints.

Lösning

Switch to desktopByt till skrivbordet för praktisk övningFortsätt där du är med ett av alternativen nedan
Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 2. Kapitel 8
single

single

some-alt