You may have seen the demos of computing heart rate by looking at video, where they detect the face, compute a mean on the red channel from the face, submit the resulting mean-per-frame to an FFT computed across frames, and look for the peak of power across a reasonable range of human heart rates. Looking at formal papers on this, it seems a common approach is to actually do an ICA on all 3 color channels, then choose the resulting component that "looks most like a pulse". I figured that a shortcut might be to convert to HSL colorspace, then do the analysis on the hue channel alone. However, I'm not sure how to deal with the circular space of the hue data; for example, when stored as an 8-bit integer, the real hue difference between 255 and 0 is pretty much nil, but if I apply a conventional FFT to the data it will see a shift from 255 to 0 as a huge shift. Any suggestions on the proper application to FFT to this sort of data?
- Anybody can ask a question
- Anybody can answer
- The best answers are voted up and rise to the top
If you insist on computing the FFT on the hue separately, you can consider the hue as the unit circle in the complex plane, and compute the FFT of the complex data. You can look for peaks in the magnitude of the FFT to find the pulse frequency.
I say "if you insist" because once you think of the hue as a point on the plane, it becomes more natural to think of the saturation as being distance from the center of the circle, so that gray is the origin of the complex plane. Once you do that, you're in the Lab color space, where the complex plane is the (a,b) plane in the color space.