0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

OpenCV图像卷积与滤波详解

OpenCV学堂 来源:OpenCV学堂 2024-03-26 14:57 次阅读

1. 图像的卷积

1.1 卷积

卷积是一种数学运算,它将两个函数(或矩阵)结合起来,生成一个第三个函数。在图像处理中,卷积通常用于将一个滤波器与图像进行运算。

图像的滤波器是一种用于增强或抑制图像中特定特征的工具。它通常是一个小矩阵,定义了如何对图像中的像素进行操作。

卷积在图像处理中有很多应用,包括图像平滑、图像锐化、边缘检测和图像分割。

1.2 卷积的原理

在泛函分析中,卷积(convolution),或译为叠积褶积旋积,是透过两个函数 f 和 g 生成第三个函数的一种数学算子,表征函数 f 与经过翻转和平移的 g 的乘积函数所围成的曲边梯形的面积。

卷积可分为一维卷积、二维卷积、三维卷积和多维卷积等。

1.2.1 一维卷积

一维卷积在数学上的定义: f 和 g 是实数 R 上的两个可积函数,我们称 (f*g)(n) 为 f、g 的卷积。

其连续的定义为:

其离散的定义为:

1.2.2 二维卷积

在图像处理中,我们常用的是二维卷积。其原理是将一个称为卷积核(滤波器)的矩阵与图像进行滑动运算,从而得到一个新的图像。

8ee88bfa-eabd-11ee-a297-92fbcf53809c.gif

2D_Convolution_Animation.gif

滑动运算是指将卷积核在图像上逐个像素移动,并对每个位置进行卷积操作。

在图像的二维卷积中,如果把图像矩阵简写为 I 把卷积核 Kernal 简写为 K,则目标图像的第 (i,j) 个像素的卷积值为:

其中,I 是一个二维矩阵,K 是一个大小为 mxn 的卷积核。基于卷积的可交换性,可以把上述公式改成:

与之类似的还有互相关函数(corresponding function):

它在很多图像处理库和深度学习库中,经常会用到。

上图实质上是二维单通道的卷积,对于二维多通道的卷积如下图所示,将每个卷积核应用到每一个通道上。

8eef7aa0-eabd-11ee-a297-92fbcf53809c.gif

将filters中的每个kernels分别应用于三个通道.gif

然后将每个通道处理后的每个加在一起以形成单个输出通道。

8ef3d244-eabd-11ee-a297-92fbcf53809c.gif

将这三个通道加在一起(逐元素加法)以形成一个单个通道.gif

1.2.3 三维卷积

三维卷积是卷积在三维空间上的推广。它将一个三维的滤波器与一个三维的输入数据进行卷积运算,得到一个三维的输出数据,以提取三维数据中的特征。主流的深度学习框架,都提供了三维卷积的实现。

8f008336-eabd-11ee-a297-92fbcf53809c.gif

3D_Convolution_Animation.gif

1.3 卷积的性质

卷积具有交换律、结合律、分配律,以二维卷积为例它具有以下的性质:

交换律:f(x, y) * g(x, y) = g(x, y) * f(x, y)

结合律:(f(x, y) * g(x, y))* h(x, y) = f(x, y) * (g(x, y) * h(x, y))

分配律:f(x, y) * (g(x, y) + h(x, y)) = f(x, y) * g(x, y) + f(x, y) * h(x, y)

2. 图像滤波

2.1 图像滤波

图像滤波是一种图像处理技术,用于增强或抑制图像中的特定特征,它可以看作是卷积的一种特殊情况。图像滤波可以用图像卷积来实现,但是图像卷积不一定是图像滤波。

在 OpenCV 中,提供了丰富的图像滤波函数,可以满足各种图像处理需求。常用图像滤波函数包括:

均值滤波: blur()、boxFilter()

高斯滤波: GaussianBlur()

中值滤波: medianBlur()

双边滤波: bilateralFilter()

非线性滤波: fastNlMeansDenoising()

边缘检测滤波: Sobel()、Scharr()、Laplacian()

形态学滤波: erode()、dilate()、morphologyEx()

频域滤波: dft()、idft()

下面的例子,分别展示了原图经过均值滤波、高斯滤波、中值滤波和双边滤波之后的效果图。特别是双边滤波,对原图中的美女进行了美颜和磨皮。

#include
#include
#include
#include

usingnamespacestd;
usingnamespacecv;

intmain(){
Matsrc=imread(".../girl.jpg");

//均值滤波
Matblurred_image;
blur(src,blurred_image,Size(15,15));

//高斯滤波
Matgaussian_blurred_image;
GaussianBlur(src,gaussian_blurred_image,Size(15,15),0);

//中值滤波
Matmedian_blurred_image;
medianBlur(src,median_blurred_image,15);

//双边滤波
Matbilateral_filtered_image;
bilateralFilter(src,bilateral_filtered_image,15,80,80);

imshow("OriginalImage",src);
imshow("BlurredImage",blurred_image);
imshow("GaussianBlurredImage",gaussian_blurred_image);
imshow("MedianBlurredImage",median_blurred_image);
imshow("BilateralFilteredImage",bilateral_filtered_image);

waitKey(0);
return0;
}

OpenCV 还提供了自定义的滤波器 filter2D() 函数,在该系列的第九篇文章中,曾经介绍过 filter2D() 函数。

下面的例子,展示了使用 filter2D() 函数对图像进行模糊和锐化。

#include
#include
#include
#include

usingnamespacestd;
usingnamespacecv;

intmain(){
Matsrc=imread(".../girl.jpg");

imshow("src",src);

Matblurred_image,sharpen_image;
Matkernel1=Mat::ones(5,5,CV_32F)/(float)(25);
Matkernel2=(Mat_(3,3)<< 0, -1, 0, -1, 5, -1, 0, -1, 0);

    filter2D(src, blurred_image, -1, kernel1);
    filter2D(src, sharpen_image, -1, kernel2);

    imshow("Blurred Image", blurred_image);
    imshow("Sharpen Image", sharpen_image);

    waitKey(0);
    return 0;
}
下面简单解释一下 filter2D() 函数:
voidfilter2D(InputArraysrc,OutputArraydst,intddepth,
InputArraykernel,Pointanchor=Point(-1,-1),
doubledelta=0,intborderType=BORDER_DEFAULT);

第三个参数 ddepth: 输出图像的深度。当 ddepth 输入值为 -1 时,目标图像和原图像深度保持一致。

第四个参数 kernel: 卷积核。

第五个参数 anchor: 卷积核的锚点。

第六个参数 delta: 卷积结果与原图像相加的值。

第七个参数 borderType: 边界处理方式。

2.2 图像滤波的分类

根据滤波器在图像域和频域的操作方式,图像滤波可以分为空间域滤波和频域滤波。

2.2.1 空间域滤波

空间域滤波直接对图像中的像素进行操作,根据滤波器与图像像素之间的空间关系来计算输出像素的值。空间域滤波的计算量通常较小,但滤波效果往往比较局限。

空间域滤波按滤波器的线性特性又可分为:

线性滤波:滤波器输出与输入之间呈线性关系。

常用的线性滤波器包括:

a 均值滤波:用于去除图像噪声,具有平滑图像的效果。

b 高斯滤波:具有平滑图像和边缘保持的效果。

c 中值滤波:具有去除椒盐噪声和保持边缘细节的效果。

d 拉普拉斯滤波:用于边缘检测。

非线性滤波:滤波器输出与输入之间不呈线性关系。

常用的非线性滤波器包括:

a 中值滤波:用于去除椒盐噪声和保持边缘细节。

b 双边滤波:具有平滑图像和保持边缘细节的效果。

c 自适应滤波:根据图像局部特性进行滤波,具有较好的滤波效果。

2.2.2 频域滤波

频域滤波是将图像傅里叶变换到频域,然后对频谱进行滤波,最后再将频谱逆傅里叶变换回空间域得到滤波后的图像。频域滤波的计算量通常较大,但滤波效果往往比较灵活。

频域滤波按滤波器的作用方式又可分为:

低通滤波:滤除图像中的高频成分,具有平滑图像的效果。

高通滤波:滤除图像中的低频成分,具有锐化图像的效果。

带通滤波:滤除图像中的特定频段成分,具有增强图像纹理的效果。

3. 总结

图像卷积和图像滤波是图像处理中两个密切相关的概念。它们都涉及到使用滤波器对图像进行操作,以获得新的图像。

图像卷积是图像滤波的基础,图像滤波可以通过图像卷积来实现,但图像滤波也可以使用其他方法来实现。

图像卷积和图像滤波具有广泛的应用,通过使用不同的滤波器,可以实现各种图像处理效果。

审核编辑:黄飞

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 滤波器
    +关注

    关注

    158

    文章

    7331

    浏览量

    174779
  • 图像处理
    +关注

    关注

    26

    文章

    1224

    浏览量

    55823
  • 函数
    +关注

    关注

    3

    文章

    3868

    浏览量

    61309
  • OpenCV
    +关注

    关注

    29

    文章

    611

    浏览量

    40775

原文标题:OpenCV筑基之图像的卷积与滤波

文章出处:【微信号:CVSCHOOL,微信公众号:OpenCV学堂】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    OpenCV图像

    之前学过一段时间OpenCV,跟着网上的资料,自己瞎搞了个上位机,可以对摄像头采集的图像简单处理,在此献丑了,hhhhhh
    发表于 07-11 19:07

    CNN之卷积

    到不同的输出数据,比如颜色深浅、轮廓。相当于如果想提取图像的不同特征,则用不同的滤波器filter,提取想要的关于图像的特定信息:颜色深浅或轮廓。一张动图详解
    发表于 10-17 10:15

    Vivado HLS实现OpenCV图像处理的设计流程与分析

    本文通过对OpenCV图像类型和函数处理方法的介绍,通过设计实例描述在vivadoHLS中调用OpenCV库函数实现图像处理的几个基本步骤,完成从
    发表于 07-08 08:30

    卷积神经网络为什么适合图像处理?

    卷积神经网络为什么适合图像处理?
    发表于 09-08 10:23

    使用opencv进行图像处理

    使用opencv进行图像处理_于仕琪,感兴趣的可以看看。
    发表于 05-03 14:45 0次下载

    线性图像滤波综合示例_《OpenCV3编程入门》书本配套源代码

    OpenCV3编程入门》书本配套源代码:线性图像滤波综合示例
    发表于 06-06 15:52 8次下载

    图像滤波综合示例_《OpenCV3编程入门》书本配套源代码

    OpenCV3编程入门》书本配套源代码:图像滤波综合示例
    发表于 06-06 15:52 6次下载

    图像滤波综合示例_OpenCV3编程入门-源码例程全集

    OpenCV3编程入门-源码例程全集-图像滤波综合示例,感兴趣的小伙伴们可以瞧一瞧。
    发表于 09-18 16:55 0次下载

    图像处理中滤波卷积有什么区别?

    图像处理中滤波卷积是常用到的操作。两者在原理上相似,但是在实现的细节上存在一些区别。这篇博文主要叙述这两者之间的区别。
    的头像 发表于 07-09 10:30 7390次阅读
    <b class='flag-5'>图像</b>处理中<b class='flag-5'>滤波</b>与<b class='flag-5'>卷积</b>有什么区别?

    四种常见的图像滤波算法介绍

    滤波算法,并附上源码,包括自适应中值滤波、高斯滤波、双边滤波和导向滤波。 前言 本文介绍四种常见的图像
    的头像 发表于 02-15 09:50 9389次阅读

    一文吃透:图像卷积、边缘提取和滤波去噪

    本文通过通俗易懂的文字解释了图像卷积、边缘提取以及滤波去燥的概念及其分类。  一、图像卷积 现在有一张图片 f(x,y) 和一个kernel
    的头像 发表于 04-30 09:38 4715次阅读
    一文吃透:<b class='flag-5'>图像</b><b class='flag-5'>卷积</b>、边缘提取和<b class='flag-5'>滤波</b>去噪

    线性滤波卷积的概述与应用研究

    图像滤波矩阵进行逐个元素相乘再求和的操作就相当于将一个二维的函数移动到另一个二维函数的所有位置,这个操作就叫卷积或者协相关。卷积和协相关的差别是,
    的头像 发表于 07-06 10:51 737次阅读

    OpenCV种支持标准卷积边缘填充做法

    OpenCV在使用卷积进行图像处理过程种,如何处理边缘像素与锚定输出两个技术细节一直是很多人求而不得的疑惑。其实OpenCV在做卷积
    的头像 发表于 07-12 14:18 1234次阅读

    图像处理技术之滤波去噪

    图像处理领域中,在真正的应用过程前,通常需要对图像进行预先处理,达到去除干扰项的目的。滤波去噪就是其中的一项图像预处理工作。 在.NET下常用
    的头像 发表于 02-08 16:34 872次阅读

    卷积神经网络详解 卷积神经网络包括哪几层及各层功能

    卷积神经网络详解 卷积神经网络包括哪几层及各层功能 卷积神经网络(Convolutional Neural Networks, CNNs)是一个用于
    的头像 发表于 08-21 16:41 5273次阅读