中值滤波与均值滤波

中值滤波与均值滤波
中值滤波与均值滤波

四川大学电气信息学院微机原理与接口技术

实验报告

实验名称:中值滤波与均值滤波

实验地点:二基楼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单步执行的方法一步一步检查程序出问题的地方时,我感觉自己读程序的能力还有待提高。

相关主题
相关文档
最新文档