logo

OpenCV: Szegmentálás küszöbértékkel

Ebben a cikkben az objektumok szegmentálásának alapvető technikája Küszöbérték - De mielőtt már az alábbiakban átmegyünk a részletekbe, az OpenCV rövid áttekintése. OpenCV (Nyílt forráskódú számítógépes látás) egy platformok közötti nyílt forráskódú könyvtár, amely a valós idejű számítógépes látási feladatok elvégzésére irányul sokféle területen, például:
  • Arcfelismerés
  • Írisz -felismerő rendszerek
  • Gesztusfelismerés
  • Emberi -számítógépes interakció (HCI)
  • Mobil robotika
  • Tárgyi azonosítás
  • Szegmentálás és felismerés
  • Sztereopsis sztereo látás: mélységérzékelés 2 kamerából
  • Kibővített valóság
Ez magában foglal egy robusztus statisztikai gépi tanulási könyvtárat is, amely számos különféle osztályozót tartalmaz, amelyeket a fenti területek támogatására használnak. Az OpenCV használatához egyszerűen importálja vagy beilleszti a szükséges könyvtárakat, és kezdje el használni a rendelkezésre álló funkciók számát. Küszöbérték egy nagyon népszerű szegmentációs technika, amelyet egy objektum hátterétől való elválasztására használnak. Az alábbi cikkben leírtam a küszöbértékhez használt különféle technikákat Szürkeárnyalatos képek (8-bites) - A küszöbérték magában foglalja a kép (pixel intenzitás) minden pixel értékének összehasonlítását egy meghatározott küszöböt. Ez a bemeneti kép összes pixelét 2 csoportra osztja:
  1. A küszöbértéknél alacsonyabb intenzitásértékű képpontok.
  2. A küszöbértéknél nagyobb intenzitásértékű képpontok.
Ez a 2 csoport most különféle értékeket kap, a különböző szegmentációs típusoktól függően. Az OpenCV 5 különböző küszöbértéket támogat a szürkeárnyalatos (8-bites) képen a függvény használatával: Double küszöb (InputArray SRC OutputArray DST dupla Thresh Double Maxval int típus) Paraméterek:
  • InputArray SRC: Bemeneti kép (8-bites vagy 32 bites)
  • OutputArray DST: Kimeneti kép (ugyanolyan méretű, mint a bemenet)
  • Double küszöb: Állítsa be a küszöbértéket
  • Double MaxVal: Az 1. és 2. típusban használt Maxval
  • int type*: Megadja a használni kívánt küszöb típusát. (0-4)
  • *A küszöbértékek listája alatt található. Bemeneti kép orig' title= A bemeneti RGB -képet először szürkeárnyalatos képré alakítják, mielőtt a küszöbértéket megtennék. OpenCV: Szegmentálás küszöbértékkel' title= Küszöbértékek
      Bináris küszöb (int type = 0) 0_130' title= A korábban kapott két csoport közül a pixel intenzitású tagoknál nagyobb csoportból áll, mint a beállított küszöbérték, a MAX_VALUE hozzárendelés, vagy egy szürkeárnyalat esetén 255 (fehér) érték. A fennmaradó csoport tagjai pixel intenzitása 0 (fekete). EQ1' title= Ha a pixel -intenzitás értéke (x y) értékben a forrásképnél nagyobb, mint a küszöbérték, akkor a végső képen szereplő értéket a Maxval értékre állítják. Fordított bináris küszöb (int type = 1) 1_130' title= Inv. A bináris küszöb megegyezik a bináris küszöbértékkel. Az egyetlen alapvető különbség az inv.bináris küszöbértékben, amelyben a pixel intenzitása nagyobb, mint a beállított küszöbérték, a „0” -t hozzárendeljük, míg a fennmaradó pixeleket a küszöbértéknél kevesebb intenzitással kell beállítani. EQ2' title= Ha a pixel -intenzitás értéke (x y) értékben a forrásképnél nagyobb, mint a küszöbérték, akkor a végső képen szereplő érték 0 -ra van állítva, akkor a Maxval értékre van állítva. Csonka küszöbérték (int type = 2) 2_150' title= Az a csoport, amelynek pixel intenzitása nagyobb, mint a beállított küszöbérték, a beállított küszöbre csonka, vagyis a pixelértékek megegyeznek a beállított küszöbértékkel. Az összes többi érték változatlan marad. EQ3' title= Ha a pixel intenzitási értéke (x y) értékben a forrásképnél nagyobb, mint a küszöbérték, akkor a végső képen szereplő érték küszöbértékre van beállítva, akkor változatlan. Küszöb nullára (int type = 3) OpenCV: Szegmentálás küszöbértékkel' title= Egy nagyon egyszerű küszöbértékelési technika, amelyben a pixel intenzitást „0” -ra állítjuk a csoport minden pixeljére, amelynek pixel intenzitási értéke kevesebb, mint a küszöb. EQ4' title= Ha a pixel -intenzitás értéke (x y) a forrásképnél nagyobb, mint a küszöbérték, akkor a végső kép (x y) értékének értéke nem változik. Az összes fennmaradó pixel „0” -ra van állítva. Küszöbérték nulla fordított (int type = 4) OpenCV: Szegmentálás küszöbértékkel' title= Az előző technikához hasonlóan a pixelintenzitást „0” -ra állítjuk a pixel intenzitás értékével rendelkező csoport összes pixeljére, mint a küszöbértéknél. EQ5' title= Ha a pixel -intenzitás értéke (x y) értékben a forrásképnél nagyobb, mint a küszöbérték, akkor a végső kép (x y) értékének értéke „0” -ra van állítva. Az összes fennmaradó pixel érték változatlan.
    Az OpenCV programok összeállításához az OpenCV könyvtár telepítéséhez van szükség a rendszerre. Az elkövetkező napokban egy egyszerű oktatóanyagot fogok küldeni. Ha már telepítette az OpenCV -t, futtassa az alábbi kódot az Ön által választott bemeneti képpel. 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);  } }