logo

OpenCV: Segmentierung mithilfe von Thresholding

In diesem Artikel wird eine grundlegende Technik zur Objektsegmentierung genannt Schwellenwert . Bevor wir jedoch weiter ins Detail gehen, finden Sie im Folgenden einen kurzen Überblick über OpenCV. OpenCV (Open Source Computer Vision) ist eine plattformübergreifende Open-Source-Bibliothek mit Programmierfunktionen, die darauf abzielt, Echtzeit-Computer-Vision-Aufgaben in einer Vielzahl von Bereichen auszuführen, wie zum Beispiel:
  • Gesichtserkennung
  • Iris-Erkennungssysteme
  • Gestenerkennung
  • Mensch-Computer-Interaktion (HCI)
  • Mobile Robotik
  • Objektidentifikation
  • Segmentierung und Erkennung
  • Stereopsis-Stereovision: Tiefenwahrnehmung von 2 Kameras
  • Erweiterte Realität
Es enthält außerdem eine robuste Bibliothek für statistisches maschinelles Lernen, die eine Reihe verschiedener Klassifikatoren enthält, die zur Unterstützung der oben genannten Bereiche verwendet werden. Um OpenCV zu verwenden, importieren oder integrieren Sie einfach die erforderlichen Bibliotheken und nutzen Sie die unzähligen verfügbaren Funktionen. Schwellenwert ist eine sehr beliebte Segmentierungstechnik, die zum Trennen eines Objekts von seinem Hintergrund verwendet wird. Im folgenden Artikel habe ich verschiedene Techniken zur Schwellenwertermittlung beschrieben Graustufenbilder (8-Bit) . Der Prozess von Schwellenwert Dabei wird jeder Pixelwert des Bildes (Pixelintensität) mit einem bestimmten Schwellenwert verglichen. Dadurch werden alle Pixel des Eingabebilds in zwei Gruppen unterteilt:
  1. Pixel mit einem Intensitätswert, der unter dem Schwellenwert liegt.
  2. Pixel mit einem Intensitätswert, der über dem Schwellenwert liegt.
Diese beiden Gruppen erhalten nun je nach Segmentierungstyp unterschiedliche Werte. OpenCV unterstützt 5 verschiedene Schwellenwertschemata für Graustufenbilder (8-Bit) mithilfe der Funktion: Doppelter Schwellenwert (InputArray src OutputArray dst double thresh double maxval int type) Parameter:
  • InputArray src: Eingabebild (Mat 8-Bit oder 32-Bit)
  • OutputArray dst: Ausgabebild (gleiche Größe wie Eingabe)
  • Double Thresh: Schwellenwert festlegen
  • double maxval: maxVal wird in Typ 1 und 2 verwendet
  • int type*: Gibt den Typ des zu verwendenden Schwellenwerts an. (0-4)
  • *Nachstehend finden Sie eine Liste der Schwellenwerttypen. Eingabebild orig' title= Das eingegebene RGB-Bild wird zunächst in ein Graustufenbild konvertiert, bevor die Schwellenwertbildung durchgeführt wird. OpenCV: Segmentierung mithilfe von Thresholding' title= Schwellenwerttypen
      Binärer Schwellenwert (int type=0) 0_130' title= Von den beiden zuvor erhaltenen Gruppen wird der Gruppe, deren Mitglieder eine Pixelintensität haben, die größer als der festgelegte Schwellenwert ist, ein Max_Value oder im Fall einer Grauskala ein Wert von 255 (weiß) zugewiesen. Die Pixelintensitäten der Mitglieder der verbleibenden Gruppe sind auf 0 (schwarz) gesetzt. EQ1' title= Wenn der Pixelintensitätswert bei (x y) im Quellbild größer als der Schwellenwert ist, wird der Wert im endgültigen Bild auf maxVal gesetzt. Invertierter binärer Schwellenwert (int type=1) 1_130' title= Inv. Der binäre Schwellenwert ist derselbe wie der binäre Schwellenwert. Der einzige wesentliche Unterschied besteht darin, dass bei der Inv.Binary-Schwellenwertbildung der Gruppe mit Pixelintensitäten, die über dem festgelegten Schwellenwert liegen, „0“ zugewiesen wird, während die übrigen Pixel mit Intensitäten unter dem Schwellenwert auf maxVal gesetzt werden. eq2' title= Wenn der Pixelintensitätswert bei (x y) im Quellbild größer als der Schwellenwert ist, wird der Wert im endgültigen Bild auf 0 gesetzt, andernfalls wird er auf maxVal gesetzt. Schwellenwert abschneiden (int type=2) 2_150' title= Die Gruppe mit Pixelintensitäten, die über dem festgelegten Schwellenwert liegen, wird auf den festgelegten Schwellenwert gekürzt, oder mit anderen Worten: Die Pixelwerte werden auf den gleichen Wert wie der festgelegte Schwellenwert gesetzt. Alle anderen Werte bleiben gleich. Gleichung3' title= Wenn der Pixelintensitätswert bei (x y) im Quellbild größer als der Schwellenwert ist, wird der Wert im endgültigen Bild auf den Schwellenwert gesetzt, andernfalls bleibt er unverändert. Schwellenwert auf Null (int type=3) OpenCV: Segmentierung mithilfe von Thresholding' title= Eine sehr einfache Schwellenwerttechnik, bei der wir die Pixelintensität für alle Pixel der Gruppe, deren Pixelintensitätswert unter dem Schwellenwert liegt, auf „0“ setzen. Gl4' title= Wenn der Pixelintensitätswert bei (x y) im Quellbild größer als der Schwellenwert ist, ändert sich der Wert bei (x y) im endgültigen Bild nicht. Alle verbleibenden Pixel werden auf „0“ gesetzt. Schwellenwert auf Null invertiert (int type=4) OpenCV: Segmentierung mithilfe von Thresholding' title= Ähnlich wie bei der vorherigen Technik setzen wir hier die Pixelintensität für alle Pixel der Gruppe, deren Pixelintensitätswert größer als der Schwellenwert ist, auf „0“. Gleichung5' title= Wenn der Pixelintensitätswert bei (x y) im Quellbild größer als der Schwellenwert ist, wird der Wert bei (x y) im endgültigen Bild auf „0“ gesetzt. Alle verbleibenden Pixelwerte bleiben unverändert.
    Um OpenCV-Programme zu kompilieren, muss die OpenCV-Bibliothek auf Ihrem System installiert sein. Ich werde in den kommenden Tagen ein einfaches Tutorial dafür veröffentlichen. Wenn Sie OpenCV bereits installiert haben, führen Sie den folgenden Code mit dem Eingabebild Ihrer Wahl aus. 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);  } }