[db:标题]

摘要:因有关需求,最近要弄个5*5的浮点版本的中值滤波, 而且希望效率能做到极致。感觉这个事情不是随手搞定嘛,因为5*5的字节版本的中值已经有模版了,改为浮点的大差不差的,没有啥问题。
因有关需求,最近要弄个5*5的浮点版本的中值滤波, 而且希望效率能做到极致。感觉这个事情不是随手搞定嘛,因为5*5的字节版本的中值已经有模版了,改为浮点的大差不差的,没有啥问题。   确实如此,直接把早期的自己版本代码弄过来,改下相关的数据类型和函数,功能一下子就出来了,而且效果也不俗。   在【算法随记三】小半径中值模糊的急速实现(16MB图7.5ms实现) + Photoshop中蒙尘和划痕算法解读中,曾经提到对于5*5的中值,理论上需要131次比较,但是我现在找不到这个131的数据的来源和依据了。   这几天看Opencv的代码,在其medianFilter.cl以及median_blur.simd.hpp里的都有类似的比较,具体如下:   这里的op算子就是比较算子,一共有113处。   在https://github.com/ravkum/medianFilter/blob/main/src/medianFilter.cl中,也有类似的算子,如下所示:    这里只有99个算子。     所以优化的第一步就是用这99个算子的方案代替原先我收集的131个的方案,这个就会有25%左右的提速了。   而且测试这99算子的结果和原先的131个以及opencv的113个算子的结果是一样的。   而我们在百度搜索5*5中值滤波快速算法,可以得到以下的信息:     5x5中值滤波的快速算法旨在减少标准排序方法的高计算复杂度,通过优化排序或利用数据结构来加速中值查找。以下是一些常见的快速实现思路:       ‌行-列排序优化‌:先对5x5窗口的每一行进行排序,确保每行有序;然后对每一列排序,使列内元素有序。经过此处理,窗口被分为四个象限,中心元素通常接近中值,从而减少比较次数。
阅读全文