用C语言在微机上实现中值滤波及其快速算法
维普资讯 http://doc.xuehai.net
19 9 9年 l 2月
江西教育学院学报 (自然科学 )
J un l fJa o ra o jn| l t f E u ala N tr  ̄tue o d et ( aud s t o
De l 9 c 99
第 2卷第 6期 0
V 2 N0 6 0
1 6
c语言在微机上实现中值滤波及其快速算法
熊 金泉挫壁 7
3 10 ) 40 0
1
c
( .江西教育学院数汁系,西南昌 3 0 2;2 1江 3 0 9 .南方冶金学院,西赣州江
【摘要 1本文讨论了用 c语言在微机上宴现中值滤波噩快速算法,在程序设计的过程中克舟考虑到程序运行的时间复杂度和空间复杂度的问题 .击丁由于图象太大而内存不够的问题,解 运用对程序运行时的方法,出在 P N I M— 10 z上中值滤渡的一般算法运行 42得 E TU S 0 MH .3秒 .而快速算法远行 25 8秒
【键词]关
.
j
焦些竺 鲞;! !
【献标识码] 文 A
,l 1_ . n
U
\
[图分类号】 P 1中 T 32
【章编号1 0 5 3 3 (9 9 0— 03 0文 10— 68 19 )6 0 1 4
1 I言
中值滤波是涂摹发明的一种非线性信号处理技术,对抑锚出象的噪声非常有效,二维形式下,在中值滤渡器是一个古有奇数个象素的滑动窗口,口正中的象素的灰度值用窗口内各个象素的中值代替窗窗口的中值为窗口中象素按大小顺序排列后处于中问位置的象素;本文讨论中值滤嫒的一般算法并比较其运算速度。
2用 C语言实现算法的若干问题
在设计算法编制程序的时候,们充分考虑到程序运行的时间复杂度和宅问复杂度问题,解决问我在题的前提下,算法尽量简单,程序运行占有的空间尽量的小,样来减少不必要的时问浪费和空问使使这浪费,而太大的提高程序执行的效率。从 首先考虑到的内存问题。由于在本文算法中用的图象是 5 2 5 2 8 i,就存在一个内存不够大 1+ 1 b'这 t整幅图象不能一次性调入的问题。为了解受此问题,以只开辟一个 3 5 2的缓冲区 n将原图象采可"1,用分批调入缓冲区,内存
不够的问题得到了圆满的解决。使 另外为了对中值滤波的快速算法和普通算法进行精确的比较,用对程序运行计时的方法,精确采并计算每个算法运行的时间,得出的结论更可靠。使
一
3中值滤波算法的 C语言程序实现本算法采用对开辟的 3 1 5 2的缓冲区从左到右依次形成一个 3 3的窗口 .然后将此 3 3的窗口放 * *人一个一维数组中,用求中值子函数 .过排序得出中值,调通当此中值不等于窗口中闯位置的象素时 . 用此中值来代替窗 V中间位置的象素灰度值 .此缓冲区处理完毕后,缓冲区的第一行存^新建的文 I若将件中,第二、三行分别向上移动一行,存人新建的文件中的行数小于或等于 5 1即这样处理的行将第若 1(数小于或等于 5 1,从原文件中调^一行作为缓冲区第三行,上述方法进行直到处理的总行数等于 1 )则按 5 1为止,后,缓冲区的第二、行存人新建的文件, 1最将三程序流程框图如图 1。
4中值滤波快速算法的 C语言程序实现本算法充分利用了上一次处理的结果 .用迭代,次逼近的方法得到本次的中值,一行处理完采逐在
收稿日期 l1 9— 9 0 99 0—7
作者简介_熊金泉 ( 9 3,, 16 -)男江西南昌人,师,讲主要从事计算机算法理论研究。