Compare commits

...

1 Commits

Author SHA1 Message Date
Ly PECHVATTANA c6b499c386 v1 2023-02-21 17:30:00 +01:00
2 changed files with 50 additions and 0 deletions

BIN
ppg

Binary file not shown.

50
ppg.cpp
View File

@ -5,6 +5,25 @@
int FPS = 15; int FPS = 15;
int DISCARD_DURATION = 1; int DISCARD_DURATION = 1;
int BUFFER_DURATION = 1;
template <typename T>
cv::Mat plotGraph(std::vector<T>& vals, int YRange[2])
{
auto it = minmax_element(vals.begin(), vals.end());
float scale = 1./ceil(*it.second - *it.first);
float bias = *it.first;
int rows = YRange[1] - YRange[0] + 1;
cv::Mat image = 255*cv::Mat::ones( rows, vals.size(), CV_8UC3 );
image.setTo(255);
for (int i = 0; i < (int)vals.size()-1; i++)
{
cv::line(image, cv::Point(i, rows - 1 - (vals[i] -
bias)*scale*YRange[1]), cv::Point(i+1, rows - 1 - (vals[i+1] -
bias)*scale*YRange[1]), cv::Scalar(255, 0, 0), 1);
}
return image;
}
int main() int main()
{ {
@ -65,11 +84,42 @@ int main()
foreheadROI.height *= 0.3; foreheadROI.height *= 0.3;
cv::rectangle(frame, foreheadROI, cv::Scalar(0, 0, 255), 1, 1, 0); cv::rectangle(frame, foreheadROI, cv::Scalar(0, 0, 255), 1, 1, 0);
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)
{
greenSignal.at<double>(0, sampleIdBuffer) = avg_forehead[1] ;
sampleIdBuffer++;
if (sampleIdBuffer == FPS*BUFFER_DURATION)
{
isBufferFull = true;
}
}
std::vector<double> greenSignalNormalized;
cv::Scalar mean, stddev;
cv::meanStdDev(greenSignal, mean, stddev);
for (int l_sample=0; l_sample < FPS*BUFFER_DURATION; l_sample++)
{
greenSignalNormalized.push_back((greenSignal.at<double>(0, l_sample) -
mean[0])/stddev[0]);
}
int range[2] = {0, (int)(FPS*BUFFER_DURATION)};
cv::imshow("green", plotGraph(greenSignalNormalized, range));
} }
cv::imshow("Color", frame); cv::imshow("Color", frame);
if (cv::waitKey(1000.0/FPS) >= 0) if (cv::waitKey(1000.0/FPS) >= 0)
break; break;
} }