用最簡單的代碼實現大津算法(最大類間方差法otsu)

最大類間方差法是1979年由日本學者大津提出的,是一種自適應閾值確定的方法,又叫大津法,簡稱OTSU,是一種基於全局的二值化算法,它是根據圖像的灰度特性,將圖像分爲前景和背景兩個部分。當取最佳閾值時,兩部分之間的差別應該是最大的,在OTSU算法中所採用的衡量差別的標準就是較爲常見的最大類間方差。前景和背景之間的類間方差如果越大,就說明構成圖像的兩個部分之間的差別越大,當部分目標被錯分爲背景或部分背景被錯分爲目標,都會導致兩部分差別變小,當所取閾值的分割使類間方差最大時就意味着錯分概率最小。

圖像分割成背景和目標兩部分。需要背景和目標之間的類間方差最大。

圖像f(x,y)前景和背景分割的閾值記爲T

W0:前景的像素點數佔整幅圖像的比例;V0:前景的平均灰度

W1:背景的像素點數佔整幅圖像的比例;V1:背景的平均灰度

V: 圖像的總平均灰度

g:類間方差

我們假設圖像的大小爲MxN,N0爲<T的像素個數,N1爲>T 的像素個數

W0=N0/(MxN) ;W1=N1/(MxN);N0+N1=MxN;W0+W1=1

V=W0*V0+W1*V1;g=W0(V0-V)^2+W1(V1-V)^2

=>g=W0W1(V0-V1)^2


下面給出OTSU的matlab代碼:


l=imread('rice.png')

figure

subplot(2,2,1);imshow(I);

subplot(2,2,2);imhist(I);

 

[M,N]=size(I);

Ivarm=0;

T=0;      %前景和背景的閾值

Iav=mean(mean(I));  %圖像的平均灰度

 

for TT=min(min(I)):max(max(I)) %遍歷所有的像素點,尋找合適閾值

   

    Ib=I(I>=TT);   %背景

    pb=length(Ib)/(M*N);  %背景像素點數佔圖像的比例

    Ibav=mean(Ib);         %背景的平均灰度

    If=I(I<TT);            %前景

    pf=length(If)/(M*N);   %前景像素點數佔圖像的比例

    Ifav=mean(If);         %前景的平均灰度

    Ivar=pb*pf*(Ibav-Ifav)^2;    %當前類間方差

    if Ivar>Ivarm

        Ivarm=Ivar;               %當前最大類間方差

        T=TT;                     %當前最大類間方差下的閾值

    end

end


用到的圖片如下,下載下來文件名稱改成‘rice.png’即可




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章