到底什么是卷积?

到底什么是卷积?转载 https blog csdn net hxg2006 article details

转载: https://blog.csdn.net/hxg2006/article/details/ http://blog.csdn.net/chaipp0607/article/details/

        https://www.zhihu.com/question/

     在图像处理领域,我们经常能听到滤波,卷积之类的词,其实他们都可以看做一种图像的卷积操作,相对应的卷积核,卷积模板,滤波器,滤波模板,扫描窗其实也都是同一个东西。下面我们进一步讨论图像中的卷积操作核卷积的意义。

1、数字信号处理中卷积理解

                     这里写图片描述

作者:果程C

链接:https://www.zhihu.com/question//answer/
来源:知乎

对于初学者,我推荐用复利的例子来理解卷积可能更好理解一些:

小明存入100元钱,年利率是5%,按复利计算(即将每一年所获利息加入本金,以计算下一年的利息),那么在五年之后他能拿到的钱数是100(1+5\%)^5,如下表所示:

到底什么是卷积?
将这笔钱存入银行的一年之后,小明又往银行中存入了100元钱,年利率仍为5%,那么这笔钱按复利计算,到了第五年,将收回的钱数是 100(1+5\%)^4,我们将这一结果作为新的一行加入上面的表格中:
到底什么是卷积?
以此类推,如果小明每年都往银行中存入新的100元钱,那么这个收益表格将是这样的:
到底什么是卷积? 到底什么是卷积?可见,最终小明拿到的钱将等于他各年存入的钱分别计算复利之后得到的钱数的总和,即:
到底什么是卷积?
用求和符号来简化这个公式,可以得到:
\sum_{i=0}^{5}{f(i)g(5-i)}, \mathrm{where} \ f(i)=100, g(5-i) = (1.05)^{5-i}
在上式中, f(i)为小明的 存钱函数,而 g(i)为存入银行的每一笔钱的 复利计算函数在这里,小明最终得到的钱就是他的存钱函数和复利计算函数的卷积。
为了更清晰地看到这一点,我们将这个公式推广到连续的情况,也就是说,小明在从 到底什么是卷积?0t的这一段时间内,每时每刻都往银行里存钱,他的存钱函数为 f(\tau)\ (0\leq \tau\leq t),而银行也对他存入的每一笔钱按复利公式计算收益: g(t-\tau)=(1+5\%)^{t-\tau},则小明到时间 t将得到的总钱数为:
\int_{0}^{t} f(\tau)g(t-\tau)d\tau=\int_{0}^{t} f(\tau)(1+5\%)^{t-\tau}d\tau
这也就是卷积的表达式了,上式可以记为(f\ast g)(t)

相信通过上面这个例子,大家应该能够很清晰地记住卷积公式了。下面我们再展开说两句:
如果我们将小明的存款函数视为一个 信号发生(也就是激励)的过程,而将复利函数 g(t-\tau)视为一个 系统对信号的响应函数(也就是响应),那么二者的卷积 (f\ast g)(t)就可以看做是在 t时刻对系统进行观察, 得到的观察结果(也就是输出)将是过去产生的所有信号经过系统的「处理/响应」后得到的结果的 叠加,这也就是 卷积的物理意义了。





































作者:鱼腻

链接:https://www.zhihu.com/question//answer/
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

如果你每天都到地下去打台球,那么老板每天都要扇你一巴掌,不过当老板打你一巴掌后,你5分钟就消肿了,所以时间长了,你甚至就适应这种生活了……如果有一天,老板忍无可忍,以0.5秒的间隔开始不间断的扇你的过程,这样问题就来了,第一次扇你鼓起来的包还没消肿,第二个巴掌就来了,你脸上的包就可能鼓起来两倍高,老板不断扇你,脉冲不断作用在你脸上,效果不断叠加了,这样这些效果就可以求和了,结果就是你脸上的包的高度随时间变化的一个函数了(注意理解);如果老板再狠一点,频率越来越高,以至于你都辨别不清时间间隔了,那么,求和就变成积分了。可以这样理解,在这个过程中的某一固定的时刻,你的脸上的包的鼓起程度和什么有关呢?和之前每次打你都有关!但是各次的贡献是不一样的,越早打的巴掌,贡献越小,所以这就是说,某一时刻的输出是之前很多次输入乘以各自的衰减系数之后的叠加而形成某一点的输出,然后再把不同时刻的输出点放在一起,形成一个函数,这就是卷积,卷积之后的函数就是你脸上的包的大小随时间变化的函数。本来你的包几分钟就可以消肿,可是如果连续打,几个小时也消不了肿了,这难道不是一种平滑过程么?反映到剑桥大学的公式上,f(a)就是第a个巴掌,g(x-a)就是第a个巴掌在x时刻的作用程度,乘起来再叠加就ok了,大家说是不是这个道理呢?我想这个例子已经非常形象了,你对卷积有了更加具体深刻的了解了吗?















作者:Kaixiang Wang

链接:https://www.zhihu.com/question//answer/
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

补充一下@镜面狐@笑劫戈的答案。

想要形象地理解卷积这个数学概念,那么思路当然是找它的“实际应用”,最容易想到的例子就是它对动态系统的输入输出关系的描述了。许多答主提到了“打脸”的例子,非常形象,就不复述了。

到底什么是卷积?

以下略纠结,嫌麻烦可以跳过直接看图。

之前我对@镜面狐答案的有部分理解是不准确的;现在看来他对 a 的定义确实有问题(感谢@高启峰@逐光指出)。顺便提一下,@镜面狐的答案引用了Franklin的那本经典教材,但是我越来越感觉它讲卷积的那部分并没有写得很清楚,比如它和配图和文字就对不上号,徒增了理解的难度。我尽量梳理一遍吧。

首先是单位脉冲\delta(t)和单位脉冲响应 h(t) 的定义,大家应该都懂我就不啰嗦了。(注意 \delta(t) 的“面积”为 1 。)再是定义 p_\Delta(t)h_\Delta(t) ,当 \Delta\rightarrow0 时趋近于 \delta(t)h(t) 。(同样注意 p_\Delta(t) 的高度为 \frac{1}{\Delta} ,面积为 1 。)

一个输入信号可以拆成很多 p_\Delta(t) 的和,即 u\left(t\right)\approx\cdots+u\left(0\right)p_{\Delta}\left(t\right)\Delta+u\left(\Delta\right)p_{\Delta}\left(t-\Delta\right)\Delta+u\left(2\Delta\right)p_{\Delta}\left(t-2\Delta\right)\Delta+\cdots (所以

@镜面狐的答案确实少了个
\Delta
输出即
y\left(t\right)\approx\cdots+u\left(0\right)h_{\Delta}\left(t\right)\Delta+u\left(\Delta\right)h_{\Delta}\left(t-\Delta\right)\Delta+u\left(2\Delta\right)h_{\Delta}\left(t-2\Delta\right)\Delta+\cdots

取极限写成积分形式即 y\left(t\right)=\int_{-\infty}^{\infty}u\left(\tau\right)h\left(t-\tau\right)d\tau

注意不要忘了 d\tau ,因为我们是要跟单位脉冲比较面积,即 u(\tau)d\tau1 的多少倍。

纠结部分完。

到底什么是卷积?

有了这个基础,再去理解卷积的公式就没那么intimidating了。放张图,心血来潮随手画的,但愿能顶个卵用。

到底什么是卷积?
另外,对于实际系统(因果系统),由于未来的打脸( t 就行了;此外我们还一般假设 t=0 之前没人打脸并且脸也不肿,所以积分下限设为 到底什么是卷积?0 就行了。因此 y(t)=\int^t_0u(\tau)h(t-\tau)d\tau















2、数字图像处理中卷积

        数字图像是一个二维的离散信号,对数字图像做卷积操作其实就是利用卷积核(卷积模板)在图像上滑动,将图像点上的像素灰度值与对应的卷积核上的数值相乘,然后将所有相乘后的值相加作为卷积核中间像素对应的图像上像素的灰度值,并最终滑动完所有图像的过程。 

到底什么是卷积?

到底什么是卷积?

       这张图可以清晰的表征出整个卷积过程中一次相乘后相加的结果:该图片选用3*3的卷积核,卷积核内共有九个数值,所以图片右上角公式中一共有九行,而每一行都是图像像素值与卷积核上数值相乘,最终结果-8代替了原图像中对应位置处的1。这样沿着图片一步长为1滑动,每一个滑动后都一次相乘再相加的工作,我们就可以得到最终的输出结果。除此之外,卷积核的选择有一些规则: 
       1)卷积核的大小一般是奇数,这样的话它是按照中间的像素点中心对称的,所以卷积核一般都是3×3,5×5或者7×7。有中心了,也有了半径的称呼,例如5×5大小的核的半径就是2。 
       2)卷积核所有的元素之和一般要等于1,这是为了原始图像的能量(亮度)守恒。其实也有卷积核元素相加不为1的情况,下面就会说到。 
        3)如果滤波器矩阵所有元素之和大于1,那么滤波后的图像就会比原图像更亮,反之,如果小于1,那么得到的图像就会变暗。如果和为0,图像不会变黑,但也会非常暗。 
        4)对于滤波后的结构,可能会出现负数或者大于255的数值。对这种情况,我们将他们直接截断到0和255之间即可。对于负数,也可以取绝对值。

2.1边界补充问题

原始图像:

到底什么是卷积?

到底什么是卷积?

到底什么是卷积?

到底什么是卷积?

2.2.4块复制

到底什么是卷积?

以上四种边界补充方法通过看名字和图片就能理解了,不在多做解释。

不同卷积核下卷积意义

该卷积核的作用在于取九个值的平均值代替中间像素值,所以起到的平滑的效果: 
这里写图片描述  
这里写图片描述

梯度Prewitt卷积核与Soble卷积核的选定是类似的,都是对水平边缘或垂直边缘有比较好的检测效果。

以上的水平边缘与垂直边缘检测问题可以参考:Soble算子水平和垂直方向导数问题

(7)梯度Laplacian:

这里写图片描述

这里写图片描述

代码实现

可以利用OpenCV提供的filter2D函数完成对图像进行卷积操作,其函数接口为:


   
   
         
   
         
         
         
         
         
  1. CV_EXPORTS_W void filter2D(
  2. InputArray src,
  3. OutputArray dst,
  4. int ddepth,
  5. InputArray kernel,
  6. Point anchor=Point(- 1 ,- 1 ),
  7. double delta= 0,
  8. int borderType=BORDER_DEFAULT );
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

   
   
         
   
         
         
         
         
         
  1. #include
  2. #include
  3. #include
  4. #include
  5. #include
  6. using namespace std;
  7. using namespace cv;
  8. int main()
  9. {
  10. Mat srcImage = imread( "1.jpg");
  11. namedWindow( "srcImage", WINDOW_AUTOSIZE);
  12. imshow( "原图", srcImage);
  13. Mat kernel = (Mat_< double>( 3, 3) <<
  14. - 1, 0 , 1,
  15. - 2, 0, 2,
  16. - 1, 0, 1);
  17. Mat dstImage;
  18. filter2D(srcImage,dstImage,srcImage.depth(),kernel);
  19. namedWindow( "dstImage",WINDOW_AUTOSIZE);
  20. imshow( "卷积图",dstImage);
  21. waitKey( 0);
  22. return 0;
  23. }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

所以代码的实现就非常简单了,不同的卷积操作只需要改变卷积核kernel 即可。











版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/218553.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午11:58
下一篇 2026年3月17日 下午11:59


相关推荐

  • 电脑usb android上网,让你的Android手机通过USB共享电脑上网

    电脑usb android上网,让你的Android手机通过USB共享电脑上网转贴:来自http://www.diypda.com/viewthread.php?tid=150277首先这不是一篇关于如何让你的Android手机通过USB共享电脑上网(这里不讨论这样做的必要性)的教程,所以很多细节上被省略了。没有图。我们知道,可以使用USB将HTCHero连接至PC,“连接类型”选择“Internet共享(假设你的手机移动网络可用并是打开的),然后你的电脑就会…

    2025年7月20日
    4
  • Java程序员,到底要不要转行大数据?

    Java程序员,到底要不要转行大数据?前几天有个朋友在群里提问:如何看待大数据的未来?有必要转大数据方向吗?关于这个问题,谈谈我的思考。伴随公有云厂商的兴起,大数据的应用进入了2.0时代。传统大数据那种需要大量购买机器以及Hadoop发行商版本的时代一去不复返了,企业可以非常便利的按照自己的需要,在云端弹性的分配资源,并按照使用量付费。这使得大数据技术不但进入到了传统意义上的大中型企业,更是深入到了各行各业的小企业和创…

    2022年7月7日
    55
  • vue关闭Eslint验证

    vue关闭Eslint验证在创建项目时 手贱点击了 yes 那么怎样关闭 Eslint 验证呢 1 打开 build webpack base conf js2 找到如下代码 并 ctrl 点击红框框起的代码 3 修改 useEslint true 为 false4 最后 在修改完配置文件之后 在终端输入 nmprundev 这一点非常重要 我就是没有漏了这步操作 弄了很久

    2026年3月18日
    3
  • n8n工作流调试技巧:解决节点测试与数据固定失效问题

    n8n工作流调试技巧:解决节点测试与数据固定失效问题

    2026年3月13日
    1
  • 莫兰指数(Moran’s I)的小总结

    莫兰指数(Moran’s I)的小总结莫兰指数分为全局莫兰指数(GlobalMoran’sI)和局部莫兰指数(LocalMoran’sI),前者是PatrickAlfredPierceMoran开发的空间自相关的度量;后者是美国亚利桑那州立大学地理与规划学院院长LucAnselin教授在1995年提出的。通常情况,先做一个地区的全局I指数,全局指数只是告诉我们空间是否出现了集聚或异常值,但并没有告诉我们在哪里出…

    2022年6月25日
    101
  • oracle的游标 sql语句,sql游标

    oracle的游标 sql语句,sql游标sql游标游标的类型:1、静态游标(不检测数据行的变化)2、动态游标(反映所有数据行的改变)3、仅向前游标(不支持滚动)4、键集游标(能反映修改,但不能准确反映插入、删除)游标使用顺序:1、定义游标2、打开游标3、使用游标4、关闭游标5、释放游标Transact-SQL:declare游标名cursor[LOCAL|GLOBAL][FORWARD_ONLY|SCROLL][STATI…

    2022年7月27日
    8

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号