logo

OpenCV: Segmentácia pomocou prahovania

V tomto článku je základná technika pre segmentáciu objektov s názvom Prahovanie . Ale predtým, ako sa presuniete do podrobností nižšie, je stručný prehľad OpenCV. Opencv (Open Source Computer Vision) je otvorená knižnica programových funkcií s otvoreným zdrojom platformy zameraná na vykonávanie úloh počítačového videnia v reálnom čase v širokej škále polí, ako napríklad:
  • Rozpoznávanie tváre
  • Rozoznávacie systémy Iris
  • Rozpoznávanie gest
  • Interakcia človeka -počítač (HCI)
  • Mobilná robotika
  • Identifikácia objektu
  • Segmentácia a uznanie
  • Stereopsis stereofónne videnie: vnímanie hĺbky z 2 fotoaparátov
  • Rozšírená realita
Zahŕňa tiež robustnú štatistickú knižnicu strojového učenia, ktorá obsahuje množstvo rôznych klasifikátorov používaných na podporu vyššie uvedených oblastí. Ak chcete používať OpenCV jednoducho importovať alebo zahrnúť požadované knižnice a začať využívať nespočetné množstvo dostupných funkcií. Prahovanie je veľmi populárna segmentačná technika, ktorá sa používa na oddelenie objektu od jeho pozadia. V článku nižšie som opísal rôzne techniky použité na prahovú hodnotu Obrázky Grayscale (8-bit) . Proces prahovanie Zahŕňa porovnanie každej hodnoty pixelu obrázka (intenzita pixelov) s zadanou prahovou hodnotou. To rozdeľuje všetky pixely vstupného obrázka do 2 skupín:
  1. Pixely, ktoré majú intenzitu nižšiu ako prahová hodnota.
  2. Pixely, ktoré majú hodnotu intenzity väčšiu ako prahová hodnota.
Tieto dve skupiny sú teraz uvedené rôzne hodnoty v závislosti od rôznych typov segmentácií. OpenCV podporuje 5 rôznych schém prahovania na grayscale (8-bitových) obrázkoch pomocou funkcie: Dvojitý prah (InputArray SRC OutputArray DST Double Thresh Double MaxVal INT typ) Parametre:
  • InputArray SRC: vstupný obrázok (MAT 8-bit alebo 32-bit)
  • OutputArray DST: Output Image (rovnaká veľkosť ako vstup)
  • Dvojitá prah: Nastavte prahovú hodnotu
  • Double MaxVal: MaxVal používaný v type 1 a 2
  • Typ int*: Určuje typ prahu, ktorý sa má použiť. (0-4)
  • *Nižšie je uvedený zoznam typov prahov. Vstupný obraz pôvod' title= Vstupný obrázok RGB sa pred vykonaním prahovania najskôr prevedie na obrázok šedej. OpenCV: Segmentácia pomocou prahovania' title= Typy prahov
      Binárny prah (typ int = 0) 0_130' title= Z týchto dvoch skupín získaných skôr skupina, ktorá mala členov s intenzitou pixelu väčšiu ako prahová hodnota, je priradenie max_value alebo v prípade šedej hodnoty 255 (biela). Členovia zostávajúcej skupiny majú intenzity pixelov nastavené na 0 (čierna). Ekv.' title= Ak je hodnota intenzity pixelov pri (x y) v zdrojovom obrázku vyššia ako prah, hodnota v konečnom obrázku je nastavená na maxVal. Invertovaný binárny prah (int type = 1) 1_130' title= Inv. Binárny prah je rovnaký ako binárny prah. Jediným zásadným rozdielom je inv.binary prahovanie skupiny, ktorá má intenzity pixelov väčšiu ako prahová hodnota, je priradený „0“, zatiaľ čo zostávajúce pixely, ktoré majú intenzity menšie ako prah, sú nastavené na MaxVal. ekv.' title= Ak je hodnota intenzity pixelov pri (x y) v zdrojovom obrázku vyššia ako prah, hodnota v konečnom obrázku je nastavená na 0, je nastavená na maxVal. Skrátenie prahovania (int type = 2) 2_150' title= Skupina, ktorá má intenzity pixelov väčšiu ako prahová hodnota, je skrátená na prahovú hodnotu alebo inými slovami, hodnoty pixelov sú nastavené na rovnaké ako sada prahová hodnota. Všetky ostatné hodnoty zostávajú rovnaké. ekv.' title= Ak je hodnota intenzity pixelov pri (x y) v zdrojovom obrázku vyššia ako prah, hodnota v konečnom obrázku je nastavená na prah, inak sa nezmení. Prah na nulu (typ int = 3) OpenCV: Segmentácia pomocou prahovania' title= Veľmi jednoduchá technika prahovania, v ktorej nastavíme intenzitu pixelov na „0“ pre všetky pixely skupiny, ktorá má hodnotu intenzity pixelov nižšiu ako prah. ekv.' title= Ak hodnota intenzity pixelov pri (x y) v zdrojovom obrázku je väčšia ako prahová hodnota pri (x y) v konečnom obrázku, sa nezmení. Všetky zostávajúce pixely sú nastavené na „0“. Prahová hodnota na nulové invertované (int type = 4) OpenCV: Segmentácia pomocou prahovania' title= Podobne ako v predchádzajúcej technike tu nastavíme intenzitu pixelov na „0“ pre všetky pixely skupiny, ktoré majú hodnotu intenzity pixelov väčšiu ako prah. ekv.' title= Ak je hodnota intenzity pixelov pri (x y) v zdrojovom obrázku vyššia ako prahová hodnota pri (x y) v konečnom obrázku je nastavená na „0“. Všetky zostávajúce hodnoty pixelov sa nezmenia.
    Ak chcete zostaviť programy OpenCV, musíte mať do svojho systému nainštalovanú knižnicu OpenCV. V nasledujúcich dňoch uverejním jednoduchý návod. Ak ste už nainštalovali OpenCV, spustite nižšie uvedený kód so vstupným obrázkom podľa vášho výberu. 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);  } }