delphi图像处理中的中值滤波灰度分组统计法

delphi图像处理中的中值滤波灰度分组统计法

ID:14266885

大小:285.00 KB

页数:10页

时间:2018-07-27

delphi图像处理中的中值滤波灰度分组统计法_第1页
delphi图像处理中的中值滤波灰度分组统计法_第2页
delphi图像处理中的中值滤波灰度分组统计法_第3页
delphi图像处理中的中值滤波灰度分组统计法_第4页
delphi图像处理中的中值滤波灰度分组统计法_第5页
资源描述:

《delphi图像处理中的中值滤波灰度分组统计法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、《Delphi图像处理》系列以效率为侧重点,一般代码为PASCAL,核心代码采用BASM。   《C++图像处理》系列以代码清晰,可读性为主,全部使用C++代码。   尽可能保持二者内容一致,可相互对照。    本文代码必须包括文章《Delphi图像处理--数据类型及公用过程》中的ImageData.pas单元。    这是《Delphi图像处理--中值滤波》一文的改进版。亦可参见《C++图像处理--中值滤波》。   中值滤波是图像处理中常用的一种噪声滤波方法。传统的图像中值滤波代码采用排序方法实现,处理速度主要取决于排序算法,但无论什么排序算法,总离不开大量的元素比较、交换或移动,而这些

2、恰好是当前计算机处理的“弱项”(有经验的程序员都知道,计算机数据处理中,比较、转移、交换和频繁的数据移动比直接的算术运算和逻辑运算耗时多了),再加上没有一种好的排序算法能同时适应不同滤波半径的数据排序速度,所以在传统中值滤波实现代码中多使用选择排序、冒泡排序或者直接排序等简单排序算法,高级点的如快速排序法用在中值滤波代码中往往会使处理速度更慢。对于半径为1的中值滤波倒是有一种较好的排序算法,我在《Delphi图像处理--中值滤波》一文中实现过,处理速度还是较快的。   既然排序过程是图像中值滤波处理的瓶颈,能不能抛开它,用其它手段实现呢?这就是本文要探讨的问题。有朋友可能会有疑问,不排序怎

3、么获取中间值呢,是否采用网上有些文章介绍的近似值来代替?不,本文介绍的方法决不是近似中间值,而是的的确确的“精确”中间值。   图像中值滤波中的中间值。在统计学中叫做中位数,是平均数指标的一种。平均数指标按统计的复杂程度可分为简单平均数和加权平均数,所谓简单平均数就是对统计总体的每个个体进行累计计算后求得;而加权平均数则是先对统计总体的所有个体进行分组,然后以各个组的大小作为权数后进行累计计算所得。中位数既然是平均数指标的一种,当然也存在两种计算方法。加权中位数和加权算术平均数的区别在于后者是对各个分组用权数相乘进行累积后除以总体个数,而前者只需要对各组权数进行累积后除以2,累积权数大于或

4、等于这个数的组的值就是中位数。传统中值滤波实现代码中采用的排序手段实质就是简单中位平均数统计方法,而本文要介绍的是采用分组加权的方法来获取中位平均数,即中值滤波的中间值。   采用分组加权统计方法的前提条件是对无限统计总体进行有限的分组,例如,人口年龄统计,就是首先确定各个年龄段,这个年龄段可以是一岁、五岁、十岁等。而图像像素的R、G、B值在0--255之间,正好符合有限分组的前提条件。说到这里,很多人可能已经明白我要表达的意思了:   1、按R、G、B分别定义一个256大小的灰度统计数据;   2、将图像像素总体的每个个体像素的R、G、B值进行归类;   3、确定累积中间值权数的大小; 

5、  4、从数组左端或者右端开始权数累计,累积到大于或等于中间值权数的那个灰度组就是中间值!   从前面几个步骤不难看出,前3个步骤就是图像处理中灰度统计的分类方法,第4个累积步骤与灰度统计累积计算有2个不同点,一是灰度统计累积的是权数*灰度,而这里只累积灰度;二是灰度统计累积需要全部完成,而中值累积只要达到中间值权数那个组就可以终止。在这4个步骤中,前3个步骤是相当快的(实际上只是第二个步骤),因为其中既无乘除运算,也没有比较转移,更没有元素交换或移动等动作。而制约数据处理速度的瓶颈就在第4步,因为对每个像素都必须分别按R、G、B通道对一共768个元素大小的数据进行累积,哪怕是每个通道除了

6、2个加法运算和唯一的一次比较判断外,没有其它运算,也不需要每次都必须累积到位,但仍然是比较耗时的,不过本文在代码实现过程中,尽可能地作了一些弥补。最后结果同排序方法比起来,可算是相当快捷了,而且滤波半径越大,差距越明显,几十倍的差距绝不是天方夜谭!就算是同我前面所说的半径为1的改进排序算法比较来,大多数情况下,也略有胜出。[delphi]viewplaincopyprint?1.procedure MedianValue(var Dest: TImageData; const Source: TImageData;  2.  MedianGray, Size, Stride: Intege

7、r);  3.var  4.  buffer: array[0..767] of Integer;  5.  redAddr, greenAddr, blueAddr, delta: Integer;  6.  redOff, greenOff, blueOff: Integer;  7.  width, height, dstOffset, srcOffset: Integer;  8.  median, rowOff

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。