Retinex, fix wrong usage of omp

This commit is contained in:
heckflosse 2016-02-08 16:33:37 +01:00
parent 23ea31cd78
commit 42e025501d

View File

@ -45,6 +45,7 @@
#include "rawimagesource.h" #include "rawimagesource.h"
#include "improcfun.h" #include "improcfun.h"
#include "opthelper.h" #include "opthelper.h"
#define BENCHMARK
#include "StopWatch.h" #include "StopWatch.h"
#define MAX_RETINEX_SCALES 8 #define MAX_RETINEX_SCALES 8
@ -208,6 +209,8 @@ 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, LUTf & mapcurve, bool &mapcontlutili, 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) void RawImageSource::MSR(float** luminance, float** originalLuminance, float **exLuminance, LUTf & mapcurve, bool &mapcontlutili, 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)
{ {
BENCHFUN
if (deh.enabled) {//enabled if (deh.enabled) {//enabled
float mean, stddv, maxtr, mintr; float mean, stddv, maxtr, mintr;
//float mini, delta, maxi; //float mini, delta, maxi;
@ -482,16 +485,19 @@ void RawImageSource::MSR(float** luminance, float** originalLuminance, float **e
float *buffer = new float[W_L * H_L];; float *buffer = new float[W_L * H_L];;
for ( int scale = scal - 1; scale >= 0; scale-- ) {
#ifdef _OPENMP #ifdef _OPENMP
#pragma omp parallel #pragma omp parallel
#endif #endif
{ {
for ( int scale = scal - 1; scale >= 0; scale-- ) { if(scale == scal - 1)
if(scale == scal - 1) { {
gaussianBlur (src, out, W_L, H_L, RetinexScales[scale], buffer); gaussianBlur (src, out, W_L, H_L, RetinexScales[scale], buffer);
} else { // reuse result of last iteration } else { // reuse result of last iteration
gaussianBlur (out, out, W_L, H_L, sqrtf(SQR(RetinexScales[scale]) - SQR(RetinexScales[scale + 1])), buffer); gaussianBlur (out, out, W_L, H_L, sqrtf(SQR(RetinexScales[scale]) - SQR(RetinexScales[scale + 1])), buffer);
} }
}
if(mapmet == 4) { if(mapmet == 4) {
shradius /= 1.; shradius /= 1.;
@ -527,7 +533,7 @@ void RawImageSource::MSR(float** luminance, float** originalLuminance, float **e
if(mapmet > 0) { if(mapmet > 0) {
#ifdef _OPENMP #ifdef _OPENMP
#pragma omp for #pragma omp parallel for
#endif #endif
for (int i = 0; i < H_L; i++) { for (int i = 0; i < H_L; i++) {
@ -549,7 +555,7 @@ void RawImageSource::MSR(float** luminance, float** originalLuminance, float **e
#ifdef _OPENMP #ifdef _OPENMP
#pragma omp for #pragma omp parallel for
#endif #endif
for (int i = 0; i < H_L; i++) { for (int i = 0; i < H_L; i++) {
@ -574,7 +580,7 @@ void RawImageSource::MSR(float** luminance, float** originalLuminance, float **e
//} //}
#ifdef _OPENMP #ifdef _OPENMP
#pragma omp for #pragma omp parallel for
#endif #endif
for (int i = 0; i < H_L; i++) { for (int i = 0; i < H_L; i++) {
@ -605,7 +611,6 @@ void RawImageSource::MSR(float** luminance, float** originalLuminance, float **e
} }
} }
} }
}
if(mapmet > 1) { if(mapmet > 1) {
if(shmap) { if(shmap) {