javascript - 如何在javascript中获取高斯滤波器

标签 javascript gaussian

python 有 fspecial('gaussian', f_wid, sigma) 使高斯变得简单( link )。 Javascript 有类似的工具吗?

最佳答案

是的,这对于 Javascript 来说是可能的,但并不像使用 Python 那样容易。

由于您正在寻找 JavaScript 解决方案,因此很高兴知道 HTML5 Canvas 元素有一些 built-in filters 。 Canvas 模糊的示例片段如下所示:

const canvas = document.querySelector("canvas");
const ctx = canvas.getContext("2d");
const texture = document.querySelector("img");
texture.onload = function(){
  canvas.width = this.width;
  canvas.height = this.height;
  ctx.filter = 'blur(10px)';
  ctx.drawImage(this, 0, 0);
}

其他适用于 Web 的方法是 CSS 和 SVG 过滤器,它们也与 Canvas 兼容。然而,它们的设计并不适合我们的代码在 Web Worker 中运行的情况。 .

makeGaussKernel 函数创建一个具有适当滤波器大小和系数的一维数组。

function makeGaussKernel(sigma){
  const GAUSSKERN = 6.0;
  var dim = parseInt(Math.max(3.0, GAUSSKERN * sigma));
  var sqrtSigmaPi2 = Math.sqrt(Math.PI*2.0)*sigma;
  var s2 = 2.0 * sigma * sigma;
  var sum = 0.0;
  
  var kernel = new Float32Array(dim - !(dim & 1)); // Make it odd number
  const half = parseInt(kernel.length / 2);
  for (var j = 0, i = -half; j < kernel.length; i++, j++) 
  {
    kernel[j] = Math.exp(-(i*i)/(s2)) / sqrtSigmaPi2;
    sum += kernel[j];
  }
  // Normalize the gaussian kernel to prevent image darkening/brightening
  for (var i = 0; i < dim; i++) {
    kernel[i] /= sum;
  }
  return kernel;
}

Source Fiveko

关于javascript - 如何在javascript中获取高斯滤波器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73700722/

相关文章:

c - 高斯消除的c中矩阵行列式核心倾倒误差

javascript - 等到弹出窗口被销毁?

javascript - 创建javascript原型(prototype)继承链的不同方式

php - 联系表单默认值验证

image-processing - 如何为图像添加镜头(焦点)模糊

c++ - OpenCV:基于高斯混合模型的颜色提取

python - 使用 `multivariate_normal` 时无法导入 `scipy.stats`

matlab - 使数据符合正态分布

java - 如何从日期时间中仅获取时间(2011-04-23 09 :30:51:01) in java or javascript or jquery

javascript:如何将两个一维数组转换为一个二维数组