|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
9 l, z, [9 A+ o {8 x. s, s+ B一、简介
c1 k% _! N5 f2 g3 t5 v3 Z( s7 O2 s( S5 e4 q, D/ e" E
* B! i6 I- d. r) w+ \由Otsu(大津展之)于1978年提出的最大类间方差法,是引起较多关注的一种阈值选取方法。它是在判决分析或最小二乘原理的基础上推导出来的。$ t7 [2 y6 J0 Z5 {
+ \, j7 ^3 f" [; T参考文献:8 P) u/ Y# I( J0 x7 l% I# L6 f
+ n W4 P: w3 z
[1] Otsu N. A threshold selection method from gray-level histogram. IEEE Trans,1979;SMC-9;62-66 下载地址5 u! s7 f0 k; ^# z
. w* m0 G- J; L f% _, _( d算法思想:
. Y7 ?; e) B1 `2 d" l/ A/ S) j$ D/ {7 U9 r" x6 V7 N3 @ I6 I6 W% X0 M
假设一幅图像有L个灰度级[1,2,…,L]。灰度级为i的像素点的个数为ni,那么总的像素点个数就应该为N=n1+n2+…+nL。为了讨论方便,我们使用归一化的灰度级直方图并且视为这幅图像的概率分布:
7 X$ c6 D( z- l( c8 j/ @2 b. E k# x& O# k' O5 Z7 g
. |5 `5 d3 `! j- O! O( E6 {
7 O* T" @; F( C
( R: M7 H4 ?- a, ~ c
, Z7 Z8 J; Y& E- ] u- w5 j3 k1 l* c1 t1 Y" J, Y
: o% F" e7 C/ o4 U2 I2 D1 o& X
/ Z9 Q) |5 A S2 s9 p3 }5 e" ` q
; L. Y7 a9 B; m" Q
3 `' J9 h- \- M/ | u" A1 Q6 X
( Y/ x: k# U2 @" A二、源代码
3 w# Z( O! R9 R' R8 z F , K- }% L. F I) X- ~7 Q
- 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自带');
- ' b, c/ f0 A3 D, I* z& @9 `- x
: s) m$ r3 f9 j
8 ~4 F2 ]. z; {! d V h
! K I; L" U; G7 y7 K! n6 O三、运行结果7 o' R( l& ?1 S* Q9 k4 V7 r$ g
5 u3 f& C# e! I# A! M5 R
- Q' s& Q1 N# M3 N( }# t4 I3 S# e+ m( w1 i7 N, r
8 A+ l( W& @5 }0 J' v
|
|