Generalized Hyperbolic Stretch in Selective Editing (#7210)
* GHS GUI first step * GHS GUI first step * GUI step 3 * Hide show ghsmethod * Siril functions for ghs * Init ghs in iplocallab * ghs step 2 * ghs step 4 * Comment copyright Pixlnsight 2021 * Smooth highlights and tooltips * Enabled saturation and luminance ghs mode * First tooltip * Ghs tooltips * Remove wrong packstart inverssh * Change labels and tooltips * Disabled mask in global and other improvments * Comment code * appimage and windows yml ghs * Change tooltip * Ghsmethod hue and change tolltips * Change tooltip * Inverse Stretch step 1 * Inverse GHS * GHS tooltips * Change tooltips * Change tooltip * Linear black point * Small change to blackpoint * Change tooltip * Clean and comment code * forgotten GHS highlight attenuation msg in history * Comment code with Transformation equations * Change tooltip * Wrong default value balck point * Comment code iplocallab * Ghs curve step 1 * GHS curve step 2 * Show GHS setting in a Curve Box * Tooltip for ghs S curve * Disabled warning in compilation simpleprocess * Simplified code part 1 * Simplified code GHS graph part 2 * Improve black point with negatives values * Improve BP and tooltip * Listener enable only with GHS * White point for GHS * Change label and tooltip * Improve behavior white point and black point * Link sliders ghs_SP ghs_LP ghs_HP and change code to avoid balck screen * hide unused button in diagonal curve GHS * prevents the GHS representation in S from displaying artifacts if ghs-d=0 * Change tooltips * Improvment and tooltips * Forgotten tooltip * Improve GUI GHS S curve - change tooltips * Set transition gray areas in S curve GHS with values of the RT-spot * Change label GHS * setlogscale blackpoint and symmetry * Set recursive reference enable by default in controlspotpanel * Change lastlocalCurvesDir Dirghs in locallabtools and options - change labels * Added in converttonormal ghsMode.. not sure if this is useful * DIY to make GHS curve work without the choices * Change RGB calculation with luminance function working profile * 5 modes GHS method * Label to show datas clipped Black point and White point * Various change white point tooltips * Bad behavior wp bp labels * Small change to improccordinator call to ghschanged ghsbwchanged * Set log scale ghs_D * Hide Graduated filter if GHS enable * Luminance Lab in ghsmethod * Lab slope factor step 1 * Slope and Chromaticity GHS improvments * Fixed bad sqrt line 17477 iplocallab * Workaround linear GHS - re-enable Graduated filer GHS * Change limits slope lab factor * Ghs chromaticity Lab (Lch) * Improve ghs chromaticity * Change labels and tooltips Lab chroma * Slope Lab to 100 * Noise and saturation RGB * Saturation RGB standard and labels * Change histogram and navigator panel without gamma when using working profile * Remove gray in GHS curve * Local contrast a minima * Regularization stretch * Improve Graduated Filter in all cases GHS Color and Light etc. * Improves nlmeans to reduce noise after GHS * Change to GF - tooltip Nlmeans * Added oW oH tW tH etc. * Added call GF * tX tY for previewProps * Comment code GF * Improve local contrast ghs * Change norm to norm2 * Improve GUI mode complexity and Lab GHS * Show values BP WP in GUI * Labgrid ghs step 1 * Labgrid for simulation GHS - step 2 * More points for Labgrid ghs * Clean and comment code * Fixed crash in inverse GHS white point - set to 10 points for GSH simulation * Change to black point in inverse GHS * Intilialize simulation with nothing if new spot * Remove curve GHS - optimize code simulation - improve GUI * set ghs default - fixed crash is case HP SP LP * Fixed crash - I hope in inverse GHS * Simplify WP and BP limits to avoid crash in inverse GHS * Clean code with ghscurve - ghsshape * Change tooltips * Change to D - GUI - comment code * Simulation with 4 more points * Best simulation with point 0.05 and 0.95 * Clean code - change for crsah in Inverse GHS * Show values WP and BP
This commit is contained in:
@@ -45,7 +45,7 @@ inline void copyAndClampLine(const float *src, unsigned char *dst, const int W)
|
||||
}
|
||||
|
||||
|
||||
inline void copyAndClamp(const LabImage *src, unsigned char *dst, const double rgb_xyz[3][3], bool multiThread)
|
||||
inline void copyAndClamp(const LabImage *src, unsigned char *dst, const double rgb_xyz[3][3], bool multiThread, int pro)//int pro to switch to Working Profile histogram mode without gamma
|
||||
{
|
||||
const int W = src->W;
|
||||
const int H = src->H;
|
||||
@@ -89,9 +89,15 @@ inline void copyAndClamp(const LabImage *src, unsigned char *dst, const double r
|
||||
vfloat x_, y_, z_;
|
||||
Color::Lab2XYZ(LVFU(rL[j]), LVFU(ra[j]), LVFU(rb[j]), x_, y_, z_);
|
||||
Color::xyz2rgb(x_, y_, z_, R, G, B, rgb_xyzv);
|
||||
STVF(rbuffer[j], Color::gamma2curve[R]);
|
||||
STVF(gbuffer[j], Color::gamma2curve[G]);
|
||||
STVF(bbuffer[j], Color::gamma2curve[B]);
|
||||
if(pro == 0) {
|
||||
STVF(rbuffer[j], Color::gamma2curve[R]);
|
||||
STVF(gbuffer[j], Color::gamma2curve[G]);
|
||||
STVF(bbuffer[j], Color::gamma2curve[B]);
|
||||
} else {//Working profile and gamma=1
|
||||
STVF(rbuffer[j], R);
|
||||
STVF(gbuffer[j], G);
|
||||
STVF(bbuffer[j], B);
|
||||
}
|
||||
}
|
||||
|
||||
for (; j < W; ++j) {
|
||||
@@ -99,9 +105,15 @@ inline void copyAndClamp(const LabImage *src, unsigned char *dst, const double r
|
||||
float x_, y_, z_;
|
||||
Color::Lab2XYZ(rL[j], ra[j], rb[j], x_, y_, z_);
|
||||
Color::xyz2rgb(x_, y_, z_, R, G, B, rgb_xyzf);
|
||||
rbuffer[j] = Color::gamma2curve[R];
|
||||
gbuffer[j] = Color::gamma2curve[G];
|
||||
bbuffer[j] = Color::gamma2curve[B];
|
||||
if(pro == 0) {
|
||||
rbuffer[j] = Color::gamma2curve[R];
|
||||
gbuffer[j] = Color::gamma2curve[G];
|
||||
bbuffer[j] = Color::gamma2curve[B];
|
||||
} else {//Working profile and gamma=1
|
||||
rbuffer[j] = R;
|
||||
gbuffer[j] = G;
|
||||
bbuffer[j] = B;
|
||||
}
|
||||
}
|
||||
|
||||
for (j = 0; j < W; ++j) {
|
||||
@@ -117,10 +129,15 @@ inline void copyAndClamp(const LabImage *src, unsigned char *dst, const double r
|
||||
float x_, y_, z_;
|
||||
Color::Lab2XYZ(rL[j], ra[j], rb[j], x_, y_, z_);
|
||||
Color::xyz2rgb(x_, y_, z_, R, G, B, rgb_xyzf);
|
||||
|
||||
dst[ix++] = uint16ToUint8Rounded(Color::gamma2curve[R]);
|
||||
dst[ix++] = uint16ToUint8Rounded(Color::gamma2curve[G]);
|
||||
dst[ix++] = uint16ToUint8Rounded(Color::gamma2curve[B]);
|
||||
if(pro == 0) {
|
||||
dst[ix++] = uint16ToUint8Rounded(Color::gamma2curve[R]);
|
||||
dst[ix++] = uint16ToUint8Rounded(Color::gamma2curve[G]);
|
||||
dst[ix++] = uint16ToUint8Rounded(Color::gamma2curve[B]);
|
||||
} else {//Working profile and gamma=1
|
||||
dst[ix++] = uint16ToUint8Rounded(R);
|
||||
dst[ix++] = uint16ToUint8Rounded(G);
|
||||
dst[ix++] = uint16ToUint8Rounded(B);
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -204,7 +221,7 @@ void ImProcFunctions::lab2monitorRgb(LabImage* lab, Image8* image)
|
||||
}
|
||||
} // End of parallelization
|
||||
} else {
|
||||
copyAndClamp(lab, image->data, sRGB_xyz, multiThread);
|
||||
copyAndClamp(lab, image->data, sRGB_xyz, multiThread, 0);//int pro = 0 always sent 'normal' to monitor
|
||||
}
|
||||
}
|
||||
|
||||
@@ -239,12 +256,13 @@ Image8* ImProcFunctions::lab2rgb(LabImage* lab, int cx, int cy, int cw, int ch,
|
||||
Glib::ustring profile;
|
||||
|
||||
cmsHPROFILE oprof = nullptr;
|
||||
|
||||
int pro = 0;//int pro to switch to Working Profile histogram mode without gamma
|
||||
if (settings->HistogramWorking && consider_histogram_settings) {
|
||||
profile = icm.workingProfile;
|
||||
pro = 1;//no gamma for histogram and navigator panel and Lockable color picker
|
||||
} else {
|
||||
profile = icm.outputProfile;
|
||||
|
||||
//pro = 0 histogram and navigator panel and Lockable color picker with gamma
|
||||
if (icm.outputProfile.empty() || icm.outputProfile == ColorManagementParams::NoICMString) {
|
||||
profile = "sRGB";
|
||||
}
|
||||
@@ -300,7 +318,7 @@ Image8* ImProcFunctions::lab2rgb(LabImage* lab, int cx, int cy, int cw, int ch,
|
||||
|
||||
} else {
|
||||
const auto xyz_rgb = ICCStore::getInstance()->workingSpaceInverseMatrix(profile);
|
||||
copyAndClamp(lab, image->data, xyz_rgb, multiThread);
|
||||
copyAndClamp(lab, image->data, xyz_rgb, multiThread, pro);//int pro = 1 to switch to Working Profile for histogram and navigator panel and Lockable color picker whitout gamma
|
||||
}
|
||||
|
||||
return image;
|
||||
|
||||
Reference in New Issue
Block a user