三种常见的平滑滤波方法

news2024/9/8 23:44:42

一、概述

  平滑滤波,顾名思义就是对信号进行处理使之整体显得更加平滑,降低噪声影响,提高信号质量,它常见于数学信号处理和图像处理,一般意义上的数字信号多体现于一维数据,图像信号多体现于二维数据。
  均值滤波、中值滤波、高斯滤波是三种常见的平滑滤波方法,其中均值滤波和高斯滤波是线性技术,中值滤波是非线性技术。它们实现的基本原理是基本一致的,指定一个滑动窗口,计算其中的均值、中值、卷积值输出到当前位置。
  均值滤波、高斯滤波对高斯噪声表现较好,但对椒盐噪声表现较差;中值滤波则对椒盐噪声表现较好,对高斯噪声表现较差。

二、基本原理

  均值滤波、中值滤波、高斯滤波的基本原理都是以一个滑动窗口,以指定的计算方式得到其中的值,将它输出到信号的当前位置,
在这里插入图片描述
在这里插入图片描述
  均值滤波计算均值,中值滤波计算中值,高斯滤波计算卷积值。窗口大小L的设定一般为2k+1,每次计算窗口中心位置的值。
  该种策略下,在边缘区域窗口输出的位置是无法覆盖到的,因此需要特定的方式进行处理。处理的方式通常有四种:不作处理、只计算窗口包含区域、外周填充0、外周填充邻近元素值或指定值。

1.均值滤波

(1)一维
  对于信号(a1,a2,…,an),定义一个大小为L的窗口,计算窗口中元素的均值
v m e a n = 1 L ∑ i = 1 L x i vmean=\frac{1}{L}\sum_{i=1}^{L}{x_i} vmean=L1i=1Lxi
  作为对应窗口 L + 1 2 \frac{L+1}{2} 2L+1位置处的输出值。
(2)二维
  对于一幅灰度图像
A = [ a 11 a 12 ⋯ a 1 n a 21 a 22 ⋯ a 2 n ⋮ ⋮ ⋱ ⋮ a m 1 a m 2 ⋯ a m n ] A=\begin{equation*} \begin{bmatrix} a_{11} & a_{12} & \cdots & a_{1n} \\ a_{21} & a_{22} & \cdots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m1} & a_{m2} & \cdots & a_{mn} \end{bmatrix} \end{equation*} A= a11a21am1a12a22am2a1na2namn
  定义一个大小为L*L的窗口,计算窗口中元素的均值
v m e a n = 1 L 2 ∑ i = 1 L ∑ j = 1 L p i j vmean=\frac{1}{L^{2}}\sum_{i=1}^{L}{\sum_{j=1}^{L}{p_{ij}}} vmean=L21i=1Lj=1Lpij
  作为对应窗口 ( L + 1 2 , L + 1 2 ) \left( \frac{L+1}{2},\frac{L+1}{2} \right) (2L+1,2L+1) 位置处的输出值。

2.中值滤波

(1)一维
  对于信号(a1,a2,…,an),定义大小为L的窗口,计算窗口中元素的中值。

  • 升序(降序)排列为(r1,r2,…,rL),
  • 取中间 L + 1 2 \frac{L+1}{2} 2L+1处的值,作为对应窗口 L + 1 2 \frac{L+1}{2} 2L+1 位置处的输出值。

(2)二维
  对于一幅灰度图像
A = [ a 11 a 12 ⋯ a 1 n a 21 a 22 ⋯ a 2 n ⋮ ⋮ ⋱ ⋮ a m 1 a m 2 ⋯ a m n ] A=\begin{equation*} \begin{bmatrix} a_{11} & a_{12} & \cdots & a_{1n} \\ a_{21} & a_{22} & \cdots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m1} & a_{m2} & \cdots & a_{mn} \end{bmatrix} \end{equation*} A= a11a21am1a12a22am2a1na2namn
  定义大小为L*L的窗口,计算窗口中元素的中值。

  • 升序(降序)排列为(r1,r2,…,rL2),
  • 取中间 L 2 + 1 2 \frac{L^2+1}{2} 2L2+1处的值,作为对应窗口 ( L + 1 2 , L + 1 2 ) \left( \frac{L+1}{2}, \frac{L+1}{2}\right) (2L+1,2L+1)位置处的输出值。

3.高斯滤波

  高斯滤波类似于均值滤波和中值滤波,形式上和均值滤波是统一的。均值滤波计算的是元素的均值,也就是均数1/n的加权和。高斯滤波同样定义一个滑动窗口,这个窗口中对应于每个元素定义了一个权重参数,窗口的输出就是数据元素和这些权重参数的加权和,因为这个运算是形式化的卷积运算,因此这个窗口叫做卷积核。
(1)一维
  对于信号(a1,a2,…,an),定义一个大小为L的卷积核
( w 1 , w 2 , . . . , w L ) \left( w_1,w_2,...,w_L \right) (w1,w2,...,wL)
  与数据元素做卷积运算,得到值
v g a u s = ∑ i = 1 L w i ⋅ x i vgaus=\sum_{i=1}^{L}{w_i\cdot x_i} vgaus=i=1Lwixi
  作为对应窗口 L + 1 2 \frac{L+1}{2} 2L+1位置处的输出值。
(2)二维
  对于一幅灰度图像
A = [ a 11 a 12 ⋯ a 1 n a 21 a 22 ⋯ a 2 n ⋮ ⋮ ⋱ ⋮ a m 1 a m 2 ⋯ a m n ] A=\begin{equation*} \begin{bmatrix} a_{11} & a_{12} & \cdots & a_{1n} \\ a_{21} & a_{22} & \cdots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m1} & a_{m2} & \cdots & a_{mn} \end{bmatrix} \end{equation*} A= a11a21am1a12a22am2a1na2namn
  定义一个大小为L*L的卷积核
[ w 11 ⋯ w 1 L ⋮ ⋱ ⋮ w L 1 ⋯ w L L ] \begin{equation*} \begin{bmatrix} w_{11} & \cdots & w_{1L} \\ \vdots & \ddots & \vdots \\ w_{L1} & \cdots & w_{LL} \end{bmatrix} \end{equation*} w11wL1w1LwLL
  与数据元素做卷积运算,得到值
v g a u s = ∑ i = 1 L ∑ j = 1 L w i j ⋅ x i j vgaus=\sum_{i=1}^{L}{\sum_{j=1}^{L}{w_{ij}\cdot x_{ij}}} vgaus=i=1Lj=1Lwijxij
  作为对应窗口 ( L + 1 2 , L + 1 2 ) \left( \frac{L+1}{2}, \frac{L+1}{2}\right) (2L+1,2L+1)位置处的输出值。

4.边缘处理

  滤波窗口处在数据边缘区域时,对于最外周的 L − 1 2 \frac{L-1}{2} 2L1宽度的那些元素,窗口输出的位置无法涵盖到它们,因此需要以一定的策略对该区域进行处理。常见的处理策略有以下几种:
(1)不作处理
  对于边缘区域不作处理,计算时直接略过。
(2)只计算窗口包含区域
  照常由窗口的中心点进行覆盖,计算时不计外周缺失的部分,只计算窗口包含的区域。
(3)外周填充0
  照常由窗口的中心点进行覆盖,外周缺失的部分填充0。
(4)外周填充邻近元素值或其他指定值
  照常由窗口的中心点进行覆盖,外周缺失的部分填充邻近元素值或其他指定的值。

三、示例

1.均值滤波

一维:
  有信号段S=[3, 2, 4, 5, 13, 7, 9, 10, 1, 6],定义长度为3的窗口,进行均值滤波的平滑处理,边缘区域以填充0的方式操作。
  首位置窗口的三个元素为[0,3,2],输出均值 0 + 3 + 2 3 ≈ 1.67 \frac{0+3+2}{3}\approx1.67 30+3+21.67
  窗口滑至下一位置,三个元素为[3,2,4],输出均值 3 + 2 + 4 3 = 3 \frac{3+2+4}{3}=3 33+2+4=3
  窗口滑至下一位置,三个元素为[2,4,5],输出均值 2 + 4 + 5 3 ≈ 3.67 \frac{2+4+5}{3}\approx3.67 32+4+53.67
  同样地,窗口依次输出值7.33、8.33、9.67、8.67、6.67、5.67,在最后一个窗口位置,三个元素为[1,6,0],输出均值2.33。
  因此,输出的信号段为O=[1.67, 3, 3.67, 7.33, 8.33, 9.67, 8.67, 6.67, 5.67, 2.33]。

二维:
  有图像矩阵
I = [ 4 3 1 6 2 5 7 1 2 0 6 10 7 3 5 9 ] I=\begin{equation*} \begin{bmatrix} 4 & 3 & 1 & 6 \\ 2 & 5 & 7 & 1 \\ 2 & 0 & 6 & 10 \\ 7 & 3 & 5 & 9 \end{bmatrix} \end{equation*} I= 42273503176561109
  定义长度为3*3的窗口,进行均值滤波的平滑处理,边缘区域以填充0的方式操作。
  首位置窗口内容为 [ 0 0 0 0 4 3 0 2 5 ] \begin{equation*} \begin{bmatrix} 0 & 0 & 0 \\ 0 & 4 & 3 \\ 0 & 2 & 5 \\ \end{bmatrix} \end{equation*} 000042035 ,输出均值 1 9 ( 0 + 0 + 0 + 0 + 0 + 4 + 3 + 2 + 5 ) ≈ 1.56 \frac{1}{9}\left( 0+0+0+0+0+4+3+2+5 \right)\approx1.56 91(0+0+0+0+0+4+3+2+5)1.56
  窗口滑至下一位置,内容为 [ 0 0 0 4 3 1 2 5 7 ] \begin{equation*} \begin{bmatrix} 0 & 0 & 0 \\ 4 & 3 & 1 \\ 2 & 5 & 7 \\ \end{bmatrix} \end{equation*} 042035017 ,输出均值2.44;
  窗口滑至下一位置,内容为 [ 0 0 0 3 1 6 5 7 1 ] \begin{equation*} \begin{bmatrix} 0 & 0 & 0 \\ 3 & 1 & 6 \\ 5 & 7 & 1 \\ \end{bmatrix} \end{equation*} 035017061 ,输出均值2.56;
  窗口滑至下一位置,内容为 [ 0 0 0 0 1 6 0 7 1 ] \begin{equation*} \begin{bmatrix} 0 & 0 & 0 \\ 0 & 1 & 6 \\ 0 & 7 & 1 \\ \end{bmatrix} \end{equation*} 000017061 ,输出均值1.67;
  同样地,窗口依次输出值1.78、3.33、4.33、3.44、2.11、4.11、5.11、4.22、1.33、2.56、3.67、3.33。
  因此,输出的图像矩阵为
O = [ 1.56 2.44 2.56 1.67 1.78 3.33 4.33 3.44 2.11 4.11 5.11 4.22 1.33 2.56 3.67 3.33 ] O=\begin{equation*} \begin{bmatrix} 1.56 & 2.44 & 2.56 &1.67 \\ 1.78 & 3.33 & 4.33 & 3.44 \\ 2.11 & 4.11 & 5.11 & 4.22 \\ 1.33 & 2.56 & 3.67 & 3.33 \end{bmatrix} \end{equation*} O= 1.561.782.111.332.443.334.112.562.564.335.113.671.673.444.223.33

2.中值滤波

一维:
  有信号段S=[3, 2, 4, 5, 13, 7, 9, 10, 1, 6],定义长度为3的窗口,进行中值滤波的平滑处理,边缘区域以填充0的方式操作。
  首位置窗口的三个元素为[0,3,2],输出中值2;
  窗口滑至下一位置,三个元素为[3,2,4],输出中值3;
  窗口滑至下一位置,三个元素为[2,4,5],输出中值4;
  同样地,窗口依次输出值5、7、9、9、9、6、1。
  因此,输出的信号段为O=[2, 3, 4, 5, 7, 9, 9, 9, 6, 1]。

二维:
  有图像矩阵
I = [ 4 3 1 6 2 5 7 1 2 0 6 10 7 3 5 9 ] I=\begin{equation*} \begin{bmatrix} 4 & 3 & 1 & 6 \\ 2 & 5 & 7 & 1 \\ 2 & 0 & 6 & 10 \\ 7 & 3 & 5 & 9 \end{bmatrix} \end{equation*} I= 42273503176561109
  定义长度为3*3的窗口,进行中值滤波的平滑处理,边缘区域以填充0的方式操作。
  首位置窗口内容为 [ 0 0 0 0 4 3 0 2 5 ] \begin{equation*} \begin{bmatrix} 0 & 0 & 0 \\ 0 & 4 & 3 \\ 0 & 2 & 5 \\ \end{bmatrix} \end{equation*} 000042035 ,输出中值0;
  窗口滑至下一位置,内容为 [ 0 0 0 4 3 1 2 5 7 ] \begin{equation*} \begin{bmatrix} 0 & 0 & 0 \\ 4 & 3 & 1 \\ 2 & 5 & 7 \\ \end{bmatrix} \end{equation*} 042035017 ,输出中值2;
  窗口滑至下一位置,内容为 [ 0 0 0 3 1 6 5 7 1 ] \begin{equation*} \begin{bmatrix} 0 & 0 & 0 \\ 3 & 1 & 6 \\ 5 & 7 & 1 \\ \end{bmatrix} \end{equation*} 035017061 ,输出中值1;
  窗口滑至下一位置,内容为 [ 0 0 0 0 1 6 0 7 1 ] \begin{equation*} \begin{bmatrix} 0 & 0 & 0 \\ 0 & 1 & 6 \\ 0 & 7 & 1 \\ \end{bmatrix} \end{equation*} 000017061 ,输出中值0;
  同样地,窗口依次输出值2、3、5、1、2、5、5、5、0、2、3、0。
因此,输出的图像矩阵为
O = [ 0 2 1 0 2 3 5 1 2 5 5 5 0 2 3 0 ] O=\begin{equation*} \begin{bmatrix} 0 & 2 & 1 & 0 \\ 2 & 3 & 5 & 1 \\ 2 & 5 & 5 & 5 \\ 0 & 2 & 3 & 0 \end{bmatrix} \end{equation*} O= 0220235215530150

3.高斯滤波

一维:
  有信号段S=[3, 2, 4, 5, 13, 7, 9, 10, 1, 6],定义长度为3的卷积核[1, 0, 1],进行高斯滤波的平滑处理,边缘区域以填充0的方式操作。
  首位置窗口的三个元素为[0,3,2],输出卷积值2;
  窗口滑至下一位置,三个元素为[3,2,4],输出卷积值7;
  窗口滑至下一位置,三个元素为[2,4,5],输出卷积值7;
  同样地,窗口依次输出值17、12、22、17、10、16、1。
  因此,输出的信号段为O=[2, 7, 7, 17, 12, 22, 17, 10, 16, 1]。

二维:
  有图像矩阵
I = [ 4 3 1 6 2 5 7 1 2 0 6 10 7 3 5 9 ] I=\begin{equation*} \begin{bmatrix} 4 & 3 & 1 & 6 \\ 2 & 5 & 7 & 1 \\ 2 & 0 & 6 & 10 \\ 7 & 3 & 5 & 9 \end{bmatrix} \end{equation*} I= 42273503176561109
  定义长度为3*3的卷积核 [ 1 0 1 0 0 0 1 0 1 ] \begin{equation*} \begin{bmatrix} 1 & 0 & 1 \\ 0 & 0 & 0 \\ 1 & 0 & 1 \\ \end{bmatrix} \end{equation*} 101000101 ,进行高斯滤波的平滑处理,边缘区域以填充0的方式操作。
  首位置窗口内容为 [ 0 0 0 0 4 3 0 2 5 ] \begin{equation*} \begin{bmatrix} 0 & 0 & 0 \\ 0 & 4 & 3 \\ 0 & 2 & 5 \\ \end{bmatrix} \end{equation*} 000042035 ,输出卷积值5;
  窗口滑至下一位置,内容为 [ 0 0 0 4 3 1 2 5 7 ] \begin{equation*} \begin{bmatrix} 0 & 0 & 0 \\ 4 & 3 & 1 \\ 2 & 5 & 7 \\ \end{bmatrix} \end{equation*} 042035017 ,输出卷积值9;
  窗口滑至下一位置,内容为 [ 0 0 0 3 1 6 5 7 1 ] \begin{equation*} \begin{bmatrix} 0 & 0 & 0 \\ 3 & 1 & 6 \\ 5 & 7 & 1 \\ \end{bmatrix} \end{equation*} 035017061 ,输出卷积值6;
  窗口滑至下一位置,内容为 [ 0 0 0 0 1 6 0 7 1 ] \begin{equation*} \begin{bmatrix} 0 & 0 & 0 \\ 0 & 1 & 6 \\ 0 & 7 & 1 \\ \end{bmatrix} \end{equation*} 000017061 ,输出卷积值1;
  同样地,窗口依次输出值3、13、19、7、8、21、18、12、0、8、10、6。
  因此,输出的图像矩阵为
O = [ 5 9 6 1 3 13 19 7 8 21 18 12 0 8 10 6 ] O=\begin{equation*} \begin{bmatrix} 5 & 9 & 6 & 1 \\ 3 & 13 & 19 & 7 \\ 8 & 21 & 18 & 12 \\ 0 & 8 & 10 & 6 \end{bmatrix} \end{equation*} O= 5380913218619181017126


pdf下载:
https://download.csdn.net/download/Albert201605/88191979?spm=1001.2014.3001.5503


End.



参考:
https://blog.csdn.net/cjsh_123456/article/details/79261271

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/856655.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于Java的体育网站的设计与实现(论文+源码)_kaic

基于Java的体育网站的设计与实现 摘 要:在网络应用的迅速发展与科技的不断进步的现代环境下,人们生活节奏越来越快,娱乐方式也多种多样,各种软件应用,各种娱乐,购物网站已经成为必不可少的伴随品&#xff…

Jenkins+Docker+SpringCloud微服务持续集成项目优化和微服务集群

JenkinsDockerSpringCloud微服务持续集成项目优化和微服务集群 JenkinsDockerSpringCloud部署方案优化JenkinsDockerSpringCloud集群部署流程说明修改所有微服务配置 设计Jenkins集群项目的构建参数编写多选项遍历脚本多项目提交进行代码审查多个项目打包及构建上传镜像把Eurek…

一种简单高效的IMU姿态解算方法

这里给出一种简单高效的IMU姿态解算方法,本方法的特点就是思路非常的简单,并且效果也还可以,地面机器人这类运动想对不那么剧烈的应用应该是能应付的,但是震动较大的无人机、足式机器人等应用是否能应用还有待试验。 代码如下&am…

【Leetcode】(自食用)LRU算法(哈希链表法)

step by step. 题目: 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类: LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中,则返回关键…

【深度学习注意力机制系列】—— CBAM注意力机制(附pytorch实现)

CBAM(Convolutional Block Attention Module)是一种用于增强卷积神经网络(CNN)性能的注意力机制模块。它由Sanghyun Woo等人在2018年的论文[1807.06521] CBAM: Convolutional Block Attention Module (arxiv.org)中提出。CBAM的主…

实现静态资源访问的几种方法

什么是静态资源? 静态资源是指在服务器端存储的不会变化的文件,如HTML、CSS、JavaScript、图片、音频、视频等文件。这些文件一般不包含动态内容,每次请求时返回的内容都是固定的。 为什么要使用静态资源? 提升网站性能&#xf…

gitblit-使用

1.登入GitBlit服务器 默认用户和密码: admin/admin 2.创建一个新的版本库 点击图中的“版本库”,然后点击图中“创建版本库” 填写名称和描述,注意名称最后一定要加 .git选择限制查看、克隆和推送勾选“加入README”和“加入.gitignore文件”在图中的1处…

kafka-2.12使用记录

kafka-2.12使用记录 安装kafka 2.12版本 下载安装包 根据你的系统下载rpm /deb /zip包等等, 这里我使用的是rpm包 安装命令 rpm -ivh kafka-2.12-1.nfs.x86_64.rpm启动内置Zookeeper 以下命令要写在同一行上 /opt/kafka-2.12/bin/zookeeper-server-start.sh /opt/kafka-2…

5.3.7.自动创建字符设备驱动的设备文件 class_create device_create

5.3.7.自动创建字符设备驱动的设备文件 5.3.7.1、问题描述: (1)整体流程回顾 (2)使用mknod创建设备文件的缺点 (3)能否自动生成和删除设备文件 5.3.7.2、解决方案:udev是PC机(嵌入式中用的是mdev) (1)什么是udev?应用层…

C语言笔记6

关于microsoft visual 的学习笔记 CtrlF5就是启动编译程序 先CtrlA进行全选&#xff0c;然后AitF8就自动的调节代码的格式 #include <stdio.h> #include <stdlib.h> int main() {//system启动程序(在一个程序中启动另外一个程序)//如果程序环境变量中找不到程序&am…

OpenCV实战(29)——视频对象追踪

OpenCV实战&#xff08;29&#xff09;——视频对象追踪 0. 前言1. 追踪视频中的对象2. 中值流追踪器算法原理3. 完整代码小结系列链接 0. 前言 我们已经学习了如何跟踪图像序列中点和像素的运动。但在多数应用中&#xff0c;通常要求追踪视频中的特定移动对象。首先确定感兴趣…

FFmpeg安装和使用

sudo apt install ffmpeg sudo apt-get install libavfilter-devcmakelist模板 CMakeLists.txt cmake_minimum_required(VERSION 3.16) project(ffmpeg_demo)# 设置ffmpeg依赖库及头文件所在目录&#xff0c;并存进指定变量 set(ffmpeg_libs_DIR /usr/lib/x86_64-linux-gnu) …

SpringBoot自动装配及run方法原理探究

自动装配 1、pom.xml spring-boot-dependencies&#xff1a;核心依赖在父工程中&#xff01;我们在写或者引入一些SpringBoot依赖的时候&#xff0c;不需要指定版本&#xff0c;就因为有这些版本仓库 1.1 其中它主要是依赖一个父工程&#xff0c;作用是管理项目的资源过滤及…

冠达管理:“高温超导”不是“室温超导”,5天4板百利电气再次澄清

短短半个月&#xff0c;“室温超导”在惊喜、质疑间回转&#xff0c;但资本市场对“超导概念股”的炒作还在进行&#xff0c;8月7日室温超导概念持续疯涨。同花顺显现&#xff0c;到8月7日收盘&#xff0c;18只超导概念股中&#xff0c;有16只股票飘红。 广东研山私募证券投资&…

如何将GPS坐标点如何网格化?

目录 题主问题&#xff1a; 解答&#xff1a; 高效判断点是否在正六边形蜂窝内的方法 代码实现&#xff1a;ArcGIS中实现指定面积蜂窝&#xff08;正六边形&#xff09;方法 碰巧自己前段时间处理过类似的数据&#xff0c;讲一下自己的解决思路。 题主问题&#xff1a; 解…

【小练习】交互式网格自定义增删改(进行中)

学习SQL和PLISQL数据类型的区别和应用场景 Oracle plsql 基础篇1 数据类型以及流程控制_bb_tarek的博客-CSDN博客https://blog.csdn.net/bb_tarek/article/details/17555713?ops_request_misc&request_id&biz_id102&utm_termplsql%E5%9F%BA%E6%9C%AC%E6%95%B0%E6…

9.异常

文章目录 9.1 Java 异常类层次结构图9.2 Throwable 类常用方法9.3 try-catch-finally9.4使用 try-with-resources 来代替try-catch-finally 9.1 Java 异常类层次结构图 在 Java 中&#xff0c;所有的异常都有一个共同的祖先 java.lang 包中的 Throwable 类。Throwable 类有两个…

CentOS安装Postgresql

PG基本安装步骤 安装postgresql&#xff1a; sudo yum install postgresql-server初始化数据库&#xff1a;安装完毕后&#xff0c;需要初始化数据库并创建初始用户&#xff1a; sudo postgresql-setup initdb启动和停止服务&#xff1a; sudo systemctl start postgresql sudo…

06微服务间的通信方式

一句话导读 微服务设计的一个挑战就是服务间的通信问题&#xff0c;服务间通信理论上可以归结为进程间通信&#xff0c;进程可以是同一个机器上的&#xff0c;也可以是不同机器的。服务可以使用同步请求响应机制通信&#xff0c;也可以使用异步的基于消息中间件间的通信机制。同…

【TS第三讲】完善TS开发环境

文章目录 &#x1f31f; 写在前面&#x1f31f; ts-node&#x1f31f; nodemon&#x1f31f; nodemon文件类型&#x1f31f; nodemon文件范围&#x1f31f; 写在最后 &#x1f31f; 写在前面 &#x1f525;探索TypeScript世界&#xff0c;驭Vue3Ts潮流&#xff0c;开启前端之旅…