Мне нужен эквивалент Python/Numpy дискретного лапласианского оператора (функции) del2() в Matlab (Octave). Я попробовал пару решений Python, ни одно из которых не соответствует выводу del2. На октаве у меня
image = [3 4 6 7; 8 9 10 11; 12 13 14 15;16 17 18 19]
del2(image)
это дает результат
0.25000 -0.25000 -0.25000 -0.75000
-0.25000 -0.25000 0.00000 0.00000
0.00000 0.00000 0.00000 0.00000
0.25000 0.25000 0.00000 0.00000
На питоне пробовал
import numpy as np
from scipy import ndimage
import scipy.ndimage.filters
image = np.array([[3, 4, 6, 7],[8, 9, 10, 11],[12, 13, 14, 15],[16, 17, 18, 19]])
stencil = np.array([[0, 1, 0],[1, -4, 1], [0, 1, 0]])
print ndimage.convolve(image, stencil, mode='wrap')
что дает результат
[[ 23 19 15 11]
[ 3 -1 0 -4]
[ 4 0 0 -4]
[-13 -17 -16 -20]]
я тоже пробовал
scipy.ndimage.filters.laplace(image)
Это дает результат
[[ 6 6 3 3]
[ 0 -1 0 -1]
[ 1 0 0 -1]
[-3 -4 -4 -5]]
Таким образом, ни один из выходов не соответствует друг другу. Октавный код del2.m предполагает, что это оператор Лапласа. Я что-то упускаю?
mode="wrap"
дляlaplace()
. Но, просто глядя на результат Matlab, я понятия не имею, что Matlab делает на границах. - person Sven Marnach   schedule 15.01.2011laplace()
, вы не сможете получить правильный результат и на границах. - person astrojuanlu   schedule 08.04.2013