logo

OpenCV: Сегментиране с помощта на праг

В тази статия се нарича основна техника за сегментиране на обекти Праг . Но преди да преминете в повече подробности по -долу е кратък преглед на OpenCV. OpenCV (Компютърно зрение с отворен код) е кръстосана платформа библиотека с отворен код на функции за програмиране, насочена към изпълнение на задачи за компютърно зрение в реално време в голямо разнообразие от полета като:
  • Разпознаване на лицето
  • Системи за разпознаване на ириса
  • Разпознаване на жестове
  • Взаимодействие между човека -компютър (HCI)
  • Мобилна роботика
  • Идентификация на обекта
  • Сегментиране и разпознаване
  • Стереопсис стерео зрение: възприятие на дълбочината от 2 камери
  • Увеличена реалност
Той също така включва стабилна статистическа библиотека за машинно обучение, която съдържа редица различни класификатори, използвани за поддържане на горните области. За да използвате OpenCV, просто импортирайте или включете необходимите библиотеки и започнете да използвате безброй налични функции. Праг е много популярна техника за сегментиране, използвана за отделяне на обект от неговия произход. В статията по -долу съм описал различни техники, използвани за праг Сиви скални изображения (8-битов) . Процесът на праг включва сравняване на всяка стойност на пиксела на изображението (интензивност на пиксела) с определен праг. Това разделя всички пиксели на входното изображение на 2 групи:
  1. Пиксели с стойност на интензивността по -ниска от прага.
  2. Пиксели с стойност на интензивността, по -голяма от прага.
Тези 2 групи вече се дават различни стойности в зависимост от различни типове сегментиране. OpenCV поддържа 5 различни схеми за праг на сиви скали (8-битови) изображения, използвайки функцията: Двоен праг (Inputray Src outputArray DST Double Thresh Double Maxval Int Type) Параметри:
  • InputRary SRC: Входно изображение (MAT 8-битово или 32-битово)
  • OutputArray dst: Изходно изображение (същия размер като входа)
  • Двоен праг: Задайте праговата стойност
  • Double Maxval: Maxval, използван във тип 1 и 2
  • int type*: Посочва вида на прага, който трябва да се използва. (0-4)
  • *По -долу е даден списък на видовете прагове. Входно изображение Оригинал' title= Входното RGB изображение първо се преобразува в изображение на сиви скали преди да се извърши праг. OpenCV: Сегментиране с помощта на праг' title= Видове прагове
      Двоичен праг (int type = 0) 0_130' title= От двете групи, получени по -рано, групата има членове с интензивност на пиксела, по -голяма от зададения праг, са присвояване max_value или в случай на сива скала стойност 255 (бяла). Членовете на останалата група имат своите интензивности на пикселите, зададени на 0 (черно). Eq1' title= Ако стойността на интензивността на пикселите при (x y) в изображението на източника е по -голяма от прага, стойността в крайното изображение е зададена на Maxval. Обърнат двоичен праг (int type = 1) 1_130' title= Inv. Бинарният праг е същият като бинарния праг. Единствената съществена разлика е в Inv.Binary Thresholding Групата с интензитет на пиксели, по -голяма от зададения праг, се присвоява „0“, докато останалите пиксели с интензивност по -малко от прага са зададени на Maxval. Eq2' title= Ако стойността на интензитета на пиксела при (x y) в изображението на източника е по -голяма от прага, стойността в крайното изображение е зададена на 0 иначе, тя е зададена на Maxval. Пресечен праг (INT Type = 2) 2_150' title= Групата с интензивност на пикселите, по -голяма от зададения праг, се отрязва към зададения праг или с други думи стойностите на пикселите са същите като зададения праг. Всички останали стойности остават еднакви. Eq3' title= Ако стойността на интензивността на пикселите при (x y) в изображението на източника е по -голяма от прага, стойността в крайното изображение е зададена на праг, той е непроменен. Праг до нула (int type = 3) OpenCV: Сегментиране с помощта на праг' title= Много проста техника на праг, при която ние зададем интензивността на пикселите на „0“ за всички пиксели на групата, която има стойност на интензитета на пиксела, по -малка от прага. Eq4' title= Ако стойността на интензитета на пиксела при (x y) в изображението на източника е по -голяма от прага, стойността при (x y) в крайното изображение не се променя. Всички останали пиксели са зададени на „0“. Праг до нула обърнат (int type = 4) OpenCV: Сегментиране с помощта на праг' title= Подобно на предишната техника тук, ние определяме интензивността на пикселите на „0“ за всички пиксели на групата, която има стойност на интензитета на пиксела, по -голяма от прага. Eq5' title= Ако стойността на интензитета на пиксела при (x y) в изображението на източника е по -голяма от прага, стойността при (x y) в крайното изображение е зададена на „0“. Цялата останала стойност на пикселите са непроменени.
    За да компилирате OpenCV програми, трябва да имате инсталирана OpenCV библиотека във вашата система. Ще публикувам прост урок за същото през следващите дни. Ако вече сте инсталирали OpenCV, изпълнете кода по -долу с входното изображение по ваш избор. 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);  } }