matlab for循环求图象直方图

我自己编了个程序,如求一幅256色图像的直方图f=imread('A.jpg');[m,n]=size(f);a=zeros(256,1);fori=1:mforj=1:... 我自己编了个程序,如求一幅256色图像的直方图
f=imread('A.jpg');

[m,n]=size(f);
a=zeros(256,1);
for i=1:m
for j=1:n
a(f(i,j)+1)=a(f(i,j)+1)+1;
end
end
a(k)理论上应该是灰度为k-1的点的个数,但是a(255)和a(256)的数据不对,求大神告知为什么
展开
 我来答
电动炉钩子
推荐于2017-12-16 · TA获得超过1568个赞
知道小有建树答主
回答量:614
采纳率:0%
帮助的人:800万
展开全部
首先, Matlab有自带的图像直方图函数
a = imhist(f); %你的f需要是灰度图

然后来看你的代码问题。 f的类型是uint8,它的上限就是255,uint8(255)+1 还是等于 255。错误就在这里啦。
如果要改的话可以这样
f = double(imread('A.jpg'));

最后,如果非要自己写直方图函数。你的代码太慢啦~
for i = 0 : 255
a(i+1) = sum(f(:)==i);
end
这样就快多了。
追问
恩, 这我后来发现了,我试了一下,我代码其实比你的快,比系统自带的慢多了,分就给你了
追答
那应该是你的图片非常小吧...否则你的循环数太多肯定比我的慢的。
匿名用户
2013-04-03
展开全部
菜鸟共同探讨下哈,你其他的都对?一般matlab中最好不要随便用i,j当变量,可能会出问题的。
追问
其他都对啊,他把a(256)的值加到了a(255)上,a(256)的值为0,就是说灰度为255的点的个数他显示是0个
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式