例如在下面给出的3×3的中值滤波窗口中
7 6 3
4 2 8
5 8 6
中心点像素的亮度值就变成f(2,2)=Med{7,6,3,4,2,8,5,8,6}=6,原本比周围的像素点暗很多的噪声点就被替换掉了,由此便可以达到抑制噪声的目的。
2.2 实现方法
我们经常使用的中值滤波器窗口的形状事实上有很多种。本文只考虑方形一种情况的中值滤波,其他中值滤波可以有此情况类似完成。
用D=[f(i,j)] 表示输入的图像, f(i,j)表示在图像的亮度值矩阵中位于点(i,j)处的像素的亮度值。用H (i,j)来表示中心像素点位于(i,j)的大小为n×n的一个移动窗口。则当n=3时,有
H3(i,j)=
在本系统设计的算法中取n=3,用G=[g(i,j)] 表示中值滤波处理后输出的图像。K(*)表示滤波器,则滤波后点g(i,j)=K(H3(i,j))。
详细的步骤如下:文献综述
1) 将滤波窗口H (i,j)在放在图像D=[f(i,j)] 左上角,窗口中心点f(i,j)与图像中某个像素的位置重合;
2) 记录该中心点对应像素的亮度值f(i,j);
3) 取这个亮度值中心点周围的8个值,按照其大小依次排序后取中值;
4) 把取得的中值赋给窗口中心位置的像素;
5) 将滤波窗口从左到右,从上到下移动,重复步骤2,3,4,直到滤波窗口移动到图像右下角;
6) 将赋值之后的中心点对应像素的像素值提取出来,形成中值滤波处理后的数组。
3 系统设计
3.1 可行性分析
Visual C++是微软推出的一款面向对象的程序设计语言,它全面兼容C语言,同时提供了比C语言更严格更安全的语法。它保持了C语言的简洁、高效和接近汇编语言等特点,对C的类型进行了改革和扩充。另外,它还提供了大量可以指导用户编程时实现某些技术和功能的代码。因此开发人员就不必从头设计、创建和管理一个标准Windows应用程序所需的程序,只需要从一个相对较高的起点开始编程,从而节约了大量的时间,也可以使程序的设计和开发变得更加容易。
作为一个具有强大开发功能又可以面向对象的应用程序开发平台,Visual C++提供了各种函数、指针操作和直接对硬件的操作,可以快速实现图像的各种高性能处理及图像图形的显示。其优势主要在于三个方面:
1. Visual C++生成的汇编语言,可直接在处理器上运行,执行效率高。
2. Visual C++支持对内存的直接分配和释放,弥补的信息量的图像数据处理占用较大内存的困恼。
3. Visual C++中的指针是其独有的一种特殊的数据类型,能够获取和直接操纵地址,实现动态存储分配内存。
3.2 总体设计来,自|优;尔`论^文/网www.youerw.com
1. 先对要进行中值滤波的遥感图像,进行几何校正。
2. 然后用格式转换软件(如画图工具、PCI遥感图像处理软件等)将img格式的图像,转换为bmp格式的位图文件,方便进行像素的提取。
3. 在Visual C++中进行代码编写。
4.调试程序,对预处理后的图像进行中值滤波的处理