logo

OPENCV: сегментація за допомогою порогу

У цій статті основна методика сегментації об'єктів Поріг . Але перед тим, як переходити більше деталей нижче, є короткий огляд OPENCV. OPENCV (Комп'ютерне Vision з відкритим кодом)-це бібліотека з відкритим кодом функцій програмування, спрямована на виконання завдань комп'ютерного зору в режимі реального часу в широких спектрах, таких як:
  • Розпізнавання обличчя
  • Системи розпізнавання райдужної оболонки
  • Розпізнавання жестів
  • Взаємодія людини -комп'ютера (HCI)
  • Мобільна робототехніка
  • Ідентифікація об'єкта
  • Сегментація та розпізнавання
  • Стереопсис Стереогір: Сприйняття глибини від 2 камер
  • Розширена реальність
Він також включає надійну бібліотеку статистичного машинного навчання, яка містить ряд різних класифікаторів, що використовуються для підтримки вищезазначених областей. Використання OPENCV просто імпортуйте або включіть необхідні бібліотеки та почніть використовувати безліч доступних функцій. Поріг є дуже популярною технікою сегментації, що використовується для відокремлення об'єкта від його фону. У статті нижче я описав різні методики, що використовуються для порогу Зображення сірого (8-бітне) . Процес поріг передбачає порівняння кожного піксельного значення зображення (інтенсивність пікселів) із заданим порогом. Це розділяє всі пікселі вхідного зображення на 2 групи:
  1. Пікселі, що мають значення інтенсивності, нижчі за порогу.
  2. Пікселі, що мають значення інтенсивності, більше порогу.
Ці 2 групи тепер надаються різними значеннями залежно від різних типів сегментації. OPENCV підтримує 5 різних поріг схем на сірі (8-бітні) зображення за допомогою функції: Подвійний поріг (InputArray SRC OutputArray DST Double Thry Double MaxVal int Type) Параметри:
  • InputArray SRC: Вхідне зображення (MAT 8-бітна або 32-бітна)
  • OutputArray DST: Вихідне зображення (такий же розмір, як і вхід)
  • Подвійна полиця: встановити порогове значення
  • Double Maxval: Maxval, що використовується у типу 1 та 2
  • Тип int*: Вказує тип порогу, який слід використовувати. (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= Інв. Бінарний поріг такий же, як і двійковий поріг. Єдина суттєва різниця полягає в тому, що в інв. Рівень, що має групу, що має інтенсивність пікселів, більший за встановлений поріг, призначається "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);  } }