为什么我用matlab大津法没法运行,且自动阈值确定的阈值明显错误

程序如下I=imread('2.bmp');subplot(131),imshow(I);title('原始图像')level=graythresh(I);BW=im2b... 程序如下
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左右,但不知到错哪,请高手指点,我把积分全部赠送
展开
 我来答
amnesiack
2013-12-31 · TA获得超过397个赞
知道小有建树答主
回答量:218
采纳率:50%
帮助的人:188万
展开全部
其实im2bw你要不加参数的话matlab默认用的就是otsu~~
追问
您好,谢谢您的这么多天的帮助,为什么我用大津法一直运行不了,我已经弄了三天,还是不知道,希望您能帮我分析一下。明白你的意思,但是我想要的精度高一些。这个程序没问题,但是为什么我运行不了。谢谢赐教
追答

% 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);

貌似是你的图片有个白框的原因~~你把白框去掉就好了~~

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式