Filter2D卷积运算

图像处理中的卷积运算一般都用来平滑图像、尖锐图像求边缘等等。主要看你选择什么样的核函数了。现在核函数很多,比如高斯平滑核函数,sobel核函数,canny核函数等等。这里举一个sobel核函数的例子来求图像的梯度。

Sobel自动求边缘图(梯度图)在opencv里有特定的函数,具体参照opencv文档(需要自己设定阈值)。这里主要讲怎么用已知的sobel算子(核函数)去平滑当前图像。

C++:void filter2D(InputArraysrc, OutputArray dst, int ddepth, InputArray kernel, Point anchor=Point(-1,-1), doubledelta=0,intborderType=BORDER_DEFAULT)

这里要注意的是kerne,写的是单通道浮点型矩阵。

Sobel核函数:

按图一为例,kernel内核为:

Mat kernelY=Mat::zeros(3,3,CV_32FC1);

????????kernelY.at<float>(0,0)=1;

????????kernelY.at<float>(0,1)=2;

????????kernelY.at<float>(0,2)=1;

????????kernelY.at<float>(1,0)=0;

????????kernelY.at<float>(1,1)=0;

????????kernelY.at<float>(1,2)=0;

????????kernelY.at<float>(2,0)=-1;

????????kernelY.at<float>(2,1)=-2;

????????kernelY.at<float>(2,2)=-1;

注意类型。我一开始写成CV_8U和uchar类型,filter2D卷积后就全是白色的。。

然后就直接调用函数:

filter2D(src,sobelY,-1,kernelY,Point(-1,-1),0.0,BORDER_DEFAULT);

?

sobel函数是x,y方向的卷积的叠加,即:

Sx和sy是两种内核卷积后的图像矩阵。M是最后的sobel梯度图。

如果要直接用sobel函数,可以写成:

Sobel(src,edge1,-1,1,0,3,1.0,0.0,4);//两个方向

Sobel(src,edge2,-1,0,1,3,1.0,0.0,4);

edge=abs(edge1)+abs(edge2); //也可以采用标准的平方根形式叠加

两种方式最后得出的边缘图比较类似,个人感觉filter直接平滑的噪声更少。当然也可以认为检测出的‘边缘点‘(噪声点)个更少

(sobel) (filter)

时间: 2024-11-09 04:51:24

Filter2D卷积运算的相关文章

Caffe 中卷积运算的原理与实现

caffe中卷积运算设计的很巧妙,今天就来讨论一下caffe中卷积运算的原理,最后会给出一个自己的实现版本,便于初学者理解. Caffe中卷积运算的原理 俗话说,一图胜千言,首先先给出原理示意图,为了方便,这里以二维核为例 滑动窗口在图像中每滑动一个地方,将图像中该滑动窗口图像展开为一列,所有列组成图中的滑动窗口矩阵,这里假设pad=1,stride=1,K=3,则滑动窗口矩阵每行大小为W*H,一共K*K行. 每个核展开为一行,N个核形成的核矩阵大小为N*K*K. 最后将核矩阵和滑动窗口矩阵相乘

二维卷积运算工作原理剖析(转载)

卷积运算(Convolution)是通过两个函数f 和g 生成第三个函数的一种数学算子,表示函数f 与经过翻转和平移与g 的重叠部分的累积.如果将参加卷积的一个函数看作区间的指示函数,卷积还可以被看作是"滑动平均"的推广.假设: f(x),g(x)是R1上的两个可积函数,并且积分是存在的.这样,随着 x 的不同取值,这个积分就定义了一个新函数h(x),称为函数f 与g 的卷积,记为h(x)=(f*g)(x). 两个向量卷积,说白了就是多项式乘法.下面用个矩阵例子说明其工作原理: a和d

二维矩阵卷积运算实现

http://z.download.csdn.net/detail/wangfei0117/4408649 http://download.csdn.net/detail/wanwenliang2008/1767686 二维矩阵卷积运算实现,布布扣,bubuko.com

iOS中的图像处理(二)——卷积运算

关于图像处理中的卷积运算,这里有两份简明扼要的介绍:文一,文二. 其中,可能的一种卷积运算代码如下: [cpp] view plaincopy - (UIImage*)applyConvolution:(NSArray*)kernel { CGImageRef inImage = self.CGImage; CFDataRef m_DataRef = CGDataProviderCopyData(CGImageGetDataProvider(inImage)); CFDataRef m_OutD

图像处理之基础---二维卷积运算原理剖析

卷积运算(Convolution)是通过两个函数f 和g 生成第三个函数的一种数学算子,表示函数f 与经过翻转和平移与g 的重叠部分的累积.如果将参加卷积的一个函数看作区间的指示函数,卷积还可以被看作是“滑动平均”的推广.假设: f(x),g(x)是R1上的两个可积函数,并且积分是存在的.这样,随着 x 的不同取值,这个积分就定义了一个新函数h(x),称为函数f 与g 的卷积,记为h(x)=(f*g)(x). 两个向量卷积,说白了就是多项式乘法.下面用个矩阵例子说明其工作原理: a和d的卷积就是

图像处理---基础(模板、卷积运算)

转自:图像处理:基础(模板.卷积运算) 1.使用模板处理图像相关概念: 模板:矩阵方块,其数学含义是一种卷积运算.      卷积运算:可看作是加权求和的过程,使用到的图像区域中的每个像素分别于卷积核(权矩阵)的每个元素对应相                乘,所有乘积之和作为区域中心像素的新值.      卷积核:卷积时使用到的权用一个矩阵表示,该矩阵与使用的图像区域大小相同,其行.列都是奇数,              是一个权矩阵.      卷积示例:              3 *

注意:卷积运算的简单理解

卷积算子计算方法(卷积运算) 卷积操作是对图像处理时,经常用到的一种操作.它具有增强原信号特征,并且能降低噪音的作用. 那么具体是如何计算的呢? 步骤: 1)将算子围绕中心旋转180度 2)  滑动算子,使其中心位于输入图像g的(i,j)像素上 3)  利用公式求和,得到输出图像的(i,j)像素值 (2,4)元素值=  1* 2+  8*  9+15* 4 +  7* 7+14* 5+16* 3 +13* 6+20* 1+22* 8=575 4)重复2),3),直到求出输出图像的所有像素值 注意

MATLAB卷积运算(conv、conv2、convn)解释

1 conv(向量卷积运算) 所谓两个向量卷积,说白了就是多项式乘法.比如:p=[1 2 3],q=[1 1]是两个向量,p和q的卷积如下:把p的元素作为一个多项式的系数,多项式按升幂(或降幂)排列,比如就按升幂吧,写出对应的多项式:1+2x+3x^2;同样的,把q的元素也作为多项式的系数按升幂排列,写出对应的多项式:1+x. 卷积就是"两个多项式相乘取系数".(1+2x+3x^2)×(1+x)=1+3x+5x^2+3x^3所以p和q卷积的结果就是[1 3 5 3]. 记住,当确定是用

基于INTEL FPGA硬浮点DSP实现卷积运算

概述 卷积是一种线性运算,其本质是滑动平均思想,广泛应用于图像滤波.而随着人工智能及深度学习的发展,卷积也在神经网络中发挥重要的作用,如卷积神经网络.本参考设计主要介绍如何基于INTEL 硬浮点的DSP Block实现32位单精度浮点的卷积运算,而针对定点及低精度的浮点运算,则需要对硬浮点DSP Block进行相应的替换即可. 原理分析 设:f(x), g(x)是两个可积函数,作积分: 随着x的不同取值,该积分定义了一个新的函数h(x),称为函数f(x)与g(x)的卷积,记为h(x)=f(x)*