Maison  >  Article  >  développement back-end  >  Comment utiliser Python pour la détection des bords de l'image

Comment utiliser Python pour la détection des bords de l'image

王林
王林avant
2023-06-03 21:22:011929parcourir

Détection des bords

Les bords de l'image font référence à l'ensemble de pixels de l'image où l'échelle de gris des pixels environnants exprimant l'objet change étape par étape.

À la jonction de deux zones adjacentes avec des niveaux de gris différents dans l'image, il doit y avoir une transition rapide des niveaux de gris, ou sauts. Ils correspondent aux positions des bords de chaque zone dans l'image. Les bords contiennent de riches informations intrinsèques. Tels que la direction, les propriétés de pas, la forme, etc., les pixels le long du bord changent lentement, tandis que les pixels perpendiculaires à la direction du bord changent radicalement.

La plupart des informations de l'image sont concentrées sur les bords. Une fois les bords déterminés, la segmentation des différentes zones est effectivement réalisée.

Opérateurs de détection d'arêtes

La recherche d'arêtes nécessite souvent l'aide de certains opérateurs de détection d'arête. Certains de ces opérateurs sont des opérateurs basés sur des dérivées du premier ordre, et d'autres sont des opérateurs différentiels du second ordre

Opérateur de Roberts, opérateur de Prewitt, opérateur de Sobel. Ils contiennent des modèles dans les directions x et y. Chaque modèle n'est sensible qu'à la direction correspondante, a un résultat évident dans cette direction et réagit peu aux changements dans les autres directions. Voici quelques opérateurs différentiels courants de premier ordre et leurs caractéristiques :

Nom de l'opérateur Caractéristiques
Opérateur différentiel simple est sensible au bruit et a un certain effet d'amplification sur le bruit
L'opérateur Roberts a peu d'effet de débruitage et a de meilleures capacités de détection de bord que les simples opérateurs différentiels
L'opérateur Prewitt peut supprimer efficacement l'influence du bruit et détecter les points de bord
Opérateur Sobel Le bord obtenu est plus large et l'effet de suppression du bruit est plus fort
Opérateur Canny La position du bord détectée est précise et le bord est étroit

1. 3. Opérateur Sobel

Les bords détectés par l'opérateur Sobel sont plus continus que les résultats de détection de l'opérateur Roberts et ont de meilleures capacités de détection pour les détails de l'image, et le détecteur de bord Sobel introduit une moyenne locale, l'impact sur le bruit est relativement faible et l'effet est meilleur. Comment utiliser Python pour la détection des bords de limage

4 largeur.

La mise en œuvre de l'algorithme est divisée en 4 étapes suivantes :

Comment utiliser Python pour la détection des bords de limage

Utiliser le filtre gaussien pour lisser l'image

Utiliser la différence finie de la dérivée partielle du premier ordre pour calculer l'amplitude et la direction du gradient

Comment utiliser Python pour la détection des bords de limage

Conduisez la non-linéarité sur l'amplitude du gradient Suppression maximale


Utilisez un algorithme à double seuil pour détecter et connecter les bords
  • 5. Opérateur laplacien
  • Les opérateurs différentiels courants du second ordre incluent l'opérateur laplacien, qui est un opérateur laplacien. bidimensionnel L'opérateur tuteur de premier ordre est assez sensible au bruit dans l'image, et les bords détectés ont souvent une largeur de deux pixels et n'ont aucune information de direction. Par conséquent, l'opérateur laplacien est rarement utilisé directement pour détecter les bords, mais est principalement utilisé. pour les bords connus, après un pixel, déterminez si le pixel se trouve dans une zone sombre ou lumineuse de l'image. De plus, l'opérateur de différence du premier ordre formera une valeur de gradient importante dans une large plage, de sorte qu'il ne peut pas être positionné avec précision. Cependant, le point de passage par zéro de l'opérateur de différence du second ordre peut être utilisé pour localiser avec précision le bord.

    Le bruit de l'opérateur de Laplace est évidemment plus grand que celui de l'opérateur de Sobel, mais ses bords sont beaucoup plus fins que ceux de Sobel, et la transformée de Laplace, en tant qu'opérateur différentiel du second ordre, est particulièrement sensible au bruit et produira des doubles bords et ne peut pas détecter la direction du bord.

  • Expérience d'effet
  • 1. Détection de bord Roberts

  • Code opérateur Prewitt :

Roberts_kernel_x = np.array([[-1, 0], [0, 1]], dtype=int)
Roberts_kernel_y = np.array([[0, -1], [1, 0]], dtype=int)


2.

Comment utiliser Python pour la détection des bords de limage

3 , Sobel See More Détection de bord

Fonction Sobel:

Roberts_kernel_x = np.array([[-1, 0], [0, 1]], dtype=int)
Roberts_kernel_y = np.array([[0, -1], [1, 0]], dtype=int)

Comment utiliser Python pour la détection des bords de limage4. Détection de bord Canny

Fonction Canny:

edges = cv2.Sobel(img, -1, 1, 1)

Comment utiliser Python pour la détection des bords de limage5.

edges = cv2.Canny(img, 5, 100)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer