femtoCAM/statsview.cpp
2025-12-14 22:11:08 +01:00

114 lines
3 KiB
C++

#include "statsview.h"
#include "ui_statsview.h"
StatsView::StatsView(QWidget *parent)
: QDialog(parent)
, ui(new Ui::StatsView)
{
ui->setupUi(this);
connect(ui->closeButton, &QPushButton::clicked, this, &QDialog::close);
ui->live_view->setScaledContents(1);
ui->avg_view->setScaledContents(1);
histogramm = new BarChart(ui->histogramm);
}
StatsView::~StatsView()
{
delete ui;
}
void StatsView::vis_new_batch_view(cv::Mat *img)
{
if(cur_batch_vis != nullptr)
delete cur_batch_vis;
cur_batch_vis = img;
ui->live_view->setPixmap(QPixmap::fromImage(QImage((uchar*)img->data, img->cols, img->rows, QImage::Format_Grayscale8)));
ui->live_view->setText("");
}
void StatsView::vis_new_avg_view(cv::Mat *img)
{
ui->avg_view->setPixmap(QPixmap::fromImage(QImage((uchar*)img->data, img->cols, img->rows, QImage::Format_Grayscale8)));
ui->avg_view->setText("");
}
CountChart::CountChart(QChartView *view)
:chartView(view)
{
//series.append(0,6);
//series.append(2,4);
chartView->chart()->addSeries(&series);
axisX.setRange(0,10);
axisY.setRange(0,10);
axisX.setTitleText("Frame");
axisY.setTitleText("Counts");
chartView->chart()->addAxis(&axisY, Qt::AlignLeft);
chartView->chart()->addAxis(&axisX, Qt::AlignBottom);
series.attachAxis(&axisX);
series.attachAxis(&axisY);
chartView->chart()->legend()->hide();
chartView->chart()->setTitle("Counts per Frame");
}
BarChart::BarChart(QChartView *view)
:chartView(view)
{
sets.append(new QBarSet{"Last batch"});
sets.append(new QBarSet{"Avg. over batches"});
QStringList categories;
for(int i = 0; i<10; i++)
{
categories << QString("%1").arg(i);
sets.barSets().at(0)->append(0);
sets.barSets().at(1)->append(0);
}
categories.last() = "9+";
chartView->chart()->addSeries(&sets);
chartView->chart()->setTitle("Distribution of Counts per frame");
//chartView->chart()->setAnimationOptions(QChart::SeriesAnimations);
// Axis
axisX.append(categories);
chartView->chart()->addAxis(&axisX, Qt::AlignBottom);
sets.attachAxis(&axisX);
axisY.setRange(0,100);
chartView->chart()->addAxis(&axisY, Qt::AlignLeft);
sets.attachAxis(&axisY);
chartView->chart()->legend()->setVisible(1);
chartView->chart()->legend()->setAlignment(Qt::AlignBottom);
}
void BarChart::new_batch_data(quint64 distr[10])
{
for(int i = 0; i<10; i++)
{
// New set
sets.barSets().at(0)->remove(i);
sets.barSets().at(0)->insert(i, distr[i]);
// Avg
if(n_since_res == 0)
{
sets.barSets().at(1)->remove(i);
sets.barSets().at(1)->insert(i, distr[i]);
}
else
{
float val = sets.barSets().at(1)->at(i);
sets.barSets().at(1)->remove(i);
sets.barSets().at(1)->insert(i, (val * n_since_res + (float)distr[i]) / (float)(n_since_res + 1) );
}
}
n_since_res++;
}