卷积计算——1. 关于卷积的基本概念

article/2025/10/23 10:27:02

文章目录

  • 卷积的基本概念
  • 卷积运算公式
    • 交换律
    • 分配律
    • 结合律
    • 数乘结合律
  • 卷积核
  • 代码的基本框架

卷积的基本概念

卷积,是一个强有力的数学工具,在计算机领域中有很多非常不错的运用,能产生很多意想不到的效果和输出。

数学上,其连续函数的解析式写作:

F ( x ) = ∫ − ∞ ∞ f ( τ ) g ( x − τ ) d τ F(x) = \int_{-\infty}^{\infty} f(\tau) g(x-\tau) d\tau F(x)=f(τ)g(xτ)dτ

而离散形为:

F ( x ) = ∑ τ = 0 N f ( τ ) g ( x − τ ) F(x) = \sum_{\tau = 0}^{N} f(\tau) g(x-\tau) F(x)=τ=0Nf(τ)g(xτ)

其本质,表示如下一个操作1
在这里插入图片描述
通常情况下, f ( τ ) f(\tau) f(τ) 表示被积函数,而 g ( x − τ ) g(x-\tau) g(xτ) 表示卷积核函数。这里多说一句,之所以不使用 f ( x ) f(x) f(x) 表示原函数而用 f ( τ ) f(\tau) f(τ) ,而且强调 f ( τ ) f(\tau) f(τ) 是被积函数,是因为 f ( x ) f(x) f(x) f ( τ ) f(\tau) f(τ) 之间还存在着如下关系:

f ( x ) = ∫ − ∞ ∞ f ( τ ) d τ f(x) = \int_{-\infty}^{\infty} f(\tau) d \tau f(x)=f(τ)dτ

这是因为这里面多了一个滑动的概念,卷积核函数的大小不一定跟原函数一致,通常情况下,在滑动计算过程中,卷积核函数一次只处理原函数的一部分。
在这里插入图片描述
τ \tau τ 在某些教科书里,通常被称为一个与时间相关的变量。但你其实只需要理解, τ \tau τ 其实是 x x x 的一个,连续地包含了一定数量元素的子集。

卷积运算公式

卷积运算公式最好你能了解一下,虽然说写程序可能一辈子都用不到卷积的运算公式,但没准在论文里,或者某些考试的卷子上会出现这些公式。

交换律

x ( t ) ∗ h ( t ) = h ( t ) ∗ x ( t ) x(t)*h(t) = h(t)*x(t) x(t)h(t)=h(t)x(t)

分配律

x ( t ) ∗ [ g ( t ) + h ( t ) ] = x ( t ) ∗ g ( t ) + x ( t ) ∗ h ( t ) x(t)*[g(t)+h(t)] = x(t)*g(t)+x(t)*h(t) x(t)[g(t)+h(t)]=x(t)g(t)+x(t)h(t)

结合律

[ x ( t ) ∗ g ( t ) ] ∗ h ( t ) = x ( t ) ∗ [ g ( t ) ∗ h ( t ) ] [x(t)*g(t)]*h(t) = x(t)*[g(t)*h(t)] [x(t)g(t)]h(t)=x(t)[g(t)h(t)]

数乘结合律

a [ x ( t ) ∗ h ( t ) ] = [ a x ( t ) ] ∗ h ( t ) = x ( t ) ∗ [ a h ( t ) ] a[x(t)*h(t)]=[ax(t)]*h(t)=x(t)*[ah(t)] a[x(t)h(t)]=[ax(t)]h(t)=x(t)[ah(t)]

卷积核

卷积核的选取,我个人认为是卷积这种数学工具最重要的部分。因为对于做工程,或者做其他研究,一旦遇上需要使用卷积的部分,增强或者平滑某种信号,亦或者需要从原始信号中提取某种特征,通常意味着需要使用不同的卷积核。

对于数字图像来说,卷积核通常有这些类型,比如平滑(模糊)卷积核,锐化(增强)卷积核,以及边缘卷积核等。

卷积核函数有时会被称为卷积算子,即一个函数空间到函数空间上的映射。从我个人的理解看,他们只是名称叫法不一样,就类似于一个人的昵称、姓名、绰号一类,也就是所谓函数本尊。

另外,根据这类积分函数的特点,卷积核的大小其实是没有固定的规定。对于图像来说,常用的卷积核大小为 3 × 3 3 \times 3 3×3,但根据需要你也可以定义别的大小 4 × 4 4 \times 4 4×4 5 × 5 5 \times 5 5×5

3 × 3 3 \times 3 3×3 之所以比较常见,这通常是差分形式所决定的。

例如,对于拉普拉斯算子来说,其 3 × 3 3 \times 3 3×3 的数值通常如下:

[ 0 1 0 1 − 4 1 0 1 0 ] \begin{bmatrix} 0 & 1 & 0 \\ 1 & -4 & 1 \\ 0 & 1 & 0 \end{bmatrix} 010141010

之所以是这些特定的数值,并非心血来潮,而是根据拉普拉斯的中间差分的差分形式计算后得出

∂ 2 ∂ x 2 ≈ f ( x + 1 , y ) − 2 f ( x , y ) + f ( x − 1 , y ) \frac{\partial^2}{\partial x^2} \approx f(x+1, y) - 2f(x, y) + f(x-1, y) x22f(x+1,y)2f(x,y)+f(x1,y)
∂ 2 ∂ y 2 ≈ f ( x , y + 1 ) − 2 f ( x , y ) + f ( x , y − 1 ) \frac{\partial^2}{\partial y^2} \approx f(x, y+1) - 2f(x, y) + f(x, y-1) y22f(x,y+1)2f(x,y)+f(x,y1)

▽ 2 f ( x ) ≈ f ( x + 1 , y ) + f ( x − 1 , y ) + f ( x , y + 1 ) + f ( x , y − 1 ) − 4 f ( x , y ) \triangledown^2f(x) \approx f(x+1, y) + f(x-1, y) + f(x, y+1) + f(x, y-1) - 4f(x, y) 2f(x)f(x+1,y)+f(x1,y)+f(x,y+1)+f(x,y1)4f(x,y)

也就是说,这里的拉普拉斯算子的运算矩阵的每一个元素的数值,是其差分形式的所对应元素的系数。

因此,如果你要自行设计卷积核,那么需要根据使用卷积核函数所对应的差分形式,重新推算出新的矩阵每一项的值。

代码的基本框架

def convolution_kernel(data):# 定义卷积核函数kernel = np.array([[0, 1, 0],[1, -4, 1],[0, 1, 0]])# 卷积核计算# 将数组从二维转换为一维kernel = kernel.flatten()data = data.flatten()# 将核函数反转后和原始数据进行计算kernel = np.flipud(kernel)result = kernel * data# 返回加和后的值,并四舍五入return round(np.sum(result))def image_convolution(image):# 获取图片的长宽width, height = image.shapebackup = np.zeros(image.shape, np.uint8)# 对图片逐像素点遍历for i in range(1, width - 1):for j in range(1, height - 1):# 从图片中取出一个小矩阵,大小跟卷积核大小一致: 3x3sub_img = image[i-1:i+2, j-1:j+2]backup[i][j] = convolution_kernel(sub_img)# 返回处理后的图片return backup

  1. 《如何通俗易懂地解释卷积》 ,https://www.zhihu.com/question/22298352 ↩︎


http://chatgpt.dhexx.cn/article/bWfNVexW.shtml

相关文章

数(3)相关运算和卷积运算

目录 相关运算 卷积运算 连续信号 离散信号 卷积性质 卷积定理 (参考其他多篇博客,学习自用,侵删) 相关运算 相关运算是两个序列的相似性比较的一种数学运算。 公式里面的序列,可能是实数,可能是复数…

各种卷积方式的最全讲解

文章目录 一:卷积的定义二:标准卷积1.1D卷积Ⅰ:一维Full卷积Ⅱ:一维Same卷积Ⅲ:一维Valid卷积Ⅳ:三种一维卷积的相互关系 2.2D卷积3.3D卷积 三:转置卷积四:Separable卷积五&#xff…

深度学习(一):卷积运算

一、卷积核与池化: 1.1 卷积核(Convolutional): 将输入图像中一个小区域中像素加权平均后成为输出图像中的每个对应像素,其中权值由一个函数定义,这个函数称为卷积核(滤波器)。 一般可以看作对某个局部的…

深度学习-图解卷积运算

卷积神经网络(Convolutional Neural Network,CNN)针对全连接网络 的局限做出了修正,加入了卷积层(Convolution层)和池化层(Pooling 知 层)。 CNN被广泛应用于图像识别、语音识别等各…

【svg文字路径动画,让文字沿着路径动起来】

最近项目里面用到了这个文字路径动画,不得不说确实挺好玩的,如果有需要的小伙伴可以参考! 代码片段 由于公司之前项目里也用到过,但是我是第一次写,所以第一时间还是先看看前辈是怎么处理的,借鉴一下长长…

Qml路径动画-PathAnimation

Qml中的PathAnimation可以让目标沿着一个指定路径运行。 PathAnimation的属性 anchorPoint:使用"x,y"来指定运动的锚定点。orientation:指定控制目标对象沿着路径运动的旋转策略。path属性的类型为Path,选择你要构造的路径。 sta…

dotween路径移动_Unity---DOTween插件学习(3)---获取数据、协程、路径动画

[Toc] 本文及系列参考于Andy老师的DOTween系列 欢迎大家关注**Andy老师** 10、获取数据 类方法 返回所有暂停的动画,没有则返回null var list DOTween.PausedTweens(); 返回所有真正播放的动画,没有则返回null var list DOTween.PlayingTweens(); 获取…

houdini:固定朝向的路径动画

涉及节点:follow path 一、模型准备 路径、朝向的物体,以及运动的物体,一共三个 二、follow path 节点 原来xxxx是一个属性,现在好像必须在创建路径动画的时候就选择xxx了 下面请紧跟我的步骤 steep1:点击follow p…

Dotween运动曲线与路径动画

Dotween运动曲线与路径动画 Dotween--运动曲线内置的运动曲线AnimationCurve Dotween--路径动画一:设置一个数组存放位置坐标二:直接写出自己想要到的坐标 Dotween–运动曲线 想要理解Dotwenn的运动曲线,最重要的一步就是要理解坐标的的含义,这里看图讲…

AE路径动画

动画效果预览 一、AI跑道汽车 注:绘制完成后,给需要作动效的部位进行单独新建图层并命名; ctrl c,ctrlf原位粘贴 二、导入AE 具体导入方法请查看此文: AE动画导入/导出_TING糖的博客-CSDN博客AE导入/导出方式http…

Cinemachine教程 | Unity中如何制作路径动画?

摘要:在Unity中制作路径动画是有挺多方式的,基于Cinemachine的Dolly Path是一个简单便捷的方法,咱们来快速的学习一下吧! 洪流学堂,让你快人几步。你好,我是跟着大智(VX: zhz11235)学Unity的萌新&#xff0…

Android实现 曲线路径动画

本文参考 https://www.jianshu.com/p/fea4d1f6512a 概述 近期碰到曲线动画的实现问题,写本文记录下。 动画类似“剑与远征”游戏的金币动画,动画路径如下图: 思路 通过贝塞尔曲线计算出x和y的位置(各个点的位置需要自己微调&am…

WPF实现路径动画

让目标沿着一条给定的路径移动&#xff0c;使用DoubleAnimationUsingPath类实现。实现如下。 点击鼠标移动 实现代码如下&#xff1a;界面XAML <Grid x:Name"LayoutRoot"> <Grid.Resources> <PathGeometry x:Key"movingPath…

Houdini:最小白的路径动画

涉及节点&#xff1a;curve、constraints、follow path 涉及知识&#xff1a;路径动画、约束 提一嘴maya的路径动画&#xff1a;在constrain-->motion paths -->attach motion path中 一、模型准备 一个模型和一个curve曲线&#xff0c;分别在两个geometry里面&#…

UE5蓝图时间轴摄影机路径动画

1. 新建蓝图类Actor 2. 蓝图里添加Spline和Camera组件&#xff0c;另外添加一个Scene场景组件&#xff0c;可以把Camera拖到Scene的子级&#xff0c;这样做可以让Camera在沿着路径运动的时候自由更改旋转方向 3. 打开关卡蓝图&#xff0c;首先按键获取MovingLine的Camera视角&a…

html5 路径运动,探秘神奇的运动路径动画 Motion Path

CSS 中有一个非常有意思的模块 -- CSS Motion Path Module Level 1,翻译过来也就是运动路径。本文将对 motion path 一探究竟,通过本文,你可以了解到:什么是 CSS motion path 使用 CSS motion path 制作简单路径动画 使用 CSS motion path 制作复杂路径动画 什么是 CSS Mot…

canvas绘制折线路径动画

最近有读者加我微信咨询这个问题&#xff1a; 其中的效果是一个折线路径动画效果&#xff0c;如下图所示&#xff1a; 要实现以上路径动画&#xff0c;一般可以使用svg的动画功能。或者使用canvas绘制&#xff0c;结合路径数学计算来实现。 如果用canvas来绘制&#xff0c…

路径动画

工作日记&#xff0c;最近做项目遇到一个有意思的动画效果&#xff0c;路径动画&#xff0c;做一个demo&#xff0c;方便以后查阅&#xff0c;也供初学者借鉴&#xff01; 效果如下图&#xff1a; 效果分两步&#xff1a; 第一步是把书翻开&#xff0c;是一个贞动画&#xf…

openlayers实现路径动画

实现效果如下 主要代码 import {Feature} from ol; import {LineString, Point} from ol/geom; import {Icon, Stroke, Fill, Style} from ol/style; import {getVectorContext} from ol/render;// 路径动画图层 let traceSource new VectorSource({}); let moveLayer new…

咸鱼Maya笔记—路径动画

咸鱼Maya笔记—路径动画 创建路径动画 动画的创建方式有很多种&#xff0c;路径动画是其中的一种&#xff0c;Key关键帧的方式并不适用于所有的情况&#xff0c;有些特定的情况下我们就需要用到路径动画&#xff0c;它的创建方法如下 创建路径动画 &#xff08;如果你的maya菜…