JS二阶高斯矩阵与高斯模糊尝试

 1 function gaussBlur(radius = 2.0, sigma = 1.5) {
 2     let gaussMatrix = [],
 3         gaussSum = 0.0,
 4         a = 1.0 / (2.0 * Math.PI * sigma * sigma),
 5         b = 1.0 / (2.0 * sigma * sigma);
 6 
 7     for (let i = - radius; i <= radius; i++) {
 8         for (let j = - radius; j <= radius; j++) {
 9             var gxy = a * Math.exp(- (i * i + j * j) * b);
10             gaussMatrix.push(gxy);
11             gaussSum += gxy;// 得到高斯矩阵的和,用来归一化
12         }
13     }
14 
15     for (let i = 0; i < gaussMatrix.length; i++) {
16         gaussMatrix[i] = gaussMatrix[i] / gaussSum;
17     }
18     return gaussMatrix;
19 }

原理及过程如下:

1.查到公式:

2.模拟效果:(此时sigma取0.5)

3.写出代码见开头。

4.运行检查结果

满足预期。

5.尝试使用shader查看效果

考虑到性能,我们卷积11*11次,所以参数半径是(11-1)/2=5,sigma多次调试决定使用2,使用 gaussBlur(5,2.0); 得到高斯矩阵,然后加入shader(shader内容不在本例讨论范围,不再赘述)

得到图像:

与原图对比:

(两次截图,尺寸不一致,但效果符合预期)

posted @ 2020-04-26 16:41  SpadeZ  阅读(14)  评论(0编辑  收藏  举报