From e5f425ff8dd1e425bf1c51656a2320b67c1b9e48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Du=C5=A1an=20Poizl?= Date: Thu, 18 Jan 2024 16:10:11 +0100 Subject: [PATCH] Fix some edge cases when stretch --- stretchtoolbar.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/stretchtoolbar.cpp b/stretchtoolbar.cpp index 1373047..88adc93 100644 --- a/stretchtoolbar.cpp +++ b/stretchtoolbar.cpp @@ -120,12 +120,15 @@ void StretchToolbar::stretchImage(Image *img) 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 /= img->rawImage()->norm(); - float bp = median + mad * BLACK_POINT_SIGMA * MAD_TO_SIGMA; - float mid = MTF(median - bp, TARGET_BACKGROUND); + 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.midPoint[i-o] = mid;// / max; m_mtfParam.whitePoint[i-o] = max; bp2 += bp; mid2 += mid;