Test version of slow gauss for retinex

This commit is contained in:
heckflosse
2015-10-29 15:49:13 +01:00
parent d7009c9b6a
commit 280feabddf
2 changed files with 25 additions and 9 deletions

View File

@@ -23,7 +23,7 @@
#include <cstring>
#include <cmath>
#include "opthelper.h"
#include "stdio.h"
// classical filtering if the support window is small:
template<class T> void gaussHorizontal3 (T** src, T** dst, int W, int H, const float c0, const float c1)
@@ -765,22 +765,32 @@ template<class T> void gaussianBlur(T** src, T** dst, const int W, const int H,
{
double newSigma = sigma;
if(forceLowSigma) {
if(forceLowSigma && newSigma > 170.f) {
newSigma /= sqrt(2.0);
if(newSigma < 0.6) { // barrier to avoid using simple gauss version for higher radius
newSigma = sigma;
forceLowSigma = false;
gaussianBlur(src,dst,W,H,newSigma,forceLowSigma);
} else {
gaussianBlur(src,dst,W,H,newSigma,forceLowSigma);
gaussianBlur(dst,dst,W,H,newSigma,forceLowSigma);
}
}
} else {
gaussHorizontal<T> (src, dst, W, H, newSigma);
gaussVertical<T> (dst, dst, W, H, newSigma);
if(forceLowSigma) {
gaussHorizontal<T> (dst, dst, W, H, newSigma);
gaussVertical<T> (dst, dst, W, H, newSigma);
}
// #pragma omp critical
// printf("gauss sigma : %f / %f\n",sigma,newSigma);
/*
if(forceLowSigma && newSigma > 170.f) {
gaussianBlur(dst,dst,W,H,newSigma,forceLowSigma);
// gaussHorizontal<T> (dst, dst, W, H, newSigma);
// gaussVertical<T> (dst, dst, W, H, newSigma);
}
*/
}
#endif

View File

@@ -44,6 +44,8 @@
#include "rawimagesource.h"
#include "improcfun.h"
#include "opthelper.h"
#include "StopWatch.h"
#define MAX_RETINEX_SCALES 8
#define clipretinex( val, minv, maxv ) (( val = (val < minv ? minv : val ) ) > maxv ? maxv : val )
@@ -98,6 +100,9 @@ void retinex_scales( float* scales, int nscales, int mode, int s, float high)
}
}
}
for ( int i = 0; i < nscales; ++i )
printf("sigma[%d] : %f\n",i,scales[i]);
}
void mean_stddv2( float **dst, float &mean, float &stddv, int W_L, int H_L, float &maxtr, float &mintr)
{
@@ -205,6 +210,7 @@ void mean_stddv( float **dst, float &mean, float &stddv, int W_L, int H_L, const
void RawImageSource::MSR(float** luminance, float** originalLuminance, float **exLuminance, int width, int height, RetinexParams deh, const RetinextransmissionCurve & dehatransmissionCurve, float &minCD, float &maxCD, float &mini, float &maxi, float &Tmean, float &Tsigma, float &Tmin, float &Tmax)
{
StopWatch Stop1("MSR");
if (deh.enabled) {//enabled
float mean, stddv, maxtr, mintr;
// float mini, delta, maxi;