资源简介
一维OTSU算法及相应的论文,希望对学习这方面的朋友有所帮。
代码片段和文件信息
function ostu1
%原始的一维otsu算法
close all;
clear all;
tic;
I_gray = imread(‘f:\学习\数字图像处理\棉花布匹瑕疵检测\棉花\MyTest\方智图像库\qiche.jpg‘);
I_gray = rgb2gray(I_gray);
figureimshow(I_gray);
I_d = double(I_gray);%转化为双精度
[widlen] = size(I_gray);
graylevel = 256; %灰度级
%统计直方图
% hist=imhist(I_gray_h); %灰度级出现的次数
hist=zeros(graylevel1); %直方图
for i=1:wid
for j=1:len
m=uint8(I_gray(ij))+1; %像素值,加1是因为m作为索引不能为0
hist(m)=hist(m)+1; %灰度级出现的次数
end
end
hist=hist/(wid*len); %直方图归一化灰度级出现的频率
%整幅图像的均值
miuT=0;
for m=1:graylevel
miuT=miuT+(m-1)*hist(m);
end
%遍历所有灰度值求最佳阈值
xigmaB2=0;
for k=2:graylevel
threshold=k-1;
%两部分各自出现的概率
omega1=0;
miu1=0;
for m=1:threshold
omega1=omega1+hist(m);
miu1=miu1+(m-1)*hist(m);
end
omega2=1-omega1;
miu2=miuT-miu1;
if omega1==0||omega1==1 %omeiga要做分母不能为0
continue;
end
miu1=miu1/omega1;
miu2=miu2/omega2;
%最大类间方差的判断
% xigmaB=omega1*(miu1-miuT)^2+omega2*(miu2-miuT)^2;
xigmaB=omega1*omega2*(miu1-miu2)^2;
if xigmaB>xigmaB2
T=threshold;
xigmaB2=xigmaB;
end
end %阈值归一化
bin=zeros(widlen);
for i=1:wid
for j=1:len
if I_d(ij)>T
bin(ij)=1;
end
end
end
figureimshow(bin);
toc;
% % 全局变量(迭代阈值)
% function quanju
% data=imread(‘f:\学习\数字图像处理\棉花布匹瑕疵检测\棉花\MyTest\方智图像库\houzi.jpg‘);
% figureimshow(data);
% data = rgb2gray(data);
% T=0.5*(double(min(data(:)))+double(max(data(:))));%设计初始的估计值(此时如果没有(:)的话,求出来的T是个向量而不是一个数值)
% done=false; %迭代完成标志(意思是done=0)
% while ~done %迭代循环(done不为0就执行下面的循环语句;done为0,~done不为0,当done不为0时,~done为0)
% g=data>=T;
% Tnext=0.5*(mean(data(g))+mean(data(~g))); %两范围的均值
% done=abs(T-Tnext)<0.5;%迭代值与原来的阈值之差小于0.5,迭代结束(满足此条件也直接结束循环)
% T=Tnext;
% end
% figureimshow(g);
%
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2012-12-06 21:54 一维OTSU\
文件 3150870 2012-05-07 09:42 一维OTSU\04310076.pdf
文件 2639 2012-09-15 15:33 一维OTSU\ostu1.asv
文件 2497 2012-10-25 15:33 一维OTSU\ostu1.m
评论
共有 条评论