资源简介
数字图像处理大津法阈值分割
代码片段和文件信息
function otsu=otsu(Im)
%大津法计算阈值
I=double(Im);
IMAX=max(max(I));
IMIN=min(min(I));
T=double(IMIN:IMAX);
ISIZE=size(I); %图像大小
muxSize=ISIZE(1)*ISIZE(2);
tic %计时器
for i=1:length(T)
%从最小灰度值到最大灰度值分别计算方差
TK=T(1i);
ifground=0;
ibground=0;
%定义前景和背景的灰度总和
FgroundS=0;
BgroundS=0;
for j=1:ISIZE(1)
for k=1:ISIZE(2)
tmp=I(jk);
if(tmp>=TK)
ifground=ifground+1;
FgroundS=FgroundS+double(tmp); %前景灰度值
else
%背景像素点的计算
ibground=ibground+1;
BgroundS=BgroundS+double(tmp);
end
end
end
%计算前景和背景的比例、平均灰度值
%这里存在一个0分母的情况,导致警告,但不影响结果
w0=ifground/muxSize;
w1=ibground/muxSize;
u0=FgroundS/ifground;
u1=BgroundS/ibground;
T(2i)=w0*w1*(u0-u1)*(u0-u1);
end
%遍历后寻找I第二行的最大值
oMax=max(T(2:));
%第二行方差的最大值,忽略NaN
idx=find(T(2:)>=oMax);
%获得算法运行时间
% disp(strcat(‘大津法时间:‘num2str(toc)));
%方差最大值所对应的序列号
T=uint8(T(1idx));
%显示最佳阈值
% disp(strcat(‘大津法计算阈值为:‘num2str(T)));
%从第一行取出灰度值作为赋值
otsu=T;
end
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 1297 2016-12-08 21:09 otsu.m
- 上一篇:图像处理最大熵阈值分割法
- 下一篇:openvr for htc vive
评论
共有 条评论