1、四 川 大 学 电 气 信 息 学 院微机原理与接口技术实验报告实验名称: 中值滤波与均值滤波 实验地点: 二基楼 A514 年 级: 2014 级 姓 名: 宋雅婕 学 号: 2014141443030 实验时间:2016 年 5 月 27 日一、 实验内容1. 在数据段设变量数组 TADA1 和 TADA2,并存入假设的两组采样值作为某一采样周期的采样值。 设计中值滤波程序求出测量值。 设计均值滤波程序求出测量值。 每个程序应能将结果显示在屏幕上。 在计算机上调试程序,并获得正确结果。二、 程序框图1. 均值滤波: 开始结束2. 中值滤波:开始结束用冒泡法将数据从小到大排列删除最大值和最小
2、值剩余数值求和取平均值结果输出在屏幕上用冒泡法将数据从小到大排列取出位于中间位置的值结果输出在屏幕上三、 程序清单1、 中值滤波:DATAS SEGMENTTADA1 DB 65,72,33,84,43N EQU $-TADA1DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATASSTART:MOV AX,DATASMOV DS,AX ;给DS段赋值MOV CX,N-1 ;设置N-1轮比较次数MOV DX,1 ;设置比较的轮次AG:CALL MP ;调用子程序INC DXLOOP AGMOV SI,0XOR AX,AX ;将AX清零MOV AL,TADA
3、1SI+(N-1)/2 ;取出中值MOV BL,10DIV BLPUSH AXADD AL,30HMOV DL,ALMOV AH,2INT 21H ;输出十进制数的高位POP AXADD AH,30HMOV DL,AHMOV AH,2INT 21H ;输出十进制数的低位MOV AH,4CHINT 21HMP PROC ;冒泡法(从小到大排列)PUSH CXMOV CX,NSUB CX,DXMOV SI,0RECMP:MOV AL,TADA1SICMP AL,TADA1SI+1 ;比较相邻两数据的大小JLE L1 ;若前者小于等于后者,跳转到L1XCHG AL,TADA1SI+1 ;若前者大于后
4、者,则两者交换XCHG AL,TADA1SIL1:INC SILOOP RECMPPOP CXRETMP ENDPCODES ENDSEND START2、 均值滤波:(1)置入数据:DATAS SEGMENTTADA2 DB 65,72,33,84,43N EQU $-TADA2DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATASSTART:MOV AX,DATAS MOV DS,AX ;给DS段赋值MOV CX,N-1 ;设置N-1轮比较次数MOV DX,1 ;设置比较的轮次AG:CALL MP ;调用子程序INC DXLOOP AGMOV SI,
5、0AND TADA2SI,0 ;将最小值清零AND TADA2SI+N-1,0 ;将最大值清零MOV CX,NMOV AL,TADA2SIMOV AH,0MOV BL,N-2SUM:ADD AL,TADA2SI+1 ;剩余数据求和INC SILOOP SUMDIV BL ;求平均值MOV BL,10 DIV BL PUSH AXADD AL,30HMOV DL,ALMOV AH,2 INT 21H ;输出十进制数的高位POP AXADD AH,30HMOV DL,AHMOV AH,2 INT 21H ;输出十进制数的低位MOV AH,4CHINT 21HMP PROC ;冒泡法(从小到大排列)
6、PUSH CXMOV CX,NSUB CX,DXMOV SI,0RECMP:MOV AL,TADA2SICMP AL,TADA2SI+1 ;比较相邻两数据的大小JLE L1 ;若前者小于等于后者,跳转到L1XCHG AL,TADA2SI+1 ;若前者大于后者,则两者交换XCHG AL,TADA2SIL1:INC SILOOP RECMPPOP CXRETMP ENDPCODES ENDSEND START(2)键入数据:DATAS SEGMENTD1 DB please input numbers,0DH,0AH,$D2 DB 30 DUP (0)DATAS ENDSCODES SEGMENT
7、ASSUME CS:CODES,DS:DATASSTART:MOV AX,DATASMOV DS,AXLEA DX,D1MOV AH,9INT 21HLEA SI,D2MOV BX,0J1:MOV AH,1INT 21HCMP AL,0DHJZ J2SUB AL,30HMOV SI,ALINC SIINC BXLOOP J1J2:MOV CX,BXDEC CXMOV DX,0001AG:CALL MPINC DXLOOP AGMOV SI,0AND D2SI,0 ;将最小值清零DEC BXAND D2SI+BX,0 ;将最大值清零DEC BXXOR AX,AXMOV AL,BYTE PTR D
8、2SIMOV CX,BXSUM:ADD AL,D2SI+1 ;剩余数据求和INC SILOOP SUMDIV BLADD AL,30HMOV DL,ALMOV AH,2INT 21HADD AH,30HMOV DL,ALMOV AH,2INT 21MOV AH,4CHINT 21HMP PROCPUSH CXMOV CX,BXSUB CX,DXMOV SI,0RECMP:MOV AL,D2SICMP AL,D2SI+1 ;比较相邻两数据的大小JLE L1 ;若前者小于等于后者,跳转到L1XCHG AL,D2SI+1 ;若前者大于后者,则两者交换XCHG AL,D2SIL1:INC SILOOP
9、 RECMPPOP CXRETMP ENDPCODES ENDSEND START四、 运行结果:1、 中值滤波:2、 均值滤波:五、 两种滤波方式的优缺点及改进方式1、优缺点:均值滤波适用于比较稳定的数据处理,可以平滑图像,速度较快,算法简单,但是没有办法去掉噪声,只能稍微减弱它。中值滤波在平滑脉冲噪声方面非常有效,可以保护图像尖锐的边缘,能用合适的点来代替污染点的值,所以效果比较好。2、改进方式:可以将均值滤波改为加权均值滤波。六、 实验体会本次试验让我知道了中值滤波和均值滤波的工作原理和计算方法。在编程过程中,加深了对冒泡排序法的认识和理解,能够掌握冒泡排序的编程方法。调试程序过程中,利用 debug 单步执行的方法一步一步检查程序出问题的地方时,我感觉自己读程序的能力还有待提高。