From 0f0fc3f50233e078c2d86e0c17d61dfcec39946a Mon Sep 17 00:00:00 2001 From: Thomas Date: Wed, 1 Mar 2023 23:35:58 +0100 Subject: [PATCH] Final version --- ppg.cpp | 34 ++++++++++++++++++++++++---------- 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/ppg.cpp b/ppg.cpp index ba461a8..2e72682 100644 --- a/ppg.cpp +++ b/ppg.cpp @@ -2,12 +2,17 @@ #include "opencv2/videoio.hpp" #include "opencv2/highgui.hpp" - -const int FPS = 30; +const int FPS = 15; bool isDiscardData = true; int countDiscard = 0; const int DISCARD_DURATION = 5; -const int BUFFER_DURATION = 30; +const int BUFFER_DURATION = 30 ; +const int I = 1; + +bool isBufferFull = false; +int sampleIdBuffer = 0; + +std::vector greenFFTModule; template cv::Mat plotGraph(std::vector& vals, int YRange[2]) @@ -79,8 +84,7 @@ int main() cv::Mat frame_forehead = frame(foreheadROI); cv::Scalar avg_forehead = mean(frame_forehead); - bool isBufferFull = false; - int sampleIdBuffer = 0; + // cv::Mat greenSignal(1, FPS*BUFFER_DURATION, CV_64F); if (!isBufferFull) { @@ -103,23 +107,33 @@ int main() int range[2] = {0, (int)(FPS*BUFFER_DURATION)}; - cv::imshow("green", plotGraph(greenSignalNormalized, range)); + cv::Mat greenFFT; + /// + cv::dft(greenSignalNormalized,greenFFT,cv::DFT_ROWS|cv::DFT_COMPLEX_OUTPUT); + cv::Mat planes[] = {cv::Mat::zeros(greenSignalNormalized.size(),1, CV_64F), + cv::Mat::zeros(greenSignalNormalized.size(),1, CV_64F)}; + cv::split(greenFFT, planes); //planes[0] = Re(DFT(I), + //planes[1] = Im(DFT(I)) + greenFFTModule.clear(); + for (int l=0; l < planes[1].cols; l++) + { + double moduleFFT = pow(planes[1].at(0,l),2) + pow(planes[0].at(0,l),2); + greenFFTModule.push_back(sqrt(moduleFFT)); + } + // display green FFT + cv::imshow("FFT module green", plotGraph(greenFFTModule, range)); } - } cv::imshow("Your Face PLS", frame); if (cv::waitKey(1000.0/FPS) >= 0) break; - - } } - return 0; }