From d4b9d024b30618ffc132f2c6b2821dc639a5d851 Mon Sep 17 00:00:00 2001 From: jdc Date: Mon, 26 Aug 2013 12:07:43 +0200 Subject: [PATCH] Small issue found in Micocontrast on behalf of Reine Edvardson issue 1957 --- rtengine/ipsharpen.cc | 86 ++++++++++++++++++++++++------------------- 1 file changed, 48 insertions(+), 38 deletions(-) diff --git a/rtengine/ipsharpen.cc b/rtengine/ipsharpen.cc index 0421347a9..1d0672ebe 100644 --- a/rtengine/ipsharpen.cc +++ b/rtengine/ipsharpen.cc @@ -20,9 +20,9 @@ #include "improcfun.h" #include "gauss.h" #include "bilateral2.h" -#include "rt_math.h" +#include "rt_math.h" #include "sleef.c" -#ifdef __SSE2__ +#ifdef __SSE2__ #include "sleefsseavx.c" #endif #ifdef _OPENMP @@ -47,54 +47,54 @@ void ImProcFunctions::dcdamping (float** aI, float** aO, float damping, int W, i #endif const float dampingFac=-2.0/(damping*damping); - -#ifdef __SSE2__ - __m128 Iv,Ov,Uv,zerov,onev,fourv,fivev,dampingFacv,Tv; - zerov = _mm_setzero_ps( ); - onev = _mm_set1_ps( 1.0f ); - fourv = _mm_set1_ps( 4.0f ); - fivev = _mm_set1_ps( 5.0f ); - dampingFacv = _mm_set1_ps( dampingFac ); + +#ifdef __SSE2__ + __m128 Iv,Ov,Uv,zerov,onev,fourv,fivev,dampingFacv,Tv; + zerov = _mm_setzero_ps( ); + onev = _mm_set1_ps( 1.0f ); + fourv = _mm_set1_ps( 4.0f ); + fivev = _mm_set1_ps( 5.0f ); + dampingFacv = _mm_set1_ps( dampingFac ); #ifdef _OPENMP #pragma omp for #endif for (int i=0; iL[i][j]; } - float** tmp = (float**)b2; + float** tmp = (float**)b2; #ifdef _OPENMP #pragma omp parallel @@ -180,7 +180,7 @@ void ImProcFunctions::deconvsharpening (LabImage* lab, float** b2) { for (int i=0; iThe purpose is maximize clarity of the image without creating halo's. +//!
Addition from JD : pyramid + pondered contrast with matrix 5x5 +//! \param lab LabImage Image in the CIELab colour space void ImProcFunctions::MLmicrocontrast(LabImage* lab) { if (params->sharpenMicro.enabled==false) return; @@ -591,13 +595,14 @@ void ImProcFunctions::MLmicrocontrast(LabImage* lab) { n=0; - for(row=j-k; row<=j+k; row++) + for(row=j-k; row<=j+k; row++){ for(col=i-k,offset2=row*width+col; col<=i+k; col++,offset2++){ if (((v0))||((v>LM[offset2])&&(signs[n]<0))) { temp = v*0.75f+LM[offset2]*0.25f;// 0.75 0.25 - n++; } + n++; } + } if (LM[offset]>95.0f || LM[offset]<5.0f) contrast *= Cont0[unif]; //+ JD : luminance pyramid to adjust contrast by evaluation of LM[offset] else if (LM[offset]>90.0f || LM[offset]<10.0f) @@ -675,6 +680,10 @@ void ImProcFunctions::MLmicrocontrast(LabImage* lab) { } +//! MicroContrast is a sharpening method developed by Manuel Llorens and documented here: http://www.rawness.es/sharpening/?lang=en +//!
The purpose is maximize clarity of the image without creating halo's. +//!
Addition from JD : pyramid + pondered contrast with matrix 5x5 +//! \param ncie CieImage Image in the CIECAM02 colour space void ImProcFunctions::MLmicrocontrastcam(CieImage* ncie) { if (params->sharpenMicro.enabled==false) return; @@ -784,13 +793,14 @@ void ImProcFunctions::MLmicrocontrastcam(CieImage* ncie) { n=0; - for(row=j-k; row<=j+k; row++) + for(row=j-k; row<=j+k; row++){ for(col=i-k,offset2=row*width+col; col<=i+k; col++,offset2++){ if (((v0))||((v>LM[offset2])&&(signs[n]<0))) { temp = v*0.75f+LM[offset2]*0.25f;// 0.75 0.25 - n++; } + n++; } + } if (LM[offset]>95.0f || LM[offset]<5.0f) contrast *= Cont0[unif]; //+ JD : luminance pyramid to adjust contrast by evaluation of LM[offset] else if (LM[offset]>90.0f || LM[offset]<10.0f)