Issue 2844: Wavelet improvements to Edge Sharpness and Denoise and Refine, also some language file fixes.

This commit is contained in:
DrSlony
2015-07-29 19:22:25 +02:00
parent 6f2078ea1b
commit 82da6f3fb6
11 changed files with 341 additions and 84 deletions

View File

@@ -645,7 +645,7 @@ do {
// Calculate number of tiles. If less than omp_get_max_threads(), then limit num_threads to number of tiles
int numthreads = MIN(numtiles,omp_get_max_threads());
if(options.rgbDenoiseThreadLimit > 0)
numthreads = MIN(numthreads,options.rgbDenoiseThreadLimit);
numthreads = MIN(numthreads,options.rgbDenoiseThreadLimit);
#ifdef _RT_NESTED_OPENMP
denoiseNestedLevels = omp_get_max_threads() / numthreads;
bool oldNested = omp_get_nested();
@@ -655,7 +655,7 @@ do {
omp_set_nested(true);
if(options.rgbDenoiseThreadLimit > 0)
while(denoiseNestedLevels*numthreads > options.rgbDenoiseThreadLimit)
denoiseNestedLevels--;
denoiseNestedLevels--;
#endif
if(settings->verbose)
printf("RGB_denoise uses %d main thread(s) and up to %d nested thread(s) for each main thread\n",numthreads,denoiseNestedLevels);
@@ -739,7 +739,7 @@ do {
if(!denoiseMethodRgb){//lab mode
//modification Jacques feb 2013 and july 2014
#ifdef _RT_NESTED_OPENMP
#pragma omp parallel for num_threads(denoiseNestedLevels) if(denoiseNestedLevels>1)
#pragma omp parallel for num_threads(denoiseNestedLevels) if(denoiseNestedLevels>1)
#endif
for (int i=tiletop; i<tilebottom; i++) {
int i1 = i - tiletop;
@@ -784,7 +784,7 @@ do {
}
} else {//RGB mode
#ifdef _RT_NESTED_OPENMP
#pragma omp parallel for num_threads(denoiseNestedLevels) if(denoiseNestedLevels>1)
#pragma omp parallel for num_threads(denoiseNestedLevels) if(denoiseNestedLevels>1)
#endif
for (int i=tiletop; i<tilebottom; i++) {
int i1 = i - tiletop;
@@ -817,7 +817,7 @@ do {
}
} else {//image is not raw; use Lab parametrization
#ifdef _RT_NESTED_OPENMP
#pragma omp parallel for num_threads(denoiseNestedLevels) if(denoiseNestedLevels>1)
#pragma omp parallel for num_threads(denoiseNestedLevels) if(denoiseNestedLevels>1)
#endif
for (int i=tiletop; i<tilebottom; i++) {
int i1 = i - tiletop;
@@ -1286,7 +1286,7 @@ do {
realblue /= 100.f;
#ifdef _RT_NESTED_OPENMP
#pragma omp parallel for schedule(dynamic,16) num_threads(denoiseNestedLevels)
#pragma omp parallel for schedule(dynamic,16) num_threads(denoiseNestedLevels)
#endif
for (int i=tiletop; i<tilebottom; i++){
int i1 = i-tiletop;
@@ -1332,7 +1332,7 @@ do {
}
} else {//RGB mode
#ifdef _RT_NESTED_OPENMP
#pragma omp parallel for num_threads(denoiseNestedLevels)
#pragma omp parallel for num_threads(denoiseNestedLevels)
#endif
for (int i=tiletop; i<tilebottom; i++){
int i1 = i-tiletop;
@@ -1368,7 +1368,7 @@ do {
}
} else {
#ifdef _RT_NESTED_OPENMP
#pragma omp parallel for num_threads(denoiseNestedLevels)
#pragma omp parallel for num_threads(denoiseNestedLevels)
#endif
for (int i=tiletop; i<tilebottom; i++){
int i1 = i-tiletop;
@@ -1880,7 +1880,7 @@ SSEFUNCTION bool ImProcFunctions::WaveletDenoiseAll_BiShrinkL(wavelet_decomposit
float ** WavCoeffs_L = WaveletCoeffs_L.level_coeffs(lvl);
if (lvl==maxlvl-1) {
float vari[3];
float vari[4];
int edge=0;
ShrinkAllL(WaveletCoeffs_L, buffer, lvl, dir, noisevarlum, madL[lvl], NULL, edge );
} else {
@@ -2079,7 +2079,7 @@ SSEFUNCTION bool ImProcFunctions::WaveletDenoiseAll_BiShrinkAB(wavelet_decomposi
{
int maxlvl = min(WaveletCoeffs_L.maxlevel(),5);
if(edge==1) maxlvl=3;//for refine denoise edge wavelet
if(edge==1) maxlvl=4;//for refine denoise edge wavelet
int maxWL = 0, maxHL = 0;
for (int lvl=0; lvl<maxlvl; lvl++) {
if(WaveletCoeffs_L.level_W(lvl) > maxWL)
@@ -2087,16 +2087,17 @@ SSEFUNCTION bool ImProcFunctions::WaveletDenoiseAll_BiShrinkAB(wavelet_decomposi
if(WaveletCoeffs_L.level_H(lvl) > maxHL)
maxHL = WaveletCoeffs_L.level_H(lvl);
}
bool memoryAllocationFailed = false;
bool memoryAllocationFailed = false;
#ifdef _RT_NESTED_OPENMP
#pragma omp parallel num_threads(denoiseNestedLevels) if(denoiseNestedLevels>1)
#endif
{
float *buffer[3];
float *buffer[4];
buffer[0] = new (std::nothrow) float[maxWL*maxHL+32];
buffer[1] = new (std::nothrow) float[maxWL*maxHL+64];
buffer[2] = new (std::nothrow) float[maxWL*maxHL+96];
if(buffer[0] == NULL || buffer[1] == NULL || buffer[2] == NULL) {
buffer[3] = new (std::nothrow) float[maxWL*maxHL+128];
if(buffer[0] == NULL || buffer[1] == NULL || buffer[2] == NULL || buffer[3] == NULL) {
memoryAllocationFailed = true;
}
@@ -2110,7 +2111,7 @@ SSEFUNCTION bool ImProcFunctions::WaveletDenoiseAll_BiShrinkAB(wavelet_decomposi
}
}
}
for(int i=2;i>=0;i--)
for(int i=3;i>=0;i--)
if(buffer[i] != NULL)
delete [] buffer[i];
}
@@ -2180,7 +2181,7 @@ SSEFUNCTION void ImProcFunctions::ShrinkAllL(wavelet_decomposition &WaveletCoeff
int H_L = WaveletCoeffs_L.level_H(level);
float ** WavCoeffs_L = WaveletCoeffs_L.level_coeffs(level);
// printf("OK lev=%d\n",level);
float mad_L = madL[dir-1] ;
if(edge==1) {
noisevarlum = blurBuffer; // we need one buffer, but fortunately we don't have to allocate a new one because we can use blurBuffer