TypeError в scipy.signal.sepfir2d

Я пытаюсь рассчитать производные оптического потока (как указано в моем предыдущем вопросе SO) и я сталкиваюсь с TypeError при выполнении расчета.

Сначала я прочитал видео об использовании OpenCV и использовал его методы оптического потока для определения скоростей. Затем я использую библиотеку scipy.signal для запуска фильтра Гаусса по скоростям и вычисления производных.

cv.CalcOpticalFlowLK(prev_frame, curr_frame, (11, 11), velx, vely)

# ... convert velx and vely to numpy arrays ...

# Set up the gaussian filter and its derivative.
sigmaBlur = 1
sigmaGrey = 4
gBlurSize = 2 * np.around(2.5 * sigmaBlur) + 1
x = np.mgrid[1:gBlurSize + 1] - np.around((gBlurSize + 1) / 2)
gFilt = np.exp(-(x ** 2) / (2 * (sigmaBlur ** 2)))
gFilt /= np.sum(gFilt)
gxFilt = (-x / (sigmaBlur ** 2)) * gFilt

# Now calculate the derivative of the velocity.
res = scipy.signal.sepfir2d(velx, gxFilt, gFilt)

# ... 3 more calls to sepfir2d ... #

К сожалению, при вызове sepfir2d я получаю следующую ошибку:

TypeError: array cannot be safely cast to required type

документация на веб-сайте Scipy. встречается крайне редко, и я не могу найти много других примеров его использования. Все три аргумента sepfir2d являются пустыми массивами; velx — это матрица, а gxFilt и gFilt — это векторы одинаковой длины (я думаю, в данном случае 5). Есть мысли, почему возникает ошибка типа?


person Magsol    schedule 01.11.2011    source источник
comment
Что бы это ни стоило, scipy.signal.seqfir2d кажется довольно странным способом сделать это... Любая причина, по которой вы не можете использовать один из наиболее распространенных маршрутов, например. scipy.ndimage.gaussian_gradient_magnitude и т. д.?   -  person Joe Kington    schedule 02.11.2011
comment
На самом деле я обсуждал это, но я не мог сказать только по документации, было ли это тем, что мне нужно. Делает ли он то же самое, что и код, который я написал выше? (Я новичок в области оптических потоков, поэтому не стесняйтесь объяснять так подробно, как вам нравится)   -  person Magsol    schedule 04.11.2011


Ответы (1)


После долгих испытаний (просмотр исходного кода для sepfir2d вообще не помог) оказалось, что проблема заключалась в том, что мои velx и vely использовали 32-битные примитивы с плавающей запятой, когда они должны были быть 64-битными. Это исправило это.

person Magsol    schedule 01.11.2011