Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Rilevamento di Angoli e Blob | Elaborazione delle Immagini con OpenCV
Fondamenti di Computer Vision

bookRilevamento di Angoli e Blob

Rilevamento degli angoli

Il rilevamento degli angoli viene utilizzato per identificare cambiamenti bruschi di intensità dove si incontrano due bordi. È utile per il matching delle caratteristiche, il tracciamento degli oggetti e il riconoscimento delle strutture.

Metodi popolari:

  • Rilevatore di angoli di Harris (cv2.cornerHarris): rileva gli angoli in base alle variazioni di gradiente;
# 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
Nota

Parametri:

  • src: immagine di input in scala di grigi (deve essere float32);
  • blockSize: dimensione della finestra locale per il calcolo dei gradienti;
  • ksize: dimensione dell'apertura dell'operatore Sobel (dispari, ad esempio 3, 5, 7);
  • k: parametro libero del rilevatore di Harris (valori tipici: 0.04 - 0.06).
  • Rilevatore di angoli Shi-Tomasi (cv2.goodFeaturesToTrack): seleziona gli angoli più forti in un'immagine;
# 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
Nota

Parametri:

  • image: immagine di input in scala di grigi;
  • maxCorners: numero massimo di angoli da rilevare;
  • qualityLevel: qualità minima degli angoli rilevati (intervallo: 0.01 - 0.1);
  • minDistance: distanza minima tra gli angoli rilevati.
Note
Approfondisci

Parametri del metodo cv2.circle() per evidenziare oggetti:

  • image: l'immagine su cui disegnare il cerchio;
  • center_coordinates: le coordinate del centro del cerchio, rappresentate come una tupla di due valori: (X, Y);
  • radius: il raggio del cerchio;
  • color: il colore del bordo del cerchio. In formato BGR, passato come tupla (ad esempio, (255, 0, 0) per il blu);
  • thickness: lo spessore del bordo del cerchio in pixel. Un valore di -1 riempirà l'intero cerchio con il colore specificato.

Rilevamento di Blob

Il rilevamento di blob individua regioni di intensità simile in un'immagine, utile per il rilevamento e il tracciamento di oggetti.

Uno dei metodi più diffusi per il rilevamento di blob è SimpleBlobDetector

  • cv2.SimpleBlobDetector: rileva keypoint che rappresentano i blob in base a dimensione, forma e intensità.
# 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
Nota

Parametri:

  • minThreshold, maxThreshold: intervallo di intensità per il rilevamento dei blob;
  • filterByArea: attiva il filtraggio in base alla dimensione del blob;
    • minArea, maxArea: specifica i vincoli di dimensione per i blob rilevati;
  • filterByCircularity: attiva il filtraggio in base alla rotondità;
    • minCircularity: valori più bassi rilevano blob allungati;
  • filterByConvexity: attiva il filtraggio in base alla convessità;
    • minConvexity: valori più bassi consentono forme concave;
  • filterByInertia: attiva il filtraggio in base all'allungamento;
    • minInertiaRatio: valori più bassi rilevano blob allungati.
Compito

Swipe to start coding

Sono fornite le immagini di una fabbrica (factory) e di girasoli (sunflowers):

  • Convertire l'immagine factory in scala di grigi e salvarla nella variabile gray_factory;
  • Convertire l'immagine sunflowers in scala di grigi e salvarla nella variabile gray_sunflowers;
  • È necessario, per l'Harris Detector, convertire la matrice dell'immagine in float32, eseguire questa operazione e salvarla in gray_float;
  • Applicare il rilevamento degli angoli di Harris e salvare il risultato in harris_corners (parametri consigliati blockSize=2, ksize=3, k=0.04);
  • Utilizzare dilate() per migliorare la visibilità di harris_corners;
  • Applicare il rilevamento degli angoli di Shi-Tomasi all'immagine e salvare il risultato in shi_tomasi_corners (parametri consigliati gray_factory, maxCorners=100, qualityLevel=0.01, minDistance=10)
  • Creare un oggetto SimpleBlobDetector_Params per inizializzare i parametri e salvarlo in params;
  • Creare un rilevatore di blob con i parametri specificati e salvarlo in detector;
  • Rilevare i keypoint dei blob e salvarli in keypoints.

Soluzione

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 2. Capitolo 8
single

single

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

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

bookRilevamento di Angoli e Blob

Scorri per mostrare il menu

Rilevamento degli angoli

Il rilevamento degli angoli viene utilizzato per identificare cambiamenti bruschi di intensità dove si incontrano due bordi. È utile per il matching delle caratteristiche, il tracciamento degli oggetti e il riconoscimento delle strutture.

Metodi popolari:

  • Rilevatore di angoli di Harris (cv2.cornerHarris): rileva gli angoli in base alle variazioni di gradiente;
# 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
Nota

Parametri:

  • src: immagine di input in scala di grigi (deve essere float32);
  • blockSize: dimensione della finestra locale per il calcolo dei gradienti;
  • ksize: dimensione dell'apertura dell'operatore Sobel (dispari, ad esempio 3, 5, 7);
  • k: parametro libero del rilevatore di Harris (valori tipici: 0.04 - 0.06).
  • Rilevatore di angoli Shi-Tomasi (cv2.goodFeaturesToTrack): seleziona gli angoli più forti in un'immagine;
# 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
Nota

Parametri:

  • image: immagine di input in scala di grigi;
  • maxCorners: numero massimo di angoli da rilevare;
  • qualityLevel: qualità minima degli angoli rilevati (intervallo: 0.01 - 0.1);
  • minDistance: distanza minima tra gli angoli rilevati.
Note
Approfondisci

Parametri del metodo cv2.circle() per evidenziare oggetti:

  • image: l'immagine su cui disegnare il cerchio;
  • center_coordinates: le coordinate del centro del cerchio, rappresentate come una tupla di due valori: (X, Y);
  • radius: il raggio del cerchio;
  • color: il colore del bordo del cerchio. In formato BGR, passato come tupla (ad esempio, (255, 0, 0) per il blu);
  • thickness: lo spessore del bordo del cerchio in pixel. Un valore di -1 riempirà l'intero cerchio con il colore specificato.

Rilevamento di Blob

Il rilevamento di blob individua regioni di intensità simile in un'immagine, utile per il rilevamento e il tracciamento di oggetti.

Uno dei metodi più diffusi per il rilevamento di blob è SimpleBlobDetector

  • cv2.SimpleBlobDetector: rileva keypoint che rappresentano i blob in base a dimensione, forma e intensità.
# 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
Nota

Parametri:

  • minThreshold, maxThreshold: intervallo di intensità per il rilevamento dei blob;
  • filterByArea: attiva il filtraggio in base alla dimensione del blob;
    • minArea, maxArea: specifica i vincoli di dimensione per i blob rilevati;
  • filterByCircularity: attiva il filtraggio in base alla rotondità;
    • minCircularity: valori più bassi rilevano blob allungati;
  • filterByConvexity: attiva il filtraggio in base alla convessità;
    • minConvexity: valori più bassi consentono forme concave;
  • filterByInertia: attiva il filtraggio in base all'allungamento;
    • minInertiaRatio: valori più bassi rilevano blob allungati.
Compito

Swipe to start coding

Sono fornite le immagini di una fabbrica (factory) e di girasoli (sunflowers):

  • Convertire l'immagine factory in scala di grigi e salvarla nella variabile gray_factory;
  • Convertire l'immagine sunflowers in scala di grigi e salvarla nella variabile gray_sunflowers;
  • È necessario, per l'Harris Detector, convertire la matrice dell'immagine in float32, eseguire questa operazione e salvarla in gray_float;
  • Applicare il rilevamento degli angoli di Harris e salvare il risultato in harris_corners (parametri consigliati blockSize=2, ksize=3, k=0.04);
  • Utilizzare dilate() per migliorare la visibilità di harris_corners;
  • Applicare il rilevamento degli angoli di Shi-Tomasi all'immagine e salvare il risultato in shi_tomasi_corners (parametri consigliati gray_factory, maxCorners=100, qualityLevel=0.01, minDistance=10)
  • Creare un oggetto SimpleBlobDetector_Params per inizializzare i parametri e salvarlo in params;
  • Creare un rilevatore di blob con i parametri specificati e salvarlo in detector;
  • Rilevare i keypoint dei blob e salvarli in keypoints.

Soluzione

Switch to desktopCambia al desktop per esercitarti nel mondo realeContinua da dove ti trovi utilizzando una delle opzioni seguenti
Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 2. Capitolo 8
single

single

some-alt