Eşikleme, görüntü bölütleme amacı için kullanılan en önemli yaklaşımlardan birisidir ve birçok görüntü analizi uygulamasında ön işlem olarak tercih edilir.
Eşikleme (Threshold ) nesnelerin arka plandan ayrılması işlemidir ve en basit bölütleme (segmentation) yöntemidir. Nesneleri arka plandan ayırmak için en kolay yol, histogramdan göreceli olarak belirlenen bir T eşik değeri ile görüntüdeki piksel değerlerini karşılaştırmak olacaktır.
Eşikleme yöntemleri:
- Bütünsel Eşikleme Yöntemleri(Global Binarization Methods)
- Yerel Uyarlamalı Eşikleme Yöntemleri (Locally Adaptive Binarization Methods)
olmak üzere ikiye ayrılır. Bütünsel eşikleme yöntemleri tüm görüntü için tek bir eşik (threshold) değeri hesaplar. Eşik değerinden daha koyu gri seviyesine sahip olan pikseller baskı (print, siyah) olarak etiketlenir. Aksi takdirde arka plan (background, beyaz) olarak etiketlenir.
Diğer yandan yerel uyarlamalı eşikleme yöntemleri bir pikselin komşuluğundaki bilgileri temel alarak her bir piksel için bir eşik değeri hesaplar. Bazı yöntemler tüm görüntü üzerinde bir eşik değeri hesaplar. Eğer giriş görüntüsündeki bir (x, y) pikseli (x, y)’de hesaplanan eşik yüzeyinden daha yüksek gri seviyesine sahipse bu (x, y) pikseli arka plan olarak etiketlenir. Aksi halde baskı olarak etiketlenir.
- Otsu's threshold Kümeleme Tabanlı Eşikleme
- Bernsen
- Contrast
- Mean
- Median
- MidGrey
- Niblack
- Phansalkar
- Sauvola
- Huang & Huang2
- Intermodes
- IsoData
- Li
- MaxEntropy
- MinError(I)
- Minimum
- Moments
- Percentile
- Renyi Entropy
- Shanbhag
- Zack’s Triangle
- Yen
- Simple Image Statistics
Python Threshold
import cv2
import numpy as np
from matplotlib import pyplot as plt
image_url = "C:\\Users\\USER-PC-NAME\\Desktop\\lenna.png" # Full path is needed
img = cv2.imread(image_url,0)
ret,th1 = cv2.threshold(img,127,255,cv2.THRESH_BINARY) #normal threshold
ret,th2 = cv2.threshold(img,127,255,cv2.THRESH_BINARY_INV)
ret,th3 = cv2.threshold(img,127,255,cv2.THRESH_TRUNC)
ret,th4 = cv2.threshold(img,127,255,cv2.THRESH_TOZERO)
ret,th5 = cv2.threshold(img,127,255,cv2.THRESH_TOZERO_INV)
th6 = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY,11,2) #normal
th7 = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,11,2)#gauss
titles = [
'Original Image',
'BINARY (v = 127)',
'BINARY_INV (v = 127)',
'TRUNC (v = 127)',
'TOZERO (v = 127)',
'TOZERO_INV (v = 127)',
'Adaptive Mean Thresholding',
'Adaptive Gaussian Thresholding',
]
images = [img, th1, th2, th3, th4, th5, th6, th7]
for i in range(8):
#plt.subplot(row, col, numb)
plt.subplot(4,2,i+1),plt.imshow(images[i],'gray')
plt.title(titles[i])
plt.xticks([]),plt.yticks([])
plt.tight_layout()
plt.show()