图像处理之快速均值模糊(Box Blur)

简介: 图像处理之快速均值模糊(Box Blur)

图像处理之快速均值模糊(Box Blur)



图像模糊的本质, 从数字信号处理的角度看,图像模糊就要压制高频信号保留低频信号,


压制高频的信号的一个可选择的方法就是卷积滤波。选择一个低频滤波器,对图像上的


每个像素实现低频滤波,这样整体效果就是一张数字图像更加的模糊,显示更少的细节信息。


传统的卷积模糊计算量巨大,程序效率比较低,基于滑动窗口的Box Blur是一种快速模糊方法,


其结果近似于卷积模糊的结果。我没证明过!



一:Box Blur数学原理


根据输入的半径R,计算起始2*R +1个像素的平均值, 作为第一个输出像素的结果,


公式可以表示为


像素 X0 =  其中K代表输入像素集合, i的取值范围为 i∈[-R, R]


然后计算每一行输出像素的值根据Xi = X0 + (K[index + R + 1] – K[index - R])



二:Box Blur的特征


Box Blur是一种快速的图像模糊技术, 相比于传统的卷积模糊,Box Blur可以更有效率的


完成对图像模糊, 模糊的程度取决一下三个输入参数,


1.      X方向上半径 H Radius


2.      Y方向上半径 V Radius


3.      迭代次数 Iteration number


在半径相同的情况下, 迭代次数越多,输出的图像就越模糊


在迭代次数相同的情况下, 像素半径越大, 输出的图像就越模糊


上述两者之间的不同是对图像的拉伸效果, 半径越大,对图像的拉伸效果越显著



Box模糊利用滑动窗口算法,从而简化了每次计算平均值带来额外开销。



从数字图像和信号处理的角度看, Box Blur是一种不折不扣的低通滤波, 但是它并不


是真正的高斯低通滤波, 不是卷积实现, 因而速度更快。


当水平和垂直半径分别为1 时,是典型的3*3 的矩阵卷积


1, 1, 1


1, 1, 1


1, 1, 1


计算, 相比于传统的卷积计算之后,要进行归一化处理,box计算过程中已经完成像素平均,


无需归一化处理。



三:基于滑动窗口算法的Box模糊效果

0_13265402518AA3.png


水平和垂直方向

0_1326540304aX5O.png


垂直方向:


0_1326540317dyZ9.png


水平方向:

0_1326540347Oy1t.png


四:程序关键代码解析


注释已经很详细的写在代码中,最重要的一个步骤是提前建立index,根据index来找到平均值。

    public static void blur( int[] in, int[] out, int width, int height, int radius ) {
        int widthMinus1 = width-1;
        int tableSize = 2*radius+1;
        int divide[] = new int[256*tableSize];
 
        // the value scope will be 0 to 255, and number of 0 is table size
        // will get means from index not calculate result again since 
        // color value must be  between 0 and 255.
        for ( int i = 0; i < 256*tableSize; i++ )
            divide[i] = i/tableSize; 
 
        int inIndex = 0;
        
        // 
        for ( int y = 0; y < height; y++ ) {
            int outIndex = y;
            int ta = 0, tr = 0, tg = 0, tb = 0; // ARGB -> prepare for the alpha, red, green, blue color value.
 
            for ( int i = -radius; i <= radius; i++ ) {
                int rgb = in[inIndex + ImageMath.clamp(i, 0, width-1)]; // read input pixel data here. table size data.
                ta += (rgb >> 24) & 0xff;
                tr += (rgb >> 16) & 0xff;
                tg += (rgb >> 8) & 0xff;
                tb += rgb & 0xff;
            }
 
            for ( int x = 0; x < width; x++ ) { // get output pixel data.
                out[ outIndex ] = (divide[ta] << 24) | (divide[tr] << 16) | (divide[tg] << 8) | divide[tb]; // calculate the output data.
 
                int i1 = x+radius+1;
                if ( i1 > widthMinus1 )
                    i1 = widthMinus1;
                int i2 = x-radius;
                if ( i2 < 0 )
                    i2 = 0;
                int rgb1 = in[inIndex+i1];
                int rgb2 = in[inIndex+i2];
                
                ta += ((rgb1 >> 24) & 0xff)-((rgb2 >> 24) & 0xff);
                tr += ((rgb1 & 0xff0000)-(rgb2 & 0xff0000)) >> 16;
                tg += ((rgb1 & 0xff00)-(rgb2 & 0xff00)) >> 8;
                tb += (rgb1 & 0xff)-(rgb2 & 0xff);
                outIndex += height; // per column or per row as cycle...
            }
            inIndex += width; // next (i+ column number * n, n=1....n-1)
        }
    }
相关文章
|
计算机视觉 索引
图像处理之快速均值模糊(Box Blur)
图像处理之快速均值模糊(Box Blur)   图像模糊的本质, 从数字信号处理的角度看,图像模糊就要压制高频信号保留低频信号, 压制高频的信号的一个可选择的方法就是卷积滤波。选择一个低频滤波器,对图像上的 每个像素实现低频滤波,这样整体效果就是一张数字图像更加的模糊,显示更少的细节信息。
1174 0
|
计算机视觉
图像处理------快速均值模糊(Box Blur)
<p style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; line-height: 26px;">图像模糊的本质, 从数字信号处理的角度看,图像模糊就要压制高频信号保留低频信号,</p> <p style="color: rgb(51, 51, 51); font-family: Arial; font-siz
3287 0
|
移动开发 资源调度 算法
H5中基于Canvas实现的高斯模糊
自从扁平化流行起来之后,高斯模糊效果渐渐变成了视觉很喜欢用的一种表现形式,我们的视觉小姐姐也特别喜欢。为了满足她,踩了无穷无尽的坑之后,最后只能掏出Canvas来了。 没有什么视觉需求是Canvas解决不了的,如果有,再盖一层Canvas —— 奈帆斯基 ##解决痛点 1. CSS模糊 和 大面积transform 混用时,会导致的性能问题 ( 卡 ) 2. CSS模糊 在图
2993 0
|
算法 数据建模 Android开发
Android高斯模糊、高斯平滑(Gaussian Blur)【1】
 Android高斯模糊、高斯平滑(Gaussian Blur)【1】 Android高斯模糊、高斯平滑(Gaussian Blur),图形图像处理的一种效果,经过高斯模糊处理后的图片有一种“毛玻璃”的效果。
1401 0
|
前端开发 数据建模 Java
Android高斯模糊、高斯平滑(Gaussian Blur)【2】
Android高斯模糊、高斯平滑(Gaussian Blur)【2】 Android上的高斯模糊效果实现,策略不唯一,在github上有一个开源的实现算法:https://github.com/paveldudka/blurring 性能上对附录参考文章【1】进行了改进和提升。
1071 0
|
8月前
|
算法 Java 计算机视觉
图像处理之颜色梯度变化 (Color Gradient)
图像处理之颜色梯度变化 (Color Gradient)
103 0
|
8月前
|
资源调度 算法 计算机视觉
【Qt&OpenCV 图像平滑/滤波处理 -- Blur/Gaussian/Median/Bilateral】
【Qt&OpenCV 图像平滑/滤波处理 -- Blur/Gaussian/Median/Bilateral】
101 0
|
资源调度 计算机视觉
CV10 图像模糊(均值、高斯、中值、双边滤波)
当我们只想得到感兴趣的物体时,通过图像模糊,可以将那些尺寸和亮度较小的物体过滤掉,较大的物体则易于检测。除了降低噪声,这就是图像平滑(模糊)的另一个重要应用:减少噪点,突出ROI,以便目标提取。
418 0

热门文章

最新文章