logo

OpenCV: Segmentointi kynnysarvolla

Tässä artikkelissa objektin segmentoinnin perustekniikka Kynnysarvo . Mutta ennen kuin siirrytään enää yksityiskohtiin alla, on lyhyt katsaus OpenCV: stä. Opencv (Avoimen lähdekoodin tietokoneen visio) on avoimen lähdekoodin ohjelmointitoimintojen avoimen lähdekoodin kirjasto, jonka tavoitteena on suorittaa reaaliaikaiset tietokoneen visiotehtävät monilla erilaisilla kenttillä, kuten:
  • Kasvojentunnistus
  • Iiriksen tunnistusjärjestelmät
  • Eleiden tunnistus
  • Ihmisen ja komputterin vuorovaikutus (HCI)
  • Mobiili robotiikka
  • Objektin tunnistaminen
  • Segmentointi ja tunnistus
  • Stereopsis -stereovisio: Syvyyskäsitys 2 kamerasta
  • Lisätty todellisuus
Se sisältää myös vankan tilastollisen koneoppimiskirjaston, joka sisältää useita erilaisia ​​luokittelijoita, joita käytetään yllä olevien alueiden tukemiseen. OpenCV: n käyttäminen vain tuota tai sisällyttää vaadittavat kirjastot ja aloita lukemattomien käytettävissä olevien toimintojen käyttö. Kynnysarvo on erittäin suosittu segmentointitekniikka, jota käytetään esineen erottamiseen sen taustasta. Alla olevassa artikkelissa olen kuvaillut erilaisia ​​kynnysarvoon käytettyjä tekniikoita Harmaasävykuvat (8-bittinen) . Prosessi kynnysarvo Sisältää kuvan jokaisen pikseliarvon (pikselin voimakkuuden) vertaaminen määriteltyyn kynnysarvoon. Tämä jakaa kaikki syöttökuvan pikselit kahteen ryhmään:
  1. Pikselit, joiden intensiteettiarvo on alhaisempi kuin kynnysarvo.
  2. Pikselit, joiden intensiteettiarvo on suurempi kuin kynnysarvo.
Näille kahdelle ryhmälle annetaan nyt erilaisia ​​arvoja erilaisista segmentointityypeistä riippuen. OpenCV tukee 5 erilaista kynnysjärjestelmää harmaasävyisissä (8-bittisissä) kuvissa toiminnolla: Kaksinkertainen kynnys (InputArray SRC OutputraRy DST Double Traesh Double Maxval INT -tyyppi) Parametrit:
  • InputArray SRC: Syöttökuva (matto 8-bittinen tai 32-bittinen)
  • Outputray DST: Lähtökuva (sama koko kuin tulo)
  • Kaksinkertainen kynnys: Aseta kynnysarvo
  • kaksinkertainen maxVal: tyypissä 1 ja 2 käytetty maxVal
  • INT -tyyppi*: Määrittää käytettävän kynnyksen tyypin. (0-4)
  • *Alla on luettelo kynnystyypeistä. Syöttökuva alkuperä' title= Tulo -RGB -kuva muunnetaan ensin harmaasävykuvaksi ennen kuin kynnys on tehty. OpenCV: Segmentointi kynnysarvolla' title= Kynnystyypit
      Binaarikynnys (int tyyppi = 0) 0_130' title= Kahdesta aikaisemmin saatuista ryhmistä ryhmä, jolla on pikselin voimakkuus, suurempi kuin asetettu kynnysarvo, ovat määritys Max_value tai jos harmaasävy A -arvo on 255 (valkoinen). Jäljellä olevan ryhmän jäsenillä on pikselin intensiteetit arvoon 0 (musta). EQ1' title= Jos lähdekuvan pikselin voimakkuusarvo (x y) on suurempi kuin kynnysarvo, lopullisen kuvan arvo on asetettu maxValiksi. Käänteinen binaarikynnys (int tyyppi = 1) 1_130' title= Inv. Binaarikynnys on sama kuin binaarikynnys. Ainoa olennainen ero on inv.binary -kynnysryhmässä ryhmä, jonka pikselin intensiteetit ovat suurempia kuin asetettu kynnysarvo, määritetään '0', kun taas jäljellä olevat pikselit, joiden intensiteetit ovat vähemmän kuin kynnysarvo, asetetaan Maxvaliksi. EQ2' title= Jos lähdekuvan pikselin voimakkuusarvo (x y) on suurempi kuin kynnysarvo, lopullisen kuvan arvo on asetettu 0: een, se on asetettu maxValiksi. Tosin kynnys (int tyyppi = 2) 2_150' title= Ryhmän, jonka pikselin voimakkuus on suurempi kuin asetettu kynnysarvo, katkaisee asetettuun kynnysarvoon tai toisin sanoen pikseliarvot on asetettu samoiksi kuin asetettu kynnysarvo. Kaikki muut arvot pysyvät samoina. EQ3' title= Jos lähdekuvan pikselin voimakkuusarvo (x y) on suurempi kuin kynnysarvo, lopullisen kuvan arvo on asetettu kynnykseen muuten, se on muuttumaton. Kynnys nollaan (int tyyppi = 3) OpenCV: Segmentointi kynnysarvolla' title= Hyvin yksinkertainen kynnystekniikka, jossa asetamme pikselin voimakkuuden '0' kaikille ryhmän pikseleille, joiden pikselin voimakkuusarvo on vähemmän kuin kynnysarvo. EQ4' title= Jos lähdekuvan pikselin voimakkuusarvo (x y) on suurempi kuin kynnysarvo, arvo (x y) lopullisessa kuvassa ei muutu. Kaikki jäljellä olevat pikselit asetetaan arvoon 0. Kynnysarvo nollaan käänteinen (int tyyppi = 4) OpenCV: Segmentointi kynnysarvolla' title= Samoin kuin edellisessä tekniikassa, asetamme pikselin voimakkuuden arvoon '0' kaikille ryhmän pikseleille, joiden pikselin voimakkuusarvo on suurempi kuin kynnysarvo. EQ5' title= Jos lähdekuvan pikselin voimakkuusarvo (x y) on suurempi kuin kynnysarvo, arvo (x y) lopullisessa kuvassa on asetettu arvoon '0'. Kaikki jäljellä oleva pikseliarvo on muuttumaton.
    OpenCV -ohjelmien kokoamiseksi sinun on asennettava OpenCV -kirjasto järjestelmään. Aion lähettää yksinkertaisen opetusohjelman samoille tulevina päivinä. Jos olet jo asentanut OpenCV: n, suorita alla oleva koodi valitsemasi syöttökuvan avulla. 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);  } }