相关疑难解决方法(0)

在numpy中,如何有效地列出所有固定大小的子矩阵?

我有一个任意的NxM矩阵,例如:

1 2 3 4 5 6
7 8 9 0 1 2
3 4 5 6 7 8
9 0 1 2 3 4
Run Code Online (Sandbox Code Playgroud)

我想得到这个矩阵中所有3x3子矩阵的列表:

1 2 3       2 3 4               0 1 2
7 8 9   ;   8 9 0   ;  ...  ;   6 7 8
3 4 5       4 5 6               2 3 4
Run Code Online (Sandbox Code Playgroud)

我可以用两个嵌套循环来做到这一点:

rows, cols = input_matrix.shape
patches = []
for row in np.arange(0, rows - 3):
    for col in np.arange(0, cols - 3):
        patches.append(input_matrix[row:row+3, …
Run Code Online (Sandbox Code Playgroud)

python numpy matrix

6
推荐指数
1
解决办法
947
查看次数

在傅里叶域中使用内核卷积图像

我在我的图像和卷​​积核周围使用零填充,将它们转换为傅立叶域,然后将它们反转回来以获得卷积图像,请参见下面的代码。然而,结果是错误的。我期待一个模糊的图像,但输出是四个移位的四分之一。为什么输出错误,我该如何修复代码?

输入图像:

输入图像

卷积结果:

输出图像

from PIL import Image,ImageDraw,ImageOps,ImageFilter
import numpy as np 
from scipy import fftpack
from copy import deepcopy
import imageio
## STEP 1 ##
im1=Image.open("pika.jpeg")
im1=ImageOps.grayscale(im1)
im1.show()
print("s",im1.size)
## working on this image array
im_W=np.array(im1).T
print("before",im_W.shape)
if(im_W.shape[0]%2==0):
im_W=np.pad(im_W, ((1,0),(0,0)), 'constant')
if(im_W.shape[1]%2==0):
im_W=np.pad(im_W, ((0,0),(1,0)), 'constant')
print("after",im_W.shape)
Boxblur=np.array([[1/9,1/9,1/9],[1/9,1/9,1/9],[1/9,1/9,1/9]])
dim=Boxblur.shape[0]

##padding before frequency domain multipication
pad_size=(Boxblur.shape[0]-1)/2
pad_size=int(pad_size)
##padded the image(starts here)

p_im=np.pad(im_W, ((pad_size,pad_size),(pad_size,pad_size)), 'constant')
t_b=(p_im.shape[0]-dim)/2
l_r=(p_im.shape[1]-dim)/2
t_b=int(t_b)
l_r=int(l_r)

##padded the image(ends here)

## padded the kernel(starts here)
k_im=np.pad(Boxblur, ((t_b,t_b),(l_r,l_r)), 'constant')
print("hjhj",k_im)
print("kernel",k_im.shape) …
Run Code Online (Sandbox Code Playgroud)

python fft image-processing convolution scipy

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

标签 统计

python ×2

convolution ×1

fft ×1

image-processing ×1

matrix ×1

numpy ×1

scipy ×1