Open CV & Python – Feature Detection

OpenCV & Python - Feature Detection header

In OpenCV, la Feature Detection (rilevamento delle caratteristiche) è una tecnica utilizzata per identificare punti chiave distintivi o caratteristiche in un’immagine. Questi punti chiave sono localmente unici e possono essere utilizzati per confrontare e corrispondere diverse immagini, facilitando operazioni come il riconoscimento di oggetti, il tracciamento del movimento, la ricostruzione 3D e altre applicazioni di visione artificiale.

[wpda_org_chart tree_id=37 theme_id=50]

Che cosa sono le Feature?

Le “feature” (caratteristiche) in Image Analysis sono punti distintivi o regioni di un’immagine che sono particolarmente significativi per la descrizione e l’analisi dell’immagine stessa. Queste caratteristiche sono scelte perché sono localmente uniche e possono essere utilizzate per identificare o confrontare diverse parti di un’immagine. Nel contesto del rilevamento delle caratteristiche, si tratta di punti chiave o regioni che hanno proprietà distintive rispetto al loro vicinato.

Le feature svolgono un ruolo cruciale in molte applicazioni di visione artificiale e analisi delle immagini. Ecco alcuni dei ruoli principali:

  • Corrispondenza e Allineamento: Le feature sono spesso utilizzate per confrontare diverse immagini o frame video. Una volta identificate e estratte le caratteristiche chiave, è possibile cercare corrispondenze tra di esse per allineare o confrontare le immagini.
  • Riconoscimento di Oggetti: Nelle applicazioni di riconoscimento di oggetti, le feature vengono utilizzate per identificare specifiche parti o caratteristiche distintive degli oggetti. Questo è utile per riconoscere oggetti in diverse pose o condizioni di illuminazione.
  • Tracciamento del Movimento: Nel tracciamento del movimento, le feature possono essere utilizzate per seguire l’andamento di punti chiave attraverso frame successivi di un video. Questo è utile, ad esempio, nel monitorare il movimento di un oggetto o di una persona.
  • Ricostruzione 3D: Nel contesto della visione stereoscopica, le feature possono essere utilizzate per stimare la geometria tridimensionale di una scena. Identificando le stesse feature in più immagini, è possibile calcolare la profondità e ricostruire la scena in 3D.
  • Riduzione delle Dimensioni: Nelle applicazioni in cui è necessario ridurre la complessità dell’immagine, le feature possono essere utilizzate per rappresentare in modo più compatto l’informazione significativa. Ad esempio, utilizzando descrittori di feature anziché l’intera immagine.
  • Stima del Movimento e Allineamento: Nel campo della videosorveglianza o dell’analisi del movimento, le feature sono utilizzate per stimare il movimento degli oggetti o per allineare diverse sequenze video.

I diversi algoritmi di rilevamento delle feature, come Harris Corner Detection, Shi-Tomasi, FAST e altri, mirano a individuare punti chiave che sono robusti rispetto a variazioni di illuminazione, rotazioni e scale. Una volta individuate, queste feature possono essere utilizzate in una varietà di contesti per analizzare, comprendere e elaborare le informazioni visive contenute nelle immagini.

La Feature Detection

La Feature Detection (rilevamento delle caratteristiche) è una tecnica fondamentale nell’ambito dell’analisi delle immagini che si concentra sull’identificare e individuare punti chiave distintivi o regioni significative in un’immagine. Questi punti chiave sono scelti perché sono localmente unici e possono essere utilizzati come riferimenti salienti per eseguire diverse operazioni di analisi e manipolazione delle immagini.

Immagina di guardare un’immagine e di voler individuare le parti più interessanti o significative, come gli angoli di un edificio, i bordi di un oggetto o regioni con pattern unici. Il rilevamento delle caratteristiche mira a identificare automaticamente questi punti chiave, consentendo di descrivere in modo efficace e distintivo l’informazione contenuta nell’immagine.

Questi punti chiave possono quindi essere utilizzati per vari scopi. Ad esempio, nel riconoscimento di oggetti, le feature sono usate per identificare e distinguere parti specifiche di un’immagine. Nel tracciamento del movimento, le feature vengono seguite attraverso frame successivi per monitorare il movimento di un oggetto nel tempo. Inoltre, nelle applicazioni di ricostruzione 3D, le feature sono fondamentali per stimare la geometria tridimensionale di una scena.

Il processo di Feature Detection coinvolge l’uso di algoritmi che analizzano l’intensità luminosa dei pixel nell’immagine, cercando pattern o strutture che siano rilevanti per la specifica applicazione. Questi algoritmi identificano punti chiave basandosi su proprietà come variazioni di intensità, angoli, e altri attributi distintivi.

In sostanza, la Feature Detection è un passo chiave nella comprensione e nell’elaborazione delle informazioni visive, fornendo un modo efficace per identificare e utilizzare le caratteristiche uniche presenti nelle immagini al fine di eseguire compiti più complessi di analisi e interpretazione visiva.

Alcuni degli Algoritmi della Feature Detection

OpenCV fornisce diversi algoritmi per il rilevamento delle caratteristiche, tra cui:

  • Harris Corner Detection
  • Shi-Tomasi Corner Detection
  • FAST (Features from Accelerated Segment Test)
  • ORB (Oriented FAST and Rotated BRIEF)
  • SIFT (Scale-Invariant Feature Transform)

Vediamo adesso una piccola serie di esempi per capire come ciascuno di essi funziona. Per chi volesse poi approfondire, ci sono alcuni articoli di approfondimento da consultare nel sito.

Per fare questi esempi utilizzeremo questa immagine:

blackandwhite

Cliccate sull’immagine sopra e scaricatela nel vostro computer, salvandola come blackandwhite.jpg.

Harris Corner Detection

Harris Corner Detection è un algoritmo utilizzato per individuare gli angoli nelle immagini. Identifica i punti chiave basandosi sulla variazione dell’intensità luminosa nella vicinanza di un punto specifico.

import cv2
import numpy as np
import matplotlib.pyplot as plt

img = cv2.imread('blackandwhite.jpg', 0)
dst = cv2.cornerHarris(img, 2, 3, 0.04)

# Visualizza i risultati con Matplotlib
plt.title('Harris Corners')
plt.imshow(dst, cmap='jet')
plt.show()

Eseguendo si ottiene questo risultato:

Harris Corner example

Se sei interessato ad approfondire questo metodo, eccoti l’articolo di approfondimento sulla tecnica di Harris Corner Detection.

OpenCV and Python - Harris Corner Detection - a method to detect corners in an image

ARTICOLO DI APPROFONDIMENTO

Harris Corner Detection

Shi-Tomasi Corner Detection

L’algoritmo Shi-Tomasi Corner Detection è molto simile alla Harris Corner Detection, ma viene considerato un miglioramento in termini di selezione dei punti chiave. Infatti, utilizza una metrica di valutazione della qualità dell’angolo e seleziona i punti chiave in base a questa metrica. Vediamo qui un esempio:

import cv2
import numpy as np
import matplotlib.pyplot as plt

img = cv2.imread('blackandwhite.jpg', 0)
corners = cv2.goodFeaturesToTrack(img, maxCorners=25, qualityLevel=0.01, minDistance=10)

# Visualizza i risultati con Matplotlib
plt.imshow(img, cmap='gray')
plt.title('Shi-Tomasi Corners')
corners = np.intp(corners)
for i in corners:
    x, y = i.ravel()
    plt.scatter(x, y, color='red', s=30)
plt.show()

Eseguendo si ottiene il seguente risultato:

Shi-Tomasi Corner Detection example

FAST (Features from Accelerated Segment Test)

FAST è un algoritmo più veloce per il rilevamento delle caratteristiche. Utilizza un test di segmento accelerato per determinare rapidamente i punti chiave. FAST è noto per la sua efficienza computazionale.Anche in questo caso vediamo un breve esempio applicato sempre sulla stessa immagine:

import cv2
import matplotlib.pyplot as plt

img = cv2.imread('blackandwhite.jpg', 0)
fast = cv2.FastFeatureDetector_create()

# Trova i punti chiave
kp = fast.detect(img, None)

# Visualizza i risultati con Matplotlib
img_with_keypoints = cv2.drawKeypoints(img, kp, None, color=(255, 0, 0))
plt.imshow(img_with_keypoints)
plt.title('FAST Features')
plt.show()

Eseguendo il codice si ottiene il seguente risultato:

Fast Feature example

ORB (Oriented FAST and Rotated BRIEF)

ORB è un algoritmo che combina il rilevamento FAST (Features from Accelerated Segment Test) con il descrittore BRIEF (Binary Robust Independent Elementary Features). FAST viene utilizzato per individuare punti chiave, mentre BRIEF genera descrittori binari per questi punti. ORB è noto per la sua velocità computazionale e la robustezza, rendendolo adatto per applicazioni in tempo reale.

Ecco un esempio anche per questo algoritmo:

import cv2
import matplotlib.pyplot as plt

img = cv2.imread('blackandwhite.jpg', 0)
orb = cv2.ORB_create()

# Trova i punti chiave e i descrittori con ORB
kp, des = orb.detectAndCompute(img, None)

# Visualizza i risultati con Matplotlib
img_with_keypoints = cv2.drawKeypoints(img, kp, None, color=(255, 0, 0))
plt.imshow(img_with_keypoints)
plt.title('ORB Features')
plt.show()

Eseguendo otterrai questo risultato:

ORB Features example

SIFT (Scale-Invariant Feature Transform)

SIFT è un algoritmo di rilevamento delle caratteristiche che identifica punti chiave invarianti alla scala e all’orientamento. Utilizza una combinazione di localizzazione di estremi, filtraggio gaussiano e altre tecniche per individuare punti chiave robusti. SIFT è noto per la sua invarianza alla scala, rendendolo adatto per il riconoscimento di oggetti in diverse condizioni.

Vediamo un esempio anche in questo caso:

import cv2
import matplotlib.pyplot as plt

img = cv2.imread('blackandwhite.jpg', 0)
sift = cv2.SIFT_create()

# Trova i punti chiave e i descrittori con SIFT
kp, des = sift.detectAndCompute(img, None)

# Visualizza i risultati con Matplotlib
img_with_keypoints = cv2.drawKeypoints(img, kp, None, color=(255, 0, 0))
plt.imshow(img_with_keypoints)
plt.title('SIFT Features')
plt.show()

Eseguendo otterremo questo risultato:

SIFT Features example

Conclusione

Questi sono solo alcuni esempi, e OpenCV offre molte altre opzioni per il rilevamento delle caratteristiche. La scelta dell’algoritmo dipende spesso dalla specifica applicazione e dai requisiti di prestazioni.

Lascia un commento