diff --git a/rtengine/CA_correct_RT.cc b/rtengine/CA_correct_RT.cc index e1493ae40..aea20d8c9 100644 --- a/rtengine/CA_correct_RT.cc +++ b/rtengine/CA_correct_RT.cc @@ -967,7 +967,7 @@ void RawImageSource::CA_correct_RT(const bool autoCA, const double cared, const int c = FC(rr + top, left + border + (FC(rr + top, 2) & 1)); for (int row = rr + top, cc = border + (FC(rr, 2) & 1), indx = (row * width + cc + left) >> 1; cc < cc1 - border; cc += 2, indx++) { - RawDataTmp[indx] = 65535.0f * rgb[c][(rr) * ts + cc] + 0.5f; + RawDataTmp[indx] = 65535.0f * rgb[c][(rr) * ts + cc]; } } diff --git a/rtengine/cfa_linedn_RT.cc b/rtengine/cfa_linedn_RT.cc index b5578898b..0f9e27634 100644 --- a/rtengine/cfa_linedn_RT.cc +++ b/rtengine/cfa_linedn_RT.cc @@ -231,7 +231,7 @@ void RawImageSource::CLASS cfa_linedn(float noise) for (int col = 16 + left, indx = rr * TS + 16; indx < rr * TS + numcols - 16; indx++, col++) { if (rawData[row][col] < clip_pt && cfadn[indx] < clip_pt) { - RawDataTmp[row * width + col] = CLIP((int)(cfadn[indx] + 0.5f)); + RawDataTmp[row * width + col] = CLIP(cfadn[indx]); } } } diff --git a/rtengine/demosaic_algos.cc b/rtengine/demosaic_algos.cc index 847af784f..6a5b8eba8 100644 --- a/rtengine/demosaic_algos.cc +++ b/rtengine/demosaic_algos.cc @@ -1878,9 +1878,7 @@ SSEFUNCTION void RawImageSource::lmmse_interpolate_omp(int winw, int winh, array if(applyGamma) { gamtab = &(Color::igammatab_24_17); } else { - for(int i = 0; i < 65536; i++) { - (*gamtab)[i] = (float)i + 0.5f; - } + gamtab->makeIdentity(); } array2D (*rgb[3]); diff --git a/rtengine/simpleprocess.cc b/rtengine/simpleprocess.cc index b3aff9145..f28065d09 100644 --- a/rtengine/simpleprocess.cc +++ b/rtengine/simpleprocess.cc @@ -2137,12 +2137,27 @@ private: params.wavelet.strength *= scale_factor; params.dirpyrDenoise.luma *= scale_factor; - + params.dirpyrDenoise.Ldetail += (100 - params.dirpyrDenoise.Ldetail) * scale_factor; //params.dirpyrDenoise.smethod = "shal"; for (auto &p : params.dirpyrDenoise.lcurve) { p *= scale_factor; } - + const char *medmethods[] = { "soft", "33", "55soft", "55", "77", "99" }; + if (params.dirpyrDenoise.median) { + auto &key = params.dirpyrDenoise.methodmed == "RGB" ? params.dirpyrDenoise.rgbmethod : params.dirpyrDenoise.medmethod; + for (int i = 1; i < int(sizeof(medmethods)/sizeof(const char *)); ++i) { + if (key == medmethods[i]) { + int j = i - int(1.0 / scale_factor); + if (j < 0) { + params.dirpyrDenoise.median = false; + } else { + key = medmethods[j]; + } + break; + } + } + } + params.epd.scale *= scale_factor; //params.epd.edgeStopping *= scale_factor; @@ -2152,6 +2167,7 @@ private: adjust_radius (defaultparams.dirpyrequalizer.mult[i], dirpyreq_scale, params.dirpyrequalizer.mult[i]); } + params.dirpyrequalizer.threshold *= scale_factor; adjust_radius (defaultparams.defringe.radius, scale_factor, params.defringe.radius); @@ -2164,6 +2180,9 @@ private: procparams::RAWParams::XTransSensor::methodstring[ procparams::RAWParams::XTransSensor::onePass]; } + if (params.raw.bayersensor.method == procparams::RAWParams::BayerSensor::methodstring[procparams::RAWParams::BayerSensor::pixelshift]) { + params.raw.bayersensor.method = procparams::RAWParams::BayerSensor::methodstring[params.raw.bayersensor.pixelShiftLmmse ? procparams::RAWParams::BayerSensor::lmmse : procparams::RAWParams::BayerSensor::amaze]; + } } private: