标签:icvgetauximages cvintegral 积分图 旋转积分图 平方和积分图
/* * icvGetAuxImages *作用:计算原图像的积分图,旋转积分图,平方积分图和归一化因子 */ static void icvGetAuxImages( CvMat* img, //原图像 CvMat* sum, //所求积分图 CvMat* tilted, //所求旋转积分图 CvMat* sqsum, //所求平方和积分图 float* normfactor ) //所求的归一化因子 { CvRect normrect; int p0, p1, p2, p3; sum_type valsum = 0; sqsum_type valsqsum = 0; double area = 0.0; cvIntegral( img, sum, sqsum, tilted ); //积分图的计算函数,具体内容如下 normrect = cvRect( 1, 1, img->cols - 2, img->rows - 2 ); CV_SUM_OFFSETS( p0, p1, p2, p3, normrect, img->cols + 1 ) area = normrect.width * normrect.height; valsum = ((sum_type*) (sum->data.ptr))[p0] - ((sum_type*) (sum->data.ptr))[p1] - ((sum_type*) (sum->data.ptr))[p2] + ((sum_type*) (sum->data.ptr))[p3]; valsqsum = ((sqsum_type*) (sqsum->data.ptr))[p0] - ((sqsum_type*) (sqsum->data.ptr))[p1] - ((sqsum_type*) (sqsum->data.ptr))[p2] + ((sqsum_type*) (sqsum->data.ptr))[p3]; /* sqrt( valsqsum / area - ( valsum / are )^2 ) * area */ (*normfactor) = (float) sqrt( (double) (area * valsqsum - (double)valsum * valsum) ); }
下面的内容转载自http://blog.sina.com.cn/s/blog_659f58370100i1k2.html。
W
×H
, 单通道,8位或浮点 (32f 或64f).W+1
×H+1(译者注:原文的公式应该写成(W+1)
×(H+1),避免误会)
,单通道,32位整数或 double 精度的浮点数(64f).W+1
×H+1(译者注:原文的公式应该写成(W+1)
×(H+1),避免误会)
,单通道,32位整数或 double 精度的浮点数 (64f).函数
cvIntegral 计算一次或高次积分图像:
sum(X,Y)=sumx<X,y<Yimage(x,y)
sqsum(X,Y)=sumx<X,y<Yimage(x,y)2
tilted_sum(X,Y)=sumy<Y,abs(x-X)<yimage(x,y)
利用积分图像,可以计算在某象素的上-右方的或者旋转的矩形区域中进行求和、求均值以及标准方差的计算,并且保证运算的复杂度为O(1)。例如:
sumx1<=x<x2,y1<=y<y2image(x,y)=sum(x2,y2)-sum(x1,y2)-sum(x2,y1)+sum(x1,x1)
因此可以在变化的窗口内做快速平滑或窗口相关等操作
http://fsa.ia.ac.cn/opencv-doc-cn/opencv-doc-cn-0.9.7/ref/opencvref_cv.cn.htm
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:icvgetauximages cvintegral 积分图 旋转积分图 平方和积分图
原文地址:http://blog.csdn.net/ding977921830/article/details/46968149