SIMD计算median filter(中值滤波向量化计算)

1.median filter

是一种非线性平滑技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值.
中值滤波是基于排序统计理论的一种能有效抑制噪声的非线性信号处理技术,中值滤波的基本原理是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代替,让周围的像素值接近的真实值,从而消除孤立的噪声点。方法是用某种结构的二维滑动模板,将板内像素按照像素值的大小进行排序,生成单调上升(或下降)的为二维数据序列。二维中值滤波输出为g(x,y)=med{f(x-k,y-l),(k,l∈W)} ,其中,f(x,y),g(x,y)分别为原始图像和处理后图像。W为二维模板,通常为33,55区域,也可以是不同的的形状,如线状,圆形,十字形,圆环形等。

2.SIMD函数定义

def max(a,b,c):
  return the max value of a,b,c;
def med(a,b,c):
  return the median value of a,b,c;
def min(a,b,c):
  return the min value of a,b,c;

3.Median filter的向量化计算

对于一个3x3的窗口计算中值滤波,该窗口如下所示:

SIMD计算median filter(中值滤波向量化计算)_第1张图片
image.png

执行如下操作,完成中值滤波的计算:

1.) x=min(max(a,b,c),max(d,e,f),max(g,h,i))
2.) y=med(med(a,b,c),med(d,e,f),med(g,h,i))
3.) z=max(min(a,b,c),min(d,e,f),min(g,h,i))
median_value  = med(x,y,z)

4.算法解释

中值滤波就是寻找9个数中的一个数,有如下假设:

a
  • 经过公式1的计算,排除了两个值,最大的值和必然不是中值的比较大的值(至少大于5个值,而中值应该恰好大于4个值)。剩余7个数,得到了其中一行的最大值
  • 经过公式3的计算,排除了两个值,最小的值和必然不是中值的比较小的值(至少小于5个值,而中值应该恰好小于4个值),剩余5个数,得到了其中一行的最小值
  • 现在有5个值,其中有三个数是三个行的中值,还有两个数分别是某行的最大值和最小值。中值应该在这5个数中(排除法)。
  • 经过公式2的计算,在5个数中,中值应该大于2个值并且小于2个值,如果选三个中值中的最大值,则该值大于三个值,如果选三个中值中的最小值,该值小于三个值,都排除。最后剩下三个值,中值位于这三个值中。
  • 那中值应当是这三个值的中值。

算法另一种解释

  • max(a,b,c),max(d,e,f),max(g,h,i)得到了三个行每行的最大值
  • max(max(a,b,c),max(d,e,f),max(g,h,i)) 得到9个数的最大值,排除
  • med(max(a,b,c),max(d,e,f),max(g,h,i))得到的数,将会大于5个数,本行的两个数与最小值max那行的三个数,而中值应当大于4个数,排除。
  • 经过排除,唯有min(max(a,b,c),max(d,e,f),max(g,h,i))可能有中值。
  • 同理,继续排除maxmin(a,b,c),min(d,e,f),min(g,h,i))排除了最小值和比较小的不为中值的值。
  • 排除了4个数不可能为中值,剩余5个数,中值位于此范围
  • max(med(a,b,c),med(d,e,f),med(g,h,i))得到了每行中值的最大值,此值大于三个数,而中值应当大于2个数,排除
  • min(med(a,b,c),med(d,e,f),med(g,h,i))得到了每行中值的最小值,此值小于三个数,而中值应当大于2个数,排除
  • 因此中值只能位于med(max(a,b,c),max(d,e,f),max(g,h,i))
    -此时只有三个数,因为是对称排除,此时中值应当大于一个数,小于一个数,因此med()

你可能感兴趣的:(SIMD计算median filter(中值滤波向量化计算))