OpenCV: Segmentatie met behulp van Thresholding

OpenCV: Segmentatie met behulp van Thresholding
In dit artikel wordt een basistechniek voor objectsegmentatie genoemd Drempel . Maar voordat we hieronder dieper ingaan, volgt een kort overzicht van OpenCV. OpenCV (Open Source Computer Vision) is een platformonafhankelijke open-sourcebibliotheek met programmeerfuncties gericht op het uitvoeren van realtime computervisietaken op een groot aantal verschillende gebieden, zoals:
  • Gezichtsherkenning
  • Irisherkenningssystemen
  • Gebaarherkenning
  • Mens-computerinteractie (HCI)
  • Mobiele robotica
  • Objectidentificatie
  • Segmentatie en herkenning
  • Stereopsis stereovisie: dieptewaarneming door 2 camera's
  • Verhoogde realiteit
Het bevat ook een robuuste statistische machine learning-bibliotheek die een aantal verschillende classificaties bevat die worden gebruikt om de bovengenoemde gebieden te ondersteunen. Om OpenCV te gebruiken importeert of voegt u eenvoudigweg de vereiste bibliotheken toe en kunt u gebruik maken van de talloze beschikbare functies. Drempel is een zeer populaire segmentatietechniek die wordt gebruikt om een ​​object van zijn achtergrond te scheiden. In onderstaand artikel heb ik verschillende technieken beschreven die gebruikt worden bij drempels grijswaardenafbeeldingen (8-bit) . Het proces van drempels omvat het vergelijken van elke pixelwaarde van het beeld (pixelintensiteit) met een gespecificeerde drempelwaarde. Dit verdeelt alle pixels van het invoerbeeld in 2 groepen:
  1. Pixels met een intensiteitswaarde lager dan de drempelwaarde.
  2. Pixels met een intensiteitswaarde groter dan de drempelwaarde.
Deze twee groepen krijgen nu verschillende waarden, afhankelijk van de verschillende segmentatietypes. OpenCV ondersteunt 5 verschillende drempelschema's op grijswaarden(8-bit) afbeeldingen met behulp van de functie: Dubbele drempel (InputArray src OutputArray dst double thresh double maxval int type) Parameters:
  • InputArray src: invoerafbeelding (Mat 8-bit of 32-bit)
  • OutputArray dst: uitvoerafbeelding (dezelfde grootte als invoer)
  • dubbele drempel: drempelwaarde instellen
  • dubbele maxval: maxVal gebruikt in type 1 en 2
  • int type* : Specificeert het type drempel dat moet worden gebruikt. (0-4)
  • *Hieronder vindt u een lijst met typen drempelwaarden. Invoerafbeelding oorsprong Het ingevoerde RGB-beeld wordt eerst geconverteerd naar een grijswaardenafbeelding voordat de drempelwaarde wordt toegepast. OpenCV: Segmentatie met behulp van Thresholding Typen drempelwaarden
      Binaire drempel (int type = 0) 0_130 Van de twee eerder verkregen groepen heeft de groep leden met een pixelintensiteit groter dan de ingestelde drempel de toewijzing Max_Value of in het geval van een grijsschaal een waarde van 255 (wit). De pixelintensiteiten van de leden van de overige groep zijn ingesteld op 0 (zwart). EQ1 Als de pixelintensiteitswaarde bij (xy) in de bronafbeelding groter is dan de drempelwaarde, wordt de waarde in de uiteindelijke afbeelding ingesteld op maxVal. Omgekeerde binaire drempel (int type = 1) 1_130 Inv. Binaire drempel is hetzelfde als binaire drempel. Het enige essentiële verschil is dat bij de Inv.Binary-drempelwaarde de groep met pixelintensiteiten groter dan de ingestelde drempelwaarde '0' krijgt toegewezen, terwijl de overige pixels met intensiteiten lager dan de drempelwaarde worden ingesteld op maxVal. vgl2 Als de pixelintensiteitswaarde bij (xy) in de bronafbeelding groter is dan de drempelwaarde, wordt de waarde in de uiteindelijke afbeelding ingesteld op 0, anders wordt deze ingesteld op maxVal. Drempelwaarde afkappen (int type=2) 2_150 De groep met pixelintensiteiten groter dan de ingestelde drempel wordt afgekapt tot de ingestelde drempel, of met andere woorden, de pixelwaarden worden zo ingesteld dat ze hetzelfde zijn als de ingestelde drempel. Alle andere waarden blijven hetzelfde. vgl3 Als de pixelintensiteitswaarde bij (xy) in de bronafbeelding groter is dan de drempelwaarde, wordt de waarde in de uiteindelijke afbeelding ingesteld op de drempelwaarde, anders blijft deze ongewijzigd. Drempel tot nul (int type=3) OpenCV: Segmentatie met behulp van Thresholding Een zeer eenvoudige drempeltechniek waarbij we de pixelintensiteit op '0' instellen voor alle pixels van de groep met een pixelintensiteitswaarde die lager is dan de drempelwaarde. vgl4 Als de pixelintensiteitswaarde bij (xy) in de bronafbeelding groter is dan de drempelwaarde, verandert de waarde bij (xy) in de uiteindelijke afbeelding niet. Alle overige pixels worden ingesteld op ‘0’. Drempel tot nul omgekeerd (int type=4) OpenCV: Segmentatie met behulp van Thresholding Vergelijkbaar met de vorige techniek stellen we hier de pixelintensiteit in op ‘0’ voor alle pixels van de groep met een pixelintensiteitswaarde die groter is dan de drempelwaarde. vgl5 Als de pixelintensiteitswaarde bij (xy) in de bronafbeelding groter is dan de drempelwaarde, wordt de waarde bij (xy) in de uiteindelijke afbeelding ingesteld op '0'. Alle resterende pixelwaarden blijven ongewijzigd.
    Om OpenCV-programma's te kunnen compileren, moet de OpenCV-bibliotheek op uw systeem zijn geïnstalleerd. Ik zal de komende dagen een eenvoudige tutorial hiervoor posten. Als u OpenCV al hebt geïnstalleerd, voert u de onderstaande code uit met de invoerafbeelding van uw keuze. 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  );      }   }