基於Otsu的全域性閾值處理的實現
阿新 • • 發佈:2019-02-08
基於Otsu的全域性閾值處理又稱最大類間方差法,即在對影象進行閾值分割時,選定的分割閾值應使前景區域的平均灰度,背景區域的平均灰度與整幅影象的平均灰度之間差別最大,這種差異用區域的方差來表示
設影象中灰度為i的畫素數為ni,灰度範圍為[0,L-1], 總的畫素數為
各灰度值出現的概率為
對於Pi
把圖中的畫素用閾值T分為兩類C0和C1,C0由灰度值在[0,T-1]的畫素組成,C1由灰度值在[T,L-1]的畫素組成,則區域C0和C1的概率分別為
區域C0和C1的平均灰度分別為:
U是整幅影象的平均灰度
兩個區域的總方差為:
讓T在[0,L-1]範圍內依次取值,使區域方差最大的T值便是最佳區域分割閾值
Matlab程式碼實現
I=imread('car.jpg'); %讀入影象
I=I(:,:,1);
figure(1);
imshow(I);
[m,n]=size(I);
[counts,x]=imhist(I,256); %灰度級為[0,255]
[Q,~]=size(x)
Pi=counts/m/n;
Variance=zeros(1,Q); %存放區域方差
for k =1:Q-1
P0=sum(Pi(1:k))
P1=sum(Pi(k+1:Q))
Mu0=(1/P0)*([1:k]*counts(1:k));
Mu1=(1/P1)*([k+1 :Q]*counts(k+1:Q));
Mu=P0*Mu0+P1*Mu1;
variance=P0*P1*(Mu0-Mu1)^2;
Variance(k)= variance;
end
[m1,n1]=max(Variance);
I1=im2bw(I,n1/255);
figure(2);
imshow(I1)
執行結果:T=n1=137
以上是關於Otsu的全域性閾值處理的實現,歡迎大家一起交流學習