Целью здесь является реализация операции свертки для изображения с использованием numpy.
Я пытался реализовать функцию свертки с опциями заполнения.Тем не менее, мой код использует два for loops
для обхода строк и столбцов.Таким образом, чрезвычайно медленная обработка больших файлов изображений.
def correlate(I, h, pad):
top, bottom, left, right = pad
tmp = zero_padding(I, top, bottom, left, right)
print("padded shape:", tmp.shape)
max_dim = max(len(tmp.shape), len(h.shape))
while len(tmp.shape) < 3:
tmp = tmp[..., np.newaxis]
while len(h.shape) < 3:
h = h[..., np.newaxis]
if h.shape[-1] < I.shape[-1]:
if (I.shape[-1] == 3) & (h.shape[-1] == 1):
h = np.dstack([h,h,h])
else:
raise ValueError('dimension mismatch')
new_hight = tmp.shape[0] - h.shape[0] + 1
new_width = tmp.shape[1] - h.shape[1] + 1
result = np.ones((new_hight, new_width, tmp.shape[-1]))
for ver in range(new_hight):
for hor in range(new_width):
block = get_block(tmp, h, ver, hor)
mix = np.sum(np.sum(block*h, axis=0), axis=0)
result[ver, hor] = mix
return result
Обработка моих (5000, 4000, 3) изображений заняла целую вечность.