博主之前的博客中介绍了数种保边滤波算法,它们滤波器设计的共性就是,同时考虑空间信息和灰度信息,这次要介绍的选择性滤波也是一样。选择性滤波是在一定空间领域内,选择灰度值范围进行加权平均(这一点和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;
}

算法抹平了局部小对比度

image

发表评论

邮箱地址不会被公开。 必填项已用*标注