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

来源:百度知道 编辑:UC知道 时间:2024/06/20 14:46:39
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

a=imread('YuChu.bmp');
如果读入的是彩色图,需要用a=rgb2gray(a);转换为灰度图
加了这句我运行了下,程序没出现错误也能出图

另外matlab图像处理工具箱中用level = graythresh(I)函数去阈值,其方法与你的方法一致,都是Otsu方法

补充:
你看看a读入时数据的大小,要是3维的话就是RGB图像了,需要转一下
另外是程序错误还是结果不对?