1, 为什么进行图像增强
图像增强是指增强图像中某些特征, 同时削弱或去除某些不需要的信息, 即为了某种应用而去改善图像的质量, 消除噪声, 显现那些被模糊了的细节或简单的突出一副图像中感兴趣的特征. 所以图像增强并不是增强图像的原始信息, 而是只针对某一特征以提高某种信息的辨别能力, 图像增强需要根据需求采样特定的方法, 当增强一些信息时另外一些信息必定被损失, 不存在一种通用的方法, 必须根据需求决定保留哪些信息丢弃哪些信息.
图像增强技术基本上可以分为两类: 空间域增强, 频域增强.
2, 空间域滤波理论
2.1 定义
空间域滤波就是在图像平面上对像素进行操作.
空间域滤波大体分为两类: 平滑, 锐化.
平滑滤波: 模糊处理, 用于减小噪声, 实际上是低通滤波, 典型的滤波器是高斯滤波.
锐化滤波: 提取边缘突出边缘及细节, 弥补平滑滤波造成的边缘模糊. 实际上是高通滤波.
空间域处理可由下式表示:
g(x,y)=T[f(x,y)]
式中, f(x,y)是输入图像, g(x,y)是处理后的图像, T 是在点 (x,y) 的邻域上定义的关于 f 的一种算子, 算子可应用于单幅图像或图像集合.
2.2 空间域滤波和邻域处理
1)空间滤波器由一个邻域 (通常是一个较小的矩形) 和对该邻域所包围图像像素执行的预定义操作组成. 对预定义的点 (x,y) 为中心的领域内的像素进行计算.
2)滤波产生一个新像素, 新像素的坐标等于邻域中心的坐标 (x,y), 像素的值是滤波操作的结果. 即用计算后的新像素值作为点(x,y) 的值.
3)循环步骤 1 和 2, 滤波器的中心遍历图像中的每个像素后, 就生成了滤波后的图像.
4)如果在图像像素上执行的是线性操作, 则该滤波器称为线性空间滤波器, 否则, 称为非线性空间滤波器.
一般来说, 使用大小为 m*n 的滤波器对大小为 M*N 的图像进行线性空间滤波, 可由下式表示:
3, 平滑滤波
平滑滤波可以减少和抑制图像中的噪声, 平滑后图像变得模糊, 噪声降低. 模糊处理常用于预处理任务中, 如在目标提取之前去除图像中的一些琐碎细节, 以及桥接直线或曲线的缝隙.
1)工作原理
一般来说, 图像具有局部连续的性质, 即相邻的像素的值相近, 而噪声使得噪点处产生像素跳跃, 所以通过平滑噪点可以减少噪声, 去除图像中的不相关细节.
2)均值滤波和加权滤波
平滑滤波的输出是包含在滤波器模板邻域内的像素的简单平均值, 也就是均值滤波器.
均值滤波器是低通滤波器, 常见的操作有均值滤波和加权滤波.
W 是滤波模板, 模板的大小取决于需要滤除的物体的大小, 使用时需要更具图像特点选择模板尺寸.
为什么使用加权, 平滑滤波对领域内的像素一视同仁, 但是一般认为距离模板中心的像素应对滤波结果有较大的贡献, 所以将模板中心的系数取得比模板周边的系数大, 随着距离中心距离增大, 权重迅速减小. 高速滤波就是一种加权滤波, 只不过模板中的系数由高斯分布来确定的.
3)实现
Matlab 滤波可以用 fspecial 产生滤波模板.
f=fspecial('average', 3)产生系数为:
- f =
- 0.1111 0.1111 0.1111
- 0.1111 0.1111 0.1111
- 0.1111 0.1111 0.1111
例 1: 均值滤波
- imgPath = 'E:\opencv_pic\src_pic\pic4.bmp';
- img = imread(imgPath);
- img = imnoise(img,'salt & pepper', 0.02);
- f=fspecial('average', 3);
- img1=imfilter(img, f);
- f=fspecial('average', 10);
- img2=imfilter(img, f2);
- subplot(1,3,1),imshow(img), title('原始图像');
- subplot(1,3,2),imshow(img1),title('均值滤波 1');
- subplot(1,3,3),imshow(img2),title('均值滤波 2');
可见下图, 当滤波系数为 3*3 时, 可以滤波大部分噪声, 当滤波系数为 10 时, 滤除了全部噪声但是图像变得模糊.
例 2: 高斯噪声滤波
- imgPath = 'E:\opencv_pic\src_pic\pic4.bmp';
- img = imread(imgPath);
- img = imnoise(img, 'gaussian', 0, 0.01);
- f=fspecial('average', 5);
- img1=imfilter(img, f);
- f2=fspecial('gaussian', 5, 0.8);
- img2=imfilter(img, f2);
- subplot(1,3,1),imshow(img), title('原始图像');
- subplot(1,3,2),imshow(img1),title('均值滤波');
- subplot(1,3,3),imshow(img2),title('高斯滤波');
两个滤波模板分别为:
- f =
- 0.0400 0.0400 0.0400 0.0400 0.0400
- 0.0400 0.0400 0.0400 0.0400 0.0400
- 0.0400 0.0400 0.0400 0.0400 0.0400
- 0.0400 0.0400 0.0400 0.0400 0.0400
- 0.0400 0.0400 0.0400 0.0400 0.0400
- f2 =
- 0.0005 0.0050 0.0109 0.0050 0.0005
- 0.0050 0.0522 0.1141 0.0522 0.0050
- 0.0109 0.1141 0.2491 0.1141 0.0109
- 0.0050 0.0522 0.1141 0.0522 0.0050
- 0.0005 0.0050 0.0109 0.0050 0.0005
滤波效果如下图.
放大后观察细节, 均值滤波在渐变处出现严重的模糊现象, 高斯滤波由于使用了带权重的滤波系数, 情况好很多.
4, 自适应平滑滤波
1)原理
利用平均模板平滑在消除噪声的同时也使得图像变得模糊, 高斯平滑在一定程度上缓解了这些现象, 但由于平滑滤波的原理可知这种模糊是不可避免的. 所以可以进行选择性的平滑, 即只对噪声局部区域进行平滑, 对无噪声的局部区域不进行平滑, 将模糊的影响降到最低.
2)实现
自适应的关键是对噪声区域的识别, 哪些区域是需要平滑的, 哪些区域不需要. 一般地, 噪声的存在使噪声点产生灰度跳跃, 从而使噪声点局部区域灰度跨度较大.
所以, 方法 1: 可以设定阈值 T, 当局部最大灰度和最小灰度只差大于阈值, 则进行平滑; 否则不平滑. 方法 2: 当局部区域灰度方差大于阈值 T 则进行平滑; 否则不平滑.
5, 中值滤波
1)原理
中值滤波是一种统计排序滤波器, 图像上点(x,y), 中值滤波以该点为中心, 领域内所有像素的统计排序中值作为此点的响应, 中值滤波是非线性滤波.
相比与均值滤波和高斯滤波, 中值滤波可以有效的降低随机噪声, 直接忽略掉噪声点, 把噪声引起的模糊降到最低. 典型的应用就是中值滤波消除椒盐噪声.
2)中值滤波效果对比
- imgPath = 'E:\opencv_pic\src_pic\pic4.bmp';
- img = imread(imgPath);
- img0 = rgb2gray(img);
- img = imnoise(img0,'salt & pepper');
- f=fspecial('average', 3);
- img1=imfilter(img, f);
- f2=fspecial('gaussian', 3, 0.8);
- img2=imfilter(img, f2);
- img3=medfilt2(img, [3,3]);
- subplot(2,3,1),imshow(img0), title('原始图像');
- subplot(2,3,2),imshow(img), title('噪声图像');
- subplot(2,3,3),imshow(img1),title('均值滤波');
- subplot(2,3,4),imshow(img2),title('高斯滤波');
- subplot(2,3,5),imshow(img3),title('中值滤波');
从下图可见, 线性平滑滤波在滤除噪声的同时不可避免的引起了模糊, 而中值滤波在有效滤除随机噪声的同时, 还有效抑制了模糊效应. 对于椒盐噪声图像, 中值滤波的效果要好于线性平滑滤波.
放大后观察细节, 中值滤波较好的还原了原图.
6, 参考文献
1, 图像增强之空间域滤波 -- Part1. 原理篇
2,Image Filtering and Enhancement
尊重原创技术文章, 转载请注明.
https://www.cnblogs.com/pingwen/p/12267325.html
来源: https://www.cnblogs.com/pingwen/p/12267325.html