logo

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' title= 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' title= Tærskeltyper
      Binær tærskel (int type = 0) 0_130' title= 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' title= 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' title= 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' title= 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' title= 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' title= 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' title= En meget enkel tærskelteknik, hvor vi indstiller pixelintensiteten til '0' for alle pixels i gruppen med pixelintensitetsværdi mindre end tærsklen. EQ4' title= 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' title= 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' title= 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);  } }