logo

OpenCV: segmentēšana, izmantojot slieksni

Šajā rakstā ir pamata tehnika objekta segmentēšanai, ko sauc par Sliekšņa Apvidū Bet pirms pārcelšanās uz zemāk esošo detaļu ir īss OpenCV pārskats. OpenCV (Atvērtā koda datora redze) ir savstarpēja platformas atvērtā koda programmēšanas funkciju bibliotēka, kuras mērķis ir veikt reāllaika datora redzes uzdevumus visdažādākajos laukos, piemēram:
  • Sejas atzīšana
  • Iris atpazīšanas sistēmas
  • Žestu atpazīšana
  • Cilvēka un datora mijiedarbība (HCI)
  • Mobilā robotika
  • Objekta identifikācija
  • Segmentēšana un atpazīšana
  • Stereopsis stereo redze: dziļuma uztvere no 2 kamerām
  • Paplašinātā realitāte
Tas ietver arī spēcīgu statistikas mašīnmācīšanās bibliotēku, kas satur vairākus dažādus klasifikatorus, ko izmanto iepriekšminēto apgabalu atbalstam. Lai izmantotu OpenCV, vienkārši importējiet vai iekļaujiet nepieciešamās bibliotēkas un sāciet izmantot neskaitāmas pieejamās funkcijas. Sliekšņa ir ļoti populāra segmentēšanas paņēmiens, ko izmanto objekta atdalīšanai no tā fona. Zemāk esošajā rakstā es aprakstīju dažādas metodes, kas izmantotas, lai slieksni pelēktoņu attēli (8 bitu) Apvidū Process sliekšņa ietver katras attēla (pikseļa intensitātes) pikseļa vērtības salīdzināšanu ar noteiktu slieksni. Tas visus ievades attēla pikseļus sadala 2 grupās:
  1. Pikseļi ar intensitātes vērtību zemāku par slieksni.
  2. Pikseļi, kuru intensitātes vērtība ir lielāka par slieksni.
Šīm 2 grupām tagad tiek dotas atšķirīgas vērtības atkarībā no dažādiem segmentēšanas veidiem. OpenCV atbalsta 5 dažādas sliekšņa shēmas pelēktoņu (8 bitu) attēlos, izmantojot funkciju: Divkāršs slieksnis (InputArray Src OutputArray DST Double Thresh Double MaxVal int tips) Parametri:
  • INPUTARRAY SRC: Ievades attēls (Mat 8 bitu vai 32 bitu)
  • OutputArray DST: izvades attēls (tāda paša izmēra kā ievade)
  • Divkāršs slieksnis: iestatītā sliekšņa vērtība
  • dubultā maxval: maxval, ko izmanto 1. un 2. tipā
  • int tips*: norāda izmantotā sliekšņa veidu. (0-4)
  • *Zemāk ir norādīts sliekšņa veidu saraksts. Ievades attēls izcelsme' title= Ievades RGB attēls vispirms tiek pārveidots par pelēktoņu attēlu, pirms tiek veikta sliekšņa noteikšana. OpenCV: segmentēšana, izmantojot slieksni' title= Sliekšņa veidi
      Binārs slieksnis (int tips = 0) 0_130' title= No abām iepriekš iegūtajām grupām grupa, kurai ir dalībnieki, kuru pikseļa intensitāte ir lielāka par iestatīto slieksni, ir piešķiršanas max_Value vai pelēktoņu vērtība 255 (balta) gadījumā. Atlikušās grupas locekļiem pikseļu intensitāte ir iestatīta uz 0 (melna). Ekvivalents' title= Ja pikseļa intensitātes vērtība pie (x y) avota attēlā ir lielāka par slieksni, galīgā attēla vērtība ir iestatīta uz maxval. Apgriezts binārais slieksnis (int tips = 1) 1_130' title= Inv. Binārais slieksnis ir tāds pats kā binārais slieksnis. Vienīgā būtiskā atšķirība ir Inv.Binārā slieksnis. Grupai, kuras pikseļu intensitāte ir lielāka nekā iestatītais slieksnis, tiek piešķirta “0”, turpretī atlikušajiem pikseļiem, kuru intensitāte ir mazāka par slieksni, ir iestatīta uz maxval. EQ2' title= Ja pikseļa intensitātes vērtība pie (x y) avota attēlā ir lielāka par slieksni, galīgā attēla vērtība ir iestatīta uz 0, tā ir iestatīta uz maxval. Saīsināt slieksni (int tips = 2) 2_150' title= Grupa, kuras pikseļu intensitāte ir lielāka par iestatīto slieksni, tiek saīsināta ar iestatīto slieksni vai, citiem vārdiem sakot, pikseļu vērtības ir iestatītas kā tādas pašas kā iestatītais slieksnis. Visas pārējās vērtības paliek vienādas. EQ3' title= Ja pikseļa intensitātes vērtība pie (x y) avota attēlā ir lielāka par slieksni, galīgā attēla vērtība ir iestatīta uz citu slieksni, kas nav mainīta. Slieksnis līdz nullei (int tips = 3) OpenCV: segmentēšana, izmantojot slieksni' title= Ļoti vienkārša sliekšņa metode, kurā mēs iestatām pikseļa intensitāti uz “0” visiem grupas pikseļiem, kuriem ir pikseļa intensitātes vērtība, kas ir mazāka par slieksni. EQ4' title= Ja pikseļa intensitātes vērtība pie (x y) avota attēlā ir lielāka par slieksni, vērtība pie (x y) gala attēlā nemainās. Visi atlikušie pikseļi ir iestatīti uz “0”. Slieksnis līdz nullei apgriezts (int tips = 4) OpenCV: segmentēšana, izmantojot slieksni' title= Līdzīgi kā iepriekšējā tehnika šeit, mēs iestatām pikseļa intensitāti uz “0” visiem grupas pikseļiem, kuru pikseļa intensitātes vērtība ir lielāka par slieksni. EQ5' title= Ja pikseļa intensitātes vērtība pie (x y) avota attēlā ir lielāka par slieksni, vērtība pie (x y) gala attēlā ir iestatīta uz “0”. Visa atlikušā pikseļu vērtība nav mainīta.
    Lai apkopotu OpenCV programmas, jums ir jāinstalē OpenCV bibliotēka jūsu sistēmā. Nākamajās dienās es ievietošu vienkāršu apmācību par to pašu. Ja jau esat instalējis OpenCV, palaidiet zemāk esošo kodu ar izvēlēto ievades attēlu. 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);  } }