0
$\begingroup$

According to the conjugate symmetry property of Fourier transform, shouldn't the following command not return 1 (=true):

x=imread('cameraman.tif');
ishermitian(fft2(x))

However it does not (returns 0).

Is it due to some rounding error? Something else? Otherwise, how would you check that it is (avoiding to write a painful code with for loops etc)?

$\endgroup$
  • $\begingroup$ I assume x is 3D (R, G, B channels imported?). So is fft2 really doing a 3D FFT or, just 3 2D FFTs? $\endgroup$ – M529 Aug 9 at 20:39
1
$\begingroup$

In the 2D (continuous) Fourier domain, the Hermitian symmetry (for functions) writes (conjugate symmetric with respect to the origin):

$$F(-u,-v) = \overline{F}(u,v)\,.$$

For matrix $A_{i,j}$, we should have:

$$ a_{i,j} = \overline{a}_{j,i}$$

which means that the diagonal is real. As you can see, Hermitian matrices and Hermitian functions are slightly different. There is something in the diagonal that needs a center. But diagonals of matrices are real.

Plus, the FFT output matrix is not straightforwardly organized like the (continuous) Fourier transform. Friday night here, I am coming back later on FFT symmetries.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.