EDA365电子论坛网
标题:
Ostu算法的Matlab源代码以及程序解析
[打印本页]
作者:
ulppknot
时间:
2020-7-16 13:52
标题:
Ostu算法的Matlab源代码以及程序解析
源代码
) ~2 ? u: Z6 I( |2 Q
tic
, I. \. e3 ^+ }8 V- g! o
% function th=Otsu;
0 q( H0 H% I9 `) G5 m
a=imread('22.bmp');
1 W4 p0 v |, C+ @% p; s6 r
c=a;
& c$ Y& a) @0 R$ a' E9 [* V
%imshow(a)
4 s/ m5 G e9 J( [: k
count=imhist(a);%直方图
# I! p4 M7 c% r s% u5 |
[m,n]=size(a);
9 ]- x; K! E& U# `, B8 `* X/ {
N=m*n;
( z0 I( ~( ?3 S/ E5 M5 w5 E8 F
L=256;
1 w0 `2 @+ Y; W
count=count/N;
- L, e% m5 l6 Q9 }
4 K. O" l2 _# m
for i=1: L%这两个循环是将两头不存在的灰度值去掉,提高运行速度
$ V' I/ B$ D3 U
if count(i)~=0
5 H; v( v5 i6 R8 H) y
st=i-1;
* ~1 C; Q. z' _- |* P
break;
7 o7 f0 @6 {% L) f/ l/ d) N
end
2 ]/ ~* l6 F$ R9 |
end
1 U% e v/ d: k) ?. v2 @: w7 {
for i=L:-1:1
9 F1 N* k- e |& `: t( ^
if count(i)~=0
1 [1 h& D: h# b) M& m8 y' F
nd=i-1;
+ {( S) }$ {4 X; s
break;
0 g) h8 J4 n( Z7 X! L9 ?
end
& i/ O. f3 U) o( \$ a1 z, Y; N
end
5 B+ d; v8 p X7 i1 A& y4 k! J
f=count(st+1:nd+1); %f是每个灰度出现的概率
+ v# S; L! g- ]+ D! q; B# m# |
p=st; q=nd-st;
+ t' F7 r3 O! x: w) @* b2 N5 ~ u
u=0;
$ j- Q5 Z1 W# v/ T5 M6 `: n) ]
for i=1:q
# P5 R5 N* }* Y: p
u=u+f(i)*(p+i-1); %u是像素的平均值
. K8 S0 t( N+ [" z: F/ Y4 q9 b: ^$ c
ua(i)=u; %ua(i)是前i个像素的平均灰度值
0 [$ |- V& k& ~' Y- ]. c/ C2 m
end;
1 Z7 s- S2 U& E
" y5 o! @3 B E5 U/ [0 @1 f
for i=1:q
2 e; D/ Z7 k* B, J" L; F2 K) H8 E
w(i)=sum(f(1:i)); %w(i)是前i个像素的累加概率??
1 o" a$ e( V& b+ ?: e
end;
$ Q8 t) \, G" `* ]% m
3 \! d0 h6 c- s" T
d=(u*w-ua).^2./(w.*(1-w));
0 l* L! n' _2 w, S: U$ I9 f
[y,tp]=max(d); %可以取出数组的最大值及取最大值的点
' |; g4 }4 K" m9 l6 q1 ]
th=tp+p;%这一句很重要
! Z! s! W1 H% V/ q9 C% X
% r. x% P0 m) A
for i=1:m%二值化
+ V7 m+ l- l2 ~, E; D0 J
for j=1:n
- G- m' l- w Z5 b9 q- D5 g8 q
if a(i,j)>th
. o1 @7 e& k, \0 Y9 V. z3 e
a(i,j)=0;
# }7 V* [: D/ p6 G" S8 M- U1 _
else
/ M* w( e7 k7 R" b; S
a(i,j)=255;
4 U g6 R3 M* z+ V6 x$ ?% |" A
end
# W# H) i \* |. r
end
" T: b' n% W( @$ E% ?. I
end
) ^, W- S- b! E
subplot(2,1,1),imshow(c);
* f5 `5 n! E! s- R' I
subplot(2,1,2),imshow(a);
/ a$ Z4 p# m% E9 m: M' c# j& @0 |
toc%tic,toc可以显示程序运行时间
0 a4 d$ |; N8 ~. o5 c
5 d5 E% }* b3 Y0 v: K
: L! I1 Y1 U9 ?
% Y. H/ R8 J: g/ B
作者:
SsaaM7
时间:
2020-7-16 14:53
Ostu算法的Matlab源代码以及程序解析
欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/)
Powered by Discuz! X3.2