Add autotrech to conversion

This commit is contained in:
2025-03-01 14:24:28 +01:00
parent 617abf7afe
commit 13e1abf07e
5 changed files with 122 additions and 47 deletions
+2 -45
View File
@@ -107,54 +107,11 @@ void StretchToolbar::stretchImage(Image *img)
{
if(img && img->rawImage())
{
const RawImage::Stats &stats = img->rawImage()->imageStats();
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;
m_mtfParam = img->rawImage()->calcMTFParams(m_stack->currentIndex() == 0,
m_stack->currentIndex() == 1 && img->rawImage()->channels() == 1 && m_debayer->isChecked());
float bp2 = 0;
float mid2 = 0;
float max2 = 0;
for(; i < ch; i++)
{
double median, mad, max;
median = stats.m_median[i];
mad = stats.m_mad[i];
max = stats.m_max[i];
median /= img->rawImage()->norm();
bool a = median > 0.5 ? true : false;
mad /= img->rawImage()->norm();
max = 1.0f;// /= img->rawImage()->norm();
float bp = a || mad == 0.0f ? 0.0f : std::clamp(median + mad * BLACK_POINT_SIGMA * MAD_TO_SIGMA, 0.0, 1.0);
if(a && mad != 0.0f)
max = std::clamp(median - mad * BLACK_POINT_SIGMA * MAD_TO_SIGMA, 0.0, 1.0);
float mid = !a ? MTF(median - bp, TARGET_BACKGROUND) : MTF(TARGET_BACKGROUND, max - median);
m_mtfParam.blackPoint[i-o] = bp;
m_mtfParam.midPoint[i-o] = mid;// / max;
m_mtfParam.whitePoint[i-o] = max;
bp2 += bp;
mid2 += mid;
max2 = max > max2 ? max : max2;
}
if(ch == 1)
{
m_mtfParam.blackPoint[1] = m_mtfParam.blackPoint[2] = m_mtfParam.blackPoint[0];
m_mtfParam.midPoint[1] = m_mtfParam.midPoint[2] = m_mtfParam.midPoint[0];
m_mtfParam.whitePoint[1] = m_mtfParam.whitePoint[2] = m_mtfParam.whitePoint[0];
}
if(m_stack->currentIndex() == 0)
{
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;
m_stfSlider->setMTFParams(m_mtfParam.blackPoint[0], m_mtfParam.midPoint[0], m_mtfParam.whitePoint[0]);
}
else