Fourier transform in Matlab and hermitian symmetry

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)?

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

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.

• Remember, with MATLAB, these indices are off by 1. Aug 9 '19 at 22:42