寻找灰度图象分割阈值的matlab程序,结果不对,不知道问题在哪?

[复制链接]
查看11 | 回复1 | 2008-11-25 20:38:59 | 显示全部楼层 |阅读模式
P1(t)=h(z)的累加 from z=0 到 z=t (1)
P2(t)=h(z)的累加 from z=t+1 到z=L-1
U1(t)=h(z)*z的累加 from z=0 到z=t,累加后的结果再除以P1(t) (2)
U2(t)=h(z)*z的累加from z=t+1 到z=L-1,累加后的结果再除以P2(t)
K1(t)=(z-u1(t))* (z-u1(t))*(z-u1(t) 的累加 from z=0 到z=t,累加后的结果再除以P1(t)
K2(t)= (z-u2(t))* (z-u2(t))*(z-u2(t) 的累加from z=t+1 到z=L-1,累加后的结果再除以P2(t) (3)
K(t)=|k1(t)|+|k2(t)| (4)
这是一个寻找最佳阈值进行图像分割的方法,根据公式4求得以各个灰度值做为阈值计算得出的偏态值,存入到tab()数组中,其中最小值tab(i)对应的i-1即为最佳阈值。可是运行的结果出来后,tab数组中256个值都是0。请问程序哪儿出错了呢?应该怎样改呢?
a=imread('YuChu.bmp');
[M,N]=size(a);
h=imhist(a); %h中存放直方图数据
for i=1:256
tab(i)=0;
end
p=0;u=0;
p1=0;u1=0;
for i=0:255
p=p+h(i+1);
u=u+h(i+1)*i;
end
for j=0:255
for i=0:j
p1=p1+h(i+1);
u1=u1+h(i+1)*i;
end
p2=p-p1;
u2=u-u1;
if (p1) %计算一阶统计矩,公式2
u1=u1/p1;
else
u1=0;
end
if (p2)
u2=u2/p2;
else
u2=0;
end
k1=0;k2=0;
for i=0:j
k1=k1+(i-u1)*(i-u1)*(i-u1)*h(i+1);
end
for i=j:255
k2=k2+(i-u2)*(i-u2)*(i-u2)*h(i+1);
end
if(p1)
k1=k1/p1; %计算三阶矩,公式3
else
k1=0;
end
if(p2)
k2=k2/p2;
else
k2=0;
end
tab(j+1)=abs(k1)+abs(k2); %得总偏态值,公式4
end
Min=tab(127);
q=127;
for i=0:255
if(tab(i+1)=q)
a(i,j)=255;
else
a(i,j)=0;
end
end
end
imshow(a);
这是最小偏态二值化法,Yuchu。bmp是我处理过后的灰度图。为什么tab数组里的值都是0呢?按理说不可能的啊!

回复

使用道具 举报

千问 | 2008-11-25 20:38:59 | 显示全部楼层
a=imread('YuChu.bmp'); 如果读入的是彩色图,需要用a=rgb2gray(a);转换为灰度图 加了这句我运行了下,程序没出现错误也能出图 另外matlab图像处理工具箱中用level = graythresh(I)函数去阈值,其方法与你的方法一致,都是Otsu方法补充:你看看a读入时数据的大小,要是3维的话就是RGB图像了,需要转一下另外是程序错误还是结果不对?...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行