综述
对于图像的处理有两种思路,一种是对图像本身的直接处理,即空间域处理;另一种是在频率域进行处理。关于空域和频域,可以参考《傅里叶变换——另一种世界观》。在空间域的处理相对简单,因此首先介绍的是空域处理法。空域中有两种重要处理方法:灰度变换(或亮度变换)和空间滤波(或邻域处理、空间卷积)。
空间域处理:灰度变换和空间滤波
g(x,y)=T[ f(x,y) ]
空域处理的思路可以由上式表达。f 即是原图,T 是在点(x,y)指定邻域上的图像处理算子,g 是输出图像。当邻域为1*1大小时,T 为灰度变换算子;邻域大于1*1时,T 为空间滤波算子。
灰度变换可以考虑每一个像素的灰度(点处理),也可以考虑整体灰度后再处理一个个像素(直方图处理)。空间滤波是每次考虑一块像素,进行卷积操作。
进行灰度变换可以使用MATLAB工具箱函数,也可以自己编写函数。首先介绍的是直接进行点处理的函数,这些函数来自MATLAB图像处理工具箱。之后会介绍直方图处理、空间滤波。
灰度变换函数(来自MATLAB工具箱)
- 灰度映射: g = imadjust( f, [low_in high_in], [low_out high_out], gamma )
- 动态范围操作:对数变换和对比度拉伸变换。
- 任意灰度的灰度变换:给定灰度变换的列向量,使用interp1查找并替换。
直方图处理
直方图反映了图像像素灰度的分布情况。
- 绘制直方图:imhist(f, b)(f为图像,b是灰度刻度), bar, stem, plot。
- 直方图均衡化:将输入图像的灰度级均匀分布于较宽范围内,采用均衡化,使用histeq(f)函数实现。原理可以参考《直方图均衡化》。
- 直方图匹配(规定化):很多时候均衡化并不能实现预期效果,因为均衡化不会对每一个输入图像区别对待,只是例行算法,将灰度级均匀分布而已。为了实现预期效果,采用直方图规定化方法,将灰度级做指定。使用histeq(f, h)实现,h为规定的灰度级比例。
- 对比度受限的自适应直方图均衡(Contrast-Limited Adaptive Histogram Equalization):通过adapthisteq()函数实现。
空间滤波
空间滤波是在空域进行的滤波操作,有线性空间滤波和非线性空间滤波。线性空间滤波是对目标像素点的领域进行整体考虑,对窗口内的每一个元素乘以系数后求和,并作为目标像素点的响应。非线性空间滤波的思路与线性不同,其操作是非线性的,比如中值滤波、排序滤波等。
线性空间滤波常用imfilter和fspecial函数实现,非线性空间滤波常用nlfilter和colfilt函数实现。
平滑与锐化
空间滤波有很多应用场景,平滑和锐化是两个典型的应用场景。平滑可以使用平滑模板对图像进行线性空间滤波,也可以使用中值滤波对图像进行非线性空间滤波。锐化可以使用锐化模板对图像进行线性空间滤波。
平滑模板示例:
[ 0.1 0.1 0.1
0.1 0.2 0.1
0.1 0.1 0.1 ]
锐化模板示例:
[ 0 1 0
1 -4 1
0 1 0 ]