logo

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' title= 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' title= Tipus de llindar
      Llindar binari (tipus int = 0) 0_130' title= 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' title= 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' title= 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' title= 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' title= 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' title= 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' title= 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' title= 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' title= 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' title= 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);  } }