MedianBlur(中值滤波/百分比滤波器)

转自:MedianBlur(中值滤波/百分比滤波器)

文件中包含:Median Filter in Constant Time.pdf

            A fast median filter using AltiVec.pdf
            ctmf.c
            ctmf.h

参考资料下载: http://files.cnblogs.com/Imageshop/MedianFilter.rar

Median Filter in Constant Time.pdf这篇文章的算法很简单明了,算法的时间复杂度为o(1)对半径基本不敏感算法的主要优化思想粗分直方图细分直方图,利用高位和低位缩小寻中值的时间。当然,这个算法对搞图像效果的朋友来说更实际,因为一般实际需求不会要特大半径的中值模糊。

通过编码和速度比较,在小半径时,算法的速度比不上PS,但是在大半径,比如100的时候,针对4000*3000*24的图像,上述算法用时大概在7S,PS要25S。

稍微更改下(修改的应该是利用直方图求中值的函数,以得到百分比滤波器),就可以实现任意百分比算法了,中值可以看成是50%百分比的特例,PS的最大值(100%)最小值(0%)算法也可以利用这个实现了。



算法的有些细节还在琢磨中,不过基本已经弄懂了,算法执行的耗时部分还是在直方图更行那一块。

C/C++ code
?
1
2
3
4
5
6
7
static inline void histogram_add( const uint16_t x[16], uint16_t y[16] )
{
    int i;
    for ( i = 0; i < 16; ++i ) {
        y[i] += x[i];
    }
}
inline关键词为内联函数的的关键词,CSDN上面有说明。

类似这个函数建议把循环展开,速度能提高不少。

还有我在实际实践的时候(我用的是C#,没有inline的),发现如果把这个子函数直接写到主函数中,速度反而会下降,通过反编译分析原因,应该是如果调用子函数,虽然有一些进栈和出栈的的操作,但是可以充分利用访问寄存器比访问内存快很多的特点来优化速度。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值