OpenCV: Segmentering med tröskelvärde

OpenCV: Segmentering med tröskelvärde
I den här artikeln kallas en grundteknik för objektsegmentering Tröskelvärde . Men innan du flyttar in längre detalj nedan är en kort översikt över OpenCV. Opencv (Open Source Computer Vision) är ett tvärplattform med öppen källkodsbibliotek med programmeringsfunktioner som syftar till att utföra realtid datorsynsuppgifter i en mängd olika fält som:
  • Ansiktsigenkänning
  • Irisigenkänningssystem
  • Gestigenkänning
  • Human - Computer Interaction (HCI)
  • Mobilrobotik
  • Objektidentifiering
  • Segmentering och erkännande
  • Stereopsis Stereo Vision: Djupuppfattning från 2 kameror
  • Förstärkt verklighet
Det innehåller också ett robust statistiskt maskininlärningsbibliotek som innehåller ett antal olika klassificerare som används för att stödja ovanstående områden. För att använda OpenCV importera eller inkludera de nödvändiga biblioteken och börja använda de otaliga tillgängliga funktioner. Tröskelvärde är en mycket populär segmenteringsteknik som används för att separera ett objekt från dess bakgrund. I artikeln nedan har jag beskrivit olika tekniker som används för att tröskelvärdet gråskalabilder (8-bitars) . Processen med tröskelvärde involverar att jämföra varje pixelvärde på bilden (pixelintensitet) med en specificerad tröskel. Detta delar upp alla pixlar för inmatningsbilden i två grupper:
  1. Pixlar med intensitetsvärde lägre än tröskeln.
  2. Pixlar med intensitetsvärde större än tröskeln.
Dessa två grupper ges nu olika värden beroende på olika segmenteringstyper. OpenCV stöder 5 olika tröskelprogram på gråskala (8-bitars) bilder med funktionen: Dubbeltröskel (InputArray SRC OutputArray DST Double Thresh Double MaxVal Int Type) Parametrar:
  • InputArray SRC: Ingångsbild (MAT 8-bitar eller 32-bitars)
  • OutputArray DST: utgångsbild (samma storlek som ingång)
  • Dubbel tröskel: Ställ in tröskelvärde
  • Double MaxVal: Maxval som används i typ 1 och 2
  • int -typ*: Anger typen av tröskel som ska användas. (0-4)
  • *Nedan anges en lista över tröskelstyper. Inmatningsbild ursprung Inmatnings -RGB -bilden konverteras först till en gråskala bild innan tröskeln görs. OpenCV: Segmentering med tröskelvärde Tröskeltyper
      Binär tröskel (int typ = 0) 0_130 Av de två grupperna som erhållits tidigare är gruppen som har medlemmar med pixelintensitet större än set -tröskeln tilldelning max_value eller i fall av en gråskala ett värde på 255 (vit). Medlemmarna i den återstående gruppen har sina pixelintensiteter inställda på 0 (svart). Eq1 Om pixelintensitetsvärdet vid (x y) i källbilden är större än tröskeln är värdet i den slutliga bilden inställd på MaxVal. Inverterad binär tröskel (int typ = 1) 1_130 Inv. Binär tröskel är densamma som binär tröskel. Den enda väsentliga skillnaden är i Inv.Binary -tröskelvärden som har pixelintensiteter större än inställd tröskel tilldelas '0' medan de återstående pixlarna har intensiteter mindre än tröskeln är inställda på MaxVal. eq2 Om pixelintensitetsvärdet vid (x y) i källbilden är större än tröskeln är värdet i den slutliga bilden inställd på 0 annars är den inställd på MaxVal. Trunkera tröskelvärde (int typ = 2) 2_150 Gruppen med pixelintensiteter större än set -tröskeln trunkeras till set -tröskeln eller med andra ord är pixelvärdena inställda på att vara samma som set -tröskeln. Alla andra värden förblir desamma. ekv Om pixelintensitetsvärdet vid (x y) i källbilden är större än tröskeln är värdet i den slutliga bilden inställd på tröskeln annars är det oförändrat. Tröskel till noll (int typ = 3) OpenCV: Segmentering med tröskelvärde En mycket enkel tröskelteknik där vi ställer in pixelintensiteten till '0' för alla pixlar i gruppen med pixelintensitetsvärde mindre än tröskeln. ekv Om pixelintensitetsvärdet vid (x y) i källbilden är större än tröskeln ändras inte värdet vid (x y) i den slutliga bilden. Alla återstående pixlar är inställda på '0'. Tröskel till noll inverterad (int typ = 4) OpenCV: Segmentering med tröskelvärde I likhet med den tidigare tekniken här ställer vi pixelintensiteten till '0' för alla pixlar i gruppen med pixelintensitetsvärde större än tröskeln. ekv. Om pixelintensitetsvärdet vid (x y) i källbilden är större än tröskeln är värdet vid (x y) i den slutliga bilden inställd på '0'. Allt återstående pixelvärde är oförändrat.
    För att kompilera OpenCV -program måste du ha OpenCV -bibliotek installerat på ditt system. Jag kommer att publicera en enkel handledning för samma de de kommande dagarna. Om du redan har installerat OpenCV Kör nedanstående kod med inmatningsbilden du väljer. 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  );      }   }