演算法解剖系列 Otsu二值化原理及實現

2021-07-11 21:17:45 字數 3354 閱讀 7518

推導大致過程

對一幅大小為m×

n 的數字影象: 令l

表示灰度級數;ni

表示灰度級為

i 的畫素數,則影象中畫素總數mn

=n1+

n2+n

3+⋅⋅

⋅+nl

; pi

=ni/

mn,p

i 為相對直方圖,即灰度級為

i 出現的概率。則∑l

i=1p

i=1;

設閾值t(k

)=k,

1<

k以將影象

分為c1

和c2兩

類,灰度

值範圍分

別為[1

,k]和

[k+1

,l] 。 由

(3)和

(4) 得: p1

m1+p

2m2=

mg(7)

類間方差: σ2

b=p1

(m1−

mg)2

+p2(

m2−m

g)2(8) 將

(7)中

的mg代

入(8)

中,以及

由p1+

p2=1

得:σ2

b=p1

p2(m

1−m2

)2(9)

最後由(3)

(5)得

m1=1

p1m,

由(7)

得m2=

mg−p

1mp2

,以及由

p1+p

2=1得

: σ2b

=(mg

p1−m

)2p1

(p1−

1)所以要獲取類間方差,只需要計算全域性均值mg

、k級的

累加均值

m和累加

概率p1

。 設σ

2g代表

全域性方差

,η表示可分性度量,表示可分割性: σ2

g=∑i

=1l(

i−mg

)2pi

η=σ2bσ2

g 最終的要計算的是: σ2

b(k)

=(mg

p1(k

)−m(

k))2

p1(k

)(p1

(k)−

1)(10) η

(k∗)

=σ2b

(k∗)

σ2g(11) k

∗是最佳

閾值,即

σ2b(

k)為最

大值的k

值。1. 計算輸入影象的相對直方圖:根據pi

=ni/

mn;2. 計算畫素被分到c1

累計和p

1(k)

,根據上

式(1)

;3. 計算累計均值m(

k),根

據上式(

5);4. 計算全域性灰度均值mg

,根據上

式(6)

;5. 計算類間方差σ2

b(k)

,根據上

式(10)

;6. 獲取最大的σ2

b(k)

中的k 值,即為最佳閾值;

7. 計算可分性度量η∗

,根據上

式(11)

close all;
clear all;

clc;

input = imread('r.png');%讀圖

input = rgb2gray(input);%灰度轉換

l = 256;%給定灰度級

[ni, li] = imhist(input,l); %ni-各灰度等級出現的次數;li-對應的各灰度等級

% figure,plot(xi,ni);%顯示絕對直方圖統計

% title('絕對直方圖統計')

[m,n] = size(input);%獲取影象大小

mn = m*n;%畫素點總數

%%step1 計算歸一化直方圖

pi = ni/mn; %pi-統計各灰度級出現的概率

figure,plot(li,pi);%顯示相對直方圖統計

title('相對直方圖統計')

%%step2 計算畫素被分到c1中的概率p1(k)

sum = 0;%用來儲存各灰度級概率和

p1 = zeros(l,1);%用來儲存累積概率和

for k = 1:l

sum = sum +pi(k,1);

p1(k,1) = sum;%累加概率

end%%step3 計算畫素至k級的累積均值m(k)

sum1 = 0;%用來儲存灰度均值

m = zeros(l,1);%用來儲存累計均值

for k = 1:l

sum1 = sum1+k*pi(k,1);

m(k,1) = sum1;%累積均值

end%%step4 計算全域性灰度均值mg

mg = sum1;

%%step5 計算類間方差sigmab2

sigmab2 = zeros(l,1);

for k = 1:l

if(p1(k,1) == 0)

sigmab2(k,1) = 0; %為了防止出現nan

else

sigmab2(k,1) = ((mg*p1(k,1)-m(k,1))^2)/(p1(k,1)*(1-p1(k,1)));

endend%%step6 得到最大類間方差以及閾值

[msigmab2,t] = max(sigmab2);%獲取最大類間方差msigmab2,以及所在位置(即閾值)

output = zeros(m,n);%定義二值化輸出影象

fori = 1:m

forj = 1:n

if input(i,j)>t

output(i,j) = 1;

else

output(i,j)=0;

endendend

figure,imshow(output);%顯示結果

%%step7 可分性度量eta

sigmag2 = 0;%全域性方差

OTSU常用的二值化方法

otsu演算法稱為大律法或最大類間方差法 原理 利用閾值將原影象分成前景,背景兩個圖象。前景 用w0,u0表示在當前閾值下的前景的點數佔影象的比例,前景的平均灰度值 背景 用w1,u1表示在當前閾值下的背景的點數佔影象的比例,背景的平均灰度值 當取最佳閾值時,背景應該與前景差別最大,關鍵在於如何選擇...

OTSU二值化方法的MATLAB實現

影象二值化的方法有很多,但是由於matlab中的影象二值化就是採用的otsu方法,那在某種程度上證明了這種演算法的優秀,所以我也準備採用這種方法來進行影象二值化。首先來看otsu 中的關於公式的介紹部分 限於個人英文閱讀能力有限,但是根據文獻中的 可以得出最佳閾值是當 b 最大的時候的k。也可以看到...

區域性二值化 Sauvola二值化演算法

借鑑 原理 分塊處理,根據當前塊內的均值,方差等資訊得出區域性閾值 但擔心有突變,分塊不好怎麼辦呢?sauvola是一種考慮區域性均值亮度的影象二值化方法,以區域性均值為基準在根據標準差做些微調.演算法實現上一般用積分圖方法來實現的.步驟1 計算區域畫素積分和和積分平方和 步驟2 計算標準差,標準差...