matlab求图像直方图的方差

这是我求一张图片的直方图的最简单程序,我需要求直方图的方差,但是imhist返回的数值和方差ver要用的输入数值类型不同,能告诉我怎样转换或怎样求吗?谢谢!%输入图片im... 这是我求一张图片的直方图的最简单程序,我需要求直方图的方差,但是imhist返回的数值和方差ver要用的输入数值类型不同,能告诉我怎样转换或怎样求吗?谢谢!

%输入图片
img=imread('C:\Users\rino.wang\Desktop\project\chicken.jpg');
%变为灰度图
f=rgb2gray(img);
%显示直方图
h=imhist(f);
figure,imhist(f);
%算标准差和方差
sp1=std(f);
sp2=var(f);-----------------此式子不能正确运行

我的原图和求得的直方图:
展开
 我来答
tianxiawulang
推荐于2016-02-25 · TA获得超过2.7万个赞
知道大有可为答主
回答量:4732
采纳率:89%
帮助的人:2673万
展开全部

不仅仅是求方差var不行吧?标准差std应该也不行(其实标准差就是调用方差函数再开平方)。

 

原因是,图像数据的类型是整数(uint8),要想进行方差之类的计算,需要转化为浮点数(double或single):

std(double(f))
var(double(f))

另外需要注意,由于f是矩阵,var或std都是对各列进行的,所以得到的结果是行向量。要想得到整个矩阵的方差,应该用:

>> var(double(f(:)))
ans =
  5.1473e+003
>> std(double(f(:)))
ans =
   71.7444
更多追问追答
追问
谢谢!可以运行了~
还有一个问题:你的式子里是对 f 求方差,也就是对灰度图求方差,我想对直方图求方差,是不是就可以把 f 改成 h ?得到的结果是直方图方差吗?
追答
如果对h求方差,就不需要转换了,直接var(h)就可以,因为h本身就是double类型的。
h是灰度图每种颜色的计数,共256个元素,对应256级灰度,也就是imhist图中显示的那个直方图。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式