Better stretch non full range images like CR2
This commit is contained in:
+7
-4
@@ -114,18 +114,21 @@ void StretchToolbar::stretchImage(Image *img)
|
|||||||
float max2 = 0;
|
float max2 = 0;
|
||||||
for(; i < ch; i++)
|
for(; i < ch; i++)
|
||||||
{
|
{
|
||||||
double median, mad;
|
double median, mad, max;
|
||||||
median = stats.m_median[i];
|
median = stats.m_median[i];
|
||||||
mad = stats.m_mad[i];
|
mad = stats.m_mad[i];
|
||||||
|
max = stats.m_max[i];
|
||||||
median /= img->rawImage()->norm();
|
median /= img->rawImage()->norm();
|
||||||
mad /= img->rawImage()->norm();
|
mad /= img->rawImage()->norm();
|
||||||
|
max /= img->rawImage()->norm();
|
||||||
float bp = median + mad * BLACK_POINT_SIGMA * MAD_TO_SIGMA;
|
float bp = median + mad * BLACK_POINT_SIGMA * MAD_TO_SIGMA;
|
||||||
float mid = MTF(median - bp, TARGET_BACKGROUND);
|
float mid = MTF(median - bp, TARGET_BACKGROUND);
|
||||||
m_mtfParam.blackPoint[i-o] = bp;
|
m_mtfParam.blackPoint[i-o] = bp;
|
||||||
m_mtfParam.midPoint[i-o] = mid;
|
m_mtfParam.midPoint[i-o] = mid / max;
|
||||||
m_mtfParam.whitePoint[i-o] = 1.0f;
|
m_mtfParam.whitePoint[i-o] = max;
|
||||||
bp2 += bp;
|
bp2 += bp;
|
||||||
mid2 += mid;
|
mid2 += mid;
|
||||||
|
max2 = max > max2 ? max : max2;
|
||||||
}
|
}
|
||||||
if(ch == 1)
|
if(ch == 1)
|
||||||
{
|
{
|
||||||
@@ -137,7 +140,7 @@ void StretchToolbar::stretchImage(Image *img)
|
|||||||
{
|
{
|
||||||
m_mtfParam.blackPoint[0] = m_mtfParam.blackPoint[1] = m_mtfParam.blackPoint[2] = bp2 / ch;
|
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.midPoint[0] = m_mtfParam.midPoint[1] = m_mtfParam.midPoint[2] = mid2 / ch;
|
||||||
m_mtfParam.whitePoint[0] = m_mtfParam.whitePoint[1] = m_mtfParam.whitePoint[2] = 1.0f;
|
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]);
|
m_stfSlider->setMTFParams(m_mtfParam.blackPoint[0], m_mtfParam.midPoint[0], m_mtfParam.whitePoint[0]);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
Reference in New Issue
Block a user