|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
0 U9 H: c A5 d( M
一、简介' h# ~4 Z. h! y% Y3 x
L% m8 k* Q- u. x, w, @ }5 O# W8 i
由Otsu(大津展之)于1978年提出的最大类间方差法,是引起较多关注的一种阈值选取方法。它是在判决分析或最小二乘原理的基础上推导出来的。1 L2 S6 o- V5 U. J. i
: `+ f: V% S8 \1 N6 |参考文献:8 Q- Z, W/ n0 @( u/ p" m
) Z, A6 D- u, h: V6 @* q
[1] Otsu N. A threshold selection method from gray-level histogram. IEEE Trans,1979;SMC-9;62-66 下载地址
, W% ^/ p5 v: H2 _) J5 S A8 k- M! |" P f1 M( T" I( ^
算法思想:4 Q) E. ]: X4 n/ c4 C" u0 l
: B1 d( i: E! d9 _- F; s3 [
假设一幅图像有L个灰度级[1,2,…,L]。灰度级为i的像素点的个数为ni,那么总的像素点个数就应该为N=n1+n2+…+nL。为了讨论方便,我们使用归一化的灰度级直方图并且视为这幅图像的概率分布:& {% L: G: C$ t2 S3 E& d- N) H
! r' y, l/ T2 B* w' `) l# u
4 K# H# M: `& {% w7 w+ j+ _4 _
4 ]( S% y9 o- v0 K6 y" b$ ?
) G$ W3 l7 T5 r# V9 u- c+ N1 l
' ~' ?$ ?) e" `; ?8 C+ ~1 {
/ J5 j/ |3 L; `* r! d& t
/ | ?' f3 L: \! ]4 G" i: q4 l) e# h# u
2 A" g0 R! k' S+ \1 S$ [
+ E2 L/ G6 H) V1 N4 c
" f" ~7 n" Y! k5 e' J3 |
二、源代码
5 U% O7 N! S1 t- d8 E) J1 k
. f/ N5 Q+ I' c& |- 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自带');
- 0 J- J- X- E6 N* i, ~$ r# T8 a
! r( x* C! d9 i- t3 q/ J m
1 ^/ @4 Y+ h# k6 b+ g& m6 p6 j2 w) o& B3 B0 G; A4 @/ }! S: d
三、运行结果. o2 F: G+ |/ m. D
) }2 J! ~& S2 r# ~8 P1 ~! z
" t2 c' S) x- Q, V; n3 A ~2 e( v* [: n+ r& A( ]* d3 p- y
0 a+ a0 @9 ~4 i4 d7 @' m: C; e
|
|