#include "stretchpanel.h" #include #include #include #include "imageringlist.h" const float BLACK_POINT_SIGMA = -2.8f; const float MAD_TO_SIGMA = 1.4826f; const float TARGET_BACKGROUND = 0.25f; float MTF(float x, float m) { if(x < 0)return 0; if(x > 1)return 1; return ((m - 1) * x) / ((2 * m - 1) * x - m); } StretchPanel::StretchPanel(QWidget *parent) : QWidget(parent) { QHBoxLayout *layout = new QHBoxLayout(this); setLayout(layout); m_stfSlider = new STFSlider(this); layout->addWidget(m_stfSlider); connect(m_stfSlider, SIGNAL(paramChanged(float, float, float)), this, SIGNAL(paramChanged(float,float,float))); QPushButton *resetButton = new QPushButton(tr("Reset STF"), this); resetButton->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum); layout->addWidget(resetButton); connect(resetButton, SIGNAL(pressed()), this, SLOT(resetMTF())); } void StretchPanel::imageLoaded(Image *img) { if(img) { if(img->rawImage()) { double mean, stdDev, median; img->rawImage()->imageStats(&mean, &stdDev, &median, nullptr, nullptr); median /= 65536; double mad = img->rawImage()->MAD() / 65536; float bp = median + mad * BLACK_POINT_SIGMA * MAD_TO_SIGMA; float mid = MTF(median - bp, TARGET_BACKGROUND); m_stfSlider->setMTFParams(bp, mid, 1.0f); emit paramChanged(m_stfSlider->blackPoint(), m_stfSlider->midPoint(), 1.0f); } } } void StretchPanel::resetMTF() { m_stfSlider->setMTFParams(0, 0.5, 1); emit paramChanged(0, 0.5, 1); }