博主之前的博客中介绍了数种保边滤波算法,它们滤波器设计的共性就是,同时考虑空间信息和灰度信息,这次要介绍的选择性滤波也是一样。选择性滤波是在一定空间领域内,选择灰度值范围进行加权平均(这一点和surface blur是一样的,与surfaceblur的不同是,surface blur是根据灰度值是否接近计算权重,选择性模糊是根据像素数量计算权重)。所以选择性模糊的一大好处就是,知道领域的直方图就可以完成滤波计算了,核心问题变成直方图统计之后,算法复杂度就大大降低了,在领域半径急剧增加时,可以体现优势。
算法挺好理解的,直接上代码吧:
void Calc(unsigned short *Hist, int Intensity, unsigned char *&Pixel, int Threshold) { int K, Low, High, Sum = 0, Weight = 0; Low = Intensity - Threshold; High = Intensity + Threshold; if (Low < 0) Low = 0; if (High > 255) High = 255; for (K = Low; K <= High; K++) { Sum += Hist[K] * K; Weight += Hist[K]; } if (Weight != 0) *Pixel = Sum / Weight; }
算法抹平了局部小对比度