Operatorul Canny ( Canny edge detector , Canny algorithm ) în disciplina vederii computerizate este operatorul de detectare a marginilor unei imagini. A fost dezvoltat în 1986 de John F. Canny și folosește un algoritm cu mai multe etape pentru a detecta o gamă largă de margini în imagini.
Canny a studiat problema matematică a obținerii unui filtru care este optim în ceea ce privește selecția, localizarea și minimizarea răspunsurilor multiple ale unei margini. El a arătat că filtrul dorit este suma a patru exponențiale. El a arătat, de asemenea, că acest filtru poate fi bine aproximat de prima derivată a Gaussianului. Canny a introdus conceptul de suprimare non-maximă , ceea ce înseamnă că pixelii de margine sunt acei pixeli în care este atins maximul local al gradientului în direcția vectorului de gradient .
Deși munca sa a fost făcută în primele zile ale vederii computerizate, detectorul de margine Canny este încă unul dintre cei mai buni detectori de astăzi. Cu excepția cazurilor speciale, este dificil să găsești un detector care să aibă performanțe substanțial mai bune decât detectorul Canny.
Scopul lui Canny a fost să dezvolte un algoritm optim de detectare a marginilor care să îndeplinească trei criterii:
Din aceste criterii s-a construit apoi funcția obiectivă a costului erorilor, prin minimizarea căreia se găsește operatorul liniar „optim” pentru convoluția cu imaginea.
Algoritmul detectorului de margini nu se limitează la calcularea gradientului imaginii netezite. Doar punctele maxime ale gradientului imaginii sunt lăsate în conturul chenarului și nu sunt eliminate punctele maxime situate în apropierea chenarului. Aici, informațiile despre direcția graniței sunt, de asemenea, folosite pentru a elimina punctele exact din apropierea graniței și pentru a nu rupe granița în sine în apropierea maximelor locale ale gradientului. Granițele slabe sunt apoi eliminate folosind două praguri. Fragmentul de frontieră este tratat ca un întreg. Dacă valoarea gradientului undeva pe fragmentul urmărit depășește pragul superior, atunci acest fragment rămâne și limita „permisă” în acele locuri în care valoarea gradientului scade sub acest prag, până când scade sub pragul inferior. Dacă nu există un singur punct pe întregul fragment cu o valoare mai mare decât pragul superior, atunci acesta este șters. Această histerezis reduce numărul de discontinuități în limitele de ieșire. Includerea reducerii zgomotului în algoritmul Canny, pe de o parte, mărește stabilitatea rezultatelor și, pe de altă parte, crește costurile de calcul și duce la distorsiuni și chiar la pierderea detaliilor limită. Deci, de exemplu, un astfel de algoritm rotunjește colțurile obiectelor și distruge limitele la punctele de joncțiune.
Netezire. Estompați imaginea pentru a elimina zgomotul. Operatorul Canny folosește un filtru care poate fi bine aproximat de prima derivată a gaussianului. = 1,4:
Caut degrade. Marginile sunt marcate acolo unde gradientul imaginii capătă valoarea maximă. Ele pot avea direcții diferite, așa că algoritmul lui Canny folosește patru filtre pentru a detecta marginile orizontale, verticale și diagonale într-o imagine neclară.
Unghiul de direcție al vectorului gradient este rotunjit și poate lua următoarele valori: 0, 45, 90, 135.
Suprimarea nonmaximei. Doar maximele locale sunt marcate ca granițe.
Filtrare cu prag dublu. Granițele potențiale sunt definite de praguri.
Urmează zona de ambiguitate. Marginile rezultate sunt determinate prin suprimarea tuturor marginilor care nu sunt asociate cu marginile definite (puternice).
Înainte de a utiliza detectorul, este obișnuit să convertiți imaginea în tonuri de gri pentru a reduce costurile de calcul. Această etapă este tipică pentru multe metode de procesare a imaginii.