Python OpenCV图像处理之图像滤波特效详解
1 分类
图像滤波按图像域可分为两种类型:
- 邻域滤波(spatial domain filter),其本质是数字窗口上的数学运算。一般用于图像平滑、图像锐化、特征提取(如纹理测量、边缘检测)等,邻域滤波使用邻域算子——利用给定像素周围像素值以决定此像素最终输出的一种算子
- 频域滤波(frequency domain filter),其本质是对像素频率的修改。一般用于降噪、重采样、图像压缩等。
按图像频率滤除效果主要分为两种类型:
- 低通滤波。滤除原图像的高频成分,即模糊图像边缘与细节。
- 高通滤波。滤除原图像的低频成分,即图像锐化。
导入原图和噪图
其中噪声可选
- gaussian:高斯加性噪声
- localvar:高斯加性噪声,每点具有特定局部方差
- poisson: 泊松分布噪声
- salt:盐噪声,随机用1替换像素
- pepper:胡椒噪声,随机用0或-1替换像素
- s&p:椒盐噪声,呈现出黑白杂点
2 邻域滤波
2.1 线性滤波
线性邻域滤波,指像素的输出值取决于输入区域像素的加权和,下面介绍常见的线性滤波算子。
2.1.1 方框滤波
方框滤波(box filter),其核函数为:
非归一化的方框滤波用于计算每个像素邻域内的积分特性,比如密集光流算法(dense optical flow algorithms)中用到的图像倒数的协方差矩阵。
归一化的方框滤波则为均值滤波(blur),即邻域平均法——用一片图像区域各个像素的均值来代替原图像中的各个像素值。均值滤波用于图像平滑,但其在降噪的同时也破坏了图像的边缘细节,从而使图像变得模糊,降噪能力较差。
进行方框滤波
若将方框滤波核设为(6,5)且归一化,则效果与均值滤波相同。
2.1.2 高斯滤波
高斯滤波(gauss filter)基于二维高斯核函数
具有在保持细节的条件下进行噪声滤波的能力,因此广泛应用于图像降噪中,但其效率比均值滤波低。
高斯滤波器有两个特征量:
- 核大小,其决定了图像的平滑范围。理论上,高斯核函数应该无穷大,以达到最佳的平滑效果,但过大的卷积核会导致运算效率骤降。根据高斯函数3σ规则,可以取高斯核大小为(6σ+1)×(6σ+1);
- 离散程度σ,其决定了对高频成分的抑制程度。σ越大,像素加权半径越大,平滑程度越强。
2.2 非线性滤波
虽然线性滤波器易于构造且计算效率高,但有些情况下,使用邻域像素的非线性滤波效果更好。例如,若图像具有椒盐噪声而非高斯噪声,此时对图像高斯滤波并不会去除噪声像素,只是把噪声转换为更为柔和但仍然可见的颗粒。
中值滤波(median filter)是一种基于排序统计理论的典型非线性滤波技术,核心原理是用像素点邻域灰度值中值代替该像素点的灰度值。中值滤波对脉冲噪声、椒盐噪声尤为有效,且具有边缘保护特性。中值滤波器本质上是数字窗口内的非线性取中值运算,而非线性滤波器的加权运算,因此中值滤波没有卷积核,运算效率仅有线性滤波的1/5左右。
中值滤波对椒盐噪声效果
3 频域滤波
通过傅里叶变换将图像变换到频域,即可在频域进行图像处理。根据傅里叶变换的对称性以及从低频到高频的排列规则,图像原始频域图像会在四角形成低频分量区,而形成高频中心。通常为了观察方便,变换算法(例如matlab中的fftshift)会将低频分量移动到图像中心形成低频中心
图像傅里叶变换代码如下
3.1 低通滤波
3.2 高通滤波
以上就是python opencv图像处理之图像滤波特效详解的详细内容,更多关于python opencv图像滤波特效的资料请关注其它相关文章!
推荐阅读
-
Python OpenCV图像处理之图像滤波特效详解
-
数字图像处理3之空间滤波(平滑空间滤波器)
-
图像特效之随机滤波(Randomblue)
-
openCV+Python 数字图像处理(18)——人脸检测
-
Python+Opencv图像处理新手入门教程(一):介绍,安装与起步
-
OpenCV for Python:cv2之从视频中提取图像序列
-
Android高手进阶教程(二十二)之Android中几种图像特效处理的集锦汇总!!
-
Android高手进阶教程(二十二)之Android中几种图像特效处理的集锦汇总!!
-
Python图像处理之图像的缩放、旋转与翻转实现方法示例
-
Python 图像处理 OpenCV (13): Scharr 算子和 LOG 算子边缘检测技术