iplocallab.cc: further cleanups; also removed some debug code

This commit is contained in:
Ingo Weyrich
2020-06-11 18:32:27 +02:00
parent 933fee8c73
commit 43d5de7bac
9 changed files with 0 additions and 452 deletions

View File

@@ -25,10 +25,6 @@
#include "opthelper.h"
#include "iccstore.h"
#ifdef _DEBUG
#include "mytime.h"
#endif
using namespace std;
namespace rtengine
@@ -106,20 +102,6 @@ LUTf Color::_10GY30, Color::_10GY40, Color::_10GY50, Color::_10GY60, Color::_10G
LUTf Color::_75GY30, Color::_75GY40, Color::_75GY50, Color::_75GY60, Color::_75GY70, Color::_75GY80;
LUTf Color::_5GY30, Color::_5GY40, Color::_5GY50, Color::_5GY60, Color::_5GY70, Color::_5GY80;
#ifdef _DEBUG
MunsellDebugInfo::MunsellDebugInfo()
{
reinitValues();
}
void MunsellDebugInfo::reinitValues()
{
maxdhue[0] = maxdhue[1] = maxdhue[2] = maxdhue[3] = 0.0f;
maxdhuelum[0] = maxdhuelum[1] = maxdhuelum[2] = maxdhuelum[3] = 0.0f;
depass = depassLum = 0;
}
#endif
void Color::init ()
{
@@ -1456,15 +1438,7 @@ void Color::interpolateRGBColor (const float balance, const float r1, const floa
Color::Lab2Lch(a_1, b_1, c1, h1);
Lr = L1 / 327.68f; //for gamutlch
//gamut control on r1 g1 b1
#ifndef NDEBUG
bool neg = false;
bool more_rgb = false;
//gamut control : Lab values are in gamut
Color::gamutLchonly(h1, Lr, c1, RR, GG, BB, xyz_rgb, false, 0.15f, 0.96f, neg, more_rgb);
#else
Color::gamutLchonly(h1, Lr, c1, RR, GG, BB, xyz_rgb, false, 0.15f, 0.96f);
#endif
L1 = Lr * 327.68f;
@@ -1475,14 +1449,7 @@ void Color::interpolateRGBColor (const float balance, const float r1, const floa
Lr = L2 / 327.68f; //for gamutlch
//gamut control on r2 g2 b2
#ifndef NDEBUG
neg = false;
more_rgb = false;
//gamut control : Lab values are in gamut
Color::gamutLchonly(h2, Lr, c2, RR, GG, BB, xyz_rgb, false, 0.15f, 0.96f, neg, more_rgb);
#else
Color::gamutLchonly(h2, Lr, c2, RR, GG, BB, xyz_rgb, false, 0.15f, 0.96f);
#endif
L2 = Lr * 327.68f;
// interpolating Lch values
@@ -1512,15 +1479,8 @@ void Color::interpolateRGBColor (const float balance, const float r1, const floa
// here I have put gamut control with gamutlchonly on final process
Lr = L1 / 327.68f; //for gamutlch
#ifndef NDEBUG
neg = false;
more_rgb = false;
//gamut control : Lab values are in gamut
Color::gamutLchonly(h1, Lr, c1, RR, GG, BB, xyz_rgb, false, 0.15f, 0.96f, neg, more_rgb);
#else
//gamut control : Lab values are in gamut
Color::gamutLchonly(h1, Lr, c1, RR, GG, BB, xyz_rgb, false, 0.15f, 0.96f);
#endif
//convert CH ==> ab
L1 = Lr * 327.68f;
@@ -2299,11 +2259,7 @@ void Color::transitred (const float HH, float const Chprov1, const float dred, c
* float correctlum : correction Hue for luminance (brigtness, contrast,...)
* MunsellDebugInfo* munsDbgInfo: (Debug target only) object to collect information.
*/
#ifdef _DEBUG
void Color::AllMunsellLch(bool lumaMuns, float Lprov1, float Loldd, float HH, float Chprov1, float CC, float &correctionHuechroma, float &correctlum, MunsellDebugInfo* munsDbgInfo)
#else
void Color::AllMunsellLch(bool lumaMuns, float Lprov1, float Loldd, float HH, float Chprov1, float CC, float &correctionHuechroma, float &correctlum)
#endif
{
bool contin1, contin2;
@@ -2327,22 +2283,6 @@ void Color::AllMunsellLch(bool lumaMuns, float Lprov1, float Loldd, float HH, fl
contin1 = contin2 = false;
correctL = false;
MunsellLch (Lprov1, HH, Chprov1, CC, correctionHue, zo, correctionHueLum, correctL); //munsell chroma correction
#ifdef _DEBUG
float absCorrectionHue = fabs(correctionHue);
if(correctionHue != 0.0) {
int idx = zo - 1;
#pragma omp critical (maxdhue)
{
munsDbgInfo->maxdhue[idx] = MAX(munsDbgInfo->maxdhue[idx], absCorrectionHue);
}
}
if(absCorrectionHue > 0.45)
#pragma omp atomic
munsDbgInfo->depass++; //verify if no bug in calculation
#endif
correctionHuechroma = correctionHue; //preserve
if(lumaMuns) {
@@ -2374,46 +2314,11 @@ void Color::AllMunsellLch(bool lumaMuns, float Lprov1, float Loldd, float HH, fl
if(contin1 && contin2) {
correctlum = correctlumprov2 - correctlumprov;
}
#ifdef _DEBUG
float absCorrectLum = fabs(correctlum);
if(correctlum != 0.0) {
int idx = zo - 1;
#pragma omp critical (maxdhuelum)
{
munsDbgInfo->maxdhuelum[idx] = MAX(munsDbgInfo->maxdhuelum[idx], absCorrectLum);
}
}
if(absCorrectLum > 0.35)
#pragma omp atomic
munsDbgInfo->depassLum++; //verify if no bug in calculation
#endif
}
}
}
}
}
#ifdef _DEBUG
if (correctlum < -0.35f) {
correctlum = -0.35f;
} else if(correctlum > 0.35f) {
correctlum = 0.35f;
}
if (correctionHuechroma < -0.45f) {
correctionHuechroma = -0.45f;
} else if(correctionHuechroma > 0.45f) {
correctionHuechroma = 0.45f;
}
#endif
}
/*
@@ -2472,17 +2377,10 @@ void Color::AllMunsellLch(float Lprov1, float HH, float Chprov1, float CC, float
* float coef : a float number between [0.95 ; 1.0[... the nearest it is from 1.0, the more precise it will be... and the longer too as more iteration will be necessary)
* bool neg and moreRGB : only in DEBUG mode to calculate iterations for negatives values and > 65535
*/
#ifdef _DEBUG
void Color::gamutLchonly (float HH, float &Lprov1, float &Chprov1, float &R, float &G, float &B, const double wip[3][3], const bool isHLEnabled, const float lowerCoef, const float higherCoef, bool &neg, bool &more_rgb)
#else
void Color::gamutLchonly (float HH, float &Lprov1, float &Chprov1, float &R, float &G, float &B, const double wip[3][3], const bool isHLEnabled, const float lowerCoef, const float higherCoef)
#endif
{
const float ClipLevel = 65535.0f;
bool inGamut;
#ifdef _DEBUG
neg = false, more_rgb = false;
#endif
float2 sincosval = xsincosf(HH);
do {
@@ -2506,10 +2404,6 @@ void Color::gamutLchonly (float HH, float &Lprov1, float &Chprov1, float &R, flo
// gamut control before saturation to put Lab values in future gamut, but not RGB
if (R < 0.0f || G < 0.0f || B < 0.0f) {
#ifdef _DEBUG
neg = true;
#endif
if (Lprov1 < 0.1f) {
Lprov1 = 0.1f;
}
@@ -2555,10 +2449,6 @@ void Color::gamutLchonly (float HH, float &Lprov1, float &Chprov1, float &R, flo
} else if (!isHLEnabled && rtengine::max(R, G, B) > ClipLevel && rtengine::min(R, G, B) <= ClipLevel) {
// if "highlight reconstruction" is enabled or the point is completely white (clipped, no color), don't control Gamut
#ifdef _DEBUG
more_rgb = true;
#endif
if (Lprov1 > 99.999f) {
Lprov1 = 99.98f;
}
@@ -2593,17 +2483,10 @@ void Color::gamutLchonly (float HH, float &Lprov1, float &Chprov1, float &R, flo
* float coef : a float number between [0.95 ; 1.0[... the nearest it is from 1.0, the more precise it will be... and the longer too as more iteration will be necessary)
* bool neg and moreRGB : only in DEBUG mode to calculate iterations for negatives values and > 65535
*/
#ifdef _DEBUG
void Color::gamutLchonly (float HH, float2 sincosval, float &Lprov1, float &Chprov1, float &R, float &G, float &B, const double wip[3][3], const bool isHLEnabled, const float lowerCoef, const float higherCoef, bool &neg, bool &more_rgb)
#else
void Color::gamutLchonly (float HH, float2 sincosval, float &Lprov1, float &Chprov1, float &R, float &G, float &B, const double wip[3][3], const bool isHLEnabled, const float lowerCoef, const float higherCoef)
#endif
{
constexpr float ClipLevel = 65535.0f;
bool inGamut;
#ifdef _DEBUG
neg = false, more_rgb = false;
#endif
float ChprovSave = Chprov1;
do {
@@ -2625,9 +2508,6 @@ void Color::gamutLchonly (float HH, float2 sincosval, float &Lprov1, float &Chpr
// gamut control before saturation to put Lab values in future gamut, but not RGB
if (R < 0.0f || G < 0.0f || B < 0.0f) {
#ifdef _DEBUG
neg = true;
#endif
if (isnan(HH)) {
float atemp = ChprovSave * sincosval.y * 327.68;
@@ -2680,10 +2560,6 @@ void Color::gamutLchonly (float HH, float2 sincosval, float &Lprov1, float &Chpr
} else if (!isHLEnabled && rtengine::max(R, G, B) > ClipLevel && rtengine::min(R, G, B) <= ClipLevel) {
// if "highlight reconstruction" is enabled or the point is completely white (clipped, no color), don't control Gamut
#ifdef _DEBUG
more_rgb = true;
#endif
if (Lprov1 > 99.999f) {
Lprov1 = 99.98f;
}
@@ -2805,17 +2681,10 @@ void Color::gamutLchonly (float HH, float2 sincosval, float &Lprov1, float &Chpr
}
#ifdef _DEBUG
void Color::gamutLchonly (float2 sincosval, float &Lprov1, float &Chprov1, const float wip[3][3], const bool isHLEnabled, const float lowerCoef, const float higherCoef, bool &neg, bool &more_rgb)
#else
void Color::gamutLchonly (float2 sincosval, float &Lprov1, float &Chprov1, const float wip[3][3], const bool isHLEnabled, const float lowerCoef, const float higherCoef)
#endif
{
const float ClipLevel = 65535.0f;
bool inGamut;
#ifdef _DEBUG
neg = false, more_rgb = false;
#endif
do {
inGamut = true;
@@ -2839,10 +2708,6 @@ void Color::gamutLchonly (float2 sincosval, float &Lprov1, float &Chprov1, const
// gamut control before saturation to put Lab values in future gamut, but not RGB
if (R < 0.0f || G < 0.0f || B < 0.0f) {
#ifdef _DEBUG
neg = true;
#endif
if (Lprov1 < 0.01f) {
Lprov1 = 0.01f;
}
@@ -2857,10 +2722,6 @@ void Color::gamutLchonly (float2 sincosval, float &Lprov1, float &Chprov1, const
} else if (!isHLEnabled && rtengine::max(R, G, B) > ClipLevel && rtengine::min(R, G, B) <= ClipLevel) {
// if "highlight reconstruction" is enabled or the point is completely white (clipped, no color), don't control Gamut
#ifdef _DEBUG
more_rgb = true;
#endif
if (Lprov1 > 99.999f) {
Lprov1 = 99.98f;
}
@@ -2900,17 +2761,6 @@ void Color::gamutLchonly (float2 sincosval, float &Lprov1, float &Chprov1, const
*/
void Color::LabGamutMunsell(float *labL, float *laba, float *labb, const int N, bool corMunsell, bool lumaMuns, bool isHLEnabled, bool gamut, const double wip[3][3])
{
#ifdef _DEBUG
MyTime t1e, t2e;
t1e.set();
int negat = 0, moreRGB = 0;
MunsellDebugInfo* MunsDebugInfo = nullptr;
if (corMunsell) {
MunsDebugInfo = new MunsellDebugInfo();
}
#endif
float correctlum = 0.f;
float correctionHuechroma = 0.f;
#ifdef __SSE2__
@@ -2949,9 +2799,6 @@ void Color::LabGamutMunsell(float *labL, float *laba, float *labb, const int N,
float2 sincosval;
if(gamut) {
#ifdef _DEBUG
bool neg, more_rgb;
#endif
// According to mathematical laws we can get the sin and cos of HH by simple operations
float R, G, B;
@@ -2964,23 +2811,7 @@ void Color::LabGamutMunsell(float *labL, float *laba, float *labb, const int N,
}
//gamut control : Lab values are in gamut
#ifdef _DEBUG
gamutLchonly(HH, sincosval, Lprov1, Chprov1, R, G, B, wip, isHLEnabled, 0.15f, 0.96f, neg, more_rgb);
#else
gamutLchonly(HH, sincosval, Lprov1, Chprov1, R, G, B, wip, isHLEnabled, 0.15f, 0.96f);
#endif
#ifdef _DEBUG
if(neg) {
negat++;
}
if(more_rgb) {
moreRGB++;
}
#endif
}
labL[j] = Lprov1 * 327.68f;
@@ -2988,12 +2819,7 @@ void Color::LabGamutMunsell(float *labL, float *laba, float *labb, const int N,
correctlum = 0.f;
if(corMunsell)
#ifdef _DEBUG
AllMunsellLch(lumaMuns, Lprov1, Loldd, HH, Chprov1, Coldd, correctionHuechroma, correctlum, MunsDebugInfo);
#else
AllMunsellLch(lumaMuns, Lprov1, Loldd, HH, Chprov1, Coldd, correctionHuechroma, correctlum);
#endif
if(correctlum == 0.f && correctionHuechroma == 0.f) {
if(!gamut) {
@@ -3014,28 +2840,6 @@ void Color::LabGamutMunsell(float *labL, float *laba, float *labb, const int N,
laba[j] = Chprov1 * sincosval.y * 327.68f;
labb[j] = Chprov1 * sincosval.x * 327.68f;
}
#ifdef _DEBUG
t2e.set();
if (settings->verbose) {
printf("Color::LabGamutMunsell (correction performed in %d usec):\n", t2e.etime(t1e));
printf(" Gamut : G1negat=%iiter G165535=%iiter \n", negat, moreRGB);
if (MunsDebugInfo) {
printf(" Munsell chrominance: MaxBP=%1.2frad MaxRY=%1.2frad MaxGY=%1.2frad MaxRP=%1.2frad depass=%u\n", MunsDebugInfo->maxdhue[0], MunsDebugInfo->maxdhue[1], MunsDebugInfo->maxdhue[2], MunsDebugInfo->maxdhue[3], MunsDebugInfo->depass);
printf(" Munsell luminance : MaxBP=%1.2frad MaxRY=%1.2frad MaxGY=%1.2frad MaxRP=%1.2frad depass=%u\n", MunsDebugInfo->maxdhuelum[0] , MunsDebugInfo->maxdhuelum[1], MunsDebugInfo->maxdhuelum[2], MunsDebugInfo->maxdhuelum[3], MunsDebugInfo->depassLum);
} else {
printf(" Munsell correction wasn't requested\n");
}
}
if (MunsDebugInfo) {
delete MunsDebugInfo;
}
#endif
}
/*
@@ -3140,11 +2944,6 @@ void Color::SkinSat (float lum, float hue, float chrom, float &satreduc)
*/
void Color::initMunsell ()
{
#ifdef _DEBUG
MyTime t1e, t2e;
t1e.set();
#endif
const int maxInd = 140;
const int maxInd2 = 90;
const int maxInd3 = 50;
@@ -5745,14 +5544,6 @@ void Color::initMunsell ()
//printf("5GY %1.2f %1.2f %1.2f\n",_5GY80[44],_5GY80[84],_5GY80[125] );
#ifdef _DEBUG
t2e.set();
if (settings->verbose) {
printf("Lutf Munsell %d usec\n", t2e.etime(t1e));
}
#endif
}
}