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

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