|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
$ Y- `2 z" Y3 y5 V4 M. h( P
一、简介
- Q# ]0 e' {* @7 Z# | l1 W5 V' y+ G
{- q0 J" c! k7 }% N8 Z0 g+ {/ F
由Otsu(大津展之)于1978年提出的最大类间方差法,是引起较多关注的一种阈值选取方法。它是在判决分析或最小二乘原理的基础上推导出来的。. _( d: \- K& x
2 g& c. q! l n( M9 C
参考文献:
1 I. X/ G& P7 J; f7 ~% }
& D7 u4 J3 w) ? M! a[1] Otsu N. A threshold selection method from gray-level histogram. IEEE Trans,1979;SMC-9;62-66 下载地址9 f6 t/ l W9 I7 `/ t
5 w5 U9 z% N4 R% e5 @
算法思想:6 M7 m, Q' B8 A$ |7 ?
: V$ x; y! o9 U( M假设一幅图像有L个灰度级[1,2,…,L]。灰度级为i的像素点的个数为ni,那么总的像素点个数就应该为N=n1+n2+…+nL。为了讨论方便,我们使用归一化的灰度级直方图并且视为这幅图像的概率分布:: P* [: N- V [; z! m* F1 q
: n0 H; _1 T1 b6 Z
$ p- x, v, s+ a% Q: {/ o
; @- p3 u0 L/ }- ? K
" l+ d |, K8 y( b; p3 Q* N7 _) K: r
) ?% e7 ^/ Z$ x. Q4 f. s: M
+ D9 S- d$ z( ]0 ~' Z
8 t" d! K [9 @0 w! x' D
3 a* G" j5 R; M; D, P& S3 D/ Q6 [
* I/ {8 M: w* i# |0 w$ R: x6 ~' Z9 J, p; U. P& e4 s- c, R# ~6 B/ N/ A
4 P4 w. }# ^8 P- _* J+ g# \/ f+ J
二、源代码
# b9 c* W6 S, t4 {- S. s" m$ H
6 E2 u3 G- d# R) f; B- _- clear
- close all
- clc
- I=imread('rice.png');
- [m,n]=size(I);
- N=m*n;
- L=256;
- for i=1:L
- count(i)=length(find(I==(i-1)));
- f(i)=count(i)/(N); %每个灰度对应的概率,i=1,对应灰度值为0(i-1)
- end
- for i=1:L
- if count(i)~=0
- st=i-1; %开始的灰度值
- break;
- end
- end
- for i=L:-1:1
- if count(i)~=0
- nd=i-1; %结束的灰度值
- break;
- end
- end
- p=st; q=nd-st+1;
- u=0;
- for i=1:q
- u=u+f(p+i)*(p+i-1); %u是像素的平均值
- ua(i)=u; %ua(i)是前i+p个像素的平均灰度值 (前p个无取值)
- end;
- for i=1:q
- w(i)=sum(f(1+p:i+p)); %w(i)是前i个像素的累加概率,对应公式中P0
- end;
- w=w+eps;
- %对照sigmaB的公式写出目标函数。实际是遍历所有值
- d=(w./(1-w)).*(ua./w-u).^2;
- [y,tp]=max(d); %可以取出数组的最大值及取最大值的点
- th=tp+p;
- figure;imshow(im2bw(I,th/255),[]); title('最大类间方差');
- %% matlab自带函数
- figure;imshow(im2bw(I,graythresh(I)),[]); title('matlab自带');
; w( B: R% W" a1 P
% l; b- a+ r8 R* P3 G5 h
4 R6 I& f" u7 L+ |! c' V. ^: v7 C! k
三、运行结果4 ~; G8 e; S$ B. `2 P, }
" M# f4 p& ?1 s
$ s) A7 p. N1 p( I7 x
: f. k( s- ~8 c% Y/ K+ r- z! ]
: s; Z& v! f/ x- H1 w
|
|