四川大学电气信息学院
微机原理与接口技术
实验报告
实验名称: 中值滤波与均值滤波
实验地点: 二基楼A514
年级: 2014级
姓名: 宋雅婕
学号: 20
实验时间: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单步执行的方法一步一步检查程序出问题的地方时,我感觉自己读程序的能力还有待提高。