Made unlinked stretch white balancing

This commit is contained in:
2023-11-14 23:47:47 +01:00
parent e97e10fb5b
commit 544e4abf92
4 changed files with 52 additions and 32 deletions
+21 -14
View File
@@ -84,9 +84,9 @@ StretchToolbar::StretchToolbar(QWidget *parent) : QToolBar(tr("Stretch toolbar")
falseColorButton->setCheckable(true);
connect(falseColorButton, &QAction::toggled, this, &StretchToolbar::falseColor);
QAction *superPixelButton = addAction(QIcon(":/bayer.png"), tr("Debayer CFA"));
superPixelButton->setCheckable(true);
connect(superPixelButton, &QAction::toggled, this, &StretchToolbar::superPixel);
m_debayer = addAction(QIcon(":/bayer.png"), tr("Debayer CFA"));
m_debayer->setCheckable(true);
connect(m_debayer, &QAction::toggled, this, &StretchToolbar::superPixel);
m_autoStretchOnLoad = addAction(QIcon(":/nuke_a.png"), tr("Apply auto stretch on load"));
m_autoStretchOnLoad->setCheckable(true);
@@ -97,28 +97,35 @@ void StretchToolbar::stretchImage(Image *img)
if(img && img->rawImage())
{
const RawImage::Stats &stats = img->rawImage()->imageStats();
int ch = img->rawImage()->channels() == 1 ? 1 : 3;
int i = 0;
int ch = 1;
int o = 0;
if(m_stack->currentIndex() == 1 && img->rawImage()->channels() == 1 && m_debayer->isChecked())
{
i = 1;
ch = 4;
o = 1;
}
if(img->rawImage()->channels() >= 3)
ch = 3;
float bp2 = 0;
float mid2 = 0;
float max2 = 0;
for(int i=0; i < ch; i++)
for(; i < ch; i++)
{
double median, mad, max;
double median, mad;
median = stats.m_median[i];
mad = stats.m_mad[i];
max = stats.m_max[i];
median /= img->rawImage()->norm();
mad /= img->rawImage()->norm();
max /= img->rawImage()->norm();
if(max>1.0f)max = 1.0f;
float bp = median + mad * BLACK_POINT_SIGMA * MAD_TO_SIGMA;
float mid = MTF(median - bp, TARGET_BACKGROUND);
m_mtfParam.blackPoint[i] = bp;
m_mtfParam.midPoint[i] = mid;
m_mtfParam.whitePoint[i] = max;
m_mtfParam.blackPoint[i-o] = bp;
m_mtfParam.midPoint[i-o] = mid;
m_mtfParam.whitePoint[i-o] = 1.0f;
bp2 += bp;
mid2 += mid;
max2 += max;
}
if(ch == 1)
{
@@ -130,7 +137,7 @@ void StretchToolbar::stretchImage(Image *img)
{
m_mtfParam.blackPoint[0] = m_mtfParam.blackPoint[1] = m_mtfParam.blackPoint[2] = bp2 / ch;
m_mtfParam.midPoint[0] = m_mtfParam.midPoint[1] = m_mtfParam.midPoint[2] = mid2 / ch;
m_mtfParam.whitePoint[0] = m_mtfParam.whitePoint[1] = m_mtfParam.whitePoint[2] = max2 / ch;
m_mtfParam.whitePoint[0] = m_mtfParam.whitePoint[1] = m_mtfParam.whitePoint[2] = 1.0f;
m_stfSlider->setMTFParams(m_mtfParam.blackPoint[0], m_mtfParam.midPoint[0], m_mtfParam.whitePoint[0]);
}
else