OTSU Eşik Belirleme ve Uygulaması — Sevdiğim Algoritmalar

Aykut Sen
CITS Tech
Published in
6 min readDec 30, 2022

(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.

İkili (Binary) OTSU Uygulaması

OTSU Uygulanarak eşik değeri listeye eklenir ve eşik değeri altındakileri siyah ; üstündekiler beyaz olarak belirtilir.

Üçlü OTSU Uygualması

Üç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.

Dörtlü OTSU Uygulaması

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ı.

--

--