OTSU Eşik Belirleme ve Uygulaması — Sevdiğim Algoritmalar
(Görece olarak yakın dönemlerde ortaya atılmış , algılayabildiğim :) ve algıladıktan sonra yaklaşımını çok sevdiğim algoritmaları sevdiğim algoritmalar başlığı ile işaretlemek ve nihayetinde de diziye dönüştürmek istedim.)
Otsu , 1979 yılında imge eşiklemede parametrik olmayan ve daha önce denenmemiş bir yöntem önermiştir. Bu yöntemde en uygun eşik değerinin belirlenmesi nesne (O) ve arka plan (B) piksellerine ilişkin ağırlıklandırılmış toplam sınıf içi değişintilerin minimize edilmesi ile gerçekleştirilmektedir. (Otsu, 1979) Bir diğer deyişle Otsu’nun ikili eşikleme yöntemi, imge eşikleme alanında yapılan ilk çalışmalardan biri olan ve Otsu (1979) tarafından önerilen topaklamaya dayalı eşikleme yöntemidir. Güçlü ve stabil bir yöntem olması sebebiyle imge eşikleme alanında gerçekleştirilen çalışmalarda referans olarak alınmakta ve kullanılmaktadır. (Eichmann & Lüssi, 2005)
Yöntem ile ilgili kullanılan formulasyondaki temel tanımlar aşağıda belirtilmektedir:
I(x,y): Gri seviyeli bir imge
L={0,1,2,….,L-1}: Gri seviyeleri temsil eden pozitif tam sayı kümesi
MxN: İmgenin boyutları
fi: i. gri seviyenin tekrarlanmas sıklığı
pi : i. gri seviyenin olasılık dağılımı
σ2 : Değişinti (Varyans)
υT : İmgenin yoğunluklu ortalama gri seviye değeri
υi : i.sınıfın yoğunluklu ortalama gri seviye değeri
t: Eşik değeri
ωi: i. sınıfın olasılık yoğunluğu
Sınıf içi değişintilerinin minimize edilmesi ayni zamanda sınıflar arası değişintinin (σ2sınıfara(t)) en büyüklenmesine karşılık geldiğinden bu yönteme ilişkin en uygun eşik değeri aşağıdaki ifadeler yardımıyla da hesaplanabilmektedir (Liu & Yu, 2009):
Sınıflar arası yaklaşım bize daha hızlı bir algoritma kurmaya olanak da sağlamaktadır. Bu nedenle oluşturacağımız kodun algoritması buna dayanmaktadır.
Çoklu İmge Eşikleme
Çoklu eşikleme, gri seviyeli bir imgeyi ikiden fazla gri seviye grubuna ayırma işlemi olarak tanımlanabilir (Sezgin, 2002). Bu sayede imge, birtakım gri seviye grubuyla ifade edilebilir hal almaktadır. Çoklu imge eşikleme; bölütleme, sınıflandırma ve nesne ayırt etmeyi içeren çoğu imge işleme uygulamasında kullanılan önemli bir tekniktir (Rueda, 2008).
Otsu’nun yöntemi, çoklu imge eşikleme problemini çözmek amacıyla uyarlanabilir.
Çoklu imge eşikleme problemini çözmek amacıyla en uygun eşik değerlerini bulmak için sınıflar arası değişintiyi maksimize eden çözüm bulunmalıdır:
Yöntemin Uygulanması
Arayüzler
İkili ve çoklu otsu tek bir uygulama üstünden seçeneğe bağlı olarak oluşturuldu.
OTSU Uygulanarak eşik değeri listeye eklenir ve eşik değeri altındakileri siyah ; üstündekiler beyaz olarak belirtilir.
Üçlü ve dörtlü çseviye oklu uygulamalara da izin verilmiştir. İkinci eşik sonrası pikseller kırmızı ; üçüncü eşik sonrası pikseller mavi olarak gösterilmiştir.
Kod
Formülasyona göre en uygun eşik değerlerini bulmak için sınıflar arası değişintiyi maksimize eden çözüm bulunmuştur. Algoritmayı çalıştıran ve hesabı yapan fonksiyon şu şekildedir:
private void CalculateOtsu()
{
double[] p = new double[256];
//toplam yoğunluklu ortalama gri seviye değeri
double uT = 0;
for (int i = 0; i < 256; i++)
{
p[i] = (double)histogram[i] / (double)size;
uT += i * p[i];
}
double maxBetweenVar = 0;
double w0 = 0;
double m0 = 0;
double c0 = 0;
double p0 = 0;
double w1 = 0;
double m1 = 0;
double c1 = 0;
double p1 = 0;
double w2 = 0;
double m2 = 0;
double c2 = 0;
double p2 = 0;
double w3 = 0;
double m3 = 0;
double c3 = 0;
double p3 = 0;
for (int tr1 = 0; tr1 < 256; tr1++)
{
p0 += p[tr1];
w0 += (tr1 * p[tr1]);
if (p0 != 0)
{
m0 = w0 / p0;
}
c0 = p0 * (m0 - uT) * (m0 - uT);
c1 = 0;
w1 = 0;
m1 = 0;
p1 = 0;
for (int tr2 = tr1+1 ; tr2 < 256; tr2++)
{
p1 += p[tr2];
w1 += (tr2 * p[tr2]);
if (p1 != 0)
{
m1 = w1 / p1;
}
c1 = p1 * (m1 - uT) * (m1 - uT);
c2 = 0;
w2 = 0;
m2 = 0;
p2 = 0;
for (int tr3 = tr2 + 1; tr3 < 256; tr3++)
{
p2 += p[tr3];
w2 += (tr3 * p[tr3]);
if (p2 != 0)
{
m2 = w2 / p2;
}
c2 = p2 * (m2 - uT) * (m2 - uT);
p3 = 0;
w3 = 0;
m3 = 0;
c3 = 0;
for (int tr4 = tr3 + 1; tr4 < 256; tr4++)
{
p3 += p[tr4];
w3 += (tr4 * p[tr4]);
if (p3 != 0)
{
m3 = w3 / p3;
}
c3 = p3 * (m3 - uT) * (m3 - uT);
double p4 = 1 - (p0 + p1 + p2 + p3);
double w4 = uT - (w0 + w1 + w2 + w3);
double m4 = w4 / p4;
double c4 = p4 * (m4 - uT) * (m4 - uT);
double c = c0 + c1 + c2 * CheckClass(3) + c3 * CheckClass(4) + c4 * CheckClass(5);
if (maxBetweenVar < c)
{
maxBetweenVar = c;
optimalThreshold[0] = tr1;
optimalThreshold[1] = tr2;
optimalThreshold[2] = tr3;
}
}
}
}
}
}
Kod formulasyon mantığını daha okunabilir olarak kavratmak adına sadece ikili — üçlü ve dörtlü OTSU’ya destek olacak kadar kurgulanmıştır. Bu yapı; kod refaktör edilerek ve daha da optimize edilerek N-level bir kurgu ile uygulanabilir.
Sonuç
Otsu yöntemi çalışma hızı anlamında ve kodlanması bakımından rahatlıkla avantajlı bir yöntem olarak değerlendirilebilir. Yöntemin çalıştırma seviyesine bağlı olarak bimodal ve multimodal histogramlara ait imgelerde daha başarılı sonuçlar vereceği ya da diğer bir deyişle buna uymayan histogramı olan imgelerde daha az başarılı olabileceği aşikardır.
Kaynaklar
Eichmann, M., & Lüssi, M. (2005). Efficient multilevel image thresholding. Dipl. Ing. FH Thesis, 1–53. Switzerland: Hochschule für Technik Rapperswil.
Greensted, A. (2010, 6 17). Otsu Thresholding. Retrieved from The Lab Book Pages: http://www.labbookpages.co.uk/software/imgProc/otsuThreshold.html
Liu, D., & Yu, J. (2009). Otsu method and k-means. 9th International Conference on Hybrid Intelligent Systems — HIS 2009, 344–349. Shenyang, Liaoning, China.
Otsu, N. (1979). A threshold selection method from gray-level histograms. IEEE Transactions on Systems, 62–66. Man and Cybernetics.
Rueda, L. (2008). An efficient algorithm for optimal multilevel thresholding of irregularly sampled histograms. International Workshops on Structural and Syntactic Pattern Recognition and Statistical Techniques in Pattern Recognition, 602–611. Orlando, Florida, USA.
Sezgin, M. (2002). İmge eşikleme yöntemlerinin başarım değerlendirmesi ve tahrivatsız muayenede kullanımı. Doktora Tezi, 8–108. İstanbul: İTÜ Fen Bilimleri Enstitüsü.
Sezgin, M., & Sankur, B. (2004). Survey over image thresholding techniques and quantitative performance evaluation, 146–165. Journal of Electronic Imaging.
Şengür, A., Türkoğlu, İ., & İnce, M. (2005). İki boyutlu entropi ile görüntü eşikleme uygulamaları. 275–278. Kayseri: IEEE 13. Sinyal İşleme ve İletişim Uygulamaları Kurultayı.