Ostu最大类间差方法
?
Ostu方法又名最大類間差方法,通過統計整個圖像的直方圖特性來實現全局閾值T的自動選取,其算法步驟為:
1) 先計算圖像的直方圖,即將圖像所有的像素點按照0~255共256個bin,統計落在每個bin的像素點數量
2) 歸一化直方圖,也即將每個bin中像素點數量除以總的像素點
3) i表示分類的閾值,也即一個灰度級,從0開始迭代
4) 通過歸一化的直方圖,統計0~i 灰度級的像素(假設像素值在此范圍的像素叫做前景像素) 所占整幅圖像的比例w0,并統計前景像素的平均灰度u0;統計i~255灰度級的像素(假設像素值在此范圍的像素叫做背景像素) 所占整幅圖像的比例w1,并統計背景像素的平均灰度u1;
5) 計算前景像素和背景像素的方差 g = w0*w1*(u0-u1) (u0-u1)
6) i++;轉到4),直到i為256時結束迭代
7)將最大g相應的i值作為圖像的全局閾值
?
?
?
clear all;close all;clc
img=imread('C:\Users\hjd\Desktop\test1.jpg');
if ndims(img)==3
??? img = rgb2gray(img);
end
?[count, x] = imhist(img);
ostu_result = [];
sum_pixel = sum(count(:));
count_w = count(:)/sum_pixel;
count_u = count(:).*x(:);
for i=1:256
??? w0 = sum(count_w(1:i));
??? sum_u0 = sum(count_u(1:i));
??? u0 = sum_u0/sum(count(1:i));
??? if i==256
??????? w1=0;
??????? u1=0;
??? else
??????? w1 = sum(count_w(i+1:end));
??????? sum_u1 = sum(count_u(i+1:end));
??????? u1 = sum_u1/sum(count(i+1:end));
??? end
??? ostu_result(i) = w0*w1*(u0-u1)^2;
end
[index,maxValue]=max(ostu_result);
level = graythresh(img);
?
總結
以上是生活随笔為你收集整理的Ostu最大类间差方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Jacobian 和Hessian矩阵
- 下一篇: matlab reshape矩阵维度变换