OpenCV : segmentation à l'aide du seuil

OpenCV : segmentation à l'aide du seuil
Dans cet article, une technique de base pour la segmentation d'objets appelée Seuil . Mais avant d’entrer dans les détails, voici un bref aperçu d’OpenCV. OuvrirCV (Open Source Computer Vision) est une bibliothèque open source multiplateforme de fonctions de programmation visant à effectuer des tâches de vision par ordinateur en temps réel dans une grande variété de domaines tels que :
  • Reconnaissance faciale
  • Systèmes de reconnaissance de l'iris
  • Reconnaissance gestuelle
  • Interaction homme-machine (HCI)
  • Robotique mobile
  • Identification d'objet
  • Segmentation et reconnaissance
  • Vision stéréoscopique Stereopsis : perception de la profondeur à partir de 2 caméras
  • Réalité augmentée
Il comprend également une solide bibliothèque d'apprentissage automatique statistique qui contient un certain nombre de classificateurs différents utilisés pour prendre en charge les domaines ci-dessus. Pour utiliser OpenCV, importez ou incluez simplement les bibliothèques requises et commencez à utiliser la myriade de fonctions disponibles. Seuil est une technique de segmentation très populaire utilisée pour séparer un objet de son arrière-plan. Dans l'article ci-dessous, j'ai décrit diverses techniques utilisées pour définir le seuil images en niveaux de gris (8 bits) . Le processus de seuillage implique de comparer chaque valeur de pixel de l’image (intensité des pixels) à un seuil spécifié. Cela divise tous les pixels de l'image d'entrée en 2 groupes :
  1. Pixels ayant une valeur d'intensité inférieure au seuil.
  2. Pixels ayant une valeur d'intensité supérieure au seuil.
Ces 2 groupes reçoivent désormais des valeurs différentes en fonction des différents types de segmentation. OpenCV prend en charge 5 schémas de seuil différents sur les images en niveaux de gris (8 bits) en utilisant la fonction : Double seuil (InputArray src OutputArray dst double thresh double maxval int type) Paramètres :
  • InputArray src : image d'entrée (Mat 8 bits ou 32 bits)
  • OutputArray dst : Image de sortie (même taille que l'entrée)
  • double seuil : définir la valeur seuil
  • double maxval : maxVal utilisé dans les types 1 et 2
  • int type* : Spécifie le type de seuil à utiliser. (0-4)
  • *Ci-dessous, une liste de types de seuils est donnée. Image d'entrée orig L'image RVB d'entrée est d'abord convertie en image en niveaux de gris avant que le seuillage ne soit effectué. OpenCV : segmentation à l Types de seuil
      Seuil binaire (type int = 0) 0_130 Parmi les deux groupes obtenus précédemment, le groupe dont les membres ont une intensité de pixel supérieure au seuil défini est l'affectation Max_Value ou, dans le cas d'une échelle de gris, une valeur de 255 (blanc). Les membres du groupe restant ont leurs intensités de pixels réglées sur 0 (noir). EQ1 Si la valeur d'intensité des pixels en (x y) dans l'image source est supérieure au seuil, la valeur dans l'image finale est définie sur maxVal. Seuil binaire inversé (type int = 1) 1_130 Inv. Le seuil binaire est le même que le seuil binaire. La seule différence essentielle réside dans le seuillage Inv.Binary, le groupe ayant des intensités de pixels supérieures au seuil défini se voit attribuer « 0 », tandis que les pixels restants ayant des intensités inférieures au seuil sont définis sur maxVal. eq2 Si la valeur d'intensité des pixels en (x y) dans l'image source est supérieure au seuil, la valeur dans l'image finale est définie sur 0, sinon elle est définie sur maxVal. Tronquer le seuil (int type = 2) 2_150 Le groupe ayant des intensités de pixels supérieures au seuil défini est tronqué au seuil défini ou, en d'autres termes, les valeurs de pixels sont définies pour être identiques au seuil défini. Toutes les autres valeurs restent les mêmes. eq3 Si la valeur d'intensité des pixels en (x y) dans l'image source est supérieure au seuil, la valeur dans l'image finale est définie sur le seuil, sinon elle reste inchangée. Seuil à zéro (int type = 3) OpenCV : segmentation à l Une technique de seuillage très simple dans laquelle nous définissons l'intensité des pixels sur « 0 » pour tous les pixels du groupe ayant une valeur d'intensité de pixel inférieure au seuil. eq4 Si la valeur d'intensité des pixels en (x y) dans l'image source est supérieure au seuil, la valeur en (x y) dans l'image finale ne change pas. Tous les pixels restants sont mis à « 0 ». Seuil à zéro inversé (int type = 4) OpenCV : segmentation à l Semblable à la technique précédente, nous définissons ici l'intensité des pixels sur « 0 » pour tous les pixels du groupe ayant une valeur d'intensité de pixel supérieure au seuil. eq5 Si la valeur d'intensité des pixels en (x y) dans l'image source est supérieure au seuil, la valeur en (x y) dans l'image finale est définie sur « 0 ». Toutes les valeurs de pixels restantes restent inchangées.
    Pour compiler des programmes OpenCV, vous devez avoir la bibliothèque OpenCV installée sur votre système. Je publierai un tutoriel simple pour le même dans les prochains jours. Si vous avez déjà installé OpenCV, exécutez le code ci-dessous avec l'image d'entrée de votre choix. CPP
       // CPP program to demonstrate segmentation   // thresholding.   #include         #include         #include         #include         using     namespace     cv  ;   int     main  (  int     argc       char  **     argv  )   {      if     (  argc     !=     2  )         {      cout      < <     ' Usage:  '      '   '      < <     endl  ;      return     -1  ;      }      int     threshold_value     =     0  ;      // Valid Values: 0 1 2 3 4      int     threshold_type     =     2  ;         // maxVal useful for threshold_type 1 and 2      int     maxVal     =     255  ;         // Source image      Mat     src     =     imread  (  argv  [  1  ]     1  );      cvNamedWindow  (  'Original'       CV_WINDOW_NORMAL  );      imshow  (  'Original'       src  );      Mat     src_gray       dst  ;      // Convert the image to GrayScale      cvtColor  (  src       src_gray       CV_BGR2GRAY  );      // Create a window to display results      cvNamedWindow  (  'Result'       CV_WINDOW_NORMAL  );      createTrackbar  (  'Threshold'       'Result'           &  threshold_value       255  );      while     (  1  )         {      threshold  (  src_gray       dst       threshold_value           maxVal       threshold_type  );      imshow  (  'Result'       dst  );      waitKey  (  1  );      }   }