OpenCV: Segmentering ved hjælp af tærskelværdi

OpenCV: Segmentering ved hjælp af tærskelværdi
I denne artikel kaldes en grundlæggende teknik til objektsegmentering Tærskel . Men inden du flytter ind i detaljerne nedenfor er en kort oversigt over OpenCV. OpenCV (Open Source Computer Vision) er en krydsplatform open source-bibliotek med programmeringsfunktioner, der sigter mod at udføre realtids computervisionsopgaver inden for en lang række felter, såsom:
  • Ansigtsgenkendelse
  • Iris -genkendelsessystemer
  • Gestusgenkendelse
  • Human -Computer Interaction (HCI)
  • Mobil robotik
  • Objektidentifikation
  • Segmentering og anerkendelse
  • Stereopsis Stereo Vision: Dybdeopfattelse fra 2 kameraer
  • Augmented reality
Det inkluderer også et robust statistisk maskinlæringsbibliotek, der indeholder en række forskellige klassifikatorer, der bruges til at understøtte ovenstående områder. For at bruge OpenCV skal du blot importere eller inkludere de krævede biblioteker og begynde at bruge det utal af tilgængelige funktioner. Tærskel er en meget populær segmenteringsteknik, der bruges til at adskille et objekt fra dets baggrund. I nedenstående artikel har jeg beskrevet forskellige teknikker, der bruges til tærskel Gråskala-billeder (8-bit) . Processen med tærskel involverer sammenligning af hver pixelværdi af billedet (pixelintensitet) med en specificeret tærskel. Dette deler alle pixels på inputbilledet i 2 grupper:
  1. Pixels har intensitetsværdi lavere end tærsklen.
  2. Pixels har intensitetsværdi større end tærsklen.
Disse 2 grupper får nu forskellige værdier afhængigt af forskellige segmenteringstyper. OpenCV understøtter 5 forskellige tærskelordninger på gråskala (8-bit) billeder ved hjælp af funktionen: Dobbelt tærskel (inputArray SRC OutputArray DST Dobbelt tærskel dobbelt maxval int type) Parametre:
  • InputArray SRC: Input Image (MAT 8-bit eller 32-bit)
  • OutputArray DST: Outputbillede (samme størrelse som input)
  • Dobbelt tærskel: Indstil tærskelværdi
  • Dobbelt maxval: maxval brugt i type 1 og 2
  • INT Type*: Specificerer den type tærskel, der skal bruges. (0-4)
  • *Nedenfor er der angivet en liste over tærskelstyper. Inputbillede Orig Input RGB -billedet konverteres først til et gråskala -billede, før tærskel er færdig. OpenCV: Segmentering ved hjælp af tærskelværdi Tærskeltyper
      Binær tærskel (int type = 0) 0_130 Af de to grupper, der er opnået tidligere, er gruppen, der har medlemmer med pixelintensitet større end den indstillede tærskel, tildeling max_value eller i tilfælde af en gråtoner en værdi på 255 (hvid). Medlemmerne af den resterende gruppe har deres pixelintensiteter indstillet til 0 (sort). EQ1 Hvis pixelintensitetsværdien ved (x y) i kildebillede er større end tærsklen, er værdien i det endelige billede indstillet til maxval. Inverteret binær tærskel (int type = 1) 1_130 Inv. Binær tærskel er den samme som binær tærskel. Den eneste væsentlige forskel, der er i inv.Binary tærskel for gruppen med pixelintensiteter, større end indstillet tærskel får tildelt '0', mens de resterende pixels, der har intensiteter mindre end tærsklen, er indstillet til Maxval. EQ2 Hvis pixelintensitetsværdien ved (x y) i kildebillede er større end tærsklen, er værdien i det endelige billede indstillet til 0 ellers er den indstillet til maxval. Trunkeret tærskel (int type = 2) 2_150 Gruppen med pixelintensiteter større end den indstillede tærskel er afkortet til den indstillede tærskel eller med andre ord, at pixelværdierne er indstillet til at være de samme som den indstillede tærskel. Alle andre værdier forbliver de samme. EQ3 Hvis pixelintensitetsværdien ved (x y) i kildebillede er større end tærsklen, er værdien i det endelige billede indstillet til tærskel ellers er den uændret. Tærskel til nul (int type = 3) OpenCV: Segmentering ved hjælp af tærskelværdi En meget enkel tærskelteknik, hvor vi indstiller pixelintensiteten til '0' for alle pixels i gruppen med pixelintensitetsværdi mindre end tærsklen. EQ4 Hvis pixelintensitetsværdien ved (x y) i kildebillede er større end tærsklen, ændres værdien ved (x y) i det endelige billede ikke. Alle de resterende pixels er indstillet til '0'. Tærskel til nul inverteret (int type = 4) OpenCV: Segmentering ved hjælp af tærskelværdi I lighed med den forrige teknik her indstiller vi pixelintensiteten til '0' for alle pixels i gruppen med pixelintensitetsværdi større end tærsklen. EQ5 Hvis pixelintensitetsværdien ved (x y) i kildebillede er større end tærsklen, er værdien ved (x y) i det endelige billede indstillet til '0'. Al den resterende pixelværdi er uændret.
    For at kompilere OpenCV -programmer skal du have OpenCV -bibliotek installeret på dit system. Jeg lægger en simpel tutorial for det samme i de kommende dage. Hvis du allerede har installeret OpenCV, skal du køre nedenstående kode med det indgangsbillede efter eget valg. 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  );      }   }