logo

„OpenCV“: segmentacija naudojant slenkstį

Šiame straipsnyje yra pagrindinė objektų segmentavimo technika, vadinama Slenkstis . Bet prieš pereinant į žemiau pateiktą detalę yra trumpa „OpenCV“ apžvalga. OPENCV (Atvirojo kodo kompiuterio matymas) yra kryžminės platformos atvirojo kodo programavimo funkcijų biblioteka, kuria siekiama atlikti realaus laiko kompiuterio matymo užduotis įvairiose srityse, tokiose kaip:
  • Veido atpažinimas
  • Rainelės atpažinimo sistemos
  • Gestų atpažinimas
  • Žmogaus ir kompiuterio sąveika (HCI)
  • Mobilioji robotika
  • Objekto identifikavimas
  • Segmentacija ir pripažinimas
  • Stereopsis Stereo regėjimas: gylio suvokimas iš 2 kamerų
  • Papildyta realybė
Tai taip pat apima tvirtą statistinės mašinų mokymosi biblioteką, kurioje yra daugybė skirtingų klasifikatorių, naudojamų aukščiau pateiktoms sritims palaikyti. Norėdami naudoti „OpenCv“, tiesiog importuokite arba įtraukite reikiamas bibliotekas ir pradėkite naudoti daugybę galimų funkcijų. Slenkstis yra labai populiari segmentavimo technika, naudojama objekto atskyrimui nuo jo fono. Žemiau esančiame straipsnyje aš aprašiau įvairius metodus, naudojamus slenksčiui pilkos spalvos vaizdai (8 bitų) . Procesas slenkstis Apima kiekvienos vaizdo taško vaizdo (pikselio intensyvumo) vertės palyginimą su nurodytu slenksčiu. Tai padalija visus įvesties vaizdo taškus į 2 grupes:
  1. Pikseliai, kurių intensyvumo vertė yra mažesnė už slenkstį.
  2. Pikseliai, kurių intensyvumo vertė yra didesnė už slenkstį.
Šioms 2 grupėms dabar suteikiamos skirtingos vertės, atsižvelgiant į įvairius segmentų tipus. „OpenCV“ palaiko 5 skirtingas slenksčio schemas „GreyScale“ (8 bitų) vaizduose, naudodamiesi funkcija: Dvigubas slenkstis („InputArray Src OutputArray“ DST Dvigubas slenkstis Dvigubas maxval int tipas) Parametrai:
  • „InputArray Src“: įvesties vaizdas (MAT 8 arba 32 bitų)
  • „OutputArray DST“: išvesties vaizdas (tokio pat dydžio kaip įvestis)
  • Dvigubas slenkstis: nustatykite slenksčio vertę
  • „Double MaxVal“: „MaxVal“ naudojamas 1 ir 2 tipuose
  • int tipas*: nurodo naudojimo slenksčio tipą. (0-4)
  • *Žemiau pateikiami slenksčių tipų sąrašas. Įvesties vaizdas orig' title= Įvesties RGB vaizdas pirmiausia paverčiamas pilkos spalvos vaizdu, prieš pradedant slenkstį. „OpenCV“: segmentacija naudojant slenkstį' title= Slenksčio tipai
      Dvejetainė slenkstis (int type = 0) 0_130' title= Iš dviejų grupių, gautų anksčiau, grupė, kurių nariai, kurių taškų intensyvumas yra didesnis nei nustatyta, yra priskyrimas Max_Value arba pilkos spalvos, kai vertė yra 255 (balta). Likusios grupės nariai savo pikselių intensyvumus nustato kaip 0 (juoda). Eq1' title= Jei pikselio intensyvumo vertė, esanti (x y) šaltinio vaizde, yra didesnė už slenkstį, galutinio vaizdo vertė nustatyta kaip „MaxVal“. Apverstas dvejetainis slenkstis (int tipas = 1) 1_130' title= Inv. Dvejetainė slenkstis yra tas pats, kas dvejetainė slenkstis. Vienintelis esminis skirtumas yra „Inv.binary“ slenksčio nustatymas grupei, turintiems didesnį taškų intensyvumą, nei nustatytas slenkstis, priskiriamas „0“, tuo tarpu likę taškai, kurių intensyvumas mažesnis nei slenkstis, yra nustatyta kaip „MaxVal“. Eq2' title= Jei pikselio intensyvumo vertė, esanti (x y) šaltinio vaizde, yra didesnė už slenkstį, galutinio vaizdo vertė nustatyta kaip 0, ji nustatyta kaip „MaxVal“. TRUNCATE slenkstis (int type = 2) 2_150' title= Grupė, kurios taškų intensyvumas yra didesnis už nustatytą slenkstį, yra sutrumpinta pagal nustatytą slenkstį, arba, kitaip tariant, taškų vertės yra tokios pačios kaip ir nustatyto slenksčio. Visos kitos vertės išlieka tos pačios. Eq3' title= Jei pikselio intensyvumo vertė, esanti (x y) šaltinio vaizde, yra didesnė už slenkstį, galutinio vaizdo vertė yra nustatyta kaip slenkstis, ji nesikeičia. Slenkstis iki nulio (int tipas = 3) „OpenCV“: segmentacija naudojant slenkstį' title= Labai paprasta slenksčio technika, kai mes nustatėme taškų intensyvumą iki „0“ visiems grupės taškams, kurių taškų intensyvumo vertė yra mažesnė už slenkstį. Eq4' title= Jei pikselio intensyvumo vertė, esanti (x y) šaltinio vaizde, yra didesnė už slenkstį, vertė, esanti (x y) galutiniame paveikslėlyje, nesikeičia. Visi likę taškai yra „0“. Slenkstis iki nulio apverstos (int tipas = 4) „OpenCV“: segmentacija naudojant slenkstį' title= Panašiai kaip ir ankstesnėje technikoje, mes nustatėme taškų intensyvumą iki „0“ visiems grupės taškams, kurių taškų intensyvumo vertė yra didesnė už slenkstį. Eq5' title= Jei pikselio intensyvumo vertė, esanti (x y) šaltinio vaizde, yra didesnė už slenkstį, vertė, esanti (x y) galutiniame paveikslėlyje, nustatyta kaip „0“. Visa likusi pikselio vertė nesikeičia.
    Norėdami sudaryti „OpenCv“ programas, turite įdiegti „OpenCv“ biblioteką savo sistemoje. Ateinančiomis dienomis paskelbsiu paprastą mokymo programą. Jei jau įdiegėte „OpenCv“, paleiskite žemiau pateiktą kodą su pasirinktu įvesties atvaizdu. 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);  } }