logo

OpenCV: Segmentacja za pomocą progu

W artykule omówiono podstawową technikę segmentacji obiektów tzw Próg . Zanim jednak przejdziemy do dalszych szczegółów, poniżej znajduje się krótki przegląd OpenCV. Otwórz CV (Open Source Computer Vision) to wieloplatformowa biblioteka funkcji programistycznych o otwartym kodzie źródłowym, przeznaczona do wykonywania zadań związanych z wizją komputerową w czasie rzeczywistym w wielu różnych dziedzinach, takich jak:
  • Rozpoznawanie twarzy
  • Systemy rozpoznawania tęczówki
  • Rozpoznawanie gestów
  • Interakcja człowiek-komputer (HCI)
  • Robotyka mobilna
  • Identyfikacja obiektu
  • Segmentacja i rozpoznawanie
  • Widzenie stereopsyjne stereo: percepcja głębi z 2 kamer
  • Rozszerzona rzeczywistość
Zawiera również solidną statystyczną bibliotekę uczenia maszynowego, która zawiera wiele różnych klasyfikatorów używanych do obsługi powyższych obszarów. Aby korzystać z OpenCV, po prostu zaimportuj lub dołącz wymagane biblioteki i zacznij korzystać z niezliczonej liczby dostępnych funkcji. Próg to bardzo popularna technika segmentacji, służąca do oddzielenia obiektu od tła. W poniższym artykule opisałem różne techniki stosowane do progowania obrazy w skali szarości (8-bitowe) . Proces progowanie polega na porównaniu wartości każdego piksela obrazu (intensywności piksela) z określonym progiem. Spowoduje to podzielenie wszystkich pikseli obrazu wejściowego na 2 grupy:
  1. Piksele o wartości intensywności mniejszej niż próg.
  2. Piksele o wartości intensywności większej niż próg.
Te 2 grupy otrzymują teraz różne wartości w zależności od różnych typów segmentacji. OpenCV obsługuje 5 różnych schematów progowania na obrazach w skali szarości (8-bitowych) za pomocą funkcji: Podwójny próg (InputArray src OutputArray dst double thresh double maxval typ int) Parametry:
  • InputArray src: Obraz wejściowy (Mata 8-bitowa lub 32-bitowa)
  • OutputArray dst: Obraz wyjściowy (taki sam rozmiar jak wejściowy)
  • double thresh: Ustaw wartość progową
  • double maxval: maxVal używane w typach 1 i 2
  • int type*: Określa typ progu, który ma zostać użyty. (0-4)
  • *Poniżej podano listę typów progów. Obraz wejściowy oryg' title= Wejściowy obraz RGB jest najpierw konwertowany na obraz w skali szarości przed wykonaniem progowania. OpenCV: Segmentacja za pomocą progu' title= Rodzaje progów
      Próg binarny (typ int = 0) 0_130' title= Z dwóch uzyskanych wcześniej grup, grupie składającej się z członków o intensywności pikseli większej niż ustawiony próg przypisano Max_Value lub w przypadku skali szarości wartość 255 (biały). Członkowie pozostałej grupy mają intensywność pikseli ustawioną na 0 (czarny). EQ1' title= Jeśli wartość intensywności pikseli w (x y) obrazu źródłowego jest większa niż próg, wartość w obrazie końcowym jest ustawiana na wartość maxVal. Odwrócony próg binarny (typ int = 1) 1_130' title= nr inw. Próg binarny jest taki sam jak próg binarny. Jedyną istotną różnicą jest to, że w przypadku progowania Inv.Binary grupa o intensywności pikseli większej niż ustawiony próg otrzymuje wartość „0”, podczas gdy pozostałe piksele o intensywności mniejszej niż próg są ustawiane na wartość maxVal. równanie2' title= Jeśli wartość intensywności pikseli w (x y) obrazu źródłowego jest większa niż próg, wartość w obrazie końcowym jest ustawiana na 0, w przeciwnym razie jest ustawiana na wartość maxVal. Obetnij próg (int type=2) 2_150' title= Grupa posiadająca intensywność pikseli większą niż ustawiony próg jest obcinana do ustawionego progu lub innymi słowy wartości pikseli są ustawiane na takie same jak ustawiony próg. Wszystkie pozostałe wartości pozostają takie same. równanie 3' title= Jeśli wartość intensywności pikseli w (x y) obrazu źródłowego jest większa niż próg, wartość na obrazie końcowym jest ustawiana na wartość progową, w przeciwnym razie pozostaje niezmieniona. Próg do zera (typ int = 3) OpenCV: Segmentacja za pomocą progu' title= Bardzo prosta technika progowania, w której ustawiamy intensywność pikseli na „0” dla wszystkich pikseli w grupie, których wartość intensywności pikseli jest mniejsza niż próg. równanie 4' title= Jeśli wartość intensywności pikseli w (x y) obrazu źródłowego jest większa niż próg, wartość w (x y) obrazu końcowego nie zmienia się. Wszystkie pozostałe piksele są ustawione na „0”. Odwrócony próg do zera (typ int = 4) OpenCV: Segmentacja za pomocą progu' title= Podobnie jak w poprzedniej technice, tutaj ustawiamy intensywność pikseli na „0” dla wszystkich pikseli w grupie, których wartość intensywności pikseli jest większa niż próg. równanie 5' title= Jeśli wartość intensywności pikseli w (x y) obrazu źródłowego jest większa niż próg, wartość w (x y) obrazu końcowego jest ustawiana na „0”. Wszystkie pozostałe wartości pikseli pozostają niezmienione.
    Aby skompilować programy OpenCV, musisz mieć zainstalowaną bibliotekę OpenCV w swoim systemie. W nadchodzących dniach opublikuję prosty samouczek na ten temat. Jeśli zainstalowałeś już OpenCV, uruchom poniższy kod z wybranym obrazem wejściowym. 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);  } }