cvFilter2D() 卷积初步了解

简单定义:卷积是分析数学中一种重要的运算
设:f(x),g(x)是R1上的两个可积函数,作积分:
       可以证明,关于几乎所有的实数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,这种方法称为函数的光滑化或正则化

离散化并在有限区域内的卷积:


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

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

测试用图


程序代码:

#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; 
}


运行结果:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值