此章节是楼主码字最多的,也是我个人认为最为重要和基础的一个章节,我对原理,数学公式以及API解释都进行了详细描述,希望能坚持看完!希望对你们有所帮助!!

目录:

滤波(blur)操作是一种基于邻域的图像平滑方法。

7.0 噪声和降噪

图像噪声 —— pattern noise

图像噪声是指存在于图像数据中的不必要的或多余的干扰信息。噪声的存在严重影响了遥感图像的质量,因此在图像增强处理和分类处理之前,必须予以纠正。 图像中各种妨碍人们对其信息接受的因素即可称为图像噪声 。噪声在理论上可以定义为“不可预测,只能用概率统计方法来认识的随机误差”。因此将图像噪声看成是多维随机过程是合适的,因而描述噪声的方法完全可以借用随机过程的描述,即用其概率分布函数和概率密度分布函数。

噪声在图像上常表现为一引起较强视觉效果的孤立像素点或像素块。一般,噪声信号与要研究的对象不相关,它以无用的信息形式出现,扰乱图像的可观测信息。通俗的说就是噪声让图像不清楚。

噪声的来源:

(1)图像获取过程中

两种常用类型的图像传感器CCD和CMOS采集图像过程中,由于受传感器材料属性、工作环境、电子元器件和电路结构等影响,会引入各种噪声,如电阻引起的热噪声、场效应管的沟道热噪声、光子噪声、暗电流噪声、光响应非均匀性噪声。

(2)图像信号传输过程中

由于传输介质和记录设备等的不完善,数字图像在其传输记录过程中往往会受到多种噪声的污染。另外,在图像处理的某些环节当输入的对象并不如预想时也会在结果图像中引入噪声。

7.0.1 图像处理 —— 滤波

过滤 :是信号和图像处理中基本的任务。其目的是根据应用环境的不同,选择性的提取图像中某些认为是重要的信息。过滤可以移除图像中的噪音、提取感兴趣的可视特征、允许图像重采样等等。

频域分析 :将图像分成从低频到高频的不同部分。低频对应图像强度变化小的区域,而高频是图像强度变化非常大的区域。

在频率分析领域的框架中,滤波器是一个用来增强图像中某个波段或频率并阻塞(或降低)其他频率波段的操作。低通滤波器是消除图像中高频部分,但保留低频部分。高通滤波器消除低频部分。

滤波(高通、低通、带通、带阻) 、模糊、去噪、平滑等。

7.0.2 常见噪声的分类

先上一个结论,常见噪声总结:

噪声按照不同的分类标准可以有不同的分类形式:

基于产生原因:

内部噪声:

一般又可分为以下四种:

(1)由光和电的基本性质所引起的噪声。如电流的产生是由电子或空穴粒子的集合,定向运动所形成。因这些粒子运动的随机性而形成的散粒噪声;导体中自由电子的无规则热运动所形成的热噪声;根据光的粒子性,图像是由光量子所传输,而光量子密度随时间和空间变化所形成的光量子噪声等。

(2)电器的机械运动产生的噪声。如各种接头因抖动引起电流变化所产生的噪声;磁头、磁带等抖动或一起的抖动等。

(3)器材材料本身引起的噪声。如正片和负片的表面颗粒性和磁带磁盘表面缺陷所产生的噪声。随着材料科学的发展,这些噪声有望不断减少,但还是不可避免的。

(4)系统内部设备电路所引起的噪声。如电源引入的交流噪声;偏转系统和箝位电路所引起的噪声等。

外部噪声:系统外部干扰以电磁波或经电源串进系统内部而引起的噪声。如电气设备,天体放电现象等引起的噪声。

根据 图像(信号)与噪声 之间的关系 来分类:

(1)加性噪声

噪声和原始图像不相关,可以表示为:

其中f(x,y)代表被污染的图像(噪声图像),g(x,y)代表原始图像,n(x,y)代表噪声。图像中的加性噪声一般是在图像的传输过程中由“信道噪声”和CCD摄像机对图像数字化的过程中产生的。

(2)乘性噪声

噪声和原始图像相关,可以表示为:

图像中的乘性噪声一般是由胶片中的颗粒、飞点扫描图像中的噪声、电视扫描光栅等原因造成的。

(3)量化噪声

图像中的量化噪声是图像在量化过程中图像从模拟到数字所产生的差异,是图像量化过程中的误差。

根据基于 统计后的概率密度函数:是比较重要的,主要因为引入数学模型,这就有助于运用数学手段去除噪声。在不同场景下噪声的施加方式都不同,由于在外界的某种条件下,噪声下图像-原图像(没有噪声时)的概率密度函数(统计结果)服从某种分布函数,那么就把它归类为相应的噪声。下面将具体说明基于统计后的概率密度函数的噪声分类及其消除方式。

图像常见噪声基本上有以下四种,高斯噪声,泊松噪声,乘性噪声,椒盐噪声。

7.0.2.1 Gaussian Noise

高斯噪声是指它的概率密度函数服从高斯分布(即正态分布)的一类噪声。如果一个噪声,它的幅度分布服从高斯分布,而它的功率谱密度又是均匀分布的,则称它为高斯白噪声。高斯白噪声的二阶矩不相关,一阶矩为常数,是指先后信号在时间上的相关性。

产生原因:

1)图像传感器在拍摄时视场不够明亮、亮度不够均匀;

2)电路各元器件自身噪声和相互影响;

3)图像传感器长期工作,温度过高。

高斯函数:

其中灰度值用x表示,灰度值的期望值用μ表示,灰度值的标准差用σ表示。高斯噪声的概率密度函数如下图所示:

首先下面是原图:

统计直方图:

可以看到,噪声的直方图中图形像高斯正态函数的分布。

说明:噪声对原图像的影响是随机的,直方图呈现的分布形式是基于统计的结果。直方图表示了(归一化后)灰度值的概率密度分布,因此可以使用直方图来表示灰度值的概率密度。

7.0.2.2 脉冲(椒盐)噪声

椒盐噪声也称为脉冲噪声,是图像中经常见到的一种噪声,它是一种随机出现的白点或者黑点,可能是亮的区域有黑色像素或是在暗的区域有白色像素(或是两者皆有)。盐和胡椒噪声的成因可能是影像讯号受到突如其来的强烈干扰而产生、类比数位转换器或位元传输错误等。例如失效的感应器导致像素值为最小值,饱和的感应器导致像素值为最大值。

脉冲(椒盐)噪声的消除方式

一般使用非线性滤波器处理椒盐噪声:

异常值侦测异常侦测(Anomaly detection)有时称为异常值侦测(Outlier detection),如其名所隐含的,在给定的资料集合中,它将侦测在已有的规律中表现异常者。现今常用的方法以计算距离为基础的K-近邻算法或是机器学习中的支持向量机等。

中值滤波器中值滤波器(Median filtering) 如其名所隐含的,它将一个像素的值用该像素邻域中强度值的中间值来取代(计算中间值的过程中,也会将该像素的原始值包含),中值滤波器在处理盐和胡椒噪声上能提供绝佳的噪声降低效能。

伪中值滤波器为了改进中值滤波器的计算速率,伪中值滤波器(Pseudo-median filtering) 以近似的方法算出中间值。

7.0.2.3 泊松噪声

泊松噪声,就是符合泊松分布的噪声模型,泊松分布适合于描述单位时间内随机事件发生的次数的概率分布。如某一服务设施在一定时间内受到的服务请求的次数,电话交换机接到呼叫的次数、汽车站台的候客人数、机器出现的故障数、自然灾害发生的次数、DNA序列的变异数、放射性原子核的衰变数等等

7.0.2.4 乘性噪声

乘性噪声一般由信道不理想引起,它们与信号的关系是相乘,信号在它在,信号不在他也就不在。

7.1 原理

7.1.1 卷积神经网络

卷积的作用:

消除噪声

锐化

7.1.1.1 卷积背景及原理

卷积是泛函分析中的一种数学算子。通过两个函数 f  和 g 来生成第三个函数的运算。

f(t’) 和 g(t - t’) 实际就是两个函数,g(-t’) 实际就是与 g(t’) 关于 y 轴对称 ,g(-t’ + x)就是将g(t’) 关于y轴对称后 然后继续平移。看成 g[- (t’ - x) ] 左加右减。往右平移了x个单位。然后和 f(t’) 相乘再定积分,定积分范围是 负无穷到正无穷,然后累加。注意它是对 t’ 进行积分,而不是对我们的x进行积分,就是我们下面画图中的横轴就是 t’。

所以卷积的作用:把一个函数先对折,再按照 x 个单位去逐渐的平移,平移完后再相乘做定积分。

卷积操作历史上来发展于信号处理领域,在信号处理中原始信号通常会被混入噪音,假设传感器在每个时刻t  会输出一个信号 f(t),这个信号通常混入了一些噪声,我们可以通过过个测量点进行加权平均来抵消掉噪声,并且离当前时间点t  越近的测量点权重应该越高,我们可以用下面的公式表示

上式中 g是一个权重函数,参数是时间点 t’ 距离当前时间 t 的距离,输出 t' 时间点测量的权重; f 是信号测量函数。 在这个例子中, t’  的采样是离散的,因此采用了加和的形式,同时g  还应该是一个概率密度函数,因为在这个例子中表示了一种权重。下图就是这个例子的可视化,灰色是f(t)  ,红色的部分就是经过翻转的g  ,绿色部分是生成的 h。

卷和:针对离散型变量

通常将函数  f 称为输入(input),函数  g  称为卷积核(kernel),函数  h  称为特征图谱(feature map)

多维度:

蓝色部分对应的是输入的图像,红色部分是卷积核convolutional kernel,卷积运算:通过滑动窗口进行矩阵相称得到绿色部分。

卷积核有不同类型。有保持原图,锐化的,模糊的,边缘检测的核等等。不同卷积核实不同功能。

7.1.1.2 卷积的特点(与全连接的区别与联系)

卷积神经网络(Convotional Neural Network, CNN)是深度学习领域中重要的一个领域,可以说 CNN 近年在计算机视觉领域取得的成功直接推动了深度学习的复兴。 CNN 是一种基于卷积操作的神经网络,可以粗略地理解为 CNN 就是将全连接网络中的矩阵相乘换成卷积操作(说粗略是因为通常 CNN 中还带有 pooling 等 CNN 专有的操作)。那么卷积操作有什么区别于全连接的特点呢?

我们以一个例子来看卷积的具体:

t这样处理实际上左边的 kernel matrix 乘上右边的 flatten input 向量后得到结果与上面的结果是等效的,即向量的卷积操作可以表示为上图的一个核矩阵乘一个向量得到。有没有觉得很眼熟?这种一个参数矩阵乘一个输入向量得到一个输出向量的形式与全连接是完全一致的。

因此卷积和全连接实质上都是一组线性转换,但是卷积相比全连接而言,其参数矩阵更加稀疏,kernel matrix 中很多为零(sparse connectivity),同时非零部分的参数实际上是共享的(parameter sharing)。这两个特点让卷积可以大大减少参数的数量,同时同一套参数(卷积核)在多个地方复用更有利于捕捉局部的特征。相比之下全连接的参数更多,每个参数只负责唯一的连接,计算量、内存需求增大的同时也更加难以训练。

所以卷积的两个优点:

sparse connectivity(稀疏连接)

parameter sharing(非零参数共享,参数复用)

全连接:

参数多,每个参数只负责唯一连接,计算量和内存需求大,难以训练。

更本质来说,卷积相比全连接实际上是对参数矩阵做了一种先验的限制(矩阵是稀疏的、同时参数复用),这种先验是建立在在高维空间中相邻的数据点存在一定的关系的基础上,比如图像中一个局部之间可能构成一个形状或者一个组件,因此卷积这种操作特别适合应用于图像数据。虽然加入这种先验会让模型损失一定的拟合能力,但是从最终效果上看带来的收益是远远大于拟合能力的损失的。

7.1.1.3 卷积三种模式

深度学习框架中通常会实现三种不同的卷积模式,分别是 SAME、VALID、FULL。这三种模式的核心区别在于卷积核进行卷积操作的移动区域不同,进而导致输出的尺寸不同。我们以一个例子来看这三种模式的区别,输入图片的尺寸是 5x5 ,卷积核尺寸是 3x3 ,stride 取 1。

FULL 模式:碰到就开始。

FULL 模式下卷积核从与输入有一个点的相交的地方就开始卷积。如下图所示,蓝框的位置就是卷积核第一个卷积的地方,灰色部分是为了卷积能够正常进行的 padding(一般填 0)。因此 FULL 模式下卷积核移动区域最大,卷积后输出的尺寸也最大。

VALID 模式:一定要整个重叠才开始

VALID 模式与 FULL 模式相反,在整个卷积核与输入重叠的地方才开始卷积操作,因此不需要 padding,输出的尺寸也最小

SAME 模式:可以自加来padding,反正尺寸不变。

SAME 模式是最常用的一种模式,SAME 的意思是卷积后输出的尺寸与输入尺寸保持一致(假定 stride 为 1)。通过将卷积核的中心与输入的第一个点进行对齐确定卷积核起始位置,然后补齐对应 padding 即可。如下图所示,可以看到卷积输出的尺寸与出入保持一致。

SAME 模式下当卷积核边长为偶数时,可以通过在其中一边增加多一行(列)padding,即不对称的 padding 实现输出尺寸与输入尺寸保持一致,如下图所示(卷积核尺寸为 2x2 )

7.2 模糊操作

“模糊”,就是将图像中每个像素值进行重置的过程,这个过程采用将每一个像素都设置成周边像素的平均值。

2是中间点,周边点都是1。假设周边的点对中间点的影响都是相同的,即构造的卷积算子如下:

可以看出中间的 2 被重置为了。“中间点"取"周围点"的平均值,变成10/9。在数值上,这是一种"平滑化”。在图形上,就相当于产生"模糊"效果,"中间点"失去细节。

显然,计算平均值时,取值范围越大,"模糊效果"越强烈。如下三幅图,分别表示原图,3X3和5X5的模糊效果图。

模糊操作的原理就是:卷积。  不同卷积核得到不同卷积效果。

均值:

dst = cv.blur(image,(x,y))

中值

dst = cv.medianBlur(image,A)

自定义模糊:

kernel = np.ones([5, 5], np.float32) / 25

dst = cv.filter2D(src,depth,kernel,dst,another,delta,borderType)

收尾不变。上面就是均值模糊:1*2+1*3+1*6=11 , 11*3=3.X 取整为1.

卷积核最好都为奇数

越卷积越平滑。

7.2.1 均值模糊(低通滤波)

均值模糊是用来去噪声的。

void blur( InputArray src, OutputArray dst,

Size ksize, Point anchor = Point(-1,-1),

int borderType = BORDER_DEFAULT );

src是输入图像,dst为输出图像;ksize是滤波器模板窗口的大小;后两个参数分别表示,待处理像素在模板窗口的位置,默认值是窗口的中心位置,所以窗口的大小一般为奇数,最后一个参数表示对编解类型的处理,使用默认值即可。其调用示例blur(src,dst,Size(5,5),模板窗口的大小为5×5。

均值滤波是一种线性滤波器,处理思路也很简单,就是将一个窗口区域中的像素计算平均值,然后将窗口中计算得到的均值设置为锚点上的像素值。

该算法有优点在于效率高,思路简单。同样,缺点也很明显,计算均值会将图像中的边缘信息以及特征信息“模糊”掉,会丢失很多特征。

均值滤波使用简单的卷积方案来实现,既然是计算窗口区域中的像素和,即使用如下卷积核即可。图像的边界部分采用padding操作处理。另外,得到的锚点像素值要进行归一化,即除以窗口尺寸大小。在OpenCV中,我们使用cv.blur()这个函数即可实现。

这样的结果就是降低图像中的“尖锐”变化。这就造成,均值滤波器可以降低噪声的同时,也会模糊图像的边缘。均值滤波器的处理结果是过滤掉图像中的“不相关”细节,其中“不相关”细节指的是:与滤波器模板尺寸相比较小的像素区域。

在y,竖直方向进行了模糊。

我们可以尝试在 x 方向,横向进行模糊:

上面两个都是一维卷积核进行模糊,截下来我们尝试 5*5 卷积核进行模糊,5*5也是最常用的:

7.2.2 中值模糊(中值滤波)

用于处理椒盐噪声

void medianBlur( InputArray src, OutputArray dst, int ksize );

○src:源图像Mat对象

○dst:目标图像Mat对象

○ksize:滤波模板的尺寸大小,必须是大于1的奇数,如:3,5,7...

中值滤波是一种非线性滤波,在处理脉冲噪声以及椒盐噪声时效果极佳,能够有效的保护好图像的边缘信息。中值滤波的处理思路很简单,取卷积核当中所覆盖像素中的中值作为锚点的像素值即可。

如果按照遍历所有像素,再对卷积核中的像素排序取中值,那么时间复杂度会很高,需要对中值滤波进行改进。

中值滤波器的想法很简单,如果一个信号是平缓变化的,那么某一点的输出值可以用这点的某个大小的邻域内的所有值的统计中值来代替。这个邻域在信号处理领域称之为窗(window)。窗开的越大,输出的结果就越平滑,但也可能会把我们有用的信号特征给抹掉。所以窗的大小要根据实际的信号和噪声特性来确定。

如:以3*3的领域为例求中值滤波中像素5的值

1)int pixel[9]中存储像素1,像素2...像素9的值;

2)对数组pixel[9]进行排序操作;

3)像素5的值即为数组pixel[9]的中值pixel[4]。

左图图像中有很多黑点,黑点都是噪声,是椒盐噪声。食盐是白色的,胡椒粉是黑色的,椒盐是黑白的。所以说中值模糊对椒盐噪声有很好的处理能力。

均值模糊对随机噪声有很好的处理能力,但是我们用均值模糊来处理同样的图的话,会发现均值模糊还是不能很好的将椒盐噪声处理干净。

7.2.3 自定义模糊

自定义算子还是有几个要求:

1. 必须是奇数

2. 总和为0(做边缘梯度)或者 1(在做增强等工作)

CV_EXPORTS_W void filter2D( InputArray src, OutputArray dst,

int ddepth,InputArray kernel,

Point anchor=Point(-1,-1),

double delta=0, int borderType=BORDER_DEFAULT );

InputArray src: 输入图像

OutputArray dst: 输出图像,和输入图像具有相同的尺寸和通道数量

int ddepth: 目标图像深度,如果没写将生成与原图像深度相同的图像。原图像和目标图像支持的图像深度如下:

src.depth() = CV_8U, ddepth = -1/CV_16S/CV_32F/CV_64F

src.depth() = CV_16U/CV_16S, ddepth = -1/CV_32F/CV_64F

src.depth() = CV_32F, ddepth = -1/CV_32F/CV_64F

src.depth() = CV_64F, ddepth = -1/CV_64F

当ddepth输入值为-1时,目标图像和原图像深度保持一致。

InputArray kernel: 卷积核(或者是相关核),一个单通道浮点型矩阵。如果想在图像不同的通道使用不同的kernel,可以先使用split()函数将图像通道事先分开。

Point anchor: 内核的基准点(anchor),其默认值为(-1,-1)说明位于kernel的中心位置。基准点即kernel中与进行处理的像素点重合的点。

double delta: 在储存目标图像前可选的添加到像素的值,默认值为0

int borderType: 像素向外逼近的方法,默认值是BORDER_DEFAULT,即对全部边界进行计算。

该函数使用于任意线性滤波器的图像,支持就地操作。当其中心移动到图像外,函数可以根据指

很明显和我们之前调用的opencv中均值模糊的API效果其实是一样的:

拉普拉斯算子—— 锐化

让图像的轮廓,细节更加突出,更加清晰。

7.3 高斯模糊Gaussian Blur

高斯模糊对于 去噪  效果好。

高斯模糊的原理和参数:

GaussianBlur(src, ksize, sigmaX[, dst[, sigmaY[, borderType]]]) -> dst

src参数表示待处理的输入图像。

ksize参数表示高斯滤波器模板大小。 ksize.width和ksize.height可以不同,但它们都必须是正数和奇数。或者,它们可以是零,即(0, 0),然后从σ计算出来。

sigmaX参数表示 X方向上的高斯内核标准差。

sigmaY参数表示 Y方向上的高斯内核标准差。 如果sigmaY为零,则设置为等于sigmaX,如

果两个sigma均为零,则分别从ksize.width和ksize.height计算得到。

补:若ksize不为(0, 0),则按照ksize计算,后面的sigmaX没有意义。若ksize为(0, 0),则根据后面的sigmaX计算ksize

int borderType=BORDER_DEFAULT: 推断图像外部像素的某种便捷模式,有默认值BORDER_DEFAULT,如果没有特殊需要不用更改。

可知:

这个函数可以根据ksize和sigma求出对应的高斯核,计算方式就是上文提到的计算方式,而返回值是一个一维高斯核。

其中需要注意的是,如果sigma为非正数(负数或0)的话,就会根据ksize来自动计算sigma,计算公式为sigma = 0.3*((ksize-1)*0.5-1)+0.8

由上述公式可以计算得出,

当ksize=3时,sigma=0.8

当ksize=5时,sigma为1.1.

cv2.sepFilter2D函数传入两个一维kernel,然后对图像的每一行以kernelX为卷积核做卷积,对结果的每一列以kernelY为卷积核做卷积,最后归一化得到新的高斯滤波后的图像。

综上:opencv实现的高斯滤波,是对传入的sigmaX,sigmaY分别产生两个一维卷积核,然后分别再行和列上做卷积,其中sigmaX和sigmaY如果没有传入参数,则由ksize计算得到。

高斯模糊/噪声

轮廓还在,保留图像的主要特征

高斯模糊比均值模糊去噪效果好

原理:是把要模糊的像素色值统计,用数学上加权平均的计算方法(高斯函数)得到色值,对范围、半径等进行模糊。通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。

应用:一些美颜软件、美颜相机上的磨皮和毛玻璃特效基本上都是用的高斯模糊,并且大部分图像处理软件中都有高斯模糊的操作,除此之外,高斯模糊还具有减少图像层次和深度的功能

7.3.1 高斯原理

7.3.1.1 介绍

高斯模糊(英语:Gaussian Blur),也叫高斯平滑,通常用它来减少图像噪声以及降低细节层次。这种模糊技术生成的图像,其视觉效果就像是经过一个半透明屏幕在观察图像,这与镜头焦外成像效果散景以及普通照明阴影中的效果都明显不同。高斯平滑也用于计算机视觉算法中的预先处理阶段,以增强图像在不同比例大小下的图像效果(参见尺度空间表示以及尺度空间实现)。

从数学的角度来看,图像的高斯模糊过程就是图像与正态分布做卷积。由于正态分布又叫作高斯分布,所以这项技术就叫作高斯模糊。图像与圆形方框模糊做卷积将会生成更加精确的焦外成像效果。由于高斯函数的傅立叶变换是另外一个高斯函数,所以高斯模糊对于图像来说就是一个低通滤波器。

“模糊”,就是将图像中每个像素值进行重置的过程,这个过程采用将每一个像素都设置成周边像素的平均值。

2是中间点,周边点都是1。假设周边的点对中间点的影响都是相同的,即构造的卷积算子如下:

可以看出中间的 2 被重置为了10/9。“中间点"取"周围点"的平均值,变成10/9。在数值上,这是一种"平滑化”。在图形上,就相当于产生"模糊"效果,"中间点"失去细节。

显然,计算平均值时,取值范围越大,"模糊效果"越强烈。如下三幅图,分别表示原图,3X3和5X5的模糊效果图。

接下来的问题就是,既然每个点都要取周边像素的平均值,那么应该如何分配权重呢?

如果使用简单平均,显然不是很合理,因为图像都是连续的,越靠近的点关系越密切,越远离的点关系越疏远。因此,加权平均更合理,距离越近的点权重越大,距离越远的点权重越小。

7.3.1.2 ND的权重分布和sigma/ksize

正态分布显然是一种可取的权重分配模式,可理解为加权平均。

在图形上,正态分布是一种钟形曲线,越接近中心,取值越大,越远离中心,取值越小。

计算平均值的时候,我们只需要将"中心点"作为原点,其他点按照其在正态曲线上的位置,分配权重,就可以得到一个加权平均值。

正态分布的密度函数叫做"高斯函数"(Gaussian function)。它的一维形式是:

其中,μ是x的均值,σ是x的方差。因为计算平均值的时候,中心点就是原点,所以μ等于0。通过上述两个维度的高斯滤波器函数可以得到下图的函数图像。其中σ的大小决定了高斯函数的宽度, σ越大函数图像跨幅越宽,反之则越窄。

上面的正态分布是一维的,图像都是二维的,所以我们需要二维的正态分布。

有了这个函数 ,就可以计算每个点的权重了。

权重矩阵:

假定中心点的坐标是(0,0),那么距离它最近的8个点的坐标如下:

更远的点以此类推。

为了计算权重矩阵,需要设定σ的值。假定σ=1.5(σ值越大图像越平滑/模糊, gama越大第一部分越小,e越大),则模糊半径为1的权重矩阵如下:

以(0,1)为例:x=0, y=1. G(x,y) = 1/(2pi1.5^2) * e^(-1/ 2*1.5^2) = 0.56640584...

这9个点的权重总和等于0.4787147,如果只计算这9个点的加权平均,还必须让它们的权重之和等于1,因此上面9个值还要分别除以0.4787147,得到最终的权重矩阵

假定中心点坐标为(0,0),当设定卷积核为3时,只需计算距离它最近的8个点,如图中的第一个矩阵所示。以此矩阵中的坐标,带入到公式2-14中,并且取σ=1.5,则半径为1的权重矩阵如图中第二个矩阵所示。因为需要利用该权重矩阵做加权平均,故需要对原始的矩阵做归一化。具体操作方式是求出第二个矩阵的总和为0.4783,然后再将该矩阵的9个值分别除以0.4783,得到最终的卷积核(权重矩阵)。

你不进行归一化,该核乘以像素可能就会超过0-255范围。(比如你核中值都大于一的话,很可能越界,所以做一个归一化最好)

上述计算都只是得到了 高斯核!!! 如果要做进一步模糊就要用这个核来模糊。

通过上述步骤计算出高斯核,基于该高斯核便可进行高斯滤波操作。假设现有9个像素点,灰度值(0-255)如下图中第一个卷积核所示,计算图中中心点的滤波后的值。每个像素点乘以相对应的权重值,得到最终的分布值。将这9个像素的值相加得到的结果,就是中心位置图像滤波后的值。对所有点重复这个过程,就得到了高斯滤波后的图像。如果原图是彩色图片,可以对RGB三个通道分别做高斯滤波。

7. 模糊操作/原理/API/种类/边缘保留相关推荐

  1. opencv进阶学习笔记5:图像模糊操作,图像锐化,边缘保留滤波EPF(图像滤镜)

    基础版传送门: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录链接: python+opencv进阶版学习笔记目录(适合有一定基础) 模糊操作 方法:均值模糊,中值模 ...

  2. Python+opencv学习记录8:边缘保留滤波(EPF)

    文章目录 1.高斯双边模糊 1.1原理 1.2代码解析 2.均值迁移模糊 2.1.原理 2.2.代码解析 完整代码 1.高斯双边模糊 1.1原理 前文提到的高斯模糊只考虑了像素空间的分布,而没有考虑差 ...

  3. OpenCV学习笔记-边缘保留滤波EPF

    进行边缘保留滤波通常用到两个方法: 1.高斯双边滤波 具体代码: #高斯双边滤波 def bilateral_demo(img):dst = cv.bilateralFilter(src=img,d= ...

  4. OpenCV—边缘保留滤波(EPF)

    高斯双边滤波 前文提到的高斯模糊只考虑了像素空间的分布,而没有考虑差异问题.下图十分形象的说明了边缘保留滤波的原理.一张黑白分明存在噪声的图片通过高斯滤波保留边缘将二者区分开来. 代码解析: # 边缘 ...

  5. java 怎么做卷积运算,入门教程之算法系列(二):卷积运算与模糊操作

    卷积在信号处理领域有极其广泛的应用,也有严格的物理和数学定义. OpenCV中对图像进行模糊操作,其背后的原理就是卷积运算,可是究竟卷积运算是什么,模糊的卷积算法又是如何实现的呢?本文将进行讨论.考虑 ...

  6. OpenCV+python:模糊操作

    模糊操作是图像处理中最简单和常用的操作之一,使用该操作的原因之一就为了给图像预处理时减低噪声. 模糊操作基于离散卷积计算: g(i,j)=∑k,lf(i+k,j+l)∗h(k,l)g(i,j) = \ ...

  7. python图像处理模糊_Python+OpenCV图像处理之模糊操作

    模糊操作是图像处理中最简单和常用的操作之一,该使用的操作之一原因就为了给图像预处理时减低噪声,基于数学的卷积操作 均值模糊,函数 cv2.blur(image,(5,5)),这是一个平滑图片的函数,它 ...

  8. 图像处理之积分图应用二(快速边缘保留滤波算法)

    图像处理之积分图应用二(快速边缘保留滤波算法) 一:基本原理 传统的图像边缘保留滤波算法-如高斯双边模糊.Mean-Shift模糊等计算复杂.效率比较低,虽然有各种手段优化或者快速计算方法,当时算法相 ...

  9. Python+OpenCV图像处理之模糊操作

    模糊操作是图像处理中最简单和常用的操作之一,该使用的操作之一原因就为了给图像预处理时减低噪声,基于数学的卷积操作 均值模糊,函数 cv2.blur(image,(5,5)),这是一个平滑图片的函数,它 ...

最新文章

  1. Java类Demo中存在_Java中的数据类型转换
  2. 自动化运维工具Ansible
  3. 使用jpmml-sparkml-executable生成PMML模型文件
  4. MTK前CFO喻铭铎分享经营智慧:山寨只是门票
  5. 考研国家线罕见大幅上涨,12个学科涨幅10分以上,超300万人将落榜
  6. python文件读写r+_python文件读写操作(r/r+/rb/w/w+/wb/a/a+/ab)
  7. Openshift API部分源码学习笔记(一)
  8. java列出文件正则过滤_JAVA正则表达式过滤文件的实现方法
  9. 使用IDA PRO+OllyDbg+PEview 追踪windows API 动态链接库函数的调用过程
  10. 如何查找SAP Fiori UI上某个字段对应的底层数据库表
  11. 计算机符号大写怎么退出,大小写提示符号A怎么开启或关闭?
  12. 图像算法十:轮廓匹配match_contours() 得到精确的旋转角度
  13. Hadoop HDFS (3) JAVA訪问HDFS
  14. IE浏览器使用Validation Engine表单重复提交问题
  15. 旧项目如何切换到Entity Framework Code First
  16. 《CSS权威指南》读书笔记10
  17. Trajan/强连通(石油大学组队赛 B: Thrall’s Dream)
  18. 为什么qq不出linux版本,腾讯QQ官方Linux版本要发布了
  19. android x86 5.1 微信,微信5.1终于来了!微信5.1安卓版正式发布
  20. Java中的IO、NIO、File、BIO、AIO详解

热门文章

  1. sign-file: certs/signing_key.pem: 解决方法
  2. magento 模块化开发_Magento中的PayPal信用卡令牌化
  3. Wall following algorithm机器人沿墙算法(一)
  4. excel如何将内容拆分
  5. 计算机C语言好学吗?要是想自学应该怎么办?大学挂科赶紧恶补!
  6. JavaSE学习笔记_20:Java网络编程
  7. C语言semaphore头文件,C语言再学习 -- 常用头文件和函数
  8. mysql同步数据_实现MySQL数据库数据的同步方法介绍
  9. 华为Mate 20 Pro更新EMUI9.1系统,系统流畅度稳步提高
  10. 联想G40进入BIOS