Canny Edge Detection
Il rilevamento dei bordi di Canny è un algoritmo a più fasi che riduce il rumore, rileva variazioni nette di luminosità e crea mappe di bordi sottili per la computer vision.
Il rilevamento dei bordi di Canny è un algoritmo di elaborazione delle immagini a più fasi che individua variazioni nette di luminosità e le converte in una mappa di bordi binaria e sottile. Riduce il rumore, individua le transizioni di intensità e collega i pixel di bordo affidabili in contorni. Nella computer vision, questi contorni descrivono la struttura dell'immagine per l'analisi delle forme e le misurazioni.
John Canny ha sviluppato il metodo nel 1983 e lo ha descritto nel suo articolo del 1986, A Computational Approach to Edge Detection. Il metodo bilancia tre obiettivi: rilevare i bordi autentici, individuarli con precisione e produrre una sola risposta per ogni bordo. «Rilevatore di bordi di Canny» è un sinonimo dell'algoritmo.
Come funziona il rilevamento dei bordi di Canny#
L'algoritmo combina la preelaborazione dei dati con il filtraggio e l'analisi della connettività. Le sue cinque fasi hanno funzioni distinte:
- Riduzione del rumore: La sfocatura gaussiana calcola la media dei pixel vicini con pesi che dipendono dalla distanza, attenuando le fluttuazioni che genererebbero bordi indesiderati.
- Stima del gradiente: Le derivate orizzontali e verticali misurano la rapidità con cui cambia la luminosità. La loro combinazione fornisce la forza del bordo e una direzione perpendicolare al contorno. In questa fase OpenCV usa le derivate di Sobel.
- Assottigliamento dei bordi: La soppressione dei non massimi conserva i picchi locali del gradiente lungo la direzione del gradiente, producendo creste strette anziché fasce ampie.
- Doppia sogliatura: Una soglia alta individua i bordi forti; una soglia bassa elimina le risposte deboli. I pixel compresi tra le due soglie diventano candidati.
- Collegamento per isteresi: I pixel candidati vengono mantenuti quando sono collegati a un bordo forte tramite altri candidati. I candidati isolati vengono eliminati.
Soglie, smoothing e modalità di errore#
Le soglie agiscono sull'intensità del gradiente, non sulla luminosità grezza o sulla confidenza del modello. Abbassandole si conservano più dettagli e rumore; alzandole si eliminano i contorni deboli. Aumentare la soglia alta riduce anche i pixel di bordo forti disponibili come punti iniziali per il collegamento tramite isteresi.
La scala gaussiana controlla un compromesso distinto. Un maggiore smoothing sopprime il rumore, ma rimuove le strutture fini. Nell'esempio del quadrato rumoroso di scikit-image, modificare la deviazione standard gaussiana cambia la quantità di rumore che rimane attorno al quadrato.
Nell'ispezione delle crepe, le superfici di calcestruzzo ruvido producono bordi di texture indesiderati e contorni delle crepe incompleti. Aumentare le soglie elimina alcuni bordi falsi, ma fa perdere anche tratti di crepe reali.
Sobel stima le derivate dell'intensità; Canny combina la stima del gradiente con smoothing, assottigliamento e selezione basata sulla connettività. La fase di assottigliamento di Canny confronta i pixel vicini, mentre la NMS per il rilevamento degli oggetti confronta i riquadri predetti sovrapposti.
Rilevamento dei bordi Canny in Python#
Installa le dipendenze con pip install opencv-python numpy. Questo esempio usa OpenCV per salvare una mappa dei bordi del campione dell'autobus:
from urllib.request import urlopen
import cv2
import numpy as np
with urlopen("https://ultralytics.com/images/bus.jpg") as response:
encoded = np.frombuffer(response.read(), dtype=np.uint8)
gray = cv2.imdecode(encoded, cv2.IMREAD_GRAYSCALE)
# Applica smoothing all'immagine prima di calcolare i gradienti dell'intensità.
smoothed = cv2.GaussianBlur(gray, (5, 5), 1.4)
edges = cv2.Canny(smoothed, 50, 150, L2gradient=True)
cv2.imwrite("canny_edges.png", edges)Il PNG salvato mostra i bordi conservati in bianco su sfondo nero. Nel flusso di lavoro di rilevamento dei bordi di OpenCV, il secondo e il terzo argomento di Canny specificano rispettivamente la soglia bassa e quella alta. L2gradient=True usa il modulo euclideo del gradiente; il valore predefinito usa la somma delle derivate orizzontali e verticali in valore assoluto. Queste scelte modificano i valori del gradiente e quindi il comportamento delle soglie.
Applicazioni e attività correlate di computer vision#
Canny supporta l'estrazione di caratteristiche geometriche: l'esempio di rilevamento delle linee di scikit-image lo applica a una fotografia di un cameraman prima che una trasformata di Hough probabilistica estragga i segmenti rettilinei. Canny fornisce i pixel dei bordi; il voto di Hough li raggruppa in linee. Il rilevamento degli oggetti assegna categorie e riquadri, mentre la segmentazione di istanze assegna i pixel ai singoli oggetti.
La segmentazione di YOLO26 di Ultralytics restituisce maschere per l'isolamento degli oggetti, che possono selezionare regioni dell'immagine da elaborare separatamente con Canny. Questo approccio combina la selezione degli oggetti appresa con l'estrazione classica dei contorni.
Nell'IA generativa, ControlNet usa mappe Canny come condizioni spaziali per i modelli di diffusione. La sua implementazione condizionata da Canny guida la generazione con Stable Diffusion 1.5 usando i contorni estratti insieme a un prompt testuale.










