Fix error in starfit model, preparation for angled version

This commit is contained in:
2019-10-11 13:16:25 +02:00
parent 702d2111cc
commit 9dacf62226
4 changed files with 198 additions and 23 deletions
+65 -3
View File
@@ -6,9 +6,11 @@
#include <QPainter>
#include <QElapsedTimer>
#include <QDebug>
#include <iostream>
#include <libexif/exif-data.h>
#include <fitsio2.h>
#include "rawimage.h"
#include "starfit.h"
LoadRunable::LoadRunable(const QString &file, Image *receiver, AnalyzeLevel level) :
m_file(file),
@@ -40,6 +42,39 @@ void drawPeaks(QImage &img, const std::vector<Peak> &peaks)
img = pix.toImage();
}
void drawStars(QImage &img, const std::vector<Star> &stars)
{
QPixmap pix = QPixmap::fromImage(img);
QPainter painter(&pix);
painter.setPen(Qt::red);
for(auto star : stars)
{
painter.drawEllipse(QPointF(star.m_x, star.m_y), star.m_sx, star.m_sy);
}
img = pix.toImage();
}
void printStarModel(int radius, const std::vector<double> &data, const Star &star)
{
QString d = "d=[";
QString m = "m=[";
for(int y=0; y<radius; y++)
{
for(int x=0; x<radius; x++)
{
d += QString::number(data[y*radius+x]) + ",";
m += QString::number(gauss_model(star.m_am, star.m_x, star.m_y, star.m_sx, star.m_sy, x, y)) + ",";
}
d += ";";
m += ";";
}
d += "];";
m += "];";
//std::cout << star.m_am << " " << star.m_sx << star.m_sy << std::endl;
std::cout << d.toStdString() << std::endl;
std::cout << m.toStdString() << std::endl << std::endl;
}
bool loadRAW(QString path, ImageInfoData &info, RawImageAbs **image, QImage *qimage)
{
if(!image && !qimage)
@@ -271,14 +306,41 @@ void LoadRunable::run()
rawImage->quarter();
qDebug() << "quarter" << timer.restart();
}
rawImage->medianFilter();
RawImageAbs *medianImage = rawImage->medianFilter();
qDebug() << "median" << timer.restart();
int numPeaks = rawImage->findPeaks(median+stdDev, 20, peaks);
int numPeaks = medianImage->findPeaks(median+stdDev, 20, peaks);
delete medianImage;
qDebug() << "peaks" << timer.restart();
drawPeaks(img, peaks);
if(m_analyzeLevel == Peaks)
drawPeaks(img, peaks);
qDebug() << "draw peaks" << timer.restart();
info.append(StringPair(QObject::tr("Peaks"), QString::number(numPeaks)));
info.append(StringPair(QObject::tr("Peaks draw"), QString::number(peaks.size())));
if(m_analyzeLevel>= Stars)
{
const int radius = 13;
StarFit starFit(radius);
std::vector<Star> stars;
for(uint i=0; i<peaks.size(); i++)
{
Peak p = peaks[i];
std::vector<double> r;
int x = p.x();
int y = p.y();
rawImage->rect(x, y, radius, radius, r);
Star star = starFit.fitStar(r, false);
if(star.valid())
{
//printStarModel(radius, r, star);
star.m_x += x;
star.m_y += y;
stars.push_back(star);
}
}
drawStars(img, stars);
}
qDebug() << "Star fit" << timer.restart();
}
}