标签: convolution

如果 FFT 中有很多 0,则寻找卷积核?

我知道original_image * filter = blur_image*卷积在哪里。因此,filter = ifft(fft(blur)/fft(original))

我有一个原始图像、已知的滤镜和已知的模糊图像。我尝试了以下代码。我只想比较使用 fft 和 ifft 计算的滤波器,并将其与已知的滤波器进行比较。我在Matlab中尝试过:

orig = imread("orig.png")
blur = imread("blur.png")
fftorig = fft(orig)
fftblur = fft(blur)
div = fftblur/fftorig
conv = ifft(div)
Run Code Online (Sandbox Code Playgroud)

结果没有意义。我看到div包含很多NaN值,并且fftblurfftorig都包含很多 0 值。我需要对此做些什么吗?比如使用fftshift

编辑:为了使这一点更容易理解,我现在使用以下图像: http: //matlabgeeks.com/tips-tutorials/how-to-blur-an-image-with-a-fourier-transform-in- matlab-第一部分/

我决定使用以下链接计算origimage和的内核:blurimageunpad

kernelc = real(ifft2(fft2(origimage)./fft2(blurimageunpad));
imagesc(kernelc)
colormap gray
Run Code Online (Sandbox Code Playgroud)

结果如下:

https://i.stack.imgur.com/kJavg.jpg

这显然与该链接顶部提到的高斯模糊不匹配

matlab fft image-processing convolution deconvolution

3
推荐指数
1
解决办法
880
查看次数

Python:两个高斯函数与 np.convolve 卷积的结果函数的大小

我有兴趣优化一个函数,该函数是两个函数的卷积。主要问题是我的结果函数完全是规模化的,我不明白 np.convolve 实际做了什么。

我编写了一个小脚本,应该对两个高斯函数进行卷积,但生成的高斯函数的大小比输入函数大得多:

from scipy.interpolate import interp1d
import matplotlib.pyplot as plt
import numpy as np


# /sf/ask/1266224291/
def gauss(x, p): # p[0]==mean, p[1]==stdev, p[2]==heightg, p[3]==baseline                   
    a = p[2]
    mu = p[0]
    sig = p[1]
    #base = p[3]
    return a * np.exp(-1.0 * ((x - mu)**2.0) / (2.0 * sig**2.0)) #+ base

p0 = [0, 0.3, 1] # Inital guess is a normal distribution
p02 = [0, 0.2, 0.5]


xp = np.linspace(-4, 4, 2000)
convolved = np.convolve(gauss(xp, p0),gauss(xp, p02), mode="same") …
Run Code Online (Sandbox Code Playgroud)

python numpy gaussian convolution

3
推荐指数
1
解决办法
3776
查看次数

正确使用 numpy 与图像的卷积

我在 CNN 上观看Andrew Ng 的视频,想用滤波器6 x 6对图像进行卷积3 x 3。我用 numpy 处理这个问题的方法如下:

image = np.ones((6,6))
filter = np.ones((3,3))

convolved = np.convolve(image, filter)
Run Code Online (Sandbox Code Playgroud)

运行此命令会出现错误:

ValueError: object too deep for desired array
Run Code Online (Sandbox Code Playgroud)

我可以从convolve 的 numpy 文档中理解如何正确使用该convolve方法。

另外,有没有办法可以用 numpy 进行跨步卷积?

python numpy image-processing convolution conv-neural-network

3
推荐指数
1
解决办法
5661
查看次数

如何在OpenCV中进行卷积

我试图使用filter2D方法在OpenCV中找到卷积,但结果不正确

import cv2 as cv
import scipy.signal as sig
import numpy as np
b=np.asarray([[1,2,0,1,2],
              [2,3,1,1,2],
              [1,4,2,2,0],
              [3,2,3,3,0],
              [1,0,0,2,1]
              ],dtype=np.uint8)

w=np.asarray([[1,1,1],
              [1,1,2],
              [2,1,1]],dtype=np.uint8)
w_r=np.asarray([[1,1,1],
                [2,1,1],
                [1,1,1]
                ],dtype=np.uint8)
print(sig.convolve2d(b,w,mode="same"))
kernel_r=np.asarray([[1,1,1],[1,1,2],[2,1,1]])
print("-------")
print(cv.filter2D(b,-1,w_r))
Run Code Online (Sandbox Code Playgroud)

第一个输出是由 scipy.signal.convolve2D 生成的,这是正确的。第二个输出是由 OpenCV filter2D 生成的,这是不正确的。我怎样才能得到正确的结果。

[[ 8 10 10  7  7]
 [15 18 20 14  9]
 [18 23 26 18 10]
 [15 21 22 16 11]
 [ 8 13 13  9  8]]
-------
[[23 16 15 11 13]
 [25 18 19 12 13]
 [28 22 25 16 16]
 [19 …
Run Code Online (Sandbox Code Playgroud)

python opencv convolution

3
推荐指数
1
解决办法
2万
查看次数

conv1d pytorch 如何对字符或帧序列进行操作?

我理解应用于图像时的卷积滤波器(例如,具有 3 个输入通道的 224x224 图像由 56 个 5x5 转换的总共 56 个滤波器转换为具有 56 个输出通道的 224x224 图像)。关键是有 56 个不同的滤波器,每个滤波器的权重为 5x5x3,最终生成输出图像 224x224, 56(逗号后面的术语是输出通道)。

\n\n

但我似乎无法理解conv1d过滤器在字符序列的 seq2seq 模型中如何工作。我正在查看的模型之一https://arxiv.org/pdf/1712.05884.pdf有一个“ post-net 层由 512 个形状为 5\xc3\x971 的滤波器组成”,在频谱图帧 80-d 上运行(意味着帧中有80个不同的浮点值),过滤的结果是512维的帧。

\n\n
    \n
  • 我不明白in_channels, out_channelspytorch conv1d 定义中的含义,就像在图像中一样,我可以轻松理解通道内/通道外的含义,但对于 80 个浮点值帧的序列,我不知所措。在上面这样的 seq2seq 模型的上下文中它们意味着什么?

  • \n
  • 对 80 个浮点值进行 512、5x1 过滤器如何生成 512 个浮点值?**

  • \n
  • 当对 80 个浮点值进行操作时,5x1 过滤器是否只会产生 80 个浮点值(通过在这 80 个值中一次取 5 个连续值)?这 512 个过滤器总共有多少权重?**

  • \n
\n\n

在 pytorch 中打印时的图层显示为:

\n\n
(conv): Conv1d(80, 512, kernel_size=(5,), …
Run Code Online (Sandbox Code Playgroud)

convolution deep-learning lstm pytorch seq2seq

3
推荐指数
1
解决办法
2306
查看次数

仅使用 NumPy 的 Python 图像卷积

我正在尝试仅使用 NumPy 来实现图像卷积代码,类似于cv2.filter2D(...)的做法。

import numpy as np
import time

# kernal
H = np.array([[0,1,0],[1,-4,1],[0,1,0]])

# image
SEED = 23
img = np.random.RandomState(SEED).randint(10, size=(4, 4))

# shapes
Hi, Wi = img.shape
Hk, Wk = H.shape
hk = Hk//2
wk = Wk//2

# padding
new_img = np.pad(img, (hk, wk), 'constant', constant_values=0)
pHi, pWi = new_img.shape

print('img: ')
print(new_img)

print('kernal: ')
print(H)
print('\n')

# image convolution
##################################################
# Method 1
st = time.time()

out = np.zeros((Hi, Wi))
for i in range(hk, …
Run Code Online (Sandbox Code Playgroud)

python numpy image-processing convolution

3
推荐指数
1
解决办法
3281
查看次数

找到两个直方图的卷积

两个随机变量x和y之和的概率分布由各个分布的卷积给出.我在数字上做这个有点麻烦.在以下示例中,x和y均匀分布,其各自的分布近似为直方图.我的推理说直方图应该是复杂的,给出x + y的分布.

from numpy.random import uniform
from numpy import ceil,convolve,histogram,sqrt
from pylab import hist,plot,show

n = 10**2

x,y = uniform(-0.5,0.5,n),uniform(-0.5,0.5,n)

bins = ceil(sqrt(n))

pdf_x = histogram(x,bins=bins,normed=True)
pdf_y = histogram(y,bins=bins,normed=True)

s = convolve(pdf_x[0],pdf_y[0])

plot(s)
show()
Run Code Online (Sandbox Code Playgroud)

给出以下,

在此输入图像描述

换句话说,如预期的那样是三角形分布.但是,我不知道如何找到x值.如果有人能在这里纠正我,我将不胜感激.

statistics numpy probability histogram convolution

2
推荐指数
1
解决办法
3657
查看次数

python-每个通道分别具有2d内核的3d数组的卷积

我有一个矩阵,[c, n, m]其中c有多个渠道。nm是宽度和高度。在特定的示例中,我有一个具有1000个通道的矩阵。我想分别与a x a每个通道的大小的内核进行卷积。在我的示例中,内核大小为3 x 3。是否有任何功能,scipy或者numpy没有通过循环遍历通道的那种功能?

我找到了scipy.ndimage.convolve函数,但是我认为如果不使用循环就无法在该问题上应用该函数。

python numpy convolution scipy

2
推荐指数
2
解决办法
2411
查看次数

使用OpenCV和Keras进行面部比较(不识别或检测)?

首先,这是我的问题的github链接.

这是我的问题:

我想用Python做一个面部比较功能.我可以使用OpenCV成功地(?)识别人脸.现在,我该如何做比较呢

我的理解是这样的:

在一般的机器学习方法中,我需要收集关于该特定人的大量数据并使用CNN完成它.

但是,我刚收到2张图片,我该怎么做比较呢?我应该在分类或聚类方面考虑它(使用KNN)?

非常感谢您的所有帮助.

python opencv face-recognition convolution neural-network

2
推荐指数
3
解决办法
9682
查看次数

如何在低通滤波后的图像上找到轮廓?

我是计算机视觉的新手。因此,我不知道以下代码的内部实现,因此无法调试该错误。任何人都可以在以下代码中指出错误吗?

该代码使用Box Filter和Edge detection Kernel矩阵的组合将停车图像转换为二进制图像。然后我试图找到轮廓。现在我知道可以在二进制图像上找到轮廓,可以使用cv2.threshold()函数导出轮廓,从Filter和Kernel矩阵获得的图像也不是二进制图像吗?

import cv2
import numpy as np
import matplotlib.pyplot as plt

img=cv2.imread('parking spot1.jpg',1)
k3 = np.array(([-1,-1,-1],[-1,8,-1],[-1,-1,-1]))
low_filter = cv2.boxFilter(img, -1, (4,4))
output_low = cv2.filter2D(low_filter, -1, k3)
plt.subplot(2, 2, 1)
plt.imshow(img)
plt.title('Original Image')

plt.subplot(2, 2, 2)
plt.imshow(output_low)
plt.title('matrix1')

plt.show()

img, ret, heirarchy = cv2.findContours(output_low, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
Run Code Online (Sandbox Code Playgroud)

您认为我做错了什么?我非常感谢您对此问题的解释或指导。

非常感谢。

我面临的错误是:


()最近追溯(最近一次通话)----> 1 img,ret,heirarchy = cv2.findContours(output_low,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)

错误:OpenCV(3.4.3)/io/opencv/modules/imgproc/src/contours.cpp:199:错误:(-210:不支持的格式或格式组合)[开始]当模式!=时,FindContours仅支持CV_8UC1图像。 CV_RETR_FLOODFILL否则仅在函数'cvStartFindContours_Impl中支持CV_32SC1图像

opencv convolution computer-vision lowpass-filter opencv-contour

2
推荐指数
1
解决办法
137
查看次数