logo

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' title= Het ingevoerde RGB-beeld wordt eerst geconverteerd naar een grijswaardenafbeelding voordat de drempelwaarde wordt toegepast. OpenCV: Segmentatie met behulp van Thresholding' title= Typen drempelwaarden
      Binaire drempel (int type = 0) 0_130' title= 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' title= 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' title= 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' title= 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' title= 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' title= 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' title= 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' title= 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' title= 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' title= 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);  } }