OpenCV: segmentació mitjançant el llindar

OpenCV: segmentació mitjançant el llindar
En aquest article, una tècnica bàsica per a la segmentació d'objectes anomenada Llindar . Però abans de passar més detalls a continuació es mostra una breu visió general de OpenCV. OpenCV (Open Source Computer Vision) és una plataforma creuada de les funcions de programació de la plataforma oberta destinada a realitzar tasques de visió informàtica en temps real en una gran varietat de camps com ara:
  • Reconeixement facial
  • Sistemes de reconeixement d’iris
  • Reconeixement del gest
  • Interacció humana i ordinador (HCI)
  • Robòtica mòbil
  • Identificació d'objectes
  • Segmentació i reconeixement
  • Visió estèreo estereopsis: percepció en profunditat de 2 càmeres
  • Realitat augmentada
També inclou una robusta biblioteca d’aprenentatge de màquines estadístiques que conté diversos classificadors diferents que s’utilitzen per donar suport a les àrees anteriors. Per utilitzar OpenCV, simplement importar o incloure les biblioteques necessàries i començar a fer ús de la infinitat de funcions disponibles. Llindar és una tècnica de segmentació molt popular utilitzada per separar un objecte del seu fons. A l’article següent he descrit diverses tècniques que s’utilitzen per llindar Imatges en escala de grisos (8 bits) . El procés de llindar implica comparar cada valor de píxel de la imatge (intensitat de píxels) amb un llindar especificat. Això divideix tots els píxels de la imatge d’entrada en 2 grups:
  1. Els píxels tenen un valor d’intensitat inferior al llindar.
  2. Els píxels amb un valor d’intensitat superior al llindar.
A aquests dos grups se'ls proporciona diferents valors en funció de diversos tipus de segmentació. OpenCV admet 5 esquemes de llindar diferents a les imatges en escala de grisos (8 bits) mitjançant la funció: Llindar doble (InputArray SRC SortirArray DST Doble Thres de doble Tipus INT MAXVAL INT) Paràmetres:
  • InputArray SRC: imatge d’entrada (MAT 8-bit o 32 bits)
  • OutputArray dst: imatge de sortida (la mateixa mida que l'entrada)
  • Thresh doble: el valor del llindar de configuració
  • Double MaxVal: MaxVal utilitzat en els tipus 1 i 2
  • Tipus INT*: Especifica el tipus de llindar a utilitzar. (0-4)
  • *A continuació, es dóna una llista de tipus de llindar. Imatge d'entrada origen La imatge RGB d’entrada es converteix primer en una imatge en escala de grises abans de fer el llindar. OpenCV: segmentació mitjançant el llindar Tipus de llindar
      Llindar binari (tipus int = 0) 0_130 Dels dos grups obtinguts anteriorment, el grup amb membres amb intensitat de píxel superior al llindar conjunt són assignacions max_value o en cas de grisos un valor de 255 (blanc). Els membres del grup restant tenen les seves intensitats de píxels establertes en 0 (negre). Eq1 Si el valor d’intensitat de píxels a (x y) a la imatge font és superior al llindar, el valor a la imatge final s’estableix a MaxVal. Llindar binari invertit (tipus int = 1) 1_130 Inv. El llindar binari és el mateix que el llindar binari. L’única diferència essencial és el llindar inv.binari que el grup té intensitats de píxel més gran que el llindar de conjunt s’assignen “0”, mentre que els píxels restants que tenen intensitats inferiors al llindar s’estableixen en maxval. eq2 Si el valor d’intensitat de píxels a (x y) a la imatge font és superior al llindar, el valor a la imatge final s’estableix en 0 més, s’estableix a maxval. Truncat Thresholding (Int Type = 2) 2_150 El grup amb intensitats de píxels superior al llindar de conjunt es trunca al llindar de conjunt o és a dir, els valors de píxel són iguals que el llindar de conjunt. La resta de valors segueixen sent iguals. eq3 Si el valor d’intensitat de píxels a (x y) a la imatge font és superior al llindar, el valor de la imatge final s’estableix en un llindar més, no es canvia. Llindar a zero (tipus int = 3) OpenCV: segmentació mitjançant el llindar Una tècnica de llindar molt senzilla en què establim la intensitat del píxel a "0" per a tots els píxels del grup amb un valor d'intensitat de píxels inferior al llindar. eq4 Si el valor d’intensitat de píxels a (x y) a la imatge font és superior al llindar, el valor a (x y) a la imatge final no canvia. Tots els píxels restants estan configurats en "0". Llindar a zero invertit (tipus int = 4) OpenCV: segmentació mitjançant el llindar Semblant a la tècnica anterior aquí, establim la intensitat de píxels a "0" per a tots els píxels del grup amb un valor d'intensitat de píxels superior al llindar. eq5 Si el valor d’intensitat de píxels a (x y) a la imatge font és superior al llindar, el valor a (x y) a la imatge final s’estableix en “0”. Tot el valor de píxel restant no es modifica.
    Per recopilar programes OpenCV, heu de tenir instal·lada la biblioteca OpenCV al vostre sistema. En els propers dies publicaré un senzill tutorial per als propers dies. Si ja heu instal·lat OpenCV, executeu el codi següent amb la imatge d'entrada que escolliu. 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  );      }   }