我试图实现一种算法来高效地计算卷积和相关的组合,如下所示:
c(x,y)=(sum of i, (sum of j, a(x-i,y+j)*b(i,j)))
我知道一维卷积或相关可以通过
a conv b = ifft(fft(a).*fft(b))
a corr b = ifft(fft(a).*conjg(fft(b)))
但我不知道它们在二维或N-D问题中的组合。我认为它类似于二维卷积,但我不知道具体的演绎过程。
在使用Matlab2D滤波函数filter2(B,X)和卷积函数conv(X,B,'')时,我发现filter2函数本质上是二维卷积,但是滤波器系数矩阵的旋转是180度。就filter2和conv2的输出而言,我看到以下关系成立:
output matrix of filter2 = each element negated of output of conv2
编辑:我是不正确的;上述关系一般不成立,但我看到了一些情况。通常,这两个输出矩阵是不相关的,因为在这两个矩阵中都得到了两个完全不同的核,用于卷积。
我知道二维卷积是如何进行的。我想了解的是这在图像处理方面的含义。我怎
我想在matlab中验证卷积定理。
首先,用图像灰度图(x,y)对二维高斯进行二维离散卷积。
其次,计算了同一二维高斯图像和原始图像的傅里叶变换。然后对这两个傅里叶变换进行标量乘法,然后对结果进行逆傅里叶变换。
最后,我将计算两个结果之间的均方误差。然而,我发现错误是800+。
这是我的密码:
[row, col] = size(graymap);
[row_2, col_2] = size(z);
result = zeros(row, col);
for i = 1: col
for j = 1:row
accumulation_value = 0;
for k =
我有两个二维矩阵,它们的列数相同,、A和B列数相同。我想将这两个矩阵的对应列进行转换,并将结果存储到一个名为result的新列中。假设result具有适当的维度,我目前的方法如下:
for i = 1 : size( A, 2 ) % number of columns
result(:,i) = conv( A(:,i), B(:,i) );
end
是否有一种方法可以避免使用conv()或conv2()直接使用这个循环?
我有下面的代码,基本上是对二维矩阵的每一行进行一维卷积。卷积核是相同的。所以真的是SIMD的案子。
a = [ 1,2,3,4,5;
6,7,8,9,7;
7,6,2,3,4;
23, 54, 1, 3 ,7];
f = [1,2,3];
for n = 1:size(a,1)
conv(a(n,:),f,'same')
end
当矩阵大小(和内核大小)变大时,速度就成了问题。我想知道是否有任何方法在批处理(并行化这个过程)?
我做了类似的事情,但是结果与上面的代码不同:
a = [ 1,2,3,4,5;
我正在尝试使用numpy在python中执行二维卷积。
我有一个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,
import numpy as np
import tensorflow as tf
X_node = tf.placeholder('float',[1,10,1])
filter_tf = tf.Variable( tf.truncated_normal([3,1,1],stddev=0.1) )
Xconv_tf_tensor = tf.nn.conv1d(X_node, filter_tf,1,'SAME')
X = np.random.normal(0,1,[1,10,1])
with tf.Session() as sess:
t