python版本:python3.5.4 ; opencv-python版本:opencv-python3.4.2.17
使用的开发环境是jupyter notebook,是一个python的交互式开发环境,测试十分方便,并集成了vim操作,安装教程可参考:https://blog.csdn.net/feilong_csdn/article/details/80186276
先导文章:
opencv-python快速入门篇【数字图像处理系列一】
基本概念:亮度、对比度、饱和度、锐化、分辨率【数字图像处理系列二】
图像增强:线性、 分段线性、 对数、 反对数、 幂律(伽马)变换、直方图均衡【数字图像处理系列三】
图像数据集增强方式总结和实现【数字图像处理系列四】
在图像增强:线性、 分段线性、 对数、 反对数、 幂律(伽马)变换、直方图均衡【数字图像处理系列三】一文中我们从图像灰度变换的角度阐述了图像增强的各种方式,本文我们将一起学习图像处理中重点的方式:图像滤波,图像滤波分为空间域滤波和频率域滤波,频率域滤波我们将在下一节重点说明。图像空间滤波对于图像处理主要体现在两个方面:
(1) 平滑图像,达到降低图像噪音的效果(平滑空间滤波)
(2) 锐化图像,主要目的是突出灰度的过渡部分,即突出图像的边缘(锐化空间滤波)
先上图,感受一下空间滤波对图像处理的效果(原图、经过拉普拉斯处理后的图像):
一、空间滤波原理
图像的空间滤波器有两大部分:
(1) 一个基于图像像素的矩形邻域
(2) 对矩形邻域包围的图像像素的操作方式
理解图像的矩形邻域如下图所示
将图像的左上角看做是空间域中的原点O,向下取为x轴,向右取为y轴,图中便显示了中心点(x,y)的一个3*3邻域。每经过一个滤波产生一个新像素,新像素的坐标等于领域中心坐标(x,y),新像素的值是滤波操作的结果。而滤波器的类型也取决于邻域上操作的类型,如果邻域操作是线性操作,则滤波器称为线性空间滤波器;反之如果邻域操作是非线性操作,则滤波器称为非线性空间滤波器。
这里我们假设 f(x,y) 为原像素值,g(x,y) 为滤波后的像素值,则对于一个大小为M * N的图像使用大小为m * n的滤波器进行线性空间滤波,若令m=2a+1,n=2b+1,则邻域上线性操作可统一表达成下式:
其中x,y是可变的,以便w中的每个像素可访问f中的每个像素,我们一般称邻域内像素和滤波器模板的操作叫做卷积。下面将分别讲解平滑空间滤波器和锐化空间滤波器
二、平滑空间滤波
1、均值滤波、加权均值滤波
均值滤波又称为线性空间滤波,利用邻域平均法,即用几个像素灰度的平均值来代替每个像素的灰度。有效抑制加性噪声,但容易引起图像模糊,尤其是会模糊图像边缘。通过下图便可看到均值滤波和加权均值滤波的区别:
其中左图是均值滤波,即邻域中每个像素权重相同,取邻域平均值