中值滤波与均值滤波
四川大学电气信息学院微机原理与接口技术
实验报告
实验名称:中值滤波与均值滤波
实验地点:二基楼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]
CMP AL,TADA1[SI+1] ;比较相邻两数据的大小
JLE L1 ;若前者小于等于后者,跳转到L1 XCHG AL,TADA1[SI+1] ;若前者大于后者,则两者交换XCHG AL,TADA1[SI]
L1:
INC SI
LOOP RECMP
POP CX
RET
MP ENDP
CODES ENDS
END START
2、均值滤波:
(1)置入数据:
DATAS SEGMENT
TADA2 DB 65,72,33,84,43
N EQU $-TADA2
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
AND TADA2[SI],0 ;将最小值清零
AND TADA2[SI+N-1],0 ;将最大值清零MOV CX,N
MOV AL,TADA2[SI]
MOV AH,0
MOV BL,N-2
SUM:
ADD AL,TADA2[SI+1] ;剩余数据求和
INC SI
LOOP SUM
DIV BL ;求平均值
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,TADA2[SI]
CMP AL,TADA2[SI+1] ;比较相邻两数据的大小
JLE L1 ;若前者小于等于后者,跳转到L1
XCHG AL,TADA2[SI+1] ;若前者大于后者,则两者交换XCHG AL,TADA2[SI]
L1:
INC SI
LOOP RECMP
POP CX
RET
MP ENDP
CODES ENDS
END START
(2)键入数据:
DATAS SEGMENT
D1 DB 'please input numbers',0DH,0AH,'$'
D2 DB 30 DUP (0)
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX
LEA DX,D1
MOV AH,9
INT 21H
LEA SI,D2
MOV BX,0
J1:
MOV AH,1
INT 21H
CMP AL,0DH
JZ J2
SUB AL,30H
MOV [SI],AL
INC SI
INC BX
LOOP J1
J2:
MOV CX,BX
DEC CX
MOV DX,0001 AG:
CALL MP
INC DX
LOOP AG
MOV SI,0
AND D2[SI],0 ;将最小值清零
DEC BX
AND D2[SI+BX],0 ;将最大值清零
DEC BX
XOR AX,AX
MOV AL,BYTE PTR D2[SI]
MOV CX,BX
SUM:
ADD AL,D2[SI+1] ;剩余数据求和
INC SI
LOOP SUM
DIV BL
ADD AL,30H
MOV DL,AL
MOV AH,2
INT 21H
ADD AH,30H
MOV DL,AL
MOV AH,2
INT 21
.
MOV AH,4CH
INT 21H
MP PROC
PUSH CX
MOV CX,BX
SUB CX,DX
MOV SI,0
RECMP:
MOV AL,D2[SI]
CMP AL,D2[SI+1] ;比较相邻两数据的大小
JLE L1 ;若前者小于等于后者,跳转到L1
XCHG AL,D2[SI+1] ;若前者大于后者,则两者交换
XCHG AL,D2[SI]
L1:
INC SI
LOOP RECMP
POP CX
RET
MP ENDP
CODES ENDS
END START
四、运行结果:
1、中值滤波:
2、均值滤波:
五、两种滤波方式的优缺点及改进方式
1、优缺点:均值滤波适用于比较稳定的数据处理,可以平滑图像,速度较
快,算法简单,但是没有办法去掉噪声,只能稍微减弱它。中值滤波在
平滑脉冲噪声方面非常有效,可以保护图像尖锐的边缘,能用合适的点
来代替污染点的值,所以效果比较好。
2、改进方式:可以将均值滤波改为加权均值滤波。
六、实验体会
本次试验让我知道了中值滤波和均值滤波的工作原理和计算方法。在编程过程中,加深了对冒泡排序法的认识和理解,能够掌握冒泡排序的编程方
法。调试程序过程中,利用debug单步执行的方法一步一步检查程序出问题的地方时,我感觉自己读程序的能力还有待提高。