histogram是一个在图像上应用广泛的一个统计工具,bag-of-word,spatial pymarid matching等等都是基于histogram的。那么如何去做到有效的统计,而不去自己写很长很慢的循环完成这项工作呢?matlab提供了一个非常便利的函数:hist
下面将得到hist的一些函数用法:
设数据为10000个正态分布:y = randn(10000,1)区间从-4到4:x = -4:0.1:4
1.n=hist(Y)
默认十个等间隔区间,并返回每个范围内的Y的元素个数作为一行向量,
2.n=hist(Y,X)
X是一个事先给定的区间划分,统计Y在X这个区间划分下的个数,
3.n=hist(Y,nbins)
nbins是间隔数,也就是说我们应该统计多少个间隔,这里设nbins=20,
4.[n,xout]=hist(...)
返回的参数多了很多,n是每一个区间的个数,xout是区间的中心位置
x轴是范围(bin),y轴是频率(个数),它的bin是1-1.75, 1.75-2.5, 2.5-3.25, 3.25-4 四个范围,3,2,3,2是这些data有多少个属于bin对应的范围,即 3个数据在1-1.75这个范围,2个数据在1.75-2.5的范围,...
[n,bins]=hist(data,4),可以输出对应的bin(这里输出的bin是范围中心的位置,可以换算成以上提到的范围)
使用text 命令,
举个例子
close all ,
x = rand(100,1)
%获得直方图的数据
[n,y] = hist(x)
maxN = max(n)
%设置显示x,y长度限制
axis([0 1.2 0 maxN+2])
%根据直方图的数据绘制出图形
bar(y,n)
for i = 1:length(y)
%直方图上面数据对不齐,利用水平和垂直对齐
text(y(i),n(i)+0.5,num2str(n(i)),'VerticalAlignment','middle','HorizontalAlignment','center')
end
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)