Rilevamento 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]
Parametri:
src
: immagine di input in scala di grigi (deve esserefloat32
);blockSize
: dimensione della finestra locale per il calcolo dei gradienti;ksize
: dimensione dell'apertura dell'operatore Sobel (dispari, ad esempio3
,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)
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.
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)
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.
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 variabilegray_factory
; - Convertire l'immagine
sunflowers
in scala di grigi e salvarla nella variabilegray_sunflowers
; - È necessario, per l'Harris Detector, convertire la matrice dell'immagine in
float32
, eseguire questa operazione e salvarla ingray_float
; - Applicare il rilevamento degli angoli di Harris e salvare il risultato in
harris_corners
(parametri consigliatiblockSize=2, ksize=3, k=0.04
); - Utilizzare
dilate()
per migliorare la visibilità diharris_corners
; - Applicare il rilevamento degli angoli di Shi-Tomasi all'immagine e salvare il risultato in
shi_tomasi_corners
(parametri consigliatigray_factory, maxCorners=100, qualityLevel=0.01, minDistance=10
) - Creare un oggetto
SimpleBlobDetector_Params
per inizializzare i parametri e salvarlo inparams
; - Creare un rilevatore di blob con i parametri specificati e salvarlo in
detector
; - Rilevare i keypoint dei blob e salvarli in
keypoints
.
Soluzione
Grazie per i tuoi commenti!
single
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione
Awesome!
Completion rate improved to 3.45
Rilevamento 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]
Parametri:
src
: immagine di input in scala di grigi (deve esserefloat32
);blockSize
: dimensione della finestra locale per il calcolo dei gradienti;ksize
: dimensione dell'apertura dell'operatore Sobel (dispari, ad esempio3
,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)
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.
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)
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.
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 variabilegray_factory
; - Convertire l'immagine
sunflowers
in scala di grigi e salvarla nella variabilegray_sunflowers
; - È necessario, per l'Harris Detector, convertire la matrice dell'immagine in
float32
, eseguire questa operazione e salvarla ingray_float
; - Applicare il rilevamento degli angoli di Harris e salvare il risultato in
harris_corners
(parametri consigliatiblockSize=2, ksize=3, k=0.04
); - Utilizzare
dilate()
per migliorare la visibilità diharris_corners
; - Applicare il rilevamento degli angoli di Shi-Tomasi all'immagine e salvare il risultato in
shi_tomasi_corners
(parametri consigliatigray_factory, maxCorners=100, qualityLevel=0.01, minDistance=10
) - Creare un oggetto
SimpleBlobDetector_Params
per inizializzare i parametri e salvarlo inparams
; - Creare un rilevatore di blob con i parametri specificati e salvarlo in
detector
; - Rilevare i keypoint dei blob e salvarli in
keypoints
.
Soluzione
Grazie per i tuoi commenti!
single