本文实现了RGB三通道图像及灰度图像的平滑、锐化处理。在开始之前,我们先对平滑及锐化的概念进行一个简单的了解:
1、平滑
图像平滑是指受传感器和大气等因素的影响,遥感图像上会出现某些亮度变化过大的区域,或出现一些亮点(也称噪声)。这种为了抑制噪声,使图像亮度趋于平缓的处理方法就是图像平滑。图像平滑实际上是低通滤波,平滑过程会导致图像边缘模糊化。
常用的平滑处理方法有三种:
(1) Box模板去噪平滑处理,也就是均一化处理。
Box模板是{1,1,1,1,1,1,1,1,1}
(2) 高斯模板去噪平滑处理,就是在Box模板的基础上加入了加权系数,考虑了距离某点位置越近影响越大的因素。相比Box模板,较为清晰一些。
高斯模板是{1,2,1,2,4,2,1,2,1}
(3) 中值滤波去噪平滑处理,就是将该点左右邻近的两个点的rgb值与该点自身进行比较,选择其中最中间的值赋给该点。
2、锐化
图像锐化(image sharpening)是补偿图像的轮廓,增强图像的边缘及灰度跳变的部分,使图像变得清晰,分为空域处理和频域处理两类。图像锐化是为了突出图像上地物的边缘、轮廓,或某些线性目标要素的特征。这种滤波方法提高了地物边缘与周围像元之间的反差,因此也被称为边缘增强。
常用的锐化模板是拉普拉斯(Laplacian)算子:
代码如下:
#include <cstring>
#include <windows.h>
#include"readbmp.h"
#include"savebmp.h"
int Template1[3][3] = { 1, 1, 1, 1, 1, 1, 1, 1, 1 };//平滑模板 均一化处理
int Template2[3][3] = { 1, 2, 1, 2, 4, 2, 1, 2, 1 };//高斯平模板
int Template3[3][3] = { 0, -1, 0, -1, 4, -1, 0, -1, 0 };//laplace锐化模板,4邻域
int Template4[3][3] = { -1, -1, -1, -1, 8, -1, -1, -1, -1 };//laplace锐化模板,8邻域
int sobelx[3][3] = { -1,-2,-1,0,0,0,1,2,1};//sobelx
int sobely[3][3] = { -1,0,1,-2,0,2,-1,0,1};//sobel
int coefficient1 = 9;
int coefficient2 = 16;
int coefficient3 = 1;
void img_smooth_sharpen(int Templa