logo

OpenCV: Segmentering ved bruk av terskel

I denne artikkelen kalt en grunnleggende teknikk for objektsegmentering Terskel . Men før du går inn i detalj nedenfor, er en kort oversikt over OpenCV. OpenCV (Open Source Computer Vision) er et tverrplattform Open-Source Library med programmeringsfunksjoner som tar sikte på å utføre sanntids datamaskinvisjonsoppgaver i et bredt utvalg av felt som:
  • Ansiktsgjenkjenning
  • Iris anerkjennelsessystemer
  • Gestegjenkjenning
  • Human - Computer Interaction (HCI)
  • Mobil robotikk
  • Objektidentifikasjon
  • Segmentering og anerkjennelse
  • Stereopsis stereosyn: dybdeoppfatning fra 2 kameraer
  • Forsterket virkeligheten
Det inkluderer også et robust statistisk maskinlæringsbibliotek som inneholder en rekke forskjellige klassifiserere som brukes til å støtte områdene ovenfor. For å bruke OpenCV bare importere eller inkludere de nødvendige bibliotekene og begynne å bruke mylderet av tilgjengelige funksjoner. Terskel er en veldig populær segmenteringsteknikk som brukes til å skille et objekt fra bakgrunnen. I artikkelen nedenfor har jeg beskrevet forskjellige teknikker som ble brukt til terskel Grayscale Images (8-bit) . Prosessen med terskel innebærer å sammenligne hver pikselverdi av bildet (pikselintensitet) med en spesifisert terskel. Dette deler alle pikslene til inngangsbildet i 2 grupper:
  1. Piksler som har intensitetsverdi lavere enn terskel.
  2. Piksler som har intensitetsverdi større enn terskel.
Disse to gruppene får nå forskjellige verdier avhengig av forskjellige segmenteringstyper. OpenCV støtter 5 forskjellige terskelordninger på gråtoner (8-bit) bilder ved å bruke funksjonen: Dobbelt terskel (InputArray SRC OutputArray DST dobbel terskel dobbel maxval int -type) Parametere:
  • InputArray SRC: Input Image (MAT 8-bit eller 32-bit)
  • OutputArray DST: Output Image (samme størrelse som input)
  • Dobbelt terskel: Sett terskelverdi
  • dobbelt maxval: maxval brukt i type 1 og 2
  • int type*: Angir typen terskel som skal brukes. (0-4)
  • *Under en liste over terskeltyper er gitt. Inngangsbilde Orig' title= Inngangs -RGB -bildet blir først konvertert til et gråtonebilde før terskel blir gjort. OpenCV: Segmentering ved bruk av terskel' title= Terskeltyper
      Binær terskel (int type = 0) 0_130' title= Av de to gruppene som ble oppnådd tidligere, har gruppen med medlemmer med pikselintensitet større enn den angitte terskelen er tildeling max_value eller i tilfelle av en gråtoner en verdi på 255 (hvit). Medlemmene av den gjenværende gruppen har sine pikselintensiteter satt til 0 (svart). Eq1' title= Hvis pikselintensitetsverdien ved (x y) i kildebildet er større enn terskel, er verdien i det endelige bildet satt til MaxVal. Omvendt binær terskel (int type = 1) 1_130' title= Inv. Binær terskel er den samme som binær terskel. Den eneste essensielle forskjellen er i inv.binær terskel som gruppen har pikselintensiteter større enn angitt terskel får tildelt ‘0’, mens de gjenværende piksler som har intensiteter mindre enn terskelen er satt til MaxVal. Eq2' title= Hvis pikselintensitetsverdien ved (x y) i kildebildet er større enn terskel, er verdien i det endelige bildet satt til 0 ellers er det satt til MaxVal. Avkortet terskel (int type = 2) 2_150' title= Gruppen som har pikselintensiteter som er større enn den angitte terskelen, er avkortet til den angitte terskelen eller med andre ord pikselverdiene er satt til å være de samme som den angitte terskelen. Alle andre verdier forblir de samme. Eq3' title= Hvis pikselintensitetsverdien ved (x y) i kildebildet er større enn terskel, er verdien i det endelige bildet satt til terskel ellers er det uendret. Terskel til null (int type = 3) OpenCV: Segmentering ved bruk av terskel' title= En veldig enkel terskelteknikk der vi setter pikselintensiteten til ‘0’ for alle piksler i gruppen som har pikselintensitetsverdi mindre enn terskelen. Eq4' title= Hvis pikselintensitetsverdien ved (x y) i kildebildet er større enn terskel, endres ikke verdien ved (x y) i det endelige bildet. Alle de resterende pikslene er satt til ‘0’. Terskel til null omvendt (int type = 4) OpenCV: Segmentering ved bruk av terskel' title= I likhet med den forrige teknikken her setter vi pikselintensiteten til ‘0’ for alle pikslene i gruppen som har pikselintensitetsverdi større enn terskelen. Eq5' title= Hvis pikselintensitetsverdien ved (x y) i kildebildet er større enn terskel, er verdien til (x y) i det endelige bildet satt til ‘0’. All den gjenværende pikselverdien er uendret.
    For å kompilere OpenCV -programmer må du ha OpenCV -bibliotek installert på systemet ditt. Jeg vil legge ut en enkel tutorial for det samme de kommende dagene. Hvis du allerede har installert OpenCV, kjør den nedenfor koden med inngangsbildet du ønsker. 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);  } }