OpenCV Thresholding (Eşikleme)
Giriş olarak verilen görüntüyü ikili görüntüye çevirmek için kullanılan bir yöntemdir. İkili görüntü (binary), görüntünün siyah ve beyaz olarak tanımlanmasıdır. Morfolojik operatörler gibi görüntü üzerindeki gürültüleri azaltmak veya nesne belirlemek gibi farklı amaçlar için kullanılır. Giriş olarak verilen görüntü üzerinde uygulanan thresholding tipine bağlı olarak, pikselleri verilen eşik değerine göre siyah ya da beyaz olarak günceller.
OpenCV içerisindeki sık kullanılan threshold tipleri:
- THRESH_BINARY
- THRESH_BINARY_INV
- THRESH_TRUNC
- THRESH_TOZERO
- THRESH_TOZERO_INV
Thresholding işlemi için Imgproc içerisindeki threshold()metodunu kullanacağız. Bu metot beş adet parametre almaktadır. Kaynak mat nesnesi yani giriş görüntüsü, hedef olarak ikinci bir mat nesnesi bu hedef nesne işlem sonucunu tutmak için, thresh olarak adlandırılan parametre eşik değeri, THRESH_BINARY ve THRESH_BINARY_INV gibi tipler için kullanılmak üzere maksimum değer ve yukarıda belirtilenler gibi threshold tipini parametre olarak almaktadır.
Imgproc.threshold(kaynakMat,hedefMat,esikDegeri,maksDeger,threshoidngTipi);
THRESH_BINARY
Kaynak olarak alınan görüntü üzerindeki piksel,esikDegeri olarak verilen değerden büyükse maksDeger olarak verilen parametre değerine atanır.
THRESH_BINARY_INV
Kaynak olarak alınan görüntü üzerindeki piksel,esikDegeri olarak verilen değerden küçükse maksDeger olarak verilen parametre değerine atanır.THRESH_BINARY_INV, THRESH_BINARY‘nin karşıtı olarak kullanılabilir.
THRESH_TRUNC
Kaynak olarak alınan görüntü üzerindeki piksel,
THRESH_TOZERO
Kaynak olarak alınan görüntü üzerindeki piksel,sınır olarak verilen değerden büyük olması durumunda piksel değeri korunacak, küçük olması durumunda ise piksel siyah olarak atanacaktır.
THRESH_TOZERO_INV
Kaynak olarak alınan görüntü üzerindeki piksel,sınır olarak verilen değerden küçük olması durumunda piksel değeri korunacak, büyük olması durumunda ise piksel siyah olarak atanacaktır.
Aşağıdaki görselde kaynak üzerine etki eden threshold tipleri grafiksel olarak ifade edilmiştir.
System.loadLibrary(Core.NATIVE_LIBRARY_NAME); Mat kaynakGoruntu=new Mat(); kaynakGoruntu=Imgcodecs.imread("C:\\1.jpg"); Mat hedefGoruntu=new Mat(); intthresh=150; intmaxDeger=255; Imgproc.threshold(kaynakGoruntu, hedefGoruntu, thresh, maxDeger, Imgproc.THRESH_BINARY); Imgcodecs.imwrite("C:\\2.jpg", hedefGoruntu); System.out.println("Thresholding uygulandı.");
Yukarıdaki örnekte okunan görüntü üzerine threshold binary uygulanmıştır. Imgproc. THRESH_BINARY parametresini uygulamak istediğiniz threshold tipine göre değiştirebilirsiniz.
Threshold metoduna parametre olarak diğer threshold tiplerini verelim ve kaynak görüntü üzerindeki farklılıklara bakalım.