logo

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' title= 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'aide du seuil' title= Types de seuil
      Seuil binaire (type int = 0) 0_130' title= 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' title= 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' title= 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' title= 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' title= 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' title= 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'aide du seuil' title= 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' title= 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'aide du seuil' title= 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' title= 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);  } }