logo

OpenCV: Segmentare folosind prag

În acest articol a fost numită o tehnică de bază pentru segmentarea obiectelor Prag . Dar înainte de a trece mai multe detalii de mai jos este o scurtă privire de ansamblu a OpenCV. OpenCV (Open Source Computer Vision) este o bibliotecă open-source cu o platformă deschisă a funcțiilor de programare care vizează îndeplinirea sarcinilor de viziune a computerului în timp real într-o mare varietate de câmpuri, cum ar fi:
  • Recunoașterea facială
  • Sisteme de recunoaștere a irisului
  • Recunoașterea gestului
  • Interacțiune umană -completă (HCI)
  • Robotică mobilă
  • Identificarea obiectului
  • Segmentare și recunoaștere
  • Stereopsis STEREO VISIUNE: percepția profunzime din 2 camere
  • Realitate augmentată
De asemenea, include o bibliotecă robustă de învățare automată care conține o serie de clasificatori diferiți folosiți pentru a susține zonele de mai sus. Pentru a utiliza OpenCV pur și simplu importă sau includeți bibliotecile necesare și începeți să utilizați multitudinea de funcții disponibile. Prag este o tehnică de segmentare foarte populară folosită pentru separarea unui obiect de fondul său. În articolul de mai jos am descris diverse tehnici utilizate pentru prag Imagini la scară de gri (8 biți) . Procesul de Prag Implică compararea fiecărei valori de pixeli a imaginii (intensitatea pixelilor) cu un prag specificat. Aceasta împarte toți pixelii imaginii de intrare în 2 grupuri:
  1. Pixeli cu o valoare de intensitate mai mică decât pragul.
  2. Pixeli cu o valoare de intensitate mai mare decât pragul.
Aceste 2 grupuri li se oferă acum valori diferite în funcție de diferite tipuri de segmentare. OpenCV acceptă 5 scheme diferite de praguri pe imagini pe scară de gri (8 biți) folosind funcția: Prag dublu (inputArray Src OutputArray DST dublu thresh Double MaxVal Int Type) Parametri:
  • InputArray Src: Imagine de intrare (MAT pe 8 biți sau pe 32 de biți)
  • OutputArray DST: Imagine de ieșire (aceeași dimensiune ca intrare)
  • Double Thresh: Setați valoarea pragului
  • Double MaxVal: MaxVal utilizat în tipul 1 și 2
  • Tipul int*: Specifică tipul de prag de utilizat. (0-4)
  • *Mai jos este prezentată o listă de tipuri de praguri. Imagine de intrare orig' title= Imaginea RGB de intrare este convertită pentru prima dată într -o imagine în scară de gri înainte de a se face prag. OpenCV: Segmentare folosind prag' title= Tipuri de praguri
      Prag binar (tip int = 0) 0_130' title= Dintre cele două grupuri obținute mai devreme, grupul care are membri cu intensitate de pixeli mai mare decât pragul setat sunt atribuirea max_value sau în cazul unei valori de 255 (alb). Membrii grupului rămas au intensitățile lor de pixeli la 0 (negru). EQ1' title= Dacă valoarea intensității pixelilor la (x y) în imaginea sursă este mai mare decât pragul, valoarea din imaginea finală este setată la MaxVal. Prag binar inversat (tip int = 1) 1_130' title= Inv. Pragul binar este același cu pragul binar. Singura diferență esențială fiind în Pragul inv.binar Grupul care are intensități de pixeli mai mari decât pragul stabilit este atribuit „0”, în timp ce pixelii rămași având intensități mai mici decât pragul sunt setate pe MaxVal. eq2' title= Dacă valoarea intensității pixelilor la (x y) în imaginea sursă este mai mare decât pragul, valoarea din imaginea finală este setată la 0 altceva este setat pe maxval. Prag de trunchiere (tip int = 2) 2_150' title= Grupul care are intensități de pixeli mai mari decât pragul setat este trunchiat la pragul setat sau, cu alte cuvinte, valorile pixelilor sunt setate la fel ca pragul setat. Toate celelalte valori rămân aceleași. eq3' title= Dacă valoarea intensității pixelilor la (x y) în imaginea sursă este mai mare decât pragul, valoarea din imaginea finală este setată la prag, altfel este neschimbată. Prag la zero (tip int = 3) OpenCV: Segmentare folosind prag' title= O tehnică de prag foarte simplă în care am stabilit intensitatea pixelilor la „0” pentru toți pixelii grupului cu o valoare a intensității pixelilor mai mică decât pragul. EQ4' title= Dacă valoarea intensității pixelilor la (x y) în imaginea sursă este mai mare decât pragul valorii la (x y) din imaginea finală nu se schimbă. Toți pixelii rămași sunt setați pe „0”. Prag la zero inversat (tip int = 4) OpenCV: Segmentare folosind prag' title= Similar cu tehnica anterioară aici, am setat intensitatea pixelilor la „0” pentru toți pixelii grupului cu o valoare a intensității pixelilor mai mare decât pragul. eq5' title= Dacă valoarea intensității pixelilor la (x y) în imaginea sursă este mai mare decât pragul valorii la (x y) din imaginea finală este setată pe „0”. Toată valoarea de pixeli rămasă este neschimbată.
    Pentru a compila programe OpenCV, trebuie să aveți biblioteca OpenCV instalată pe sistemul dvs. Voi posta un tutorial simplu pentru același lucru în zilele următoare. Dacă ați instalat deja OpenCV, executați codul de mai jos cu imaginea de intrare la alegere. 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);  } }