logo

OpenCV: Eşiklemeyi Kullanarak Segmentasyon

Bu makalede, nesne bölümlendirmeye yönelik temel bir teknik olarak adlandırılmaktadır. . Ancak daha fazla ayrıntıya girmeden önce aşağıda OpenCV'ye kısa bir genel bakış yer almaktadır. (Açık Kaynak Bilgisayarlı Görme), aşağıdakiler gibi çok çeşitli alanlarda gerçek zamanlı bilgisayarla görme görevlerini gerçekleştirmeyi amaçlayan, programlama fonksiyonlarının yer aldığı çapraz platformlu açık kaynaklı bir kütüphanedir:
  • Yüz tanıma
  • İnsan-bilgisayar etkileşimi (HCI)
  • Nesne tanımlama
  • Segmentasyon ve tanıma
  • Stereopsis stereo görüş: 2 kameradan derinlik algısı
Ayrıca yukarıdaki alanları desteklemek için kullanılan bir dizi farklı sınıflandırıcıyı içeren sağlam bir istatistiksel makine öğrenimi kitaplığı da içerir. OpenCV'yi kullanmak için gerekli kütüphaneleri içe aktarın veya ekleyin ve sayısız mevcut fonksiyondan yararlanmaya başlayın. bir nesneyi arka planından ayırmak için kullanılan çok popüler bir bölümleme tekniğidir. Aşağıdaki makalede eşik değeri oluşturmak için kullanılan çeşitli teknikleri anlattım. . The process of eşikleme görüntünün her piksel değerinin (piksel yoğunluğu) belirli bir eşikle karşılaştırılmasını içerir. Bu, giriş görüntüsünün tüm piksellerini 2 gruba ayırır:
  1. Yoğunluk değeri eşikten düşük olan pikseller.
  2. Yoğunluk değeri eşikten büyük olan pikseller.
Bu 2 gruba artık çeşitli segmentasyon türlerine bağlı olarak farklı değerler verilmektedir. OpenCV, aşağıdaki işlevi kullanarak Gri tonlamalı (8 bit) görüntüler üzerinde 5 farklı eşikleme şemasını destekler: Çift eşik(InputArray src OutputArray dst double thresh double maxval int type) Parametreler:
  • OutputArray src: Giriş Görüntüsü (Mat 8 bit veya 32 bit)
  • OutputArray dst: Çıkış Görüntüsü (girişle aynı boyutta)
  • çift ​​eşik: Eşik değerini ayarlayın
  • double maxval: tip 1 ve 2'de kullanılan maxVal
  • int type* : Kullanılacak eşik türünü belirtir. (0-4)
  • *Aşağıda eşikleme türlerinin listesi verilmiştir. Giriş Görüntüsü köken' title= Giriş RGB görüntüsü, eşikleme yapılmadan önce ilk olarak gri tonlamalı görüntüye dönüştürülür. OpenCV: Eşiklemeyi Kullanarak Segmentasyon' title= Eşik türleri
      İkili Eşik(int türü=0) 0_130' title= Daha önce elde edilen iki gruptan, belirlenen eşikten daha büyük piksel yoğunluğuna sahip üyelere sahip olan gruba Max_Value atanır veya gri tonlama durumunda 255 (beyaz) değeri atanır. Geriye kalan grubun üyelerinin piksel yoğunlukları 0 (siyah) olarak ayarlanmıştır. EQ1' title= Kaynak görüntüdeki (x y)'deki piksel yoğunluk değeri eşikten büyükse son görüntüdeki değer maxVal olarak ayarlanır. Tersine çevrilmiş İkili Eşik(int türü=1) 1_130' title= Env. İkili eşik, İkili eşik ile aynıdır. Tek önemli fark, Inv.Binary eşiklemesinde, piksel yoğunlukları ayarlanan eşikten daha büyük olan gruba '0' atanırken, yoğunlukları eşikten daha düşük olan geri kalan pikseller maxVal olarak ayarlanır. denklem2' title= Kaynak görüntüdeki (x y)'deki piksel yoğunluğu değeri eşikten büyükse son görüntüdeki değer 0'a, aksi halde maxVal'a ayarlanır. Eşiği Kes(int type=2) 2_150' title= Piksel yoğunlukları ayarlanan eşikten daha büyük olan grup, ayarlanan eşiğe kısaltılır veya başka bir deyişle piksel değerleri, ayarlanan eşikle aynı olacak şekilde ayarlanır. Diğer tüm değerler aynı kalır. denklem3' title= Kaynak görüntüdeki (x y)'deki piksel yoğunluğu değeri eşikten büyükse son görüntüdeki değer eşiğe ayarlanır, aksi takdirde değişmez. Sıfır Eşiği(int type=3) OpenCV: Eşiklemeyi Kullanarak Segmentasyon' title= Piksel yoğunluk değeri eşikten düşük olan grubun tüm pikselleri için piksel yoğunluğunu '0'a ayarladığımız çok basit bir eşikleme tekniği. denklem4' title= Kaynak görüntüdeki (x y) noktasındaki piksel yoğunluğu değeri eşikten büyükse, son görüntüdeki (x y) noktasındaki değer değişmez. Kalan tüm pikseller '0' olarak ayarlanmıştır. Sıfıra Dönüştürülmüş Eşiği(int type=4) OpenCV: Eşiklemeyi Kullanarak Segmentasyon' title= Önceki tekniğe benzer şekilde burada piksel yoğunluğu değeri eşikten büyük olan grubun tüm pikselleri için piksel yoğunluğunu '0' olarak ayarlıyoruz. denklem5' title= Kaynak görüntüdeki (x y) noktasındaki piksel yoğunluğu değeri eşikten büyükse, son görüntüdeki (x y) noktasındaki değer '0' olarak ayarlanır. Geriye kalan tüm piksel değerleri değişmez.
    OpenCV programlarını derlemek için sisteminizde OpenCV kütüphanesinin kurulu olması gerekmektedir. Önümüzdeki günlerde bunun için basit bir eğitim yayınlayacağım. OpenCV'yi zaten yüklediyseniz, aşağıdaki kodu seçtiğiniz giriş görüntüsüyle çalıştırın. 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);  } }