Столкнулся с необходимостью делать двумерное фурье набора картинок. Это можно делать двумя путями:
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
С практической точки зрения, отличие двух результатов, конечно же, ничтожное. Однако таки интересно, почему оно есть? В хелпе по этому поводу написано следующее:
Цитата("Matlab 2015a Help")
If the dimensionality of X is greater than 2, the fft2 function returns the 2-D DFT for each higher dimensional slice of X. For example, if size(X) = [100 100 3], then fft2 computes the DFT of X(:,:,1), X(:,:,2) and X(:,:,3).
Таки это баг или все в пределах нормы?