我有一个MATLAB问题:我正在尝试计算LTI系统的输出,并且我遇到了两个不同的MATLAB函数,这些函数应该适用于该作业,filter并且conv.他们两个有什么区别?
我不明白卷积内核是什么以及如何将卷积矩阵应用于图像中的像素(我在谈论对图像进行高斯模糊操作).
我还能得到关于如何为高斯模糊操作创建内核的解释吗?
我正在读这篇文章,但我似乎无法理解事情是如何完成的......
感谢任何花时间向我解释的人:),
ExtremeCoder
分析我正在做的一些计算工作向我展示了我的程序中的一个瓶颈是基本上这样做的功能(np是numpy,sp是scipy):
def mix1(signal1, signal2):
spec1 = np.fft.fft(signal1, axis=1)
spec2 = np.fft.fft(signal2, axis=1)
return np.fft.ifft(spec1*spec2, axis=1)
Run Code Online (Sandbox Code Playgroud)
两个信号都具有形状(C, N),其中C是数据集的数量(通常小于20),并且N是每组中的样本数(大约5000).每个集合(行)的计算完全独立于任何其他集合.
我认为这只是一个简单的卷积,所以我试着用以下代码替换它:
def mix2(signal1, signal2):
outputs = np.empty_like(signal1)
for idx, row in enumerate(outputs):
outputs[idx] = sp.signal.convolve(signal1[idx], signal2[idx], mode='same')
return outputs
Run Code Online (Sandbox Code Playgroud)
......只是为了看看我是否得到了相同的结果.但我没有,我的问题是:
mix1()?(我意识到mix2可能不会更快,但它可能是并行化的一个很好的起点.)
这是我用来快速检查这个的完整脚本:
import numpy as np
import scipy as sp
import scipy.signal
N = 4680
C = 6
def mix1(signal1, signal2):
spec1 = …Run Code Online (Sandbox Code Playgroud) 我一直在尝试使用SciPy进行2D矩阵的卷积,而Numpy却失败了.对于SciPy我试过,sepfir2d和scipy.signal.convolve和Convolve2D for Numpy.在Matlab for Python中是否有像conv2这样的简单函数?
这是一个例子:
A= [ 5 4 5 4;
3 2 3 2;
5 4 5 4;
3 2 3 2 ]
Run Code Online (Sandbox Code Playgroud)
我想把它卷入其中 [0.707 0.707]
而来自Matlab的conv2的结果是
3.5350 6.3630 6.3630 6.3630 2.8280
2.1210 3.5350 3.5350 3.5350 1.4140
3.5350 6.3630 6.3630 6.3630 2.8280
2.1210 3.5350 3.5350 3.5350 1.4140
Run Code Online (Sandbox Code Playgroud)
有些函数用Python来计算这个输出吗?我将感激回应.
Tensorflow已经有了答案.但问题是在我的IDE中Conv2D是一个类,而Convolution2D是一个变量?
machine-learning convolution neural-network keras keras-layer
我正在使用Numpy研究图像处理,并面临使用卷积过滤的问题.
我想卷一个灰度图像.(使用较小的2d阵列卷积2d阵列)
有没有人有想法改进我的方法?
我知道scipy支持convolve2d,但我只想使用Numpy来创建一个convolve2d.
首先,我在子矩阵中制作了一个二维数组.
a = np.arange(25).reshape(5,5) # original matrix
submatrices = np.array([
[a[:-2,:-2], a[:-2,1:-1], a[:-2,2:]],
[a[1:-1,:-2], a[1:-1,1:-1], a[1:-1,2:]],
[a[2:,:-2], a[2:,1:-1], a[2:,2:]]])
Run Code Online (Sandbox Code Playgroud)
子矩阵似乎很复杂,但我正在做的事情如下图所示.
接下来,我将每个子矩阵乘以一个过滤器.
conv_filter = np.array([[0,-1,0],[-1,4,-1],[0,-1,0]])
multiplied_subs = np.einsum('ij,ijkl->ijkl',conv_filter,submatrices)
Run Code Online (Sandbox Code Playgroud)
并总结了他们.
np.sum(np.sum(multiplied_subs, axis = -3), axis = -3)
#array([[ 6, 7, 8],
# [11, 12, 13],
# [16, 17, 18]])
Run Code Online (Sandbox Code Playgroud)
因此这种行为可以称为我的convolve2d.
def my_convolve2d(a, conv_filter):
submatrices = np.array([
[a[:-2,:-2], a[:-2,1:-1], a[:-2,2:]],
[a[1:-1,:-2], a[1:-1,1:-1], a[1:-1,2:]],
[a[2:,:-2], a[2:,1:-1], a[2:,2:]]])
multiplied_subs = np.einsum('ij,ijkl->ijkl',conv_filter,submatrices)
return …Run Code Online (Sandbox Code Playgroud) 我之前使用过Scikit-learn的GridSearchCV来优化我的模型的超参数,但只是想知道是否存在类似的工具来优化Tensorflow的超参数(例如,时期数,学习率,滑动窗口大小等)
如果没有,我如何实现一个有效运行所有不同组合的片段?
我试图使用numpy在python中执行2d卷积
我有一个2d数组,如下所示,行内核为H_r,列为H_c
data = np.zeros((nr, nc), dtype=np.float32)
#fill array with some data here then convolve
for r in range(nr):
data[r,:] = np.convolve(data[r,:], H_r, 'same')
for c in range(nc):
data[:,c] = np.convolve(data[:,c], H_c, 'same')
data = data.astype(np.uint8);
Run Code Online (Sandbox Code Playgroud)
它不会产生我期望的输出,这段代码看起来不错,我认为问题在于从float32到8bit的转换.什么是最好的方法来做到这一点
谢谢
我正在尝试实现以下卷积R,但没有得到预期的结果:
$$ C _ {\ sigma} [i] =\sum\limits_ {k = -P} ^ P SDL _ {\ sigma} [ik,i]\centerdot S [i] $$

其中$ S [i] $是光谱强度的矢量(洛伦兹信号/核磁共振光谱),而$ i\in [1,N] $其中$ N $是数据点的数量(在实际例子中,可能是32K)值).这是Jacob,Deborde和Moing,Analytical Bioanalytical Chemistry(2013)405:5049-5061(DOI 10.1007/s00216-013-6852-y)中的等式1 .
$ SDL _ {\ sigma} $是计算洛伦兹曲线的二阶导数的函数,我已经实现如下(基于论文中的等式2):
SDL <- function(x, x0, sigma = 0.0005){
if (!sigma > 0) stop("sigma must be greater than zero.")
num <- 16 * sigma * ((12 * (x-x0)^2) - sigma^2)
denom <- pi * ((4 * (x - …Run Code Online (Sandbox Code Playgroud) 假设我们有一个单一频道图像(5x5)
A = [ 1 2 3 4 5
6 7 8 9 2
1 4 5 6 3
4 5 6 7 4
3 4 5 6 2 ]
Run Code Online (Sandbox Code Playgroud)
和过滤器K(2x2)
K = [ 1 1
1 1 ]
Run Code Online (Sandbox Code Playgroud)
应用卷积的一个例子(让我们从A中取出第一个2x2)将是
1*1 + 2*1 + 6*1 + 7*1 = 16
Run Code Online (Sandbox Code Playgroud)
这非常简单.但是,让我们向矩阵A引入深度因子,即在深度网络中具有3个通道或甚至转换层的RGB图像(深度= 512).如何使用相同的滤波器完成卷积运算?类似的工作对于RGB情况非常有帮助.
convolution ×10
python ×5
numpy ×3
matlab ×2
blur ×1
dot-product ×1
gaussian ×1
image ×1
keras ×1
keras-layer ×1
matrix ×1
r ×1
rgb ×1
scipy ×1
tensorflow ×1