Otsu methodu

Otsu methodu kullanılarak eşiklenen örnek bir görüntü
Orijinal görüntü

Bilgisayarla görme ve görüntü işlemede, otomatik görüntü eşikleme yapmak için Nobuyuki Otsu (大津展之 Ōtsu Nobuyuki) tarafından oluşturulan Otsu methodu kullanılmaktadır.[1] En basit haliyle, algoritma pikselleri ön plan ve arka plan olmak üzere iki sınıfa ayıran tek bir yoğunluk eşiği döndürmektedir. Bu eşik, sınıf içi yoğunluk varyansını en aza indirerek veya eşdeğer olarak, sınıflar arası varyansı maksimize ederek belirlenmektedir.[2] Otsu'nun yöntemi, Fisher's Discriminant Analysis'in tek boyutlu ayrık bir analoğudur. Jenks optimizasyon yöntemiyle ilgilidir ve yoğunluk histogramında gerçekleştirilen global olarak en uygun k-ortalamalara eşdeğerdir.[3] Çok seviyeli eşiklemenin genişletilmesi orijinal belgede açıklanmıştır ve o zamandan beri hesaplama açısından verimli uygulamalar önerilmiştir.[2][4][5]

Otsu methodu

Otsu methodunun görselleştirilmesi

Algoritma, iki sınıfın ağırlıklı bir toplamı olarak tanımlanan sınıf içi varyansı en aza indiren eşiği kapsamlı bir şekilde arar.

σ w 2 ( t ) = ω 0 ( t ) σ 0 2 ( t ) + ω 1 ( t ) σ 1 2 ( t ) {\displaystyle \sigma _{w}^{2}(t)=\omega _{0}(t)\sigma _{0}^{2}(t)+\omega _{1}(t)\sigma _{1}^{2}(t)}

ω 0 {\displaystyle \omega _{0}} ve ω 1 {\displaystyle \omega _{1}} ağırlıkları, t {\displaystyle t} eşiği ile ayrılan iki sınıfın olasılıklarıdır. σ 0 2 {\displaystyle \sigma _{0}^{2}} ve σ 1 2 {\displaystyle \sigma _{1}^{2}} bu iki sınıfın varyanslarıdır.

ω 0 , 1 ( t ) {\displaystyle \omega _{0,1}(t)} sınıf olasılığı, histogramın L {\displaystyle L} kutularından aşağıdaki gibi hesaplanır:

ω 0 ( t ) = i = 0 t 1 p ( i ) ω 1 ( t ) = i = t L 1 p ( i ) {\displaystyle {\begin{aligned}\omega _{0}(t)&=\sum _{i=0}^{t-1}p(i)\\[4pt]\omega _{1}(t)&=\sum _{i=t}^{L-1}p(i)\end{aligned}}}

2 sınıf için, sınıf içi varyansı en aza indirmek, sınıflar arası varyansı en üst düzeye çıkarmakla eşdeğerdir.[2]

σ b 2 ( t ) = σ 2 σ w 2 ( t ) = ω 0 ( μ 0 μ T ) 2 + ω 1 ( μ 1 μ T ) 2 = ω 0 ( t ) ω 1 ( t ) [ μ 0 ( t ) μ 1 ( t ) ] 2 {\displaystyle {\begin{aligned}\sigma _{b}^{2}(t)&=\sigma ^{2}-\sigma _{w}^{2}(t)=\omega _{0}(\mu _{0}-\mu _{T})^{2}+\omega _{1}(\mu _{1}-\mu _{T})^{2}\\&=\omega _{0}(t)\omega _{1}(t)\left[\mu _{0}(t)-\mu _{1}(t)\right]^{2}\end{aligned}}}

Bu, ω {\displaystyle \omega } sınıf olasılıkları cinsinden ifade edilir. Sınıf μ {\displaystyle \mu } anlamına gelir. Burada sınıf μ 0 ( t ) {\displaystyle \mu _{0}(t)} , μ 1 ( t ) {\displaystyle \mu _{1}(t)} ve μ T {\displaystyle \mu _{T}} anlamına gelir.

μ 0 ( t ) = i = 0 t 1 i p ( i ) ω 0 ( t ) μ 1 ( t ) = i = t L 1 i p ( i ) ω 1 ( t ) μ T = i = 0 L 1 i p ( i ) {\displaystyle {\begin{aligned}\mu _{0}(t)&={\frac {\sum _{i=0}^{t-1}ip(i)}{\omega _{0}(t)}}\\[4pt]\mu _{1}(t)&={\frac {\sum _{i=t}^{L-1}ip(i)}{\omega _{1}(t)}}\\\mu _{T}&=\sum _{i=0}^{L-1}ip(i)\end{aligned}}}

Aşağıdaki ilişkiyi bunlarla açıklayabiliriz:

ω 0 μ 0 + ω 1 μ 1 = μ T ω 0 + ω 1 = 1 {\displaystyle {\begin{aligned}\omega _{0}\mu _{0}+\omega _{1}\mu _{1}&=\mu _{T}\\\omega _{0}+\omega _{1}&=1\end{aligned}}}

Sınıf olasılıkları ve sınıf ortalamaları yinelemeli olarak hesaplanabilir. Bu fikir etkili bir algoritma sağlamaktadır.

Algoritma

  1. Her yoğunluk seviyesinin histogramı ve olasılıkları hesaplanır.
  2. İlk ω i ( 0 ) {\displaystyle \omega _{i}(0)} ve μ i ( 0 ) {\displaystyle \mu _{i}(0)} ayarlanır.
  3. Adım adım t = 1 , {\displaystyle t=1,\ldots } tüm olası eşikler maksimum yoğunluk için hesaplanır.
    1. ω i {\displaystyle \omega _{i}} ve μ i {\displaystyle \mu _{i}} güncellenir.
    2. σ b 2 ( t ) {\displaystyle \sigma _{b}^{2}(t)} hesaplanır.
  4. İstenen eşik maksimum σ b 2 ( t ) {\displaystyle \sigma _{b}^{2}(t)} değerine karşılık gelir.

MATLAB veya Octave uygulaması

histogramSayacı farklı gri düzeylerinde (8 bitlik görüntüler için tipik) bir gri tonlamalı görüntünün 256 elemanlı bir histogramıdır.

function seviye = otsu(histogramSayacı)
total = sum(histogramSayacı); % görüntüdeki toplam piksel sayısı
%% OTSU otomatik eşiklemesi
top = 256;
toplamB = 0;
wB = 0;
maksimum = 0.0;
toplam1 = dot(0:top-1, histogramSayacı);
for ii = 1:top
    wF = total - wB;
    if wB > 0 && wF > 0
        mF = (toplam1 - toplamB) / wF;
        val = wB * wF * ((toplamB / wB) - mF) * ((toplamB / wB) - mF);
        if ( val >= maksimum )
            seviye = ii;
            maksimum = val;
        end
    end
    wB = wB + histogramSayacı(ii);
    toplamB = toplamB + (ii-1) * histogramSayacı(ii);
end
end

Matlab, sırasıyla Otsu methodu ve Multi Otsu methoduyla uygulanan Görüntü İşleme Araç Kutusu'nda graythresh() ve multithresh() yerleşik fonksiyonlarına sahiptir.

Sınırlamalar

Otsu methodunda, histogramın iki modlu dağılıma sahip olduğu ve iki tepe arasında derin ve keskin bir vadiye sahip olduğu varsayılabilirse, nispeten iyi bir performans sergilemektedir. Ancak nesne alanı, arka plan alanıyla karşılaştırıldığında nesne alanı küçükse, histogram artık iki modluluk göstermez.[6] Ve nesnenin varyansları ve arka plan yoğunlukları, ortalama farkla karşılaştırıldığında büyükse veya görüntü, ek gürültü tarafından ciddi şekilde bozulursa, gri seviye histogramının keskin vadisi bozulmaktadır. Ardından, Otsu'nun yöntemiyle belirlenen olası yanlış eşik, segmentasyon hatasıyla sonuçlanmaktadır. (Burada nesne boyutunu, nesne alanının tüm görüntü alanına oranı ve ortalama farkı, nesnenin ve arka planın ortalama yoğunluklarının farkı olarak tanımlıyoruz)

Ampirik sonuçlar, nesne segmentasyonu için kullanılan global eşikleme tekniklerinin performansının (Otsu algoritması dahil) küçük nesne boyutu, ön plan ve arka plan pikselleri arasındaki küçük ortalama fark, nesneye ait olan ve nesneye ait olan piksellerin büyük varyansları ile sınırlı olduğunu göstermektedir.[7]

İyileştirmeler

Otsu methodunun sınırlamalarını ele almak için çeşitli uzantılar geliştirilmiştir. Bir popüler uzantı, gürültülü görüntülerde nesne bölütleme görevi için daha iyi performans gösteren iki boyutlu Otsu methodudur. Burada, segmentasyon sonuçlarını iyileştirmek için belirli bir pikselin yoğunluk değeri, yakın komşuluğunun ortalama yoğunluğu ile karşılaştırılmaktadır.[8]

Her pikselde, komşuların ortalama gri seviye değeri hesaplanır. Verilen pikselin gri seviyesi L {\displaystyle L} kadar ayrık değerlere bölünür ve ortalama gri seviyesi de aynı L {\displaystyle L} değerlerine bölünür. Ardından bir çift oluşturulur: ( i , j ) {\displaystyle (i,j)} her pikselin gri seviyesi ve komşuların ortalaması. Her çift, L × L {\displaystyle L\times L} olası 2 boyutlu kutulardan birine aittir . Her bir ( i , j ) {\displaystyle (i,j)} çiftinin toplam sayısı f i j {\displaystyle f_{ij}} fonksiyonu olarak verilir. N {\displaystyle N} görüntüsündeki toplam piksel sayısına bölünür, 2 boyutlu bir histogramda birleşik olasılık kütle fonksiyonunu tanımlar:

P i j = f i j N , i = 0 L 1 j = 0 L 1 P i j = 1 {\displaystyle P_{ij}={\frac {f_{ij}}{N}},\qquad \sum _{i=0}^{L-1}\sum _{j=0}^{L-1}P_{ij}=1}

2 boyutlu Otsu methodu, 2 boyutlu histograma dayalı olarak aşağıdaki gibi geliştirilmiştir.

İki sınıfın olasılıkları şu şekilde gösterilebilir:

ω 0 = i = 0 s 1 j = 0 t 1 P i j ω 1 = i = s L 1 j = t L 1 P i j {\displaystyle {\begin{aligned}\omega _{0}&=\sum _{i=0}^{s-1}\sum _{j=0}^{t-1}P_{ij}\\\omega _{1}&=\sum _{i=s}^{L-1}\sum _{j=t}^{L-1}P_{ij}\end{aligned}}}

İki sınıfın yoğunluk ortalama değer vektörleri ve toplam ortalama vektör aşağıdaki gibi ifade edilebilir:

μ 0 = [ μ 0 i , μ 0 j ] T = [ i = 0 s 1 j = 0 t 1 i P i j ω 0 , i = 0 s 1 j = 0 t 1 j P i j ω 0 ] T μ 1 = [ μ 1 i , μ 1 j ] T = [ i = s L 1 j = t L 1 i P i j ω 1 , i = s L 1 j = t L 1 j P i j ω 1 ] T μ T = [ μ T i , μ T j ] T = [ i = 0 L 1 j = 0 L 1 i P i j , i = 0 L 1 j = 0 L 1 j P i j ] T {\displaystyle {\begin{aligned}\mu _{0}&=[\mu _{0i},\mu _{0j}]^{T}=\left[\sum _{i=0}^{s-1}\sum _{j=0}^{t-1}i{\frac {P_{ij}}{\omega _{0}}},\sum _{i=0}^{s-1}\sum _{j=0}^{t-1}j{\frac {P_{ij}}{\omega _{0}}}\right]^{T}\\\mu _{1}&=[\mu _{1i},\mu _{1j}]^{T}=\left[\sum _{i=s}^{L-1}\sum _{j=t}^{L-1}i{\frac {P_{ij}}{\omega _{1}}},\sum _{i=s}^{L-1}\sum _{j=t}^{L-1}j{\frac {P_{ij}}{\omega _{1}}}\right]^{T}\\\mu _{T}&=[\mu _{Ti},\mu _{Tj}]^{T}=\left[\sum _{i=0}^{L-1}\sum _{j=0}^{L-1}iP_{ij},\sum _{i=0}^{L-1}\sum _{j=0}^{L-1}jP_{ij}\right]^{T}\end{aligned}}}

Çoğu durumda köşegen dışı olasılık ihmal edilebilir, bu nedenle doğrulaması kolaydır:

ω 0 + ω 1 1 {\displaystyle \omega _{0}+\omega _{1}\cong 1}
ω 0 μ 0 + ω 1 μ 1 μ T {\displaystyle \omega _{0}\mu _{0}+\omega _{1}\mu _{1}\cong \mu _{T}}

Sınıflar arası ayrık matris şu şekilde tanımlanır:

S b = k = 0 1 ω k [ ( μ k μ T ) ( μ k μ T ) T ] {\displaystyle S_{b}=\sum _{k=0}^{1}\omega _{k}[(\mu _{k}-\mu _{T})(\mu _{k}-\mu _{T})^{T}]}

Ayrık matrisin izi şu şekilde ifade edilebilir:

tr ( S b ) = ω 0 [ ( μ 0 i μ T i ) 2 + ( μ 0 j μ T j ) 2 ] + ω 1 [ ( μ 1 i μ T i ) 2 + ( μ 1 j μ T j ) 2 ] = ( μ T i ω 0 μ i ) 2 + ( μ T j ω 0 μ j ) 2 ω 0 ( 1 ω 0 ) {\displaystyle {\begin{aligned}&\operatorname {tr} (S_{b})\\[4pt]={}&\omega _{0}[(\mu _{0i}-\mu _{Ti})^{2}+(\mu _{0j}-\mu _{Tj})^{2}]+\omega _{1}[(\mu _{1i}-\mu _{Ti})^{2}+(\mu _{1j}-\mu _{Tj})^{2}]\\[4pt]={}&{\frac {(\mu _{Ti}\omega _{0}-\mu _{i})^{2}+(\mu _{Tj}\omega _{0}-\mu _{j})^{2}}{\omega _{0}(1-\omega _{0})}}\end{aligned}}}
μ i = i = 0 s 1 j = 0 t 1 i P i j {\displaystyle \mu _{i}=\sum _{i=0}^{s-1}\sum _{j=0}^{t-1}iP_{ij}}
μ j = i = 0 s 1 j = 0 t 1 j P i j {\displaystyle \mu _{j}=\sum _{i=0}^{s-1}\sum _{j=0}^{t-1}jP_{ij}}

Tek boyutlu Otsu methoduna benzer şekilde, optimal eşik ( s , t ) {\displaystyle (s,t)} , tr ( S b ) {\displaystyle \operatorname {tr} (S_{b})} maksimize edilerek elde edilir.

Algoritma

s {\displaystyle s} ve t {\displaystyle t} tek boyutlu Otsu methoduna benzer şekilde yinelemeli olarak elde edilmektedir. s {\displaystyle s} ve t {\displaystyle t} değerleri, maksimum tr ( S b ) {\displaystyle \operatorname {tr} (S_{b})} elde edilene kadar değiştirilir.

max,s,t = 0;
for ss: 0 to L-1 do
    for tt: 0 to L-1 do
        evaluate tr(S_b);
        if tr(S_b) > max
            max = tr(S,b);
            s = ss;
            t = tt;
        end if
    end for
end for
return s,t;

tr ( S b ) {\displaystyle \operatorname {tr} (S_{b})} fonksiyonunu değerlendirmek ve zaman performansını iyileştirmek için hızlı bir özyinelemeli dinamik programlama algoritması kullanılabilir.[9] Bununla birlikte, dinamik programlama yaklaşımıyla bile, 2d Otsu methodu hala büyük zaman karmaşıklığına sahiptir. Bu nedenle, hesaplama maliyetini azaltmak için birçok araştırma yapılmıştır.[10]

P i j {\displaystyle P_{ij}} , i P i j {\displaystyle i*P_{ij}} ve j P i j {\displaystyle j*P_{ij}} üzerinde toplamalar yapılarak 3 tablo oluşturulur. Çalışma zamanı karmaşıklığı maksimum (O(N_pixels), O(N_bins*N_bins)) olur. Eşik açısından yalnızca kaba çözünürlük gerekiyorsa, N_bins azaltılabilir.

Matlab uygulaması

Fonksiyon giriş ve çıkışları:

hists; gri tonlamalı değer ve komşu ortalama gri tonlamalı değer çiftinin 256 × 256 {\displaystyle 256\times 256} 2D histogramıdır.

total; verilen görüntüdeki çiftlerin sayısıdır. 2D histogramın her bir yöndeki kutularının sayısı ile belirlenir.

threshold; elde edilen eşik değeridir.

function threshold = otsu_2D(hists, total)
maximum = 0.0;
threshold = 0;
helperVec = 0:255;
mu_t0 = sum(sum(repmat(helperVec',1,256).*hists));
mu_t1 = sum(sum(repmat(helperVec,256,1).*hists));
p_0 = zeros(256);
mu_i = p_0;
mu_j = p_0;
for ii = 1:256
    for jj = 1:256
        if jj == 1
            if ii == 1
                p_0(1,1) = hists(1,1);
            else
                p_0(ii,1) = p_0(ii-1,1) + hists(ii,1);
                mu_i(ii,1) = mu_i(ii-1,1)+(ii-1)*hists(ii,1);
                mu_j(ii,1) = mu_j(ii-1,1);
            end
        else
            p_0(ii,jj) = p_0(ii,jj-1)+p_0(ii-1,jj)-p_0(ii-1,jj-1)+hists(ii,jj);
            mu_i(ii,jj) = mu_i(ii,jj-1)+mu_i(ii-1,jj)-mu_i(ii-1,jj-1)+(ii-1)*hists(ii,jj);
            mu_j(ii,jj) = mu_j(ii,jj-1)+mu_j(ii-1,jj)-mu_j(ii-1,jj-1)+(jj-1)*hists(ii,jj);
        end

        if (p_0(ii,jj) == 0)
            continue;
        end
        if (p_0(ii,jj) == total)
            break;
        end
        tr = ((mu_i(ii,jj)-p_0(ii,jj)*mu_t0)^2 + (mu_j(ii,jj)-p_0(ii,jj)*mu_t1)^2)/(p_0(ii,jj)*(1-p_0(ii,jj)));

        if ( tr >= maximum )
            threshold = ii;
            maximum = tr;
        end
    end
end
end

Kaynakça

  1. ^ M. Sezgin; B. Sankur (2004). "Survey over image thresholding techniques and quantitative performance evaluation". Journal of Electronic Imaging. 13 (1): 146-165. doi:10.1117/1.1631315. 
  2. ^ a b c Nobuyuki Otsu (1979). "A threshold selection method from gray-level histograms". IEEE Trans. Sys. Man. Cyber. 9 (1): 62-66. doi:10.1109/TSMC.1979.4310076. 
  3. ^ Liu, Dongju (2009). "Otsu method and K-means". Ninth International Conference on Hybrid Intelligent Systems IEEE. 1: 344-349. 
  4. ^ Liao, Ping-Sung (2001). "A fast algorithm for multilevel thresholding" (PDF). J. Inf. Sci. Eng. 17 (5): 713-727. 24 Haziran 2019 tarihinde kaynağından (PDF) arşivlendi. 
  5. ^ Huang, Deng-Yuan (2009). "Optimal multi-level thresholding using a two-stage Otsu optimization approach". Pattern Recognition Letters. 30 (3): 275-284. doi:10.1016/j.patrec.2008.10.003. 
  6. ^ Kittler, Josef; Illingworth, John (1985). "On threshold selection using clustering criteria". IEEE Transactions on Systems, Man and Cybernetics. SMC-15 (5): 652-655. doi:10.1109/tsmc.1985.6313443. 
  7. ^ Lee, Sang Uk and Chung, Seok Yoon and Park, Rae Hong (1990). "A comparative performance study of several global thresholding techniques for segmentation". Computer Vision, Graphics, and Image Processing. 52 (2): 171-190. doi:10.1016/0734-189x(90)90053-x. KB1 bakım: Birden fazla ad: yazar listesi (link)
  8. ^ Jianzhuang, Liu and Wenqing, Li and Yupeng, Tian (1991). "Automatic thresholding of gray-level pictures using two-dimension Otsu method". Circuits and Systems, 1991. Conference Proceedings, China., 1991 International Conference on: 325-327. KB1 bakım: Birden fazla ad: yazar listesi (link)
  9. ^ Zhang, Jun; Hu, Jinglu (2008). "Image segmentation based on 2D Otsu method with histogram analysis". Computer Science and Software Engineering, 2008 International Conference on. 6: 105-108. doi:10.1109/CSSE.2008.206. ISBN 978-0-7695-3336-0. 
  10. ^ Zhu, Ningbo and Wang, Gang and Yang, Gaobo and Dai, Weiming (2009). "A fast 2d otsu thresholding algorithm based on improved histogram". Pattern Recognition, 2009. CCPR 2009. Chinese Conference on: 1-5. KB1 bakım: Birden fazla ad: yazar listesi (link)

Dış bağlantılar

  • Implementation of Otsu's thresholding method 8 Mart 2021 tarihinde Wayback Machine sitesinde arşivlendi.
  • Lecture notes on thresholding 17 Şubat 2016 tarihinde Wayback Machine sitesinde arşivlendi.
  • A plugin for ImageJ 4 Kasım 2015 tarihinde Wayback Machine sitesinde arşivlendi.
  • A full explanation of Otsu's method 18 Ekim 2015 tarihinde Wayback Machine sitesinde arşivlendi.
  • Implementation of Otsu's method 24 Ekim 2015 tarihinde Wayback Machine sitesinde arşivlendi.
  • Otsu Thresholding in C# 4 Ocak 2012 tarihinde Wayback Machine sitesinde arşivlendi.
  • Otsu's method using MATLAB 26 Ekim 2015 tarihinde Wayback Machine sitesinde arşivlendi.
  • Otsu Thresholding with scikit-image in Python 9 Mart 2021 tarihinde Wayback Machine sitesinde arşivlendi.