您好,欢迎来到好走旅游网。
搜索
您的当前位置:首页图像变换 - 卷积(cvFilter2D) (拉普拉斯算子实现图像锐化)

图像变换 - 卷积(cvFilter2D) (拉普拉斯算子实现图像锐化)

来源:好走旅游网


卷积:连续空间的卷积定义是f(x)与g(x)的卷积是f(t-x)g(x)在t从负无穷到正无穷的积分值。t-x要在f(x)定义域内,所以看上去很大的积分实际上还是在一定范围的。

实际的过程就是f(x)先做一个Y轴的反转,然后再沿X轴平移t就是f(t-x),然后再把g(x)拿来,两者乘积的值再积分。想象一下如果g(x)或者f(x)是个单位的节约函数,那么就是f(t-x)与g(x)相交部分的妙计。这就是卷积了。

把积分符号换成求和就是离散空间的卷积定义了。那么在图像中卷积的意思就是图像f(x),模板g(x),然后将模板g(x)在图像中移动,每到一个位置,就把f(x)与g(x)的定义域相交的元素进行乘积并且求和,得出新的图像一点,就是被卷积后的图像。模板又称卷积核。卷积核做一个矩阵的形状。

Filter2D

对图像做卷积

void cvFilter2D( const CvArr* src, CvArr* dst,

const CvMat* kernel,

CvPoint anchor=cvPoint(-1,-1));

src

输入图像.

dst

输出图像.

kernel

卷积核, 单通道浮点矩阵. 如果想要应用不同的核于不同的通道,先用 cvSplit 函数分解图像到单个色彩通道上,然后单独处理。

anchor

核的锚点表示一个被滤波的点在核内的位置。 锚点应该处于核内部。缺省值 (-1,-1) 表示锚点在核中心。

函数 cvFilter2D 对图像进行线性滤波,支持 In-place 操作。当核运算部分超出输入图像时,函数从最近邻的图像内部象素插值得到边界外面的象素值。

例:核为锐化滤波器实现图像锐化

#include

#include

int main(int argc, char ** argv)

{

IplImage* src, *dst;

src = cvLoadImage( \"1.jpg\" );

dst = cvCreateImage( cvGetSize(src), src->depth, src->nChannels );

float k[9] = { 0, -1, 0, -1, 5, -1, 0, -1, 0 }; //核

CvMat km = cvMat( 3, 3, CV_32FC1, k );

cvFilter2D(src, dst, &km);

cvNamedWindow( \"src\");

cvShowImage( \"src\

cvNamedWindow( \"Filter\");

cvShowImage( \"Filter\

cvWaitKey(0);

cvReleaseImage( &src );

cvReleaseImage( &dst );

return 0;

}

结果:

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- haog.cn 版权所有 赣ICP备2024042798号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务