【发布时间】:2018-05-06 14:52:43
【问题描述】:
我需要编写一个代码来使用 numpy 在 python 中执行 3D 卷积,内核为 3x3。对于像黑白图像这样的 2D 数组,我已经做到了,但是当我尝试将它扩展到像 RGB 这样的 3D 数组时,就一团糟。我需要帮助来改进我的方法。 这是二维码:
def convolucion_3x3(arreglo, kernel):
(dim_x, dim_y) = arreglo.shape
(ker_x, ker_y) = kernel.shape
matriz_convolucionada = np.zeros((dim_x, dim_y))
for i in range(dim_x):
for j in range(dim_y):
resultado = 0
for x in range(-1, 2):
try:
if i + x not in range(dim_x):
raise ValueError()
for y in range(-1, 2):
try:
if j + y not in range(dim_y):
raise ValueError()
resultado += arreglo[i + x, j + y] * kernel[x + 1][y + 1]
'''
Para el kernel sumo un 1 a cada índice para que lo corra desde 0 hasta 2 y no de -1 a 1
'''
except ValueError:
pass
except ValueError:
pass
matriz_convolucionada[i][j] = resultado
return matriz_convolucionada
下一个是我对 RGB 图像的尝试:
def convolucion(arreglo, kernel): (dim_x, dim_y, dim_z) = arreglo.shape (ker_x, ker_y) = kernel.shape
matriz_convolucionada = np.zeros((dim_x, dim_y, dim_z))
for k in range(dim_z):
for i in range(dim_x):
for j in range(dim_y):
resultado = 0
for x in range(-1, 2):
try:
if i + x not in range(dim_x):
raise ValueError()
for y in range(-1, 2):
try:
if j + y not in range(dim_y):
raise ValueError()
resultado += arreglo[i + x, j + y, k] * kernel[x + 1][y + 1]
'''
Para el kernel sumo un 1 a cada índice para que lo corra desde 0 hasta 2 y no de -1 a 1
'''
except ValueError:
pass
except ValueError:
pass
matriz_convolucionada[i][j][k] = resultado
return matriz_convolucionada
【问题讨论】:
-
先修复缩进
-
我已经修复了您的第一个代码块上的缩进。请注意,所有代码现在被突出显示,并且使用 2 缩进而不是 4 缩进使代码在此站点上更易于阅读。
-
我认为
(dim_x, dim_y) = arreglo.shape应该是(dim_y, dim_x) = arreglo.shape,其他变量也应该类似。
标签: python numpy image-processing filtering convolution