Détecteur de contours Sobel vs Canny
Fais passer une image de test à travers le pipeline complet de détection de contours qui se cache derrière la vision robotique — niveaux de gris, flou gaussien, gradients de Sobel, suppression des non-maxima, hystérésis de Canny — et survole n'importe quelle étape pour inspecter les mathématiques derrière un seul pixel.
pourquoi flouter d'abord, et pourquoi deux seuils 🖖
Une dérivée amplifie tout ce qu'on lui donne, bruit compris — dérive une image brute et la moindre fluctuation d'un seul pixel ressemble à un contour. Convoluer d'abord avec une gaussienne (étape 2) moyenne ce bruit tout en touchant à peine aux changements d'intensité à grande échelle qui sont de vrais contours, c'est pourquoi tout détecteur de contours pratique basé sur le gradient lisse avant de dériver. Les noyaux de Sobel eux-mêmes sont des approximations séparables des dérivées partielles ∂I/∂x et ∂I/∂y, pondérées 1-2-1 le long de l'axe perpendiculaire pour orienter l'estimation vers la ligne ou la colonne centrale. Un seuil unique sur la magnitude résultante impose un choix impossible : le mettre bas et le bruit crible la sortie, le mettre haut et les contours à faible contraste se brisent en fragments discontinus. L'hystérésis (étape 6) échappe à ce compromis en utilisant deux seuils au lieu d'un — le seuil haut (T_high) trouve les contours dont on est sûr, et le seuil bas (T_low), appliqué uniquement aux pixels touchant déjà un contour fort, laisse un contour réel se poursuivre à travers un tronçon temporairement faible sans laisser le bruit démarrer son propre contour. C'est la même idée de double seuil utilisée dans la segmentation par remplissage par diffusion (flood-fill) et dans les circuits à trigger de Schmitt, partout où un seuil unique provoquerait un scintillement.
Deux questions sur une même image 🖖
Sobel et Canny posent des questions différentes sur la même image. Sobel produit une carte de gradient : chaque pixel reçoit un nombre indiquant la brutalité du changement de luminosité, si bien que les contours ressortent épais et en niveaux de gris, comme une lueur diffuse. Canny reprend ce même gradient et impose une décision : la suppression des non-maxima ne garde que le pixel le plus lumineux sur toute la largeur de chaque crête, amincissant la lueur en une ligne nette d'un pixel, puis la classe comme contour ou non. Basculez entre les onglets Gradient et Canny pour voir une carte floue se réduire à un tracé net.
Les contours de Canny cachent un compromis intrinsèque 🖖
John Canny n'a pas trouvé sa recette à tâtons. Dans son article de 1986, il a formulé la détection de contours comme une optimisation à trois objectifs — détecter les vrais contours, les localiser précisément et ne répondre qu'une fois par contour — et l'a résolue par le calcul des variations ; la solution s'est révélée être presque exactement la dérivée première d'une gaussienne. Le hic qu'il a aussi démontré : détection et localisation s'opposent à mesure que le flou s'élargit, si bien qu'un σ plus grand trouve des contours plus faibles mais brouille leur position, et aucun σ n'est le meilleur pour les deux. Faites glisser σ et observez.
Exemples de problèmes
- Formes nettes - Formes géométriques — réglages Canny par défaut, carte de contours binaire nette
- Gradient de damier - Damier — contours en marche idéaux, réponse Sobel maximale aux transitions
- Pistes de circuit - Circuit imprimé — un s faible préserve les fines pistes de cuivre dans la sortie Canny
- Visage lissé - Visage avec s=2.5 — un flou important supprime la texture tout en conservant les contours structurels