integral函数

integral函数

计算积分图像

C++: void integral(InputArray src, OutputArray sum, int sdepth=-1 )

c语言:void cvIntegral( const CvArr* image, CvArr* sum, CvArr* sqsum=NULL, CvArr* tilted_sum=NULL );
image
输入图像, W×H, 单通道,8位或浮点 (32f 或 64f).
sum
积分图像, (W+1)×(H+1)(译者注:原文的公式应该写成(W+1)×(H+1),避免误会), 单通道,32位整数或 double 精度的浮点数(64f).
sqsum
对象素值平方的积分图像,W+1×H+1(译者注:原文的公式应该写成(W+1)×(H+1),避免误会), 单通道,32位整数或 double 精度的浮点数 (64f).
tilted_sum
旋转45度的积分图像,单通道,32位整数或 double 精度的浮点数 (64f).

函数 cvIntegral 计算一次或高次积分图像:

sum(X,Y) = image(x,y)
  x < X,y < Y  
sqsum(X,Y) = image(x,y)2
  x < X,y < Y  
tilted_sum(X,Y) = image(x,y)
  y < Y, | x − X | < y  

利用积分图像,可以计算在某象素的上-右方的或者旋转的矩形区域中进行求和、求均值以及标准方差的计算,并且保证运算的复杂度为O(1)。例如:

\sum_{x_1 \leq x<x_2,y_1 \leq y<y_2}image(x,y)=sum(x_2,y_2)-sum(x_1,y_2)-sum(x_2,y_1)+sum(x_1,x_1)

因此可以在变化的窗口内做快速平滑或窗口相关等操作。



opencv代码:

#include 
#include 
#include 
#include 
#include
#include
using namespace cv;
using namespace std;


int main()
{
	Mat src, dst;
	src = imread("D:6.jpg");
	/*Mat kx = (Mat_(1, 3) << 0,-1,0);
	Mat ky = (Mat_(1, 3) << -1,0, -1);
	sepFilter2D(src, dst, src.depth(),kx,ky,Point(-1,-1),0,BORDER_DEFAULT );*/
	cvtColor(src, src, CV_RGB2GRAY);
	integral(src, dst, CV_32FC1);
	
	imshow("shiyan", dst);
	waitKey(0);
	return 0;
}


你可能感兴趣的:(integral函数)