为什么我用matlab大津法没法运行,且自动阈值确定的阈值明显错误
I=imread('2.bmp');
subplot(131),imshow(I);
title('原始图像')
level=graythresh(I);
BW=im2bw(I,level);
subplot(132),imshow(BW)
title('graythresh计算阈值')
disp(strcat('graythresh计算灰度阈值:',num2str(uint8(level*255))))
iMax=max(max(I));
iMin=min(min(I));
T=double(iMin:iMax);
iSize=size(I);
muxSize=iSize(1)*iSize(2);
for i=1:length(T)
TK=T(1,i);
iForeground=0;
iBzckground=0;
ForegroundSum=0;
BzckgroundSum=0;
for j=1:iSize(1)
for k=1:iSize(2)
tmpData=I(j,k);
if(tmpData>=TK)
iForeground=iForeground+1;
ForegroundSum=ForegroundSum+double(tmpData);
else
iBackground=iBackground+1;
BackgroundSum=BackgroundSum+double(tmpData);
end
end
end
w0=iForeground/muxSize;
w1=iBackground/muxSize;
u0=ForegroundSum/iForeground;
u1=BackgroundSum/iBackground;
T(2,i)=w0*w1*(u0-u1)*(u0-u1);
end
oMax=max(T(2,:);
idx=find(T(2,:)>=oMax);
T=uint8(T(1,idx));
disp(strcat('简化大津法计算灰度阈值:',num2str(T)))
BW=im2bw(I,double(T)/255);
subplot(133),imshow(BW)
title('简化大津法计算灰度阈值')
运行结果
graythresh计算灰度阈值:196
??? Undefined function or method '_colonobj' for input arguments of type 'uint8'
and attributes 'full 3d real'.
明显是错误的,阈值应该在100左右,但不知到错哪,请高手指点,我把积分全部赠送 展开
您好,谢谢您的这么多天的帮助,为什么我用大津法一直运行不了,我已经弄了三天,还是不知道,希望您能帮我分析一下。明白你的意思,但是我想要的精度高一些。这个程序没问题,但是为什么我运行不了。谢谢赐教
% Otsu-最大类间方差
clc
clear
x=imread('1.jpg');
a=rgb2gray(x);
figure
imshow(a)
count=imhist(a);
[m,n]=size(a);
N=m*n;
L=256;
count=count/N;
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
f=count(st+1:nd+1); %f是每个灰度出现的概率
p=st; q=nd-st;
u=0;
for i=1:q
u=u+f(i)*(p+i-1); %u是像素的平均值
ua(i)=u; %ua(i)是前i个像素的平均灰度值
end;
for i=1:q
w(i)=sum(f(1:i)); %w(i)是前i个像素的累加概率
end;
d=(u*w-ua).^2./(w.*(1-w));
[y,tp]=max(d); %可以取出数组的最大值及取最大值的点
th=tp+p;
for i=1:m
for j=1:n
if a(i,j)>th
a(i,j)=255;
else
a(i,j)=0;
end
end
end
figure
imshow(a);
貌似是你的图片有个白框的原因~~你把白框去掉就好了~~