Я заметил, что scipy.ndimage.convolve / scipy.signal.convolve (scipy.ndimage.correlate/scipy.signal.correlate) дает неожиданные (и, возможно, неверные результаты) при работе с цветными изображениями с предоставленными пользователем ядрами. Однако он отлично работает для 2D (серых) изображений. Я что-то упускаю? Пожалуйста, помогите. Следующий пример иллюстрирует это:
# convolving 3d input with 3d kernel directly in scipy
input_image = np.random.randint(0, 100, (5,5,3)).astype('float32') # input image
kernel = (np.random.randint(0, 100, (3,3,3))).astype('float32') # kernel
kernel[..., 0] /= kernel[..., 0].sum()
kernel[..., 1] /= kernel[..., 1].sum()
kernel[..., 2] /= kernel[..., 2].sum()
output = scipy.signal.convolve(p, q, 'same')
output = np.clip(s, 0, 255).astype('uint8')
# convolving 3d input with 3d kernel using nested loops (my ground truth)
input_image_padded = np.pad(input_image, 1) [...,1:-1]
s = np.zeros(input_image.shape, 'float32')
for i in range(3):
for x in range(input_image.shape[0]):
for y in range(input_image.shape[1]):
s[x,y,i] = np.sum(input_image_padded[x:x+kernel.shape[0], y:y+kernel.shape[1],i]\
* kernel[..., i][::-1,::-1])
s = np.clip(s, 0, 255).astype('uint8')
# Check results
print(np.equal(output, s).all())
print(output)
print(s)
# splitting the image and kernel into their constituent 2d images and kernels then convolving
#them appropriately
r1 = scipy.ndimage.convolve(input_image[..., 0], kernel[..., 0], mode =
'constant').astype('uint8')
r2 = scipy.ndimage.convolve(input_image[..., 1], kernel[..., 1], mode =
'constant').astype('uint8')
r3 = scipy.ndimage.convolve(input_image[..., 2], kernel[..., 2], mode =
'constant').astype('uint8')
r = np.dstack([r1,r2,r3])
# Check results
print(np.equal(r, s).all())
print(r)
print(s)
Подробнее здесь: https://stackoverflow.com/questions/792 ... ied-kernel
Используйте Scipy Python для свертки цветного изображения с предоставленным пользователем ядром ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Python – используйте интеграл свертки с самостоятельно выбранными пределами
Anonymous » » в форуме Python - 0 Ответы
- 38 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Использование свертки Renderscript в определенном месте растрового изображения
Anonymous » » в форуме Android - 0 Ответы
- 11 Просмотры
-
Последнее сообщение Anonymous
-