优化图像处理中均值和方差计算
优化图像处理中均值和方差计算
一、均值和方差的普通优化
图像处理中,有时候会需要计算图像某区域的均值和方差。在我之前的博客中《图像比较之模板匹配》,对计算方差有做简化计算的介绍。详细介绍可以参考我之前的博文。在此,我简单的介绍下计算方差的简化方法:
按照上述方式计算均值和方差,很多应用场景下都比较合适。但是有两个缺陷:
- 如果均值远大于标准差,意味着方差计算中相减的两个数非常接近,将引入过度舍入的问题;
- 对于新增加一个统计变量重新计算其均值和方差的时候,需要对所有统计变量再重新计算,做了大量的重复工作,效率不高;
经过如下方法简化计算之后,如果新增一个变量计算全体统计变量均值和方差的时候,并不需要重新再对所有变量进行统计计算。只需要保存三个变量即可:当前统计变量数量;当前统计变量和;当前统计变量和平方和:
其BASIC语言实现方式为:
二、利用直方图信息优化均值和方差的计算
图像处理中,也常常会涉及到直方图。假若我们已知了某幅图像的直方图信息,那么我们还有更加简便有效的方式计算图像的均值和方差。我们知道图像直方图中每个bin中所代表的值是具有相同灰度值像素的数量,相当于把图像像素进行了分组统计。这就方便在计算均值和方差也可进行分组计算累加。因此,我们可以依据直方图的信息按照如下公式进行均值和方差的计算:
其BASIC语言实现为:
三、在OpenCV的简单应用
int main()
{int dims = 1;int sizes[] = {256};int type = CV_HIST_ARRAY;float range[] = {0,255};float *ranges[] = {range};CvHistogram *hist = NULL;IplImage *src_img;CvScalar Avg,Std;int i,count;double Avg_Hist = 0,Std_Hist = 0;src_img = cvLoadImage("8Bit_lena.bmp",-1);if(src_img == NULL){printf("wrong input pic\n");return -1;}hist = cvCreateHist(dims,sizes,type,ranges,1);cvCalcHist(&src_img,hist,0,NULL);count = src_img->width*src_img->height;for(i = 0;i < 256;i++)Avg_Hist += i*cvQueryHistValue_1D(hist,i);Avg_Hist = Avg_Hist/count;printf("Avg from hist:%f\n",Avg_Hist);for(i = 0;i < 256;i++)Std_Hist += pow((i-Avg_Hist),2)*cvQueryHistValue_1D(hist,i);Std_Hist = sqrt(Std_Hist/(count));printf("Std from hist:%f\n",Std_Hist);cvAvgSdv(src_img,&Avg,&Std,0);puts("\n");printf("平均值 \n");printf("Avg in channel1:%f\n",Avg.val[0]);printf("Avg in channel2:%f\n",Avg.val[1]);printf("Avg in channel3:%f\n",Avg.val[2]);printf("Avg in channel4:%f\n",Avg.val[3]);printf("方差\n");printf("Std in channel1:%f\n",Std.val[0]);printf("Std in channel2:%f\n",Std.val[1]);printf("Std in channel3:%f\n",Std.val[2]);printf("Std in channel4:%f\n",Std.val[3]);printf("\ndiff Avg and Std from hist and function:%f %f\n",fabs(Avg.val[0]-Avg_Hist),fabs(Std.val[0]-Std_Hist));cvNamedWindow("Show original image",0);cvShowImage("Show original image",src_img);cvWaitKey(0);cvDestroyWindow("Show original image");printf("done\n");cvReleaseImage(&src_img);return 0;
}
测试图像数据:
测试结果和Opencv函数计算结果一致:
优化图像处理中均值和方差计算相关推荐
- MATLAB中均值、方差、标准差、协方差、相关性的计算
公式 1.均值 2.方差 3.标准差\均方差 4.协方差 5.相关性 6.加权均值 7.加权方差 8.加权标准差 MATLAB代码 样本定义 %% x=[1 2 3 3 2 1]' y = [1 2 ...
- 概率论中均值、方差、标准差介绍及C++/OpenCV/Eigen的三种实现
概率论是用于表示不确定性声明(statement)的数学框架.它不仅提供了量化不确定性的方法,也提供了用于导出新的不确定性声明的公理.在人工智能领域,概率论主要有两种用途.首先,概率法则告诉我们AI系 ...
- MATLAB中均值、方差、均方差的计算方法
1. 均值 数学定义: Matlab函数:mean >>X=[1,2,3] >>mean(X)=2 如果X是一个矩阵,则其均值是一个向量组.mean(X,1)为列向量的均值, ...
- 统计学中均值、方差、标准差、协方差、欧式距离、马氏距离等概念透彻理解
最近需要对这些概念做个系统的梳理,所以写篇博客记录一下. 均值 均值是描述一个数据平均值的概念 公式为: 假设一组数:[2,2,3,5,5,7,8],其均值为4.57. 标准差 标准差是 观察值和均值 ...
- matlab u怎么求均方差,MATLAB中均值、方差、均方差的计算方法
一. 均值html 数学定义: 函数 Matlab函数:meanpost >>X=[1,2,3]flex >>mean(X)=2htm 若是X是一个矩阵,则其均值是一个向量组. ...
- Hive Sql中均值、方差、标准差、皮尔逊相关系数、偏度、峰度统计字段
SELECT mean(age) AS '均值', variance(age) AS '方差', stddev(age) AS '标准差', corr(age,yearsmarried) AS '两个 ...
- numpy中的cov(方差计算)简单介绍
协方差矩阵的计算公式可以参考这一篇博文 协方差矩阵 官方文档介绍 简单使用介绍 有下面一个例子,计算数组[1,2,3]和[1,1,1]的协方差矩阵 import numpy as npX = np.a ...
- 多个随机变量运算后的均值与方差计算
和的平均值 多个随机变数,其和的平均值的计算方法: 对于随机变数X1,X2,...,Xn对于随机变数X_1,X_2,...,X_n对于随机变数X1,X2,...,Xn E(X1+X2+...+X ...
- 面试中的投资组合方差计算
最新文章
- 如何优雅的转换 Bean 对象!
- 霹雳小组4显示不了服务器,霹雳小组4-指令码
- CISCO7200路由器MultiChannel配置介绍
- JAVA shell grep
- [Android] 给图像添加相框、圆形圆角显示图片、图像合成知识
- ZooKeeper1 利用虚拟机搭建自己的ZooKeeper集群
- Kruskal(P)和Prim(K)算法
- C#设计模式之9-装饰者模式
- nginx开启支持websocket连接
- (剑指Offer)面试题11:数值的整数次方
- 购买二手房时 众多购房者忽视办理土地证过户
- Unreal 凹多边形三角化
- http的响应码200,404,302,500表示的含义分别是?
- diy服务器个人主机_小型企业及个人用户入门级服务器DIY
- 桌面远程控制计算机名字和,Win7系统远程控制其他计算机桌面教程
- 抱抱脸(hugging face)教程-中文翻译-任务总结
- 虚幻引擎与现代C++:转移语义和右值引用
- empress和queen区别_王后和皇后有什么区别?
- cassandra 概述
- 网络安全—2.1—设备原理与操作