推導大致過程:
對一幅大小為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 計算標準差,標準差...