cvFilter2D() 卷积初步了解

时间:2023-02-07 13:29:30

简单定义:卷积是分析数学中一种重要的运算
设:f(x),g(x)是R1上的两个可积函数,作积分:cvFilter2D() 卷积初步了解
       可以证明,关于几乎所有的实数x,上述积分是存在的。这样,随着x的不同取值,这个积分就定义了一个新函数h(x),称为函数fg的卷积,记为h(x)=(f*g)(x)
       容易验证,(f * g)(x) = (g * f)(x),并且(f * g)(x)仍为可积函数。这就是说,把卷积代替乘法,L1(R1)空间是一个代数,甚至是巴拿赫代数。
       卷积与傅里叶变换有着密切的关系。利用一点性质,即两函数的傅里叶变换的乘积等于它们卷积后的傅里叶变换,能使傅里叶分析中许多问题的处理得到简化。
       由卷积得到的函数f*g一般要比fg都光滑。特别当g为具有紧致集的光滑函数f为局部可积时,它们的卷积f * g也是光滑函数。利用这一性质,对于任意的可积函数f,都可以简单地构造出一列逼近于f光滑函数fs,这种方法称为函数的光滑化或正则化

cvFilter2D() 卷积初步了解离散化并在有限区域内的卷积:

cvFilter2D() 卷积初步了解

通过构建不同的内核,达到不同的卷积效果,如:滤波等

所以平时可以多积累内核模板

测试用图

cvFilter2D() 卷积初步了解

程序代码:

#include <highgui.h>
#include<cv.h>
#include <opencv2/legacy/legacy.hpp>
using namespace std;

int main()
{
double A[9]={1.0,-2.0,1.0,4.0,-2.0,-1.0,4.0,-2.0,2.0};
CvMat kernel = cvMat(3,3,CV_32FC1,A);

IplImage *img_in = cvLoadImage("test.jpg");
cvNamedWindow("img_in",CV_WINDOW_AUTOSIZE);
cvShowImage("img_in",img_in);

IplImage *img_out = cvCreateImage(cvGetSize(img_in),IPL_DEPTH_8U,3);
cvFilter2D(img_in,img_out,&kernel,cvPoint(-1,-1));
cvNamedWindow("img_out",CV_WINDOW_AUTOSIZE);
cvShowImage("img_out",img_out);

cvWaitKey(0);
cvDestroyAllWindows();
cvReleaseImage(&img_in);
cvReleaseImage(&img_out);

return 0;
}


运行结果:
cvFilter2D() 卷积初步了解