文档视界 最新最全的文档下载
当前位置:文档视界 › 中值和均值滤波算法

中值和均值滤波算法

中值和均值滤波算法
中值和均值滤波算法

作业:对lean.raw文件,采用中值滤波和均值滤波,完成图象去噪

中值滤波:

/************************************************************************* * * 函数名称:

* MedianFilter() *

* 参数:

* LPSTR lpDIBBits - 指向源DIB图像指针 * LONG lWidth - 源图像宽度(象素数) * LONG lHeight - 源图像高度(象素数) * int iFilterH - 滤波器的高度 * int iFilterW - 滤波器的宽度

* int iFilterMX - 滤波器的中心元素X坐标 * int iFilterMY - 滤波器的中心元素Y坐标 *

* 返回值:

* BOOL - 成功返回TRUE,否则返回FALSE。 *

* 说明:

* 该函数对DIB图像进行中值滤波。 *

************************************************************************/ BOOL WINAPI MedianFilter(LPSTR lpDIBBits, LONG lWidth, LONG lHeight,

int iFilterH, int iFilterW, int iFilterMX, int iFilterMY) {

// 指向源图像的指针 unsigned char* lpSrc;

// 指向要复制区域的指针 unsigned char* lpDst;

// 指向复制图像的指针 LPSTR lpNewDIBBits; HLOCAL hNewDIBBits;

// 指向滤波器数组的指针 unsigned char * aValue; HLOCAL hArray;

// 循环变量 LONG i; LONG j; LONG k; LONG l;

// 图像每行的字节数 LONG lLineBytes;

// 计算图像每行的字节数

lLineBytes = WIDTHBYTES(lWidth * 8);

// 暂时分配内存,以保存新图像

hNewDIBBits = LocalAlloc(LHND, lLineBytes * lHeight);

// 判断是否内存分配失败 if (hNewDIBBits == NULL) {

// 分配内存失败 return FALSE; }

// 锁定内存

lpNewDIBBits = (char * )LocalLock(hNewDIBBits);

// 初始化图像为原始图像

memcpy(lpNewDIBBits, lpDIBBits, lLineBytes * lHeight);

// 暂时分配内存,以保存滤波器数组

hArray = LocalAlloc(LHND, iFilterH * iFilterW);

// 判断是否内存分配失败 if (hArray == NULL) {

// 释放内存

LocalUnlock(hNewDIBBits); LocalFree(hNewDIBBits);

// 分配内存失败

return FALSE;

}

// 锁定内存

aValue = (unsigned char * )LocalLock(hArray);

// 开始中值滤波

// 行(除去边缘几行)

for(i = iFilterMY; i < lHeight - iFilterH + iFilterMY + 1; i++) {

// 列(除去边缘几列)

for(j = iFilterMX; j < lWidth - iFilterW + iFilterMX + 1; j++) {

// 指向新DIB第i行,第j个象素的指针

lpDst = (unsigned char*)lpNewDIBBits + lLineBytes * (lHeight -

1 - i) + j;

// 读取滤波器数组

for (k = 0; k < iFilterH; k++) {

for (l = 0; l < iFilterW; l++) {

// 指向DIB第i - iFilterMY + k行,第j -

iFilterMX + l个象素的指针

lpSrc = (unsigned char*)lpDIBBits + lLineBytes

* (lHeight - 1 - i + iFilterMY - k) + j - iFilterMX + l;

// 保存象素值

aValue[k * iFilterW + l] = *lpSrc; } }

// 获取中值

* lpDst = GetMedianNum(aValue, iFilterH * iFilterW); } }

// 复制变换后的图像

memcpy(lpDIBBits, lpNewDIBBits, lLineBytes * lHeight);

// 释放内存

LocalUnlock(hNewDIBBits); LocalFree(hNewDIBBits); LocalUnlock(hArray); LocalFree(hArray);

// 返回 return TRUE;

}

均值滤波:

/************************************************************************* * * 函数名称:

* GetMedianNum() *

* 参数:

* unsigned char * bpArray - 指向要获取中值的数组指针 * int iFilterLen - 数组长度

*

* 返回值:

* unsigned char - 返回指定数组的中值。

*

* 说明:

* 该函数用冒泡法对一维数组进行排序,并返回数组元素的中值。 *

************************************************************************/ unsigned char WINAPI GetMedianNum(unsigned char * bArray, int iFilterLen) {

// 循环变量 int i; int j;

// 中间变量

unsigned char bTemp;

// 用冒泡法对数组进行排序

for (j = 0; j < iFilterLen - 1; j ++)

{

for (i = 0; i < iFilterLen - j - 1; i ++)

{

if (bArray[i] > bArray[i + 1])

{

// 互换

bTemp = bArray[i];

bArray[i] = bArray[i + 1];

bArray[i + 1] = bTemp;

}

}

}

// 计算中值

if ((iFilterLen & 1) > 0)

{

// 数组有奇数个元素,返回中间一个元素 bTemp = bArray[(iFilterLen + 1) / 2]; } else {

// 数组有偶数个元素,返回中间两个元素平均值

bTemp = (bArray[iFilterLen / 2] + bArray[iFilterLen / 2 + 1]) / 2; }

// 返回中值 return bTemp; }

///

9 /// 中值滤波算法处理

10 ///

11 /// 原始图片

12 /// 是否是彩色位图

13 /// 过滤半径

14 public Bitmap ColorfulBitmapMedianFilterFunction(Bitmap srcBmp, int windowRadius, bool IsColorfulBitmap)

15 {

16 if (windowRadius < 1)

17 {

18 throw new Exception("过滤半径小于1没有意义");

19 }

20 //创建一个新的位图对象

21 Bitmap bmp = new Bitmap(srcBmp.Width, srcBmp.Height);

22

23 //存储该图片所有点的RGB值

24 byte[,] mR,mG,mB;

25 mR = new byte[srcBmp.Width, srcBmp.Height];

26 if (IsColorfulBitmap)

27 {

28 mG = new byte[srcBmp.Width, srcBmp.Height];

29 mB = new byte[srcBmp.Width, srcBmp.Height];

30 }

31 else

32 {

33 mG = mR;

34 mB = mR;

35 }

36

37 for (int i = 0; i <= srcBmp.Width - 1; i++)

38 {

39 for (int j = 0; j <= srcBmp.Height - 1; j++)

40 {

41 mR[i, j] = srcBmp.GetPixel(i, j).R;

42 if (IsColorfulBitmap)

43 {

44 mG[i, j] = srcBmp.GetPixel(i, j).G;

45 mB[i, j] = srcBmp.GetPixel(i, j).B;

46 }

47 }

48 }

49

50 mR = MedianFilterFunction(mR, windowRadius);

51 if (IsColorfulBitmap)

52 {

53 mG = MedianFilterFunction(mG, windowRadius);

54 mB = MedianFilterFunction(mB, windowRadius);

55 }

56 else

57 {

58 mG = mR;

59 mB = mR;

60 }

61 for (int i = 0; i <= bmp.Width - 1; i++)

62 {

63 for (int j = 0; j <= bmp.Height - 1; j++)

64 {

65 bmp.SetPixel(i, j, Color.FromArgb(mR[i, j], mG[i, j], mB[i, j]));

66 }

67 }

68 return bmp;

69 }

70

71 ///

72 /// 对矩阵M进行中值滤波

73 ///

74 /// 矩阵M

75 /// 过滤半径

76 /// 结果矩阵

77 private byte[,] MedianFilterFunction(byte[,] m, int windowRadius)

78 {

79 int width = m.GetLength(0);

80 int height = m.GetLength(1);

81

82 byte[,] lightArray = new byte[width, height];

83

84 //开始滤波

85 for (int i = 0; i <= width - 1; i++)

86 {

87 for (int j = 0; j <= height - 1; j++)

88 {

89 //得到过滤窗口矩形

90 Rectangle rectWindow = new Rectangle(i - windowRadius, j - windowRadius, 2 * windowRadius + 1, 2 * windowRadius + 1);

91 if (rectWindow.Left < 0) rectWindow.X = 0;

92 if (rectWindow.Top < 0) rectWindow.Y = 0;

93 if (rectWindow.Right > width - 1) rectWindow.Width = width - 1 - rectWindow.Le

ft;

94 if (rectWindow.Bottom > height - 1) rectWindow.Height = height - 1 - rectWindo w.Top;

95 //将窗口中的颜色取到列表中

96 List windowPixelColorList = new List();

97 for (int oi = rectWindow.Left; oi <= rectWindow.Right - 1; oi++)

98 {

99 for (int oj = rectWindow.Top; oj <= rectWindow.Bottom - 1; oj++)

100 {

101 windowPixelColorList.Add(m[oi, oj]);

102 }

103 }

104 //排序

105 windowPixelColorList.Sort();

106 //取中值

107 byte middleValue = 0;

108 if ((windowRadius * windowRadius) % 2 == 0)

109 {

110 //如果是偶数

111 middleValue = Convert.ToByte((windowPixelColorList[windowPixelColorList.C ount / 2] + windowPixelColorList[windowPixelColorList.Count / 2 - 1]) / 2);

112 }

113 else

114 {

115 //如果是奇数

116 middleValue = windowPixelColorList[(windowPixelColorList.Count - 1) / 2]; 117 }

118 //设置为中值

119 lightArray[i, j] = middleValue;

120 }

121 }

122 return lightArray;

123 }

MATLAB算法实现的方法

一个均值滤波的例子:

I=imread('cameraman.tif');%读入图像

J=imnoise(I,'salt & pepper',0.02);%给图像添加椒盐噪声

K=imnoise(I,'gaussian',0,0.005);%给图像添加均值为0,方差为0.005的高斯噪声 subplot(231),imshow(I) title('原图像')

subplot(232),imshow(J) title('添加椒盐噪声图像') subplot(233),imshow(K) title('添加高斯噪声图像') subplot(234),imshow(I) title('原图像')

K1=filter2(fspecial('average',3),J)/255;%使用3×3模板均值滤波 subplot(235),imshow(K1) title('3*3椒盐噪声均值滤波')

K2=filter2(fspecial('average',3),K)/255;%使用3×3模板均值滤波 subplot(236),imshow(K2) title('3*3高斯噪声均值滤波')

一个中值滤波的例子:

I=imread('cameraman.tif');%读入图像

J=imnoise(I,'salt & pepper',0.02);%给图像添加椒盐噪声

K=imnoise(I,'gaussian',0,0.005);%给图像添加均值为0,方差为0.005的高斯噪声 subplot(231),imshow(I) title('原图像')

subplot(232),imshow(J) title('添加椒盐噪声图像') subplot(233),imshow(K) title('添加高斯噪声图像') subplot(234),imshow(I) title('原图像')

K1=medfilt2(J,[3,3]);%使用3×3模板中值滤波 subplot(235),imshow(K1) title('3*3椒盐噪声中值滤波')

K2=medfilt2(K,[3,3]);%使用3×3模板中值滤波 subplot(236),imshow(K2) title('3*3高斯噪声中值滤波')

3、均值滤波与中值滤波的对比

I=imread('cameraman.tif');%读入图像

J=imnoise(I,'salt & pepper',0.02);%给图像添加椒盐噪声

K=imnoise(I,'gaussian',0,0.005);%给图像添加均值为0,方差为0.005的高斯噪声 subplot(331),imshow(I) title('原图像')

subplot(332),imshow(J) title('添加椒盐噪声图像') subplot(333),imshow(K) title('添加高斯噪声图像') subplot(334),imshow(I) title('原图像')

K1=filter2(fspecial('average',3),J)/255;%使用3×3模板均值滤波 subplot(335),imshow(K1) title('3*3椒盐噪声均值滤波')

K2=filter2(fspecial('average',3),K)/255;%使用3×3模板均值滤波 subplot(336),imshow(K2) title('3*3高斯噪声均值滤波') subplot(337),imshow(I) title('原图像')

K3=medfilt2(J,[3,3]);%使用3×3模板中值滤波 subplot(338),imshow(K3) title('3*3椒盐噪声

中值滤波')

K4=medfilt2(K,[3,3]);%使用3×3模板中值滤波 subplot(339),imshow(K4) title('3*3高斯噪声中值滤波')

中值滤波与均值滤波

四川大学电气信息学院微机原理与接口技术 实验报告 实验名称:中值滤波与均值滤波 实验地点:二基楼A514 年级: 2014级 姓名:宋雅婕 学号: 2014141443030 实验时间:2016年5月27日

一、实验内容 1.在数据段设变量数组TADA1和TADA2,并存入假设的两组采样值作为某一 采样周期的采样值。 ⒉设计中值滤波程序求出测量值。 ⒊设计均值滤波程序求出测量值。 ⒋每个程序应能将结果显示在屏幕上。 ⒌在计算机上调试程序,并获得正确结果。 二、程序框图 1. 2.中值滤波:

三、程序清单 1、中值滤波: DATAS SEGMENT TADA1 DB 65,72,33,84,43 N EQU $-TADA1 DATAS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS START: MOV AX,DATAS MOV DS,AX ;给DS段赋值 MOV CX,N-1 ;设置N-1轮比较次数 MOV DX,1 ;设置比较的轮次 AG: CALL MP ;调用子程序 INC DX LOOP AG MOV SI,0 XOR AX,AX ;将AX清零 MOV AL,TADA1[SI+(N-1)/2] ;取出中值 MOV BL,10 DIV BL PUSH AX ADD AL,30H MOV DL,AL MOV AH,2 INT 21H ;输出十进制数的高位POP AX ADD AH,30H MOV DL,AH MOV AH,2 INT 21H ;输出十进制数的低位 MOV AH,4CH INT 21H MP PROC ;冒泡法(从小到大排列) PUSH CX MOV CX,N SUB CX,DX MOV SI,0 RECMP: MOV AL,TADA1[SI]

常用的8种数字滤波算法

常用的8种数字滤波算法 摘要:分析了采用数字滤波消除随机干扰的优点,详细论述了微机控制系统中常用的8种数字滤波算法,并讨论了各种数字滤波算法的适用范围。 关键词:数字滤波;控制系统;随机干扰;数字滤波算法 1 引言 在微机控制系统的模拟输入信号中,一般均含有各种噪声和干扰,他们来自被测信号源本身、传感器、外界干扰等。为了进行准确测量和控制,必须消除被测信号中的噪声和干扰。噪声有2大类:一类为周期性的,其典型代表为50 Hz 的工频干扰,对于这类信号,采用积分时间等于20 ms整倍数的双积分A/D转换器,可有效地消除其影响;另一类为非周期的不规则随机信号,对于随机干扰,可以用数字滤波方法予以削弱或滤除。所谓数字滤波,就是通过一定的计算或判断程序减少干扰信号在有用信号中的比重,因此他实际上是一个程序滤波。 数字滤波器克服了模拟滤波器的许多不足,他与模拟滤波器相比有以下优点: (1)数字滤波器是用软件实现的,不需要增加硬设备,因而可靠性高、稳定性好,不存在阻抗匹配问题。 (2)模拟滤波器通常是各通道专用,而数字滤波器则可多通道共享,从而降低了成本。 (3)数字滤波器可以对频率很低(如0.01 Hz)的信号进行滤波,而模拟滤波器由于受电容容量的限制,频率不可能太低。 (4)数字滤波器可以根据信号的不同,采用不同的滤波方法或滤波参数,具有灵活、方便、功能强的特点。 2 常用数字滤波算法 数字滤波器是将一组输入数字序列进行一定的运算而转换成另一组输出数字序列的装置。设数字滤波器的输入为X(n),输出为Y(n),则输入序列和输出序列之间的关系可用差分方程式表示为: 其中:输入信号X(n)可以是模拟信号经采样和A/D变换后得到的数字序列,也

数字图像处理实验三中值滤波和均值滤波实验报告

数字图像处理实验三中值滤波和均值滤波实验报告

数字图像处理实验三 均值滤波、中值滤波的计算机实现12281166 崔雪莹计科1202班 一、实验目的: 1)熟悉均值滤波、中值滤波处理的理论基础; 2)掌握均值滤波、中值滤波的计算机实现方法; 3)学习VC++ 6。0 的编程方法; 4)验证均值滤波、中值滤波处理理论; 5)观察均值滤波、中值滤波处理的结果。 二、实验的软、硬件平台: 硬件:微型图像处理系统,包括:主机, PC机;摄像机; 软件:操作系统:WINDOWS2000或WINDOWSXP应用软件:VC++ 6.0 三、实验内容: 1)握高级语言编程技术; 2)编制均值滤波、中值滤波处理程序的方法; 3)编译并生成可执行文件; 4)考察处理结果。 四、实验要求: 1)学习VC++确6。0 编程的步骤及流程; 2)编写均值滤波、中值滤波的程序;

3)编译并改错; 4)把该程序嵌入试验二给出的界面中(作适当修改); 5)提交程序及文档; 6)写出本次实验的体会。 五、实验结果截图 实验均值滤波采用的是3X3的方块,取周围的像素点取得其均值代替原像素点。边缘像素的处理方法是复制边缘的像素点,增加一个边框,计算里面的像素值得均值滤波。

六、实验体会 本次实验在前一次的实验基础上增加均值滤波和中值滤波,对于椒盐噪声的处理,发现中值滤波的效果更为好一点,而均值滤波是的整个图像变得模糊了一点,效果差异较大。本次实验更加增加了对数字图像处理的了解与学习。 七、实验程序代码注释及分析 // HistDemoADlg.h : 头文件 // #include "ImageWnd.h" #pragma once // CHistDemoADlg 对话框 class CHistDemoADlg : public CDialogEx { // 构造

中值滤波和均值滤波代码

%均值滤波 clc,clear; f=imread('2.bmp'); subplot(221),imshow(f); f1=imnoise(f,'gaussian',0.002,0.0008); subplot(222),imshow(f1); k1=floor(3/2)+1; k2=floor(3/2)+1; X=f1; [M,N]=size(X); uint8 Y=zeros(M,N); funBox=zeros(3,3); for i=1:M-3 for j=1:N-3 funBox=X(i:i+3,j:j+3); s=sum(funBox(:)); h=s/9; Y(i+k1,j+k2)=h; end; end; Y=Y/255; subplot(223),imshow(Y); 注意:在matlab中,我们常使用imshow()函数来显示图像,而此时的图像矩阵可能经过了某种运算。在matlab中,为了保证精度,经过了运算的图像矩阵I其数据类型会从unit8型变成double型。如果直接运行imshow(I),我们会发现显示的是一个白色的图像。这是因为imshow()显示图像时对double型是认为在0~1范围内,即大于1时都是显示为白色,而imshow显示uint8型时是0~255范围。而经过运算的范围在0-255之间的double型数据就被不正常得显示为白色图像了。 那么如何解决这个问题呢?笔者曾经用fix()函数把图像矩阵由实数形式转化成整数形式,但这样仍无法改变图像矩阵是double型的事实。 通过搜索,找到两个解决方法: imshow(I/256); ----------将图像矩阵转化到0-1之间 imshow(I,[]); -----------自动调整数据的范围以便于显示(不明白原理!) PS:imshow(I,[]),将I的最小值看作0,最大值看作255,所以黑白明显

快速均值滤波算法—C代码

static void meanfilter32(int *imSrc,const int windows,const int width,const int height,int *Acol,int *imDst) { int i,j,k,r,n,sum; r=(windows-1)/2; // int Acol[20]={0}; for(i=0; i0 && i<=r) { for(k=0; kr && i

中值滤波算法的滤波效果分析报告

题目中值滤波算法的滤波效果分析报告 学院:信息科学与技术学院 专业:控制科学与工程 学生:X X 指导教师:XXX 2014 年12月07日

1、中值滤波算法原理 中值滤波是一种对干扰脉冲和点状噪声有良好抑制作用,而对图像边缘能较好保持的非线性图像增强技术。中值滤波的基本原理是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代替,让周围的像素值接近的真实值,从而消除孤立的噪声点。常用的中值滤波有线状、圆形、十字形、圆环形等形状;常用的中值滤波有3x3、5x5等区域。图像为二维信号,中值滤波的窗口形状和尺寸对滤波器效果影响很大,不同图像内容和不同应用要求往往选用不同的窗口形状和尺寸。 2、滤波效果分析 本文基于Matlab编程实现对含有噪声的图像进行中值滤波处理,中值滤波的基本步骤分为: (1)将滤波模板(含有若干个点的滑动窗口)在图像中遍历,并将模板中心与图中某个像素位置重合; (2)读取模板中各对应像素的灰度值; (3)将这些灰度值从小到大排列; (4)取这一列数据的中间数据,将其赋给对应模板中心位置的像素。如果窗口中元素为奇数,中值取元素按灰度值大小排序后的中间元素灰度值。如果窗口中元素为偶数,中值取元素按灰度值大小排序后,中间两个元素灰度的平均值。中间值代替该点的像素值。 调用Matlab中的中值滤波函数medfilt2()对添加噪声的图像进行滤波处理,分别添加高斯白噪声和椒盐噪声,分别使用3x3、5x5的窗口对添加噪声的图像进行滤波,其运行结果如下: 图2.1 原始图像

在原图像中添加0.002的高斯白噪声与椒盐噪声,噪声图像如图2.2所示。 图2.2 噪声图像 使用3x3、5x5的滤波窗口对高斯白噪声图像进行滤波处理,其结果如图2.3所示。 图2.3 白噪声图像滤波效果 使用3x3、5x5的滤波窗口对椒盐噪声图像进行滤波处理,其结果如图2.4所示。 图2.4 椒盐噪声图像滤波效果

MATLAB课程设计(自适应中值滤波)

信息工程系课程设计报告 课程MATLAB课程设计 专业通信工程 班级 2级本科二班 学生姓名1 景学号114 学生姓名2 学号1414 学生姓名3 王学号6 学生姓名4 学号31 学生姓名4 学号02 二〇一四年十二月

目录 目录 (1) 摘要: (2) 关键词: (2) 1.算法描述 (2) 1.1 噪声点 (3) 1.2 窗口尺寸选择 (3) 1.3求滤波窗口内中值,并替换像素点。 (3) 2程序实现 (4) 2.1准备和描述 (4) 2.2扩大窗口、确定窗口 (5) 2.3 确定最大、最小值和中值 (6) 2.4中值替换像素点、输出图像 (7) 实验结果 (9) 参考文献 (9)

摘要:通过本次课程设计,主要训练和培养学生综合应用所学MATLAB课程的自适应中值的相关知识,独立学习自适应中值滤波的原理及处理方式。学会扩大窗口并找到其区域内的中值、最小值、以及最大值,然后用中值代替像素点。通过自主学习和查阅资料来了解程序的编写及改进,并用MATLAB进行仿真。 关键词:自适应中值滤波灰度值椒盐噪声像素点.

1.算法描述 1.1 噪声点 脉冲噪声是图像处理中常见的一类,中值滤波器对消除脉冲噪声非常有效。噪声脉冲可以是正的(盐点),也可以是负的(胡椒点),所以也称这种噪声为“椒盐噪声”。椒盐噪声一般总表现为图像局部区域的最大值或最小值,并且受污染像素的位置是随机分布的,正负噪声点出现的概率通常相等。图像噪声点往往对应于局部区域的极值。 1.2窗口尺寸选择 滤波窗口尺寸的选择影响滤波效果,大尺寸窗口滤波能力强,但细节保持能力较弱;小尺寸窗口能保持图像大量细节但其滤波性能较低。根据噪声密度的大小自适应地选择滤波窗口可以缓和滤波性能与细节保持之间的矛盾,同时也增加了算法的时间复杂度。从形状看来窗口方向要沿着边缘和细节的方向,不能穿过它们也不能把它们和周围相差很大的像素包含在同一窗口中否则边缘和细节会被周围像素模糊。 1.3求滤波窗口内中值,并替换像素点。 设f ij为点(i,j)的灰度,A i,j为当前工作窗口,f min、f max 和f med分别为A i,j中的灰度最小值、灰度最大值和灰度中值, A

数字图像处理实验三中值滤波和均值滤波实验报告材料

数字图像处理实验三 均值滤波、中值滤波的计算机实现12281166 崔雪莹计科1202班 一、实验目的: 1)熟悉均值滤波、中值滤波处理的理论基础; 2)掌握均值滤波、中值滤波的计算机实现方法; 3)学习VC++ 6。0 的编程方法; 4)验证均值滤波、中值滤波处理理论; 5)观察均值滤波、中值滤波处理的结果。 二、实验的软、硬件平台: 硬件:微型图像处理系统,包括:主机, PC机;摄像机; 软件:操作系统:WINDOWS2000或WINDOWSXP应用软件:VC++ 6.0 三、实验内容: 1)握高级语言编程技术; 2)编制均值滤波、中值滤波处理程序的方法; 3)编译并生成可执行文件; 4)考察处理结果。 四、实验要求: 1)学习VC++确6。0 编程的步骤及流程; 2)编写均值滤波、中值滤波的程序;

3)编译并改错; 4)把该程序嵌入试验二给出的界面中(作适当修改); 5)提交程序及文档; 6)写出本次实验的体会。 五、实验结果截图 实验均值滤波采用的是3X3的方块,取周围的像素点取得其均值代替原像素点。边缘像素的处理方法是复制边缘的像素点,增加一个边框,计算里面的像素值得均值滤波。

六、实验体会 本次实验在前一次的实验基础上增加均值滤波和中值滤波,对于椒盐噪声的处理,发现中值滤波的效果更为好一点,而均值滤波是的整个图像变得模糊了一点,效果差异较大。本次实验更加增加了对数字图像处理的了解与学习。 七、实验程序代码注释及分析 // HistDemoADlg.h : 头文件 // #include "ImageWnd.h" #pragma once // CHistDemoADlg 对话框 class CHistDemoADlg : public CDialogEx { // 构造

数字图像处理实验报告[邻域平均法和中值滤波法]

数字图像处理实验报告 班级: 姓名: 学号: 日期: 邻域平均法和中值滤波处理

一、实验目的 图像变换是数字图像处理中的一种综合变换,如直方图变换、几何变换等。通过本实验,使得学生掌握两种变换的程序实现方法。 二、实验任务 请设计程序,分别用邻域平均法,其模板为:和中值滤波法对testnoise图像进行去噪处理(中值滤波的模板的大小也设为3×3)。 三、实验环境 本实验在Windows平台上进行,对内存及cpu主频无特别要求,使用VC或者MINGW(gcc)编译器均可。 四、设计思路 介绍代码的框架结构、所用的数据结构、各个类的介绍(类的功能、类中方法的功能、类的成员变量的作用)、各方法间的关系写。在此不进行赘述。 五、具体实现 实现设计思路中定义的所有的数据类型,对每个操作给出实际算法。对主程序和其他模块也都需要写出实际算法。 代码: <邻域平均法>(3*3) #include

#include #include #include "hdr.h" /*------定义结构指针------*/ struct bmphdr *hdr; //定义用于直方图变量 unsigned char *bitmap,*count,*new_color; /*------main() 函数编------*/ int main() { //定义整数i,j 用于函数循环时的,nr_pixels为图像中像素的个数 int i, j ,nr_pixels,nr_w,nr_h; //定义两个文件指针分别用于提取原图的数据和生成直方图均衡化后的图像 FILE *fp, *fpnew; //定义主函数的参数包括:输入的位图文件名和输出的位图文件名,此处内容可以不要,在DOS下执行命令的时候再临时输入也可,为了方便演示,我这里直接把函数的参数确定了。// argc=3; // argv[1]="test.bmp"; // argv[2]="testzf.bmp"; //参数输入出错显示 /* if (argc != 3) { printf("please input the name of input and out bitm ap files\n");

中值滤波

机械与电子工程学院信号分析与处理 课程设计报告 题目:图像信号的中值滤波 题号:1-14 小组成员:赵鑫、陈超、尹庆宇 班级:15电科1班 字数:4040 完成日期:2018年6月29日

目录 1引言 (1) 1.1设计目的 (1) 1.2章节组织 (1) 2设计原理 (1) 2.1中值滤波的基本原理 (1) 2.2中值滤波的特点 (2) 2.2.1对某些输入信号中值滤波的不变性 (2) 2.2.2中值滤波去噪声性能 (2) 2.2.3中值滤波的频谱特性 (2) 3设计内容 (2) 3.1中值滤波算法分析 (2) 3.2中值滤波在图像处理中的MATLAB实现 (3) 4设计结果分析 (5) 4.1中值滤波与均值滤波的比较 (5) 4.2中值滤波与均值滤波的进一步讨论 (6) 4.2.1中值滤波输出方差 (6) 4.2.2均值滤波输出方差 (8) 4.3结果分析 (8) 5总结 (8) 6参考文献 (9)

1引言 1.1设计目的 1.熟悉MA TLAB的使用方法包括函数、原理和方法的应用。 2.增强在通信系统设计方面的动手能力与自学能力。 3.进一步熟悉图像中值滤波的原理和方法。 4.比较中值滤波同其它滤波的实现效果 1.2章节组织 报告共分六章。第一章为引言,主要介绍本课程的设计目的;第二章为设计原理,给出了图像的中值滤波的基本原理;第三章为设计内容,给出了中值滤波的算法实现;第四章为设计结果分析,比较中值滤波同其它滤波的实现效果;第五章为总结,对报告的要点进行了总结;第六章为参考文献,给出了报告的主要参考资料。 2设计原理 2.1中值滤波的基本原理 中值滤波是一种比较常见的非线性信号处理技术,它以排序理论为基础,能够有效地抑制噪声。这种领域运算和卷积类似,它主要是排序领域中的像素,接下来再选择排序后的数据组中的中间值作为最终输出的像素值。其基本原理为:首先针对以一个像素为中心点的具体领域进行研究,领域也被称为窗口,可以是方形,十字形,圆形或其他类似的形状,然后对领域中的每个像素值按照灰度值的大小进行排序,最后再将这组数的中值作为中心点像素灰度的真值进行输出。序列中值的具体定义如下: 若x1,x2,…,xn为一组序列,先把这组序列按大小排序为xi1≤xi2≤xi3…≤xin,则该序 列的中值y为 实现时一般取一长度为L=2n+1的滤波窗口,n为正整数。将窗口在数据上滑动,中值滤波输出就是窗口正中所对的像素值用窗口内各像素的中值代替,

均值滤波改进算法

《DSP图像处理》课程学习报告 姓名郭鑫 学号 08211083 通信0804班 同组成员胡婷婷 宋顾洋 霍万明 陈友为 指导教师申艳老师 时间 2010-10-15

均值滤波的改进算法 一、算法描述:一般的均值滤波的阈值是一个固定值,而我们采用 了自适应的方法,使阈值根据不同的图像会有不同的数值,计算公式是 二、实验箱实验过程和结果分析 (1)、c语言程序 /*均值滤波处理*/ void AverageFilterEdge() { int i,j,k; Uint8 bTemp; float fAverg; k=(intALines-1)*(intAPixels-1); for(i=intALines;i

快速中值滤波算法

南昌大学实验报告 学生姓名:洪僡婕学号:6100411159 专业班级:数媒111班 实验类型:■验证□综合□设计□创新实验日期: 4.29 实验成绩:一、实验项目名称 数字图像处理 二、实验目的 实现快速中值滤波算法 三、实验内容 用VC++实现中值滤波的快速算法 四、主要仪器设备及耗材 PC机一台 五、实验步骤 // ImageProcessingDoc.cpp : implementation of the CImageProcessingDoc class// #include "stdafx.h" #include "ImageProcessing.h" #include "ImageProcessingDoc.h" #include "GreyRatio.h" #include #define PI (acos(0.0) * 2) #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CImageProcessingDoc IMPLEMENT_DYNCREATE(CImageProcessingDoc, CDocument) BEGIN_MESSAGE_MAP(CImageProcessingDoc, CDocument) //{{AFX_MSG_MAP(CImageProcessingDoc) ON_COMMAND(ID_HISTOGRAM_ADJUSTIFCATION, OnHistogramAdjustifcation) ON_COMMAND(ID_FFT, OnFft) ON_COMMAND(ID_SALT_PEPPER_NOICE, OnSaltPepperNoice) ON_COMMAND(ID_RANDOM_NOISE, OnRandomNoise) ON_COMMAND(ID_MEDIAN_FILTERING, OnMedianFiltering) ON_COMMAND(ID_DCT, OnDct) ON_COMMAND(ID_FWT, OnFwt)

几种中值滤波去噪方法分析

几种中值滤波去噪方法分析 在数字图像的转换、存储和传输等过程中,经常性由于电子设备工作环境的不稳定,由于设备中含有一些污染物等原因,导致数字图像中一些像素点的灰度值发生非常大的变化,变得非常小或者非常大;而且大气环境很容易干扰无线数据传输,从而让传输信号混入噪声,接收到的无线信号恢复成传输过来的数字图像较原图像相比也会有很大的不同。在这些过程中,椒盐噪声很容易就会对数字图像造成感染。客户满意的数字图像尽可能少或者没有受到椒盐噪声的污染。所以我们需要去噪处理。 在现阶段处理椒盐噪声方面的研究成果方面,因为中值滤波有其非线性的特性,对比其他线性滤波方法可以取得更好的效果,同切同时还可以更好的保留图像的边缘信息。很多学者在研究通过中值滤波消除椒盐噪声的影响,希望可以得到更好的去噪效果。 第一节标准中值滤波方法 标准中值滤波是把这个窗口内的像素点按灰度值大小进行排列,把灰度值的平均值当作标准值。 我们以一个8位的图像作为例子,因为椒盐噪声会让受影响的像素点灰度值改为亮点,即灰度值为255;或者暗点,即灰度值为0。我们在排序的时候,把收到污染的像素点的灰度值大小排列出来,取中间值为所有噪点值,那么就可以消除噪声污染对这个点的影响。其具体步骤如下: ①把窗口在图像中滑动,然后让窗口中心与某一像素点重合 ②记录下窗口中所有像素点的灰度值 ③将这些灰度值从小到大排序 ④记录下该灰度值序列中间的值 ⑤将所记录下的中间值替代窗口中心像素点的灰度值 因为中值滤波的输出灰度值大小是由窗口的中值大小所决定的,所以中值滤

波对于窗口内脉冲噪声远远没有均值滤波敏感。因此相对于均值滤波,中值滤波可以在有效去除脉冲噪声的同时,减小更多的模糊图像。由于由于中值滤波所采用的窗口大小会直接决定去噪效果和图像模糊程度,而且图像去噪后的用途也就决定了窗口的形式。以5*5窗口为例,常见的形状如图2.1所示: 图 2.1 常见的尺寸为5*5的中值滤波窗口 尽管标准中值滤波方法称得上是现在市面上的一种最简单有效的去除椒盐噪声的方法。但是它判断像素点是否被噪声影响的机制不明确,尽管采用该方法时已经对所有像素点进行了一次滤波操作,还是会在一定程序上对图像的边缘、细节信息产生破坏。 第二节带权值的中值滤波方法 Brownrigg提出了一种改进的中值滤波方法:带权值的中值滤波方法。这个滤波的步骤和SM基本一样,不同的地方在于:WM在排序取中值的时候要在

均值滤波和中值滤波

均值滤波与自适应中值滤波的仿真与实现 摘要 图像是一种重要的信息源,通过图像处理可以帮助人们了解信息的内涵,然而在图像使用和传输过程中,不可避免会受到噪声的干扰,因此为了恢复原始图像,达到好的视觉效果,需要对图像进行滤波操作。根据噪声种类不同,可以采用不同的滤波方法,均值滤波是典型的线性滤波算法,能够有效滤波图像中的加性噪声,而中值滤波器是能够有效滤除脉冲噪声的非线性滤波器,但传统中值滤波去脉冲噪声的性能受滤波窗口尺寸的影响较大, 在抑制图像噪声和保护细节两方面存在矛盾。本文首先对不同均值滤波器在处理不同噪声方面的优缺点进行了分析,然后分别用中值滤波器和自适应中值滤波器对被椒盐噪声污染的图像进行了滤波操作,发现自适应中值滤波方法不仅可以有效滤波椒盐噪声,同时还可以有效地克服中值滤波器造成图像边缘模糊的缺点。 1.均值滤波 均值滤波是典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该模板包括了其周围的临近像素点和其本身像素点。再用模板中的全体像素的平均值来代替原来像素值。均值滤波也称为线性滤波,其采用的主要方法为邻域平均法。线性滤波的基本原理是用均值代替原图像中的各个像素值,即对待处理的当前像素点(x,y),选择一个模板,该模板由其邻近的若干像素组成,求模板中所有像素

的均值,再把该均值赋予当前像素点(x,y),作为处理后图像在该点上的灰度

值g(x,y),即g(x,y)=1/m ∑f(x,y), m为该模板中包含当前像素在内的像素总个数。均值滤波能够有效滤除图像中的加性噪声,但均值滤波本身存在着固有的缺陷,即它不能很好地保护图像细节,在图像去噪的同时也破坏了图像的细节部分,从而使图像变得模糊。均值滤波主要有算术均值滤波,几何均值滤波,谐波均值滤波以及逆谐波均值滤波,本文只对算术均值滤波,几何均值滤波和逆谐波均值滤波进行研究。其中几何均值滤波器所达到的平滑度可以与算术均值滤波器相比,但在滤波过程中丢失更少的图象细节。逆谐波均值滤波器更适合于处理脉冲噪声,但它有个缺点,就是必须要知道噪声是暗噪声还是亮噪声,以便于选择合适的滤波器阶数符号,如果阶数的符号选择错了可能会引起灾难性的后果。下面分别对算术平均滤波,几何平均滤波和逆谐波均值滤波对不同噪声的滤波效果进行仿真分析。

中值滤波算法

中值滤波算法 本文提出一种中值滤波算法,该算法充分地利用相邻两次中值滤波窗口内数据的相关性。中值滤波算法在运算过程中通过对有序序列快速的对半查找和内插操作,重构有序序列,占L面得到各中值算法很大地提高了运算效率-计算机模拟寝明该方法是有效的。 在数字信号处理中,经常会遇到对信号数据作平滑处理。局部平均滤波是常用的一种算法,若是对具有随机脉冲噪声的信号进行处理,虽然脉冲噪声有所衰减,但它对滤波结果仍有显著的影响。中值滤波却是对窗内数据进行大小的排序,取结果的中间项对应的值,这样脉冲噪声就不起作用,不影响中值结果 所以,中值滤波在有随机脉冲噪声的情况下,能较好地保护原始信号。 中值滤波的主要运算就是对窗口内的信号数据序列进行排序。文[4]提出的二维中值滤波快速算法,只适用于幅度量化级为极其有限的数据(如:数字图象处理中的象素幅度,若是用单字节(8位二进制存贮单元)存放,共有28=256个灰度级),原因是要给每个量化级设置一个作为计数器的存贮单元。文[5—8]的方法也是针对于幅度量化级为有限的数据。若是数据为任意大小或精度的浮点数,则以上的方法不适用,通常采用每次对窗内数据排序并 输出相应的中值。假设原始信号数据序列的长度为 ,表示为{ (O),x(1),?,x(M-1)},窗口长度为2^r+1,表示为{ (O), (1),?, (2Ⅳ)},共需要 一2N次对长度为2N+l的窗内数据序列分别进行排序。要进行排序,就必须对序列中数据元索做比较和交换.数据元素问的比较次数是影响排序速度的一个重要因素。一般认为,对 个元素进行排序时,所需的比较次数在理论上的最小值为 0(n|og。n) 当原始信号数据序列较长或窗口较大时,用 这种传统中值滤波方法是十分费时的。文[9]提出把相邻两次的中值滤波合并为一次进行,只做一次排序。从而,总的排序次数减少一半,运算时间节省约一半本文提出一种中值滤波的快速算法,避免了反复对无序序列排序,而只对有序序列进行数据元素的快速查找和内插,实现中值滤波. 中值滤波的快速算法 本文提出的中值滤波的快速算法的基本思想是:原始数据序列上中值滤波的滑窗在移动过程中,当前窗只要删除其最早的元素,加入窗后的新元素,即成为下一窗的内容。下一窗的中值滤波实现可利用上次中值滤波的排序结果,新元素的插人位置用有序序列快速查找算法求得,新元素插人与最早的元素删除的实现采用独特的数据结构,将是新元素覆盖最早的元素,即是插人兼并了删除。 设置(2N+1)个连续存贮单元(存放浮点数){ (。)t (1),?, (2Ⅳ)}组成的循环序列用来存放窗内的数据元素 按照先进先出的原则,后来的数据元素总是替换当前最早存放的数据元素。设置(2/'/+1)个连续存贮单元(存放整数){ (。), (1),? ,s(2N)}顺序存放的是,若上述窗内元素从小至大排序后,顺序的元素在Ⅳ 序列中的下标值,即满足 ( (。))≤w(s(1))≤ ?≤ w( (2Ⅳ))。设置(2Ⅳ+1)个连续存贮单元(存放整数){a(0),n(1),?,a(ZN)}分别存放s序列中存有其下标的存贮单元的下标值,即满足 (。(f)), =O,1,?2N。可以这样认为,把Ⅳ 序列和n序列中具有同一下标的两个存贮单元当作独立结构单元,s序列中一存贮单元指向上述某一结构单元,这个结构单元中的。存贮单元值表示了这个结构单元指向该s存贮单元。下面实现中值滤波的快速算法。首先,令Ⅳ 序列中的存贮单元值全为零,s序列和n序列中的存贮单元分别存放各自的下标值,即 (f)=0, (f)=f,n(f)=f,f=O,1 。,2N。另外,设置下标 =0. 第一步,求当前准备进入窗的数据元素x(ra)在s序列中的内插位置,用对半查找算法实现脚,如图1所示。在图1中,有序序列对半查找的区问下界为工,上界为h,中部为 ,通过比较 (s(1))与待查量 (m),若不相等,则调整L或h,使下次查找的区问比前次的减少一半。输出的 反映

中值和均值滤波论文(附代码)

基于MATLAB 的带噪图像的中值和均值滤波 摘要:图像是一种重要的信息源,通过图像处理可以帮助人们了解信息的内涵。本文将纯净的图像加入椒盐噪声,然后采用中值和均值滤波的方法对其进行去噪。在图像处理中,中值和均值滤波对滤除脉冲干扰噪声都很有效。文章阐述了中值和均值滤波的原理、算法以及在图像处理中的应用。MATLAB 是一种高效的工程计算语言,在数据处理、图像处理、神经网络、小波分析等方面都有广泛的应用。 关键词:图像,中值滤波,均值滤波,去噪,MATLAB 1. 引言 20世纪20年代,图像处理首次得到应用。上个世纪60年代中期,随着计算机科学的发展和计算机的普及,图像处理得到广泛的应用。60年代末期,图像处理技术不断完善,逐渐成为一个新兴的学科。图像处理中输入的是质量低的图像,输出的是改善质量后的图像。 为了改善图像质量,从图像中提取有效信息,必须对图像进行去噪预处理。根据噪声频谱分布的规律和统计特征以及图像的特点,出现了多种多样的去噪方法。经典的去噪方法有:空域合成法,频域合成法和最优合成法等,与之适应的出现了许多应用方法,如均值滤波器,中值滤波器,低通滤波器,维纳滤波器,最小失真法等。这些方法的广泛应用,促进数字信号处理的极大发展,显著提高了图像质量。 2. 中值滤波 中值滤波是一种典型的低通滤波器,属于非线性滤波技术,它的目的是保护图像边缘的同时去除噪声。所谓中值滤波,是指把以某点(x,y )为中心的小窗口内的所有象素的灰度按从大到小的顺序排列,若窗口中的象素为奇数个,则将中间值作为(x ,y)处的灰度值。若窗口中的象素为偶数个,则取两个中间值的平均值作为(x ,y)处的灰度值。中值滤波对去除椒盐噪声很有效。中值滤波器的缺点是对所有象素点采用一致的处理,在滤除噪声的同时有可能改变真正象素点的值,引入误差,损坏图像的边缘和细节。该算法对高斯噪声和均匀分布噪声就束手无策。 设有一个一维序列1f ,2f ,…,n f ,取窗口长度为m(m 为奇数),对此序列

中值滤波&均值滤波

数字图像处理作业(中值滤波&均值 滤波) 学院:电子信息工程学院 专业:控制工程 姓名:苏良碧

1中值滤波 1.1、中值滤波原理: 中值滤波是基于排序统计理论的一种能有效抑制噪声的非线性信号处理技术,中值滤波的基本原理是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代替,让周围的像素值接近的真实值,从而消除孤立的噪声点。方法是去某种结构的二维滑动模板,将板内像素按照像素值的大小进行排序,生成单调上升(或下降)的为二维数据序列。二维中值滤波输出为g(x,y)=med{f(x-k,y-l),(k,l∈W)},其中,f(x,y),g(x,y)分别为原始图像和处理后图像。W为二维模板,通常为2*2,3*3区域,也可以是不同的的形状,如线状,圆形,十字形,圆环形等。 1.2、实现方法: (1)通过从图像中的某个采样窗口取出奇数个数据进行排序; (2)用排序后的中值取代要处理的数据即可; 1.3、matlab程序(zhongzhilvbo.m) clear; close all; I=imread('I3_256.bmp'); figure,imshow(I),title('原始图象'); J=imnoise(I,'salt&pepper',0.02); imshow(J);title('噪声干扰图像') X=J;a=3;b=3;%3*3的邻域 k=floor(a*b/2)+1;%求出中值,即k=5 [M,N]=size(X);%求出输入图像的行数M和列数N uint8Y=zeros(M,N); funBox=zeros(a,b); temp=zeros(a*b); %X(a:b,c:d)表示A矩阵的第a到b行,第c到d列的所有元素 for i=1:M-a for j=1:N-b funBox=X(i:i+a,j:j+b);%把图像中的一个3*3领域赋给funbox temp=funBox(:);%把领域中的每个元素赋给temp tempSort=sort(temp);%对其中的像素值进行排序 Y(i,j)=tempSort(k);%将模板的中值(k=5)赋给模板中

均值滤波

实验二 均值滤波 一.实验目的 1.掌握在数据表中找最大、最小数的方法。 2.学会子程序的使用方法,参数传递的方法, 掌握分支程序,循环程序的设计方法。 3.熟悉Tddebug 调试环境和Turbo Debugger 的使用。 二.实验内容 均值滤波算法:对N (2 < N < 256)个无符号数,去掉一个最大值、最小值,然后求其平均值, 其中最大值,最小值的査找通过分别调用子程序SMAX 和SMIN 实现。 三.程序流程图 主程序流程图如图1-2-1所示,SMAX 子程序流程图如图1-2-2所示, SMIN 子程序流程图与SMAX 类似。 四.参考源程序 STACK1 SEGMENT STACK DB 100 DUP(?) STACK1 ENDS DATA SEGMENT A VERAGE DB ? NUM DB 12H,34H,56H,78H,90H,21H,43H,65H,87H,09H L_NUM EQU $-NUM

MAXNUM DB ? MINNUM DB ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK1 START PROC FAR PUSH DS ;标准序 XOR AX, AX PUSH AX MOV AX, DATA MOV DS, AX MOV SI, OFFSET NUM ; 求最大数MOV BX OFFSET COUNT 的意思就是把COUNT这个变量的偏移地址 送给BX这个寄存器。 MOV DI, OFFSET MAXNUM MOV CX, L_NUM CALL SMAX MOV SI, OFFSET NUM ;求最小数 MOV DI, OFFSET MINNUM MOV CX, L_NUM CALL SMIN MOV CX, L_NUM ;求N 之和 XOR 异或AX, AX MOV SI, OFFSET NUM NEXT: ADD AL, [SI] ADC AH, 0 INC SI LOOP NEXT MOV BH, 0 ;减去最大值 MOV BL, MAXNUM SUB AX, BX MOV BL, MINNUM ;减去最小值 SUB AX, BX MOV CL, L_NUM ;求均值 SUB CL, 2 DIV CL MOV A VERAGE,AL ;平均值存放在A VERAGE中 RET

快速中值滤波及c语言实现

快速中值滤波及c语言实现 学生姓名:刘勇学号:6100410218 专业班级:数媒101 【摘要】本文讨论了用c语言在微机上实现中值滤波及快速算法,在程序设计的过程中充分考虑到程序运行的时间复杂度和空间复杂度的问题.解决了由于图像太大而内存不够的问题,运用对程序运行时的方法,得出在PENTIUM-S100MHz 上中值滤渡的一般算法运行4.23秒.而快速算法运行2 58秒。 【关键词】c语言;中值滤波;快速算法 1 引言 中值滤波是涂基发明的一种非线性信号处理技术,对抑制图像的噪声非常有效,在二维形式下,中值滤渡器是一个古有奇数个像素的滑动窗口,窗口正中的象素的灰度值用窗口内各个象素的中值代替窗口的中值为窗口中象素按大小顺序排列后处于中间位置的象素;本文讨论中值滤的一般算法并比较其运算速度。 2 用C语言实现算法的若干问题 在设计算法编制程序的时候,我们充分考虑到程序运行的时间复杂度和空间复杂度问题,在解决问 题的前提下,使算法尽量简单,使程序运行占有的空间尽量的小,这样来减少不必要的时问浪费和空间浪费,从而太大的提高程序执行的效率。 首先考虑到的内存问题。由于在本文算法中用的图像是512+512 8bit,这就存在一个内存不够大一整幅图像不能一次性调入的问题。为了解受此问题,可以只开辟一个3"512的缓冲区n,将原图像采用分批调入缓冲区,使内存不够的问题得到了圆满的解决。 另外为了对中值滤波的快速算法和普通算法进行精确的比较,采用对程序运行计时的方法,并精确计算每个算法运行的时间,使得出的结论更可靠。 3 中值滤波算法的C语言程序实现 本算法采用对开辟的3*512的缓冲区从左到右依次形成一个3*3的窗口.然后将此3*3的窗口放 人一个一维数组中,调用求中值子函数.通过排序得出中值,当此中值不等于窗口中间位置的象素时.用此中值来代替窗VI中间位置的象素灰度值.若此缓冲区处理完毕后,将缓冲区的第一行存入新建的文件中,将第二、第三行分别向上移动一行,若存人新建的文件中的行数小于或等于511(即这样处理的行 数小于或等于511),则从原文件中调入一行作为缓冲区第三行,按上述方法进行直到处理的总行数等于511为止,最后,将缓冲区的第二、三行存人新建的文件,程序流程框图如图1 4 中值滤波快速算法的C语言程序实现 本算法充分利用了上一次处理的结果.采用迭代,逐次逼近的方法得到本次的中值,在一行处理完毕后转人下一行也采用走S型的方法.这样除第一个窗口采用了一伏排序得到中值外,其它的窗口都利 用上伏的窗口的象素删除无用的3个象素后再加人新的3个象素,利用迭代的方

均值滤波 中值滤波 直方图均衡

实验报告 一.实验目的 对图像进行空域增强,实现均值滤波、中值滤波、直方图均衡。 二.实验内容 对加入椒盐噪声的图像进行均值滤波、中值滤波,对图像实现直方图均衡,通过改变图像的直方图来改变图像中像素的灰度,以达到图像增强的目标。 三.实验原理 均值滤波的原理 均值滤波是典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该模板包括了其周围的临近像素(以目标象素为中心的周围8个象素,构成一个滤波模板,即去掉目标象素本身)。再用模板中的全体像素的平均值来代替原来像素值。 均值滤波也称为线性滤波,其采用的主要方法为邻域平均法。线性滤波的基本原理是用均值代替原图像中的各个像素值,即对待处理的当前像素点(,) x y,选择一个模板,该模板由其近邻的若干像素组成,求模板中所有像素的均值,再把该均值赋予当前像素点(,) u x y,即 x y,作为处理后图像在该点上的灰度值(,)

1 (,)(,)u x y f x y m = ∑,m 为该模板中包含当前像素在内的像素总个数。 中值滤波的原理 中值滤波是一种非线性滤波,由于它在实际运算过程中并不需要图像的统计特性,所以比较方便。中值滤波首先是被应用在一维信号处理技术中,后来被二维图像信号处理技术所应用。在一定的条件下,可以克服线性滤波器所带来的图像细节模糊,而且对滤除脉冲干扰及图像扫描噪声最为有效。中值滤波的目的是保护图像边缘的同时去除噪声。 在一维的情况下,中值滤波器是一个含有奇数个像素的窗口,在处理之后,将窗口正中的像素灰度值用窗口内各像素灰度值的中值来代替。设有一个维序列 12,,...n f f f ,取窗口长度为奇数m ,对此序列进行中值滤波,就是从输入序列中 相续抽出m 个数,,,,,i v i i v f f f -+,其中为窗口的中心值(1)/2v m =-,再将这 m 个点的数值按其数值大小排列,取其序号为正中间的那个数作为滤波输出。中 值滤波表达式为: {}v i i v i i f f f Med F +-=,,,, 对二维序列{X i,j }的中值滤波,滤波窗口也是二维的,但这种二维窗口可以有各种不同的形状,如线状、方形、圆形、十字形、圆环形等。二维中值滤波可表示为: {}为滤波窗口,A x Med F j i A j i ,,= 在实际使用窗口时,窗口的尺寸一般先用33?再取55?逐渐增大,直到其滤波效果满意为止。 由于中值滤波是非线性运算,在输入和输出之间的频率上不存在一一对应关系,故不能用一般线性滤波器频率特性的研究方法。设G 为输入信号频谱,F 为输出信号频谱,定义F G H /=为中值滤波器的频率响应特性,实现表明H 是与G 有关,呈不规则波动不大的曲线,其均值比较平坦,可以认为信号经中值滤波后,传输函数近似为1,即中值滤波对信号的频域影响不大,频谱基本不变。

相关文档