几个用户询问在numpy的或SciPy的图像卷积的速度或存储器消耗[ 1,2,3,4 ].从回答和我使用Numpy的经验来看,我相信与Matlab或IDL相比,这可能是numpy的一个主要缺点.
到目前为止,答案都没有解决整个问题,所以这里是:"在Python中计算2D卷积的最快方法是什么?" 常见的python模块是公平游戏:numpy,scipy和PIL(其他?).为了进行具有挑战性的比较,我想提出以下规则:
Python或其任何模块是否具有MATLAB的conv2功能?更具体地说,我对与conv2(A, B, 'same')MATLAB 中进行相同计算的东西感兴趣.
我有大矩阵,4000x4000我需要计算每个x的本地平均值11x11窗口,这个矩阵的y一般它必须是这样的
for x in range(4000)
for y in range(4000)
b[x,y]=mean(a[x-5:x+5,y-5:y+5]
Run Code Online (Sandbox Code Playgroud)
但这会花很多时间这是一种更有效的方法吗?谢谢.
我正在尝试仅使用 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) 我有一个图像,包括两个任意放置的黑色1px"斑点"在白色画布上100px到200px.我试图通过将一些相邻像素(每个blob的半径10px内)转为黑色来模糊这些斑点.我已经将以下代码放在一起,但我不确定下一步...
import numpy as np
from PIL import Image
from scipy import ndimage
from matplotlib import pyplot
from matplotlib import cm
from scipy.misc import imsave
im = Image.open("test.png")
pix = np.asarray(im)
new_pix = np.copy(pix[:,:,0]) # need this otherwise can't write to the pix array.
pix_to_enlarge = np.where(new_pix != 255)
pixels_to_enlarge_by = 10
i=0
for each_pixel in pix_to_enlarge[0]: # this cycles through each non-white pixel
for y in range(len(new_pix)): # this looks across the length (down) the page
for x in …Run Code Online (Sandbox Code Playgroud) python numpy image-processing python-imaging-library python-2.7
python ×5
numpy ×3
convolution ×2
matrix ×2
arrays ×1
average ×1
local ×1
matlab ×1
optimization ×1
python-2.7 ×1
scipy ×1