问题标签 [convolution]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
12808 浏览

python - 是否有 Python 等效于 MATLAB 的 conv2 函数?

Python 或其任何模块是否具有等效于 MATLAB 的conv2函数?更具体地说,我对conv2(A, B, 'same')在 MATLAB 中进行相同计算的东西感兴趣。

0 投票
1 回答
1648 浏览

wolfram-mathematica - 在 Mathematica 中使用插值函数进行卷积

我正在使用 Mathematica 7。

我有一个插值函数,这是一个例子:

我想计算它的导数,这很简单:

现在,如果你绘制这个函数

(抱歉,不知道如何从 Mathematica 中发布图像,也没有时间弄清楚。)你会发现它非常嘈杂。所以,我想把它弄平。我的第一个想法是使用 Convolve,并将其与高斯核集成,如下所示:

退货

这在我看来是合理的。不幸的是,我相信我在某个地方犯了错误,因为我得到的结果似乎无法评估。那是:

退货

这不是我想要的,我期待一个介于 -1 和 1 之间的数字。

0 投票
1 回答
301 浏览

graphics - 我正在寻找插入卷积矩阵的特定矩阵

假设我已经有一个可用的卷积矩阵算法,我正在寻找对图像处理特别有用的通用矩阵的实际示例。

随处可见的典型例子是非高斯框模糊:

图像锐化:

边缘检测:

和浮雕:

还有更多我想念的吗?

0 投票
1 回答
570 浏览

visual-c++ - 使用卷积方法处理 35 x 35 内核

亲爱的,我想使用 35 x 35 内核进行卷积。有什么建议吗?或者我可以使用的opencv中已经存在的任何方法?因为现在 cvfilter2d 只能支持直到 10 x 10 内核。

0 投票
5 回答
3654 浏览

c++ - 优化一维卷积

有没有办法加速这个一维卷积?我试图提高 dy 缓存的效率,但使用 g++ 和 -O3 编译时性能更差。

我正在与 [-1. , 0., 1] 在两个方向。不是功课。

0 投票
2 回答
17157 浏览

c - 用于 DSP 的快速 2D 卷积

我想实现一些旨在在beagleboard上运行的图像处理算法。这些算法广泛使用卷积。我正在尝试为 2D 卷积找到一个好的 C 实现(可能使用快速傅立叶变换)。我还希望算法能够在 beagleboard 的 DSP 上运行,因为我听说 DSP 针对这些类型的操作进行了优化(使用它的乘法累加指令)。

我没有该领域的背景,所以我认为自己实现卷积不是一个好主意(我可能不会像了解其背后所有数学的人那样做得好)。我相信某个地方存在一个很好的 DSP 的 C 卷积实现,但我找不到它?

有人可以帮忙吗?

编辑:原来内核很小。它的尺寸是 2X2 或 3X3。所以我想我不是在寻找基于 FFT 的实现。我在网上搜索卷积以查看它的定义,以便我可以直接实现它(我真的不知道卷积是什么)。我发现的只是乘积积分,我不知道如何用矩阵来做。有人可以给我一段 2X2 内核案例的代码(或伪代码)吗?

0 投票
1 回答
3016 浏览

matlab - filter2函数中滤波器矩阵旋转的物理意义

在使用 MATLAB 2D 滤波器filter2(B,X)函数和卷积函数conv(X,B,'')时,我看到该filter2函数本质上是 2D 卷积,但滤波器系数矩阵旋转了 180 度。就 和 的输出而言filter2conv2我看到以下关系成立:

编辑:我不正确;上述关系一般不成立,但我在少数情况下看到了它。一般来说,这两个输出矩阵是不相关的,因为在两者中都获得了 2 个完全不同的内核,它们都用于卷积。

我了解如何执行 2D 卷积。我想了解的是这在图像处理方面的含义。我如何可视化这里发生的事情?将滤波器系数矩阵旋转 180 度是什么意思?

0 投票
1 回答
1207 浏览

signal-processing - FFT长度会影响滤波精度吗?

我正在设计一个分数延迟滤波器,我的 5 阶拉格朗日系数 h(n) 在时域中有 6 个抽头。我已经测试过使用 matlab 将 h(n) 与 x(n) 进行卷积,这是 5000 个采样信号,结果似乎还可以。当我尝试使用 FFT 和 IFFT 方法时,输出完全错误。实际上,我的 FFT 是用频域中的 8192 个数据计算的,这是 5000 个信号样本的最接近 2 的幂。对于 IFFT 部分,我将 8192 频域数据转换回时域中的 5000 长度数据。所以,问题是,为什么这个东西在卷积中起作用,但在 FFT 乘法中不起作用。在频域中将我的 6 个抽头 h(n) 转换为 8192 个抽头会导致这个问题吗?

实际上,我已经尝试过使用重叠保存方法,该方法执行 FFT 并与较小的 x(n) 块相乘,并分别执行 5 次。结果似乎比以前稍微好一点,至少我可以看到波形模式,但仍然略有失真。因此,任何想法哪里出了问题,以及解决方案是什么。谢谢你。

我在频域而不是时域实现循环卷积的原因是,我尝试将拉格朗日滤波器与频域中的其他低通滤波器合并,以便实现更高效。当然,我确实相信在频域中实现滤波将比在时域中的卷积快得多。LP 滤波器在时域中有 120 个抽头。由于内存限制,包括填充在内的原始数据长度将限制为 1024,fft bin 也是如此。

因为我的拉格朗日系数只有 6 个抽头,这与 1024 个抽头有很大不同。我怀疑频域中 6 个抽头到 1024 个 bin 的 fft 会导致错误。这是我关于拉格朗日滤波器的 matlab 代码。这只是一个测试代码,不是实现代码。有点乱,抱歉。如果你能给我更多关于这个问题的建议,我真的很感激。谢谢你。

0 投票
3 回答
3466 浏览

image-processing - 如何在图像卷积期间使用预乘来解决 alpha bleed 问题?

我正在尝试将框模糊应用于透明图像,并且边缘周围出现“暗晕”。

Jerry Huxtable简短地提到了这个问题,并且一个很好的演示显示了问题的发生:

在此处输入图像描述

但是,对于我的生活,我无法理解“预乘 alpha ”如何解决问题。现在举一个非常简单的例子。我有一个 3x3 图像,包含一个红色和一个绿色像素:

在此处输入图像描述

实际上剩余的像素是透明的:

在此处输入图像描述

现在我们将对图像应用 3x3 框模糊。为简单起见,我们将只计算中心像素的新值。盒子模糊的工作方式是,因为我们有一个 9 位置的正方形(3x3,称为内核),我们取内核中每个像素的 1/9,并将其相加:

在此处输入图像描述

所以

在这个非常简化的示例中,计算变得非常简单:

这给了我一个最终的颜色值:

在此处输入图像描述

这个颜色太深了。当我在 Photoshop 中对相同的 3x3 像素图像执行 3px 框模糊时,我得到了我所期望的:

在此处输入图像描述

在白色上显示时更清晰:

在此处输入图像描述


实际上,我在包含透明文本的位图上执行框模糊,并且文本在边缘周围变得暗淡:

在此处输入图像描述

我从PixelFormat32bppARGB格式的 GDI+ 位图开始


应用 3x3 卷积核时如何使用“预乘 alpha”?

任何答案都必须包括新的论坛,因为:

给我错误的答案。


编辑:一个更简单的例子是:

我将使用 0..1 范围内的颜色和 alpha 值执行此数学运算:

在此处输入图像描述

我将框模糊卷积过滤器应用于中间像素:

这给出了相当透明的深绿色。

在此处输入图像描述

这不是我期望看到的。相比之下,Photoshop 的 Box Blur 是:

在此处输入图像描述

如果我假设(0, 0.33, 0, 0.33)是预乘 alpha,并且不乘它,我得到:

在此处输入图像描述

这看起来适合我的全不透明示例;但是当我开始涉及部分透明的像素时,我不知道该怎么办。

也可以看看

0 投票
2 回答
1042 浏览

textures - 纹理内存中大内核的 GLSL 卷积

我对 GLSL 很陌生,但我正在尝试在片段着色器中编写卷积核以进行图像处理。当我的内核很小(3x3)使用常量矩阵时,我能够做到这一点。但是,现在我想使用大小为 9x9 的内核。或者对于任意大小的问题。我最初的想法是设置一个包含卷积核的纹理内存。然后使用 2Dsampler 读取内核的纹理内存并将其与图像的纹理内存(也是 2Dsampler)进行卷积。这是解决这个问题的正确方法吗?

我想你也可以制作一个包含系数的任意大小的数组。这可能适用于 81 个系数,但如果你想要更大的系数会发生什么?比如说20x20?

一般来说,如果您需要在 GLSL 中访问多个大对象,那么正确的策略是什么?谢谢!谢谢,

D