matlab显示灰度直方图程序调试?

来源:百度知道 编辑:UC知道 时间:2024/09/13 02:53:24
i1=imread(1.jpg);
[height,width]=size(i1);
total=height*width;
for i=1:height
for j=1:width
num(i1(i,j))=num(i1(i,j))+1;
for k=0:255
num(k)=num(k)/total;
end
end
end??? Undefined function or variable "num".

>>
请问该显示灰度直方图程序,在结构上有误吗?
下面显示的错误,怎么定义这个变量“num"
谢谢各位兄弟帮忙解答!
该程序修改后如下:
[height,width]=size(i1);
total=height*width;
for i=1:height
for j=1:width
num=zeros(1,256)
num(i1(i,j)+1)=num(i1(i,j)+1)+1;
for k=1:256
num(k)=num(k)/total;
end
end
end
还是没有运行成功。请问哪位大哥再 帮忙调试一下,非常感谢!

问题在哪里我也没有看出来
不过建议你还是先定义数组num,并进行初始化为0

试试下面的命令:
y=imread('bmp文件');
x=0.11*y(:,:,1)+0.59*y(:,:,2)+0.3*y(:,:,3);
imshow(x)

我真是搞不懂了,已经告诉你
n=hist(i1(:),0:255);
就是统计i1的0到255的个数了。把n里的数全部加起来就是所有像素点的个数。
你要算频率直接再加一句
num=n/sum(n);
不就完了吗。犯得着用循环嘛。

而且频率直方图和频数直方图形状不是完全一样的嘛,就是相差了sum(n)倍。

num变量要先初始化,
num=zeros(1,256);
另外,matlab里的下标都是从1开始的,所以
for k=0:255
num(k)=num(k)/total;
end
上面这个循环是错的。。。应该从1到256
因此,求直方图那个循环应该改成num(i1(i,j)+1)=num(i1(i,j)+1)+1;
接着应该没什么大问题了

num根据你的需要来定义,需要多大就定义多大。
另外,num(i1(i,j)),这里面的i1(i,j)是啥意思?