[快速阅读十三] 11x11大小的中值滤波算法相关数据推导表。
小半径的中值在论文《A fast median filter using AltiVec》中有提到优化的方式,目前在opencv中3*3和5*5的都是采用了类似的方法,而在【opencv】中值滤波代码分析及优化一文中作者给出了7*7以及9*9的相关列表,实际测试SSE版本的7*7相对于大半径的SSE中值大概有4倍提速,9*9的版本大概有1.8倍提速,如果是AVX版本则7*7的提速有6倍,9*9的提速比为4倍,所以还想继续看看11*11的版本会有多大的差异,根据论文里的公式:

当N=11时, M = 5,对于k=1到5时,按照类似【opencv】中值滤波代码分析及优化一文的方式,这5个相关的图分别如下所示:


这个配合原始论文的5*5的以及上面提到的论文的7*7及9*9的基本就覆盖了小半径的范畴了。
实际测试呢,11*11的这个和任意半径那种方法的速度差异就不大了,对于SSE优化,反而是任意半径的速度要快些了,不过AVX版本速度依旧比任意半径的速度要快50%左右。
这算法的里AVX一次性可处理32个像素,确实就和SSE的差距拉大了。
对于浮点数,实际测试,11*11的中值还是不要用这种方法了,包括9*9的也不要用,还不如直接用我💰几篇博文讲的那种纯C++的处理方式。 因此哪里SSE一次性只能处理4个对象了。
注意:这个论文的方法不适合用普通的C++实现,太慢了,甚至在5*5的时候就比用任意半径那种方法的C++代码慢了。
浙公网安备 33010602011771号