Столкнулся с необходимостью делать двумерное фурье набора картинок. Это можно делать двумя путями:
1) через цикл прогнать все картинки по одной.
2) загнать из в трехмерную матрицу и обработать одной командой.
Забавность заключается в том, что при выполнении двумерного фурье двуми, казалось бы, идентичными способами, получаются слегка разные результаты. Ниже пример этого в коде:
Создаем исходный массив:
A = rand(100,100,10);
Обработка через цикл:
for ii = 1:10
f1(:,:,ii) = fft2(A(:,:, ii));
end
Обработка единой матрицы:
f2 = fft2(A);
Сравнение результатов:
std(f1(:)-f2(:))
ans =
1.6847e-14
С практической точки зрения, отличие двух результатов, конечно же, ничтожное. Однако таки интересно, почему оно есть? В хелпе по этому поводу написано следующее:
Таки это баг или все в пределах нормы?