Merge pull request #4211 from Beep6581/mediandenoise2

NR Median now works independently of lumiance details, #4208
This commit is contained in:
Desmis
2017-12-08 07:48:18 +01:00
committed by GitHub

View File

@@ -1295,79 +1295,6 @@ SSEFUNCTION void ImProcFunctions::RGB_denoise(int kall, Imagefloat * src, Imagef
}
if (!memoryAllocationFailed) {
if ((metchoice == 1 || metchoice == 2 || metchoice == 3 || metchoice == 4) && dnparams.median) {
float** tmL;
int wid = labdn->W;
int hei = labdn->H;
tmL = new float*[hei];
for (int i = 0; i < hei; ++i) {
tmL[i] = new float[wid];
}
Median medianTypeL = Median::TYPE_3X3_SOFT;
Median medianTypeAB = Median::TYPE_3X3_SOFT;
if (dnparams.medmethod == "soft") {
if (metchoice != 4) {
medianTypeL = medianTypeAB = Median::TYPE_3X3_SOFT;
} else {
medianTypeL = Median::TYPE_3X3_SOFT;
medianTypeAB = Median::TYPE_3X3_SOFT;
}
} else if (dnparams.medmethod == "33") {
if (metchoice != 4) {
medianTypeL = medianTypeAB = Median::TYPE_3X3_STRONG;
} else {
medianTypeL = Median::TYPE_3X3_SOFT;
medianTypeAB = Median::TYPE_3X3_STRONG;
}
} else if (dnparams.medmethod == "55soft") {
if (metchoice != 4) {
medianTypeL = medianTypeAB = Median::TYPE_5X5_SOFT;
} else {
medianTypeL = Median::TYPE_3X3_SOFT;
medianTypeAB = Median::TYPE_5X5_SOFT;
}
} else if (dnparams.medmethod == "55") {
if (metchoice != 4) {
medianTypeL = medianTypeAB = Median::TYPE_5X5_STRONG;
} else {
medianTypeL = Median::TYPE_3X3_STRONG;
medianTypeAB = Median::TYPE_5X5_STRONG;
}
} else if (dnparams.medmethod == "77") {
if (metchoice != 4) {
medianTypeL = medianTypeAB = Median::TYPE_7X7;
} else {
medianTypeL = Median::TYPE_3X3_STRONG;
medianTypeAB = Median::TYPE_7X7;
}
} else if (dnparams.medmethod == "99") {
if (metchoice != 4) {
medianTypeL = medianTypeAB = Median::TYPE_9X9;
} else {
medianTypeL = Median::TYPE_5X5_SOFT;
medianTypeAB = Median::TYPE_9X9;
}
}
if (metchoice == 1 || metchoice == 2 || metchoice == 4) {
Median_Denoise(labdn->L, labdn->L, wid, hei, medianTypeL, dnparams.passes, denoiseNestedLevels, tmL);
}
if (metchoice == 2 || metchoice == 3 || metchoice == 4) {
Median_Denoise(labdn->a, labdn->a, wid, hei, medianTypeAB, dnparams.passes, denoiseNestedLevels, tmL);
Median_Denoise(labdn->b, labdn->b, wid, hei, medianTypeAB, dnparams.passes, denoiseNestedLevels, tmL);
}
for (int i = 0; i < hei; ++i) {
delete[] tmL[i];
}
delete[] tmL;
}
//wavelet denoised L channel
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -1530,6 +1457,79 @@ SSEFUNCTION void ImProcFunctions::RGB_denoise(int kall, Imagefloat * src, Imagef
}
}
if ((metchoice == 1 || metchoice == 2 || metchoice == 3 || metchoice == 4) && dnparams.median) {
float** tmL;
int wid = labdn->W;
int hei = labdn->H;
tmL = new float*[hei];
for (int i = 0; i < hei; ++i) {
tmL[i] = new float[wid];
}
Median medianTypeL = Median::TYPE_3X3_SOFT;
Median medianTypeAB = Median::TYPE_3X3_SOFT;
if (dnparams.medmethod == "soft") {
if (metchoice != 4) {
medianTypeL = medianTypeAB = Median::TYPE_3X3_SOFT;
} else {
medianTypeL = Median::TYPE_3X3_SOFT;
medianTypeAB = Median::TYPE_3X3_SOFT;
}
} else if (dnparams.medmethod == "33") {
if (metchoice != 4) {
medianTypeL = medianTypeAB = Median::TYPE_3X3_STRONG;
} else {
medianTypeL = Median::TYPE_3X3_SOFT;
medianTypeAB = Median::TYPE_3X3_STRONG;
}
} else if (dnparams.medmethod == "55soft") {
if (metchoice != 4) {
medianTypeL = medianTypeAB = Median::TYPE_5X5_SOFT;
} else {
medianTypeL = Median::TYPE_3X3_SOFT;
medianTypeAB = Median::TYPE_5X5_SOFT;
}
} else if (dnparams.medmethod == "55") {
if (metchoice != 4) {
medianTypeL = medianTypeAB = Median::TYPE_5X5_STRONG;
} else {
medianTypeL = Median::TYPE_3X3_STRONG;
medianTypeAB = Median::TYPE_5X5_STRONG;
}
} else if (dnparams.medmethod == "77") {
if (metchoice != 4) {
medianTypeL = medianTypeAB = Median::TYPE_7X7;
} else {
medianTypeL = Median::TYPE_3X3_STRONG;
medianTypeAB = Median::TYPE_7X7;
}
} else if (dnparams.medmethod == "99") {
if (metchoice != 4) {
medianTypeL = medianTypeAB = Median::TYPE_9X9;
} else {
medianTypeL = Median::TYPE_5X5_SOFT;
medianTypeAB = Median::TYPE_9X9;
}
}
if (metchoice == 1 || metchoice == 2 || metchoice == 4) {
Median_Denoise(labdn->L, labdn->L, wid, hei, medianTypeL, dnparams.passes, denoiseNestedLevels, tmL);
}
if (metchoice == 2 || metchoice == 3 || metchoice == 4) {
Median_Denoise(labdn->a, labdn->a, wid, hei, medianTypeAB, dnparams.passes, denoiseNestedLevels, tmL);
Median_Denoise(labdn->b, labdn->b, wid, hei, medianTypeAB, dnparams.passes, denoiseNestedLevels, tmL);
}
for (int i = 0; i < hei; ++i) {
delete[] tmL[i];
}
delete[] tmL;
}
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
// transform denoised "Lab" to output RGB