系列文章目录
本文针对模糊操作由浅入深做原理及代码解析。
模糊
模糊是什么
在学习之前,必须要清楚的是模糊是什么?说得最直观一点就是,假设一个人是600度的近视,他离另一个人2米时,戴眼镜时看到的图像转化到不戴眼镜时看到的图像就是模糊的过程。
但是在计算机视觉领域,我们不能从人的感观来说。
模糊,属于低通滤波的一种,它称为模糊,也可以称为平滑。
低通滤波是一种信号过滤方式,指的是低频率的信号可以通过,而超过设定界限的信号会被阻断,减弱等等。
从直观来看:
右图至左图的操作就叫模糊。
模糊操作的原理
对一个图像来说,从OpenCV角度分析,它无非就是一个三维的矩阵,每一维的每一个元素,代表在这个色彩维度的亮度,那么我们不难想象,对于一张图像而言,如果两个像素点的数值大小处于极大极小的极端,那么对比就会很明显,比如255和0,白和黑一眼分明,但是如果很相近,比如122和123那么就很像,换句话来说,这块的图像就很平滑。模糊操作其实就是让图像变得很平滑,一旦很平滑,那么图像就会失去原先的棱角分明,所以看着就没有原先的清楚。那么实现的话其实也没有很困难是吧,最简单的实现,就是我们从最开始的像素点开始两个两个遍历,并不断的赋予均值,对每个像素点进行改变,但是那种模糊已经让图像失去了原先的价值,所以OpenCV内部提供的模糊操作API远远没有那么简单。但是这种模糊方式作为原理介绍就很容易明白。
基于离散卷积的模糊
图像的卷积操作:卷积这个概念应该在深度学习中比较好理解。我们可以举个简单的例子来说说。另外,这里我们需要谨记一句话:对图像来说,越卷越平滑。
对如下一行数据做卷积
我们给定卷积核为2的1*3的矩阵如下
卷积过程如下:
对于第一个数据和最后一个数据,直接就保留原数据,卷积核从第二个数据开始计算。
用代码算:
a_list=[12,13,15,15,16,71,14,15,56,47]
b=[1,2,1]
c_list=[12]
for i in range(1,9):
c_list.append((b[0]*a_list[i-1]+b[1]*a_list[i]+b[2]*a_list[i+1])//4)
c_list.append(47)
print(c_list)
<