Я должен применить фильтр свертки для каждого ряда изображений. Классика - это 360 изображений размером 1024х1024 пикселей. В моем случае это 720 изображений 560х600 пикселей.
Проблема в том, что мой код намного медленнее, чем рекламируется в статьях.
Я реализовал наивную свертку, и это занимает 2 м 30 с. Затем я переключился на FFT, используя fftw. Я использовал сложный комплекс 2, фильтруя две строки в каждом преобразовании. Мне сейчас около 20 лет.
Дело в том, что статьи рекламируют около 10 секунд и даже меньше для классического состояния.
Поэтому я хотел бы спросить экспертов здесь, может ли быть более быстрый способ вычисления свертки.
Численные рецепты предлагают избегать сортировки, выполненной в dft, и соответственно адаптировать функцию фильтра частотной области. Но нет примера кода, как это можно сделать.
Может быть, я теряю время на копирование данных. С реальным 2 реальным преобразованием мне не пришлось бы копировать данные в сложные значения. Но я все равно должен дополнить 0.
РЕДАКТИРОВАТЬ: см. Мой собственный ответ ниже для получения информации о прогрессе и дополнительной информации по решению этой проблемы.
Вопрос (точная переформулировка):
Я ищу алгоритм или фрагмент кода, чтобы применить очень быструю свертку к дискретной непериодической функции (от 512 до 2048 значений). По всей видимости, лучше всего использовать преобразование Фурье с дискретным временем. Однако я бы хотел избежать копирования и преобразования данных в сложные, а также избегать переупорядочения бабочек.