图像的中值滤波,就是在以某一像素为中心的n阶像素矩阵中,找出R、G、B各分量的中间值来分别替代该像素的RGB值,从而达到对图像噪声滤波的目的。这里的中间值并非像素矩阵R、G、B各分量的的算术平均值,而是像素矩阵R、G、B各分量排序后的中位数值。
下面是Delphi图像中值滤波的实现代码:
由于中值滤波要对每个像素都采用n阶矩阵排序的方法找出其R、G、B分量的中间值,因此该操作是非常耗时的。最大的耗时主要是排序过程,尽管本文中值滤波过程用了BASM代码,但这个滤波过程还是较慢,显然排序算法是提高操作速度的关键,我试验了多种排序算法,都不理想,没办法,只好将最常用的3阶中值滤波排序进行了改进,所以,本文中值滤波过程处理图像的3阶中值滤波速度相对还是较快的。
文章中所用数据类型及一些过程见《Delphi图像处理 -- 数据类型及内部过程》和《Delphi图像处理 -- 图像像素结构与图像数据转换》。
尽管我十分努力,但水平有限,错误在所难免,欢迎指正和指导。邮箱地址:
maozefa@hotmail.com
本文代码于2010.5.20重新修订过。增加了拷贝形式的调整过程和响应回调函数的调整过程。滤波参数也由以前的Size改为Radius,主要是防止偶数长度。代码中的ExecuteAbort过程和ExecuteProc过程见《Delphi图像处理 -- 图像像素结构与图像数据转换》。
另外,这次修订重写了半径大于1(即3*3以上的)的中值滤波排序代码,以前是对全部像素数据进行选择排序,现在改为插入排序,只比较小于中值的数据,大于或等于中值的数据直接忽略,因为我们需要只是的中间值,对于大于中间值的数据排序无疑是浪费时间!如此节省了不少时间,处理时间比以前平均节省了20%。不过还是比较耗时,我仔细分析过,除非改变算法,如改矩阵为十字型进行滤波,否则,速度难以得到大幅度提高。
分享到:
相关推荐
数字图像处理-空间滤波-线性滤波-平滑滤波-统计排序滤波-源码 中值滤波也叫做统计排序滤波,能有效的去除高斯噪声。 全部是自己写的,多年珍藏。
编程实现灰度图像的中值滤波平滑处理。滤波模板的大小自定(可为3×3、5×5、7×7、15×15等)。实验图像可从提供的实验图像集中的噪声图像中选取。 思考题:(选做) 编程实现灰度图像的均值滤波平滑处理;也可尝试...
图像处理大集合带GUI界面_包括中值滤波_最大化滤波_最小滤波_中值滤波_自适应滤波_prewitt算子_sobel算子_Robert算子_canny算子边缘提取_源码
均值滤波和中值滤波在matlab中的应用及其matlab代码
用于数字图像处理的滤波方法-中值滤波,可以使图像变得平滑。
图像处理的滤波过程---使用中值滤波,滤波后的图像干扰较小
VC平台,绝对能运行。带图片,利用描点方式,先将jpg文件解压成bmp文件。利用中值滤波都方法将原图滤波后显示,逐点描图,便于初学者学习。
基于MFC的对话框的中值滤波程序 方便好用
针对图像处理中一些噪声干扰,现提出一种中值滤波改进算法来滤波噪声干扰。
图像处理-读取bmp图像均值滤波-C++
数字图像处理 均值中值滤波 北航实验课件
图像处理-读取bmp图像均值滤波-C++
实现图像中值滤波、均值滤波等图像处理功能
111行C语言代码实现图像中值滤波,注释详细 以下凑字数 for(w=0;w;w++) { for(l=0;l;l++) { fputc(result[w][l],fq); fputc(result[w][l],fq); fputc(result[w][l],fq); } } ...
matlab邻域中值滤波,里面有邻域中值滤波的两种情况处理方式,不超过边界和超过边界用0填充处理,未用matlab中可以直接调用的滤波函数,自己编写的中值滤波函数。
dsp中值滤波 dsp中值滤波 dsp中值滤波 dsp中值滤波
中值滤波中值滤波中滤波中中值中值滤波滤波值中值滤波滤波
数字图像处理 中值滤波 C语言 数字图像处理 中值滤波 C语言
verilog实现中值滤波算法及仿真,可以产生仿真波形,在quartusII下创建,该中值滤波模块可以移植到视频监控系统上,该顶层模块接口可以直接连接传感器OV系列。
经典的中值滤波算法要求对窗口内的像素进行排序,当窗口尺寸较大时,处理速度很慢,不能满足计算机对图像处理的实时性要求。本文探讨了中值滤波的快速算法,旨在提高中值滤波处理速度。结果表明,快速算法可是处理...