logo

OpenCV: Segmentering med tröskelvärde

I den här artikeln kallas en grundteknik för objektsegmentering Tröskelvärde . Men innan du flyttar in längre detalj nedan är en kort översikt över OpenCV. Opencv (Open Source Computer Vision) är ett tvärplattform med öppen källkodsbibliotek med programmeringsfunktioner som syftar till att utföra realtid datorsynsuppgifter i en mängd olika fält som:
  • Ansiktsigenkänning
  • Irisigenkänningssystem
  • Gestigenkänning
  • Human - Computer Interaction (HCI)
  • Mobilrobotik
  • Objektidentifiering
  • Segmentering och erkännande
  • Stereopsis Stereo Vision: Djupuppfattning från 2 kameror
  • Förstärkt verklighet
Det innehåller också ett robust statistiskt maskininlärningsbibliotek som innehåller ett antal olika klassificerare som används för att stödja ovanstående områden. För att använda OpenCV importera eller inkludera de nödvändiga biblioteken och börja använda de otaliga tillgängliga funktioner. Tröskelvärde är en mycket populär segmenteringsteknik som används för att separera ett objekt från dess bakgrund. I artikeln nedan har jag beskrivit olika tekniker som används för att tröskelvärdet gråskalabilder (8-bitars) . Processen med tröskelvärde involverar att jämföra varje pixelvärde på bilden (pixelintensitet) med en specificerad tröskel. Detta delar upp alla pixlar för inmatningsbilden i två grupper:
  1. Pixlar med intensitetsvärde lägre än tröskeln.
  2. Pixlar med intensitetsvärde större än tröskeln.
Dessa två grupper ges nu olika värden beroende på olika segmenteringstyper. OpenCV stöder 5 olika tröskelprogram på gråskala (8-bitars) bilder med funktionen: Dubbeltröskel (InputArray SRC OutputArray DST Double Thresh Double MaxVal Int Type) Parametrar:
  • InputArray SRC: Ingångsbild (MAT 8-bitar eller 32-bitars)
  • OutputArray DST: utgångsbild (samma storlek som ingång)
  • Dubbel tröskel: Ställ in tröskelvärde
  • Double MaxVal: Maxval som används i typ 1 och 2
  • int -typ*: Anger typen av tröskel som ska användas. (0-4)
  • *Nedan anges en lista över tröskelstyper. Inmatningsbild ursprung' title= Inmatnings -RGB -bilden konverteras först till en gråskala bild innan tröskeln görs. OpenCV: Segmentering med tröskelvärde' title= Tröskeltyper
      Binär tröskel (int typ = 0) 0_130' title= Av de två grupperna som erhållits tidigare är gruppen som har medlemmar med pixelintensitet större än set -tröskeln tilldelning max_value eller i fall av en gråskala ett värde på 255 (vit). Medlemmarna i den återstående gruppen har sina pixelintensiteter inställda på 0 (svart). Eq1' title= Om pixelintensitetsvärdet vid (x y) i källbilden är större än tröskeln är värdet i den slutliga bilden inställd på MaxVal. Inverterad binär tröskel (int typ = 1) 1_130' title= Inv. Binär tröskel är densamma som binär tröskel. Den enda väsentliga skillnaden är i Inv.Binary -tröskelvärden som har pixelintensiteter större än inställd tröskel tilldelas '0' medan de återstående pixlarna har intensiteter mindre än tröskeln är inställda på MaxVal. eq2' title= Om pixelintensitetsvärdet vid (x y) i källbilden är större än tröskeln är värdet i den slutliga bilden inställd på 0 annars är den inställd på MaxVal. Trunkera tröskelvärde (int typ = 2) 2_150' title= Gruppen med pixelintensiteter större än set -tröskeln trunkeras till set -tröskeln eller med andra ord är pixelvärdena inställda på att vara samma som set -tröskeln. Alla andra värden förblir desamma. ekv' title= Om pixelintensitetsvärdet vid (x y) i källbilden är större än tröskeln är värdet i den slutliga bilden inställd på tröskeln annars är det oförändrat. Tröskel till noll (int typ = 3) OpenCV: Segmentering med tröskelvärde' title= En mycket enkel tröskelteknik där vi ställer in pixelintensiteten till '0' för alla pixlar i gruppen med pixelintensitetsvärde mindre än tröskeln. ekv' title= Om pixelintensitetsvärdet vid (x y) i källbilden är större än tröskeln ändras inte värdet vid (x y) i den slutliga bilden. Alla återstående pixlar är inställda på '0'. Tröskel till noll inverterad (int typ = 4) OpenCV: Segmentering med tröskelvärde' title= I likhet med den tidigare tekniken här ställer vi pixelintensiteten till '0' för alla pixlar i gruppen med pixelintensitetsvärde större än tröskeln. ekv.' title= Om pixelintensitetsvärdet vid (x y) i källbilden är större än tröskeln är värdet vid (x y) i den slutliga bilden inställd på '0'. Allt återstående pixelvärde är oförändrat.
    För att kompilera OpenCV -program måste du ha OpenCV -bibliotek installerat på ditt system. Jag kommer att publicera en enkel handledning för samma de de kommande dagarna. Om du redan har installerat OpenCV Kör nedanstående kod med inmatningsbilden du väljer. 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);  } }