2016-05-10 2 views
1

У меня есть 3D-матрица, которую я хотел бы (гауссовское) размытие. Это я могу сделать с scipy.ndimage.filters.gaussian_filter(). Мой вопрос: что я могу сделать, чтобы пиксели на краях были размыты, чтобы выполнялись периодические граничные условия?Размытие массива 3D-numpy с периодическими граничными условиями

Что я имею в виду, так это то, что когда рассматривается элемент в a[0,:,:], на значение, соответствующее этому элементу, также должны влиять элементы в a[-1,:,:].

Я думал конкатенации тот же массив a несколько раз, так что у меня есть массив формы [[[a,a,a],[a,a,a],[a,a,a]],[[a,a,a],[a,a,a],[a,a,a]],[[a,a,a],[a,a,a],[a,a,a]]], то есть массив, который состоит из 3 на 3 сетки a с. Я бы затем размыл результирующий массив. Поскольку моя матрица довольно большая (200 на 200 на 200), я стараюсь избегать этого. (Я мог бы рассмотреть подмассиву результирующего большого массива, где я оставляю достаточно поля вокруг a в центре. Однако для этого потребуется определить размер этого поля при каждом изменении размытия размытия.)

Есть ли простой и эффективный способ сделать это?

ответ

3

Установка аргумента ключевого слова mode в «wrap» будет обеспечивать периодические граничные условия. Код будет выглядеть примерно так:

result = gaussian_filter(a, sigma = 1., mode='wrap') 

Замена сигмы на фактические параметры (ы), конечно.

Смежные вопросы