Merge pull request #4211 from Beep6581/mediandenoise2
NR Median now works independently of lumiance details, #4208
This commit is contained in:
@@ -1295,79 +1295,6 @@ SSEFUNCTION void ImProcFunctions::RGB_denoise(int kall, Imagefloat * src, Imagef
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!memoryAllocationFailed) {
|
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
|
//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
|
// transform denoised "Lab" to output RGB
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user