How do you measure “detail” of a signal?

I have an image and I would like to measure the amount of detail in it. Another way to look at it is to measure how blurry an image is. One way is to analyse the high frequency components in the Fourier transform of the image.

Are there any other/better methods?

• Would an image with less "detail" be more compressible by an algorithm like JPEG? – endolith Aug 25 '11 at 19:25

What you are referring to is typically known as "Image Sharpness". A quick scan, as well as some prior knowledge, comes to the following:

1. Fourier analysis- Using this has 2 key disadvantages. First of all, noise would tend to show up no matter what, and thus higher frequency components would tend to show up. Secondly, sharpness tends to be a local phenomena, and thus might not show up if you do a transform of the entire image.
2. Eigenvalue analysis- I haven't actually read this paper, but it proposes using eigenvalue analysis to determine the sharpness of an image.
3. Edge detection algorithms depend on a certain amount of sharpness. One could use different values for edge detection parameters to determine the amount of sharpness.
4. Kurtosis Measurement of wavelet coefficients- Again, I haven't read the entire paper, but this seems to suggest calculating wavelet coefficients, performing an FFT of the entire set of coefficients, and measuring the kurtosis. This should be relatively immune to noise.

I'm sure there are many more. This is a very active field of study currently. If none of these methods suits you, then continue to search through academic papers, and see if you can find a better method.

I think that if you talk about the amount of detail in an image, the discrete wavelet transform (DWT) fits your description perfectly. It isn't completely dissimilar from the discrete Fourier transform (DFT) in that it, too, operates in terms of fine and coarse scale components of a signal, but it's also very localized unlike the DFT. A fantastic introduction for one-dimensional signals by I. Selesnick is here.

A wavelet transform essentially is a series of nested orthogonal band-pass filters that in the end create signals of different spectral components, so in this sense you can use either wavelet of Fourier transform. However, if you would like to actually plot the components separately from each other, you have to use WFT because is also gives you the right window and localization in space.

If you want to simply compute the amount of detail on each scale level, calculating total energy of each band in interest in the Fourier transform would suffice:

$$D_{\beta} = \sum_{\omega_{\beta} \in \beta}\left\vert S^f(\omega_{\beta})\right\vert^2$$

where $S^f(\omega)$ is the Fourier transform of some signal $s(t)$, and $\beta$ is some interval of frequencies in the Fourier domain.