logo

OpenCV: Segmentace pomocí prahování

V tomto článku se nazvala základní technika pro segmentaci objektů Prahování . Než se přesunete do dalšího detailu níže, je stručný přehled OpenCV. OpenCV (Open Source Computer Vision) je křížová platforma open-source knihovna programovacích funkcí zaměřených na provádění úkolů počítačového vidění v reálném čase v celé řadě polí, jako jsou:
  • Rozpoznávání obličeje
  • Systémy rozpoznávání duhovky
  • Uznání gesta
  • Interakce člověka a počítače (HCI)
  • Mobilní robotika
  • Identifikace objektu
  • Segmentace a rozpoznávání
  • Stereopsis Stereo Vision: vnímání hloubky ze 2 kamer
  • Rozšířená realita
Zahrnuje také robustní knihovnu statistického strojového učení, která obsahuje řadu různých klasifikátorů používaných k podpoře výše uvedených oblastí. Chcete -li používat OpenCV, jednoduše importujte nebo zahrnují požadované knihovny a začněte používat nesčetné množství dostupných funkcí. Prahování je velmi populární segmentační technika používaná pro oddělení objektu od jeho pozadí. V níže uvedeném článku jsem popsal různé techniky používané k prahu Images ve stupních šedi (8-bit) . Proces prahování zahrnuje porovnání každé hodnoty pixelu obrazu (intenzita pixelu) s určeným prahem. To rozděluje všechny pixely vstupního obrazu do 2 skupin:
  1. Pixely s hodnotou intenzity nižší než prahová hodnota.
  2. Pixely mají hodnotu intenzity větší než prahová hodnota.
Tyto 2 skupiny jsou nyní dány různé hodnoty v závislosti na různých typech segmentace. OpenCV podporuje 5 různých schémat prahování na šedi ve stupních (8-bitů) obrázků pomocí funkce: Dvojitý prahová hodnota (InputArray SRC outputArray DST Double Thresh Double Maxval Int typ) Parametry:
  • InputArray SRC: vstupní obrázek (Mat 8-bit nebo 32-bit)
  • OutputArray DST: Výstupní obrázek (stejná velikost jako vstup)
  • Double Thresh: Nastavit prahovou hodnotu
  • Double Maxval: Maxval použitý v typu 1 a 2
  • int typ*: Určuje typ prahu, který se má použít. (0-4)
  • *Pod seznamem typů prahování je uveden. Vstupní obrázek původ' title= Vstupní obrázek RGB je nejprve převeden na obrázek ve stupni šedi před provedením prahování. OpenCV: Segmentace pomocí prahování' title= Typy prahování
      Binární práh (int typ = 0) 0_130' title= Z obou získaných skupin dříve skupina, která má členy s intenzitou pixelů větší než stanovená prahová hodnota, jsou přiřazení max_value nebo v případě stupně šedi A hodnoty 255 (bílá). Členové zbývající skupiny mají intenzity pixelů nastaveny na 0 (černá). Eq1' title= Pokud je hodnota intenzity pixelu při (x y) ve zdrojovém obrázku větší než prahová hodnota, hodnota v konečném obrázku je nastavena na Maxval. Invertovaný binární práh (int typ = 1) 1_130' title= Inv. Binární prahová hodnota je stejná jako binární práh. Jediným základním rozdílem je inv.Binery Lhreshold, který skupina s intenzitami pixelů větší než prahová hodnota nastavení, je přiřazen „0“, zatímco zbývající pixely, které mají intenzity menší než prahová hodnota, jsou nastaveny na maxval. Eq2' title= Pokud je hodnota intenzity pixelu při (x y) ve zdrojovém obrázku větší než prahová hodnota, hodnota v konečném obrázku je nastavena na 0 jinak, je nastavena na Maxval. Zkrácení prahu (int typ = 2) 2_150' title= Skupina mající intenzity pixelů větší než prahová hodnota nastavení je zkrácena na prahovou hodnotu nastaveného nebo jinými slovy, hodnoty pixelů jsou nastaveny stejně jako prahová hodnota nastavení. Všechny ostatní hodnoty zůstávají stejné. Eq3' title= Pokud je hodnota intenzity pixelu při (x y) ve zdrojovém obrázku větší než prahová hodnota, hodnota v konečném obrázku je nastavena na prahovou hodnotu, jinak se nezmění. Prahová hodnota na nulu (int typ = 3) OpenCV: Segmentace pomocí prahování' title= Velmi jednoduchá technika prahování, kde jsme nastavili intenzitu pixelů na „0“ pro všechny pixely skupiny, která má hodnotu intenzity pixelů menší než prahová hodnota. Eq4' title= Pokud je hodnota intenzity pixelu při (x y) ve zdrojovém obrázku větší než prahová hodnota, hodnota při (x y) v konečném obrázku se nezmění. Všechny zbývající pixely jsou nastaveny na „0“. Prahová hodnota na nulu invertované (int typ = 4) OpenCV: Segmentace pomocí prahování' title= Podobně jako u předchozí techniky zde nastavíme intenzitu pixelů na „0“ pro všechny pixely skupiny, která má hodnotu intenzity pixelů vyšší než prahová hodnota. eq5' title= Pokud je hodnota intenzity pixelu při (x y) ve zdrojovém obrázku větší než prahová hodnota, hodnota při (x y) v konečném obrázku je nastavena na „0“. Veškerá zbývající hodnota pixelu se nezměnila.
    Chcete -li sestavit programy OpenCV, musíte mít nainstalovanou knihovnu OpenCV do vašeho systému. V nadcházejících dnech budu zveřejňovat jednoduchý návod. Pokud jste již nainstalovali OpenCV, spusťte níže uvedený kód se vstupním obrázkem podle vašeho výběru. 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);  } }