2015-03-25 4 views
0

Я с нетерпением жду ускорения свертки с производной гауссовых ядер (до порядка 2/3) на больших медицинских изображениях (512 x 512 x 1000 double) в одном из наших инструментов с открытым исходным кодом. В настоящее время мы выполняем эту свертку с помощью FFT.Использует ли свертку в ArrayFire FFT?

После того, как вы предложили другу о ArrayFire и после прочтения этого post, я пытаюсь проверить, могу ли я принять этот инструментарий. Похоже, это большое усилие и позволяет нам обрабатывать несколько бэкэндов, хотя в настоящее время я заинтересован в CUDA, так как это то, что у меня есть.

Я прочитал этот post на форуме, в котором говорится, что свертка в ArrayFire переключается на частотную область после определенного размера ядра. Я посмотрел файл cuda convolve.cu, но я не нашел никаких вызовов в fft в ArrayFire или любом из файлов cuFFT. Я что-то упускаю?

Идти вперед, я хотел бы построить производную от гауссова ядра непосредственно в частотной области, умножить на изображение FFT и вернуть ее обратно. Но я хотел бы сравнить ускорения между созданием ядра свертки в пространстве vs freq domain. Кроме того, ArrayFire, похоже, не имеет гауссовского ядра в 3D.

ответ

0

Ваши наблюдения верны, мы еще не реализовали резерв fft для больших размеров ядра. Однако мы стараемся добавить эту функциональность в ближайшие пару недель. Какие размеры ядра вы используете в своем приложении?

В настоящее время мы не реализуем функцию гауссовского ядра 3D. Но я считаю, что он может быть легко реализован с использованием элементов, связанных с JIT, в ArrayFire. Для примера о том, как использовать элементарные операции, смотрите here.

+0

зависит от конкретной проблемы. Я бы предположил где-то до 40х40х40. Но тогда для больших размеров ядра люди могли бы уменьшить изображение и запустить материал через гауссовую пирамиду изображения. – cdeepakroy