diff --git a/RELEASE_NOTES.txt b/RELEASE_NOTES.txt index d64b336c7..c057d41a7 100644 --- a/RELEASE_NOTES.txt +++ b/RELEASE_NOTES.txt @@ -5,7 +5,7 @@ This is a development version of RawTherapee. We update the code every day, whic While we only commit tested and relatively stable code and so the development versions should be fairly stable, you should be aware that: - They only had limited testing, so there may be bugs unknown to us. -- You should report these bugs so they get fixed for the stable release. See www.rawpedia.rawtherapee.com/How_to_write_useful_bug_reports The way tools work in the development versions is likely to change as we tweak and tune them, so your processing profiles may produce different results when used in a future stable versions. +- You should report these bugs so they get fixed for the stable release. See www.rawpedia.rawtherapee.com/How_to_write_useful_bug_reports The way new tools work in the development versions is likely to change as we tweak and tune them, so your processing profiles may produce different results when used in a future stable versions. - Bugs present in the stable versions get fixed, and until a new stable version is released these fixes are present in these development versions, thereby making the development version "more stable" than the previous stable version. At the same time, new features may introduce new bugs :) This is a trade-off you should be aware of. In order to use RawTherapee efficiently you should know that: @@ -19,7 +19,7 @@ Refer to RawPedia for information about RawTherapee's tools and how to use them. DOCUMENTATION ------------- -http://rawtherapee.com/documentation +http://rawtherapee.com/blog/documentation http://rawpedia.rawtherapee.com/ REPORTING BUGS @@ -44,5 +44,5 @@ http://plus.google.com/106783532637761598368 REVISION HISTORY ---------------- The complete changelog is available at: -https://code.google.com/p/rawtherapee/source/list +https://github.com/Beep6581/RawTherapee/commits/master diff --git a/rtdata/languages/Catala b/rtdata/languages/Catala index f8e21bdc1..7a7d4e400 100644 --- a/rtdata/languages/Catala +++ b/rtdata/languages/Catala @@ -495,7 +495,6 @@ PARTIALPASTE_FLATFIELDBLURRADIUS;Radi borrositat CP PARTIALPASTE_FLATFIELDBLURTYPE;Tipus borrositat CP PARTIALPASTE_FLATFIELDFILE;Fitxer de camp pla PARTIALPASTE_HSVEQUALIZER;Equalitzador HSV -PARTIALPASTE_ICMGAMMA;Sortida gama PARTIALPASTE_ICMSETTINGS;Ajustos gestió de color PARTIALPASTE_IMPULSEDENOISE;Impuls de reducció de soroll PARTIALPASTE_IPTCINFO;Dades IPTC @@ -1274,6 +1273,26 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !HISTORY_MSG_404;W - ES - Base amplification !HISTORY_MSG_405;W - Denoise - Level 4 !HISTORY_MSG_406;W - ES - Neighboring pixels +!HISTORY_MSG_407;Retinex - Method +!HISTORY_MSG_408;Retinex - Neighboring +!HISTORY_MSG_409;Retinex - Gain +!HISTORY_MSG_410;Retinex - Offset +!HISTORY_MSG_411;Retinex - Strength +!HISTORY_MSG_412;Retinex - Scales +!HISTORY_MSG_413;Retinex - Variance +!HISTORY_MSG_414;Retinex - Histogram - Lab +!HISTORY_MSG_415;Retinex - Transmission +!HISTORY_MSG_416;Retinex +!HISTORY_MSG_417;Retinex - Transmission median +!HISTORY_MSG_418;Retinex - Threshold +!HISTORY_MSG_419;Retinex - Color space +!HISTORY_MSG_420;Retinex - Histogram - HSL +!HISTORY_MSG_421;Retinex - Gamma +!HISTORY_MSG_422;Retinex - Gamma +!HISTORY_MSG_423;Retinex - Gamma slope +!HISTORY_MSG_424;Retinex - HL threshold +!HISTORY_MSG_425;Retinex - Log base +!HISTORY_MSG_426;Retinex - Hue equalizer !HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s !MAIN_BUTTON_NAVNEXT_TOOLTIP;Navigate to the next image relative to image opened in the Editor.\nShortcut: Shift-F4\n\nTo navigate to the next image relative to the currently selected thumbnail in the File Browser or Filmstrip:\nShortcut: F4 !MAIN_BUTTON_NAVPREV_TOOLTIP;Navigate to the previous image relative to image opened in the Editor.\nShortcut: Shift-F3\n\nTo navigate to the previous image relative to the currently selected thumbnail in the File Browser or Filmstrip:\nShortcut: F3 @@ -1306,6 +1325,7 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !PARTIALPASTE_PREPROCESS_DEADPIXFILT;Dead pixel filter !PARTIALPASTE_PREPROCESS_HOTPIXFILT;Hot pixel filter !PARTIALPASTE_RAW_LMMSEITERATIONS;LMMSE enhancement steps +!PARTIALPASTE_RETINEX;Retinex !PARTIALPASTE_WAVELETGROUP;Wavelet Levels !PREFERENCES_AUTLISLOW;Low !PREFERENCES_AUTLISMAX;Max - Average of all tiles @@ -1590,7 +1610,7 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !TP_DIRPYRDENOISE_C2TYPE_TOOLTIP;Manual\nActs on the full image.\nYou control the noise reduction settings manually.\n\nAutomatic global\nActs on the full image.\n9 zones are used to calculate a global chrominance noise reduction setting.\n\nPreview\nActs on the whole image.\nThe part of the image visible in the preview is used to calculate global chrominance noise reduction settings. !TP_DIRPYRDENOISE_CCCURVE;Chrominance curve !TP_DIRPYRDENOISE_CHROMAFR;Chrominance -!TP_DIRPYRDENOISE_CTYPE;Auto method +!TP_DIRPYRDENOISE_CTYPE;Method !TP_DIRPYRDENOISE_CTYPE_TOOLTIP;Manual\nActs on the full image.\nYou control the noise reduction settings manually.\n\nAutomatic global\nActs on the full image.\n9 zones are used to calculate a global chrominance noise reduction setting.\n\nAutomatic multi-zones\nNo preview - works only during saving, but using the "Preview" method by matching the tile size and center to the preview size and center you can get an idea of the expected results.\nThe image is divided into tiles (about 10 to 70 depending on image size) and each tile receives its own chrominance noise reduction settings.\n\nPreview\nActs on the whole image.\nThe part of the image visible in the preview is used to calculate global chrominance noise reduction settings. !TP_DIRPYRDENOISE_CURVEEDITOR_CC;Chroma !TP_DIRPYRDENOISE_CURVEEDITOR_CC_TOOLTIP;Increase (multiply) the value of all chrominance sliders.\nThis curve lets you adjust the strength of chromatic noise reduction as a function of chromaticity, for instance to increase the action in areas of low saturation and to decrease it in those of high saturation. @@ -1722,6 +1742,54 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !TP_RAW_SENSOR_BAYER_LABEL;Sensor with Bayer Matrix !TP_RAW_SENSOR_XTRANS_DMETHOD_TOOLTIP;3-pass gives best results (recommended for low ISO images).\n1-pass is almost undistinguishable from 3-pass for high ISO images and is faster. !TP_RAW_SENSOR_XTRANS_LABEL;Sensor with X-Trans Matrix +!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL +!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b* +!TP_RETINEX_CONTEDIT_LH;Hue equalizer +!TP_RETINEX_CURVEEDITOR_CD;L=f(L) +!TP_RETINEX_CURVEEDITOR_CD_TOOLTIP;Luminance according to luminance L=f(L)\nCorrect raw data to reduce halos and artifacts. +!TP_RETINEX_CURVEEDITOR_LH;Strength=f(H) +!TP_RETINEX_CURVEEDITOR_LH_TOOLTIP;Strength according to hue Strength=f(H)\nThis curve also acts on chroma when using the "Highlight" retinex method. +!TP_RETINEX_GAIN;Gain +!TP_RETINEX_GAIN_TOOLTIP;Acts on the transmission in combination with the offset. This is very different from the others settings. Used for black or white pixels, and to help balance the histogram. +!TP_RETINEX_GAMMA;Free gamma +!TP_RETINEX_GAMMA;Gamma +!TP_RETINEX_GAMMA_FREE;Free +!TP_RETINEX_GAMMA_HIGH;High +!TP_RETINEX_GAMMA_LOW;Low +!TP_RETINEX_GAMMA_MID;Middle +!TP_RETINEX_GAMMA_NONE;None +!TP_RETINEX_GAMMA_TOOLTIP;Restore tones by applying gamma before and after Retinex. Different from Retinex curves or others curves (Lab, Exposure, etc.). +!TP_RETINEX_HIGHLIGHT;Highlight threshold +!TP_RETINEX_HIGHLIGHT_TOOLTIP;Increase action of High algorithm.\nMay require you to re-adjust "Neighboring pixels" and to increase the "White-point correction" in the Raw tab -> Raw White Points tool. +!TP_RETINEX_HIGHLIG;Highlight +!TP_RETINEX_HIGH;High +!TP_RETINEX_HSLSPACE_LIN;HSL-Linear +!TP_RETINEX_HSLSPACE_LOG;HSL-Logarithmic +!TP_RETINEX_LABEL;Retinex +!TP_RETINEX_LABSPACE;L*a*b* +!TP_RETINEX_LOW;Low +!TP_RETINEX_MEDIAN;Transmission median filter +!TP_RETINEX_METHOD;Method +!TP_RETINEX_METHOD_TOOLTIP;Low = Reinforce low light,\nUniform = Equalize action,\nHigh = Reinforce high light,\nHighlight = Remove magenta in highlights. +!TP_RETINEX_MLABEL;Restored haze-free Min=%1 Max=%2 +!TP_RETINEX_MLABEL_TOOLTIP;Should be near min=0 max=32768\nRestored image with no mixture. +!TP_RETINEX_NEIGHBOR;Neighboring pixels +!TP_RETINEX_NEUTRAL;Reset +!TP_RETINEX_NEUTRAL_TIP;Reset all sliders and curves to their default values. +!TP_RETINEX_OFFSET;Offset +!TP_RETINEX_SETTINGS;Settings +!TP_RETINEX_SLOPE;Free gamma slope +!TP_RETINEX_STRENGTH;Strength +!TP_RETINEX_THRESHOLD;Threshold +!TP_RETINEX_THRESHOLD_TOOLTIP;Limits in/out.\nIn = image source,\nOut = image gauss. +!TP_RETINEX_TLABEL2;TM Tm=%1 TM=%2 +!TP_RETINEX_TLABEL;TM Min=%1 Max=%2 Mean=%3 Sigma=%4 +!TP_RETINEX_TLABEL_TOOLTIP;Transmission map result.\nMin and Max are used by Variance.\nMean and Sigma\nTm=Min TM=Max of transmission map. +!TP_RETINEX_TRANSMISSION;Transmission map +!TP_RETINEX_TRANSMISSION_TOOLTIP;Transmission according to transmission.\nAbscissa: transmission from negative values (min), mean, and positives values (max).\nOrdinate: amplification or reduction. +!TP_RETINEX_UNIFORM;Uniform +!TP_RETINEX_VARIANCE;Variance +!TP_RETINEX_VARIANCE_TOOLTIP;Low variance increase local contrast and saturation, but can lead to artifacts. !TP_RGBCURVES_LUMAMODE;Luminosity mode !TP_RGBCURVES_LUMAMODE_TOOLTIP;Luminosity mode allows to vary the contribution of R, G and B channels to the luminosity of the image, without altering image color. !TP_SAVEDIALOG_OK_TIP;Shortcut: Ctrl-Enter @@ -1751,7 +1819,6 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !TP_WAVELET_BASLI;Slider !TP_WAVELET_BATYPE;Contrast balance method !TP_WAVELET_CBENAB;Toning and Color Balance -!TP_WAVELET_CBTYPE;Toning and Color Balance !TP_WAVELET_CB_TOOLTIP;For strong values product color-toning by combining it or not with levels decomposition 'toning'\nFor low values you can change the white balance of the background (sky, ...) without changing that of the front plane, generally more contrasted !TP_WAVELET_CCURVE;Local contrast !TP_WAVELET_CH1;Whole chroma range @@ -1765,7 +1832,6 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !TP_WAVELET_CHSL;Sliders !TP_WAVELET_CHTYPE;Chrominance method !TP_WAVELET_COLORT;Opacity Red-Green -!TP_WAVELET_COMBOTH;Both !TP_WAVELET_COMPCONT;Contrast !TP_WAVELET_COMPGAMMA;Compression gamma !TP_WAVELET_COMPGAMMA_TOOLTIP;Adjusting the gamma of the residual image allows you to equilibrate the data and histogram. @@ -1777,9 +1843,9 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !TP_WAVELET_CONTRA_TOOLTIP;Changes contrast of the residual image. !TP_WAVELET_CONTR;Gamut !TP_WAVELET_CTYPE;Chrominance control -!TP_WAVELET_CURVEEDITOR_CC_TOOLTIP;Modifies local contrast as a function of the original local contrast (absciss)\nLow absciss represents small local contrast (real values about 10..20)\n50% absciss represents average of local contrast (real value about 100..300)\n66% absciss represents standard deviation of local contrast (real value about 300..800)\n100% represents maximum (real value about 3000..8000) +!TP_WAVELET_CURVEEDITOR_CC_TOOLTIP;Modifies local contrast as a function of the original local contrast (abscissa).\nLow abscissa values represent small local contrast (real values about 10..20).\n50% abscissa represents average local contrast (real value about 100..300).\n66% abscissa represents standard deviation of local contrast (real value about 300..800).\n100% abscissa represents maximum local contrast (real value about 3000..8000). !TP_WAVELET_CURVEEDITOR_CH;Contrast levels=f(Hue) -!TP_WAVELET_CURVEEDITOR_CH_TOOLTIP;Modifies each level's contrast as a function oh hue.\nTake care not to overwrite changes made with the Gamut Hue controls.\nThe curve will only have an effect when wavelet contrast level sliders are non-zero. +!TP_WAVELET_CURVEEDITOR_CH_TOOLTIP;Modifies each level's contrast as a function of hue.\nTake care not to overwrite changes made with the Gamut sub-tool's hue controls.\nThe curve will only have an effect when wavelet contrast level sliders are non-zero. !TP_WAVELET_CURVEEDITOR_CL;L !TP_WAVELET_CURVEEDITOR_CL_TOOLTIP;Applies a final contrast luminance curve at the end of the wavelet treatment. !TP_WAVELET_CURVEEDITOR_HH;HH @@ -1842,7 +1908,6 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !TP_WAVELET_LEVZERO;Level 1 !TP_WAVELET_LINKEDG;Link with Edge Sharpness' Strength !TP_WAVELET_LIPST;Enhanced algoritm -!TP_WAVELET_LIPST_TOOLTIP;This algorithm uses the proximity of a pixel and eight of its neighbors. If less difference, edges are reinforced. !TP_WAVELET_LOWLIGHT;Shadow luminance range !TP_WAVELET_MEDGREINF;First level !TP_WAVELET_MEDILEV;Edge detection @@ -1889,10 +1954,6 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !TP_WAVELET_TILESIZE;Tiling method !TP_WAVELET_TILESLIT;Little tiles !TP_WAVELET_TILES_TOOLTIP;Processing the full image leads to better quality and is the recommended option, while using tiles is a fall-back solution for users with little RAM. Refer to RawPedia for memory requirements. -!TP_WAVELET_TMHIGH;High -!TP_WAVELET_TMLOWHIGH;Low+High -!TP_WAVELET_TMNONE;None -!TP_WAVELET_TMSTD;Standard !TP_WAVELET_TMSTRENGTH;Compression strength !TP_WAVELET_TMSTRENGTH_TOOLTIP;Control the strength of tone mapping or contrast compression of the residual image. When the value is different from 0, the Strength and Gamma sliders of the Tone Mapping tool in the Exposure tab will become grayed out. !TP_WAVELET_TMTYPE;Compression method diff --git a/rtdata/languages/Chinese (Simplified) b/rtdata/languages/Chinese (Simplified) index 11c13d31a..38a6e31f8 100644 --- a/rtdata/languages/Chinese (Simplified) +++ b/rtdata/languages/Chinese (Simplified) @@ -402,7 +402,6 @@ PARTIALPASTE_EXIFCHANGES;对exif所做的修改 PARTIALPASTE_EXPOSURE;曝光 PARTIALPASTE_GRADIENT;渐变过滤 PARTIALPASTE_HSVEQUALIZER;HSV均衡 -PARTIALPASTE_ICMGAMMA;到处伽吗值 PARTIALPASTE_ICMSETTINGS;ICM 设置 PARTIALPASTE_IPTCINFO;IPTC 信息 PARTIALPASTE_LABCURVE;Lab调整 @@ -1188,6 +1187,26 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: - !HISTORY_MSG_404;W - ES - Base amplification !HISTORY_MSG_405;W - Denoise - Level 4 !HISTORY_MSG_406;W - ES - Neighboring pixels +!HISTORY_MSG_407;Retinex - Method +!HISTORY_MSG_408;Retinex - Neighboring +!HISTORY_MSG_409;Retinex - Gain +!HISTORY_MSG_410;Retinex - Offset +!HISTORY_MSG_411;Retinex - Strength +!HISTORY_MSG_412;Retinex - Scales +!HISTORY_MSG_413;Retinex - Variance +!HISTORY_MSG_414;Retinex - Histogram - Lab +!HISTORY_MSG_415;Retinex - Transmission +!HISTORY_MSG_416;Retinex +!HISTORY_MSG_417;Retinex - Transmission median +!HISTORY_MSG_418;Retinex - Threshold +!HISTORY_MSG_419;Retinex - Color space +!HISTORY_MSG_420;Retinex - Histogram - HSL +!HISTORY_MSG_421;Retinex - Gamma +!HISTORY_MSG_422;Retinex - Gamma +!HISTORY_MSG_423;Retinex - Gamma slope +!HISTORY_MSG_424;Retinex - HL threshold +!HISTORY_MSG_425;Retinex - Log base +!HISTORY_MSG_426;Retinex - Hue equalizer !MAIN_BUTTON_NAVNEXT_TOOLTIP;Navigate to the next image relative to image opened in the Editor.\nShortcut: Shift-F4\n\nTo navigate to the next image relative to the currently selected thumbnail in the File Browser or Filmstrip:\nShortcut: F4 !MAIN_BUTTON_NAVPREV_TOOLTIP;Navigate to the previous image relative to image opened in the Editor.\nShortcut: Shift-F3\n\nTo navigate to the previous image relative to the currently selected thumbnail in the File Browser or Filmstrip:\nShortcut: F3 !MAIN_BUTTON_NAVSYNC_TOOLTIP;Synchronize the File Browser or Filmstrip with the Editor to reveal the thumbnail of the currently opened image, and clear any active filters.\nShortcut: x\n\nAs above, but without clearing active filters:\nShortcut: y\n(Note that the thumbnail of the opened image will not be shown if filtered out). @@ -1234,6 +1253,7 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: - !PARTIALPASTE_RAW_DMETHOD;Demosaic method !PARTIALPASTE_RAW_FALSECOLOR;False color suppression !PARTIALPASTE_RAW_LMMSEITERATIONS;LMMSE enhancement steps +!PARTIALPASTE_RETINEX;Retinex !PARTIALPASTE_WAVELETGROUP;Wavelet Levels !PREFERENCES_AUTLISLOW;Low !PREFERENCES_AUTLISMAX;Max - Average of all tiles @@ -1522,7 +1542,7 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: - !TP_DIRPYRDENOISE_CCCURVE;Chrominance curve !TP_DIRPYRDENOISE_CHROMAFR;Chrominance !TP_DIRPYRDENOISE_CHROMA;Chrominance - Master -!TP_DIRPYRDENOISE_CTYPE;Auto method +!TP_DIRPYRDENOISE_CTYPE;Method !TP_DIRPYRDENOISE_CTYPE_TOOLTIP;Manual\nActs on the full image.\nYou control the noise reduction settings manually.\n\nAutomatic global\nActs on the full image.\n9 zones are used to calculate a global chrominance noise reduction setting.\n\nAutomatic multi-zones\nNo preview - works only during saving, but using the "Preview" method by matching the tile size and center to the preview size and center you can get an idea of the expected results.\nThe image is divided into tiles (about 10 to 70 depending on image size) and each tile receives its own chrominance noise reduction settings.\n\nPreview\nActs on the whole image.\nThe part of the image visible in the preview is used to calculate global chrominance noise reduction settings. !TP_DIRPYRDENOISE_CURVEEDITOR_CC;Chroma !TP_DIRPYRDENOISE_CURVEEDITOR_CC_TOOLTIP;Increase (multiply) the value of all chrominance sliders.\nThis curve lets you adjust the strength of chromatic noise reduction as a function of chromaticity, for instance to increase the action in areas of low saturation and to decrease it in those of high saturation. @@ -1689,6 +1709,54 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: - !TP_RAW_SENSOR_XTRANS_DMETHOD_TOOLTIP;3-pass gives best results (recommended for low ISO images).\n1-pass is almost undistinguishable from 3-pass for high ISO images and is faster. !TP_RAW_SENSOR_XTRANS_LABEL;Sensor with X-Trans Matrix !TP_RESIZE_APPLIESTO;Applies to: +!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL +!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b* +!TP_RETINEX_CONTEDIT_LH;Hue equalizer +!TP_RETINEX_CURVEEDITOR_CD;L=f(L) +!TP_RETINEX_CURVEEDITOR_CD_TOOLTIP;Luminance according to luminance L=f(L)\nCorrect raw data to reduce halos and artifacts. +!TP_RETINEX_CURVEEDITOR_LH;Strength=f(H) +!TP_RETINEX_CURVEEDITOR_LH_TOOLTIP;Strength according to hue Strength=f(H)\nThis curve also acts on chroma when using the "Highlight" retinex method. +!TP_RETINEX_GAIN;Gain +!TP_RETINEX_GAIN_TOOLTIP;Acts on the transmission in combination with the offset. This is very different from the others settings. Used for black or white pixels, and to help balance the histogram. +!TP_RETINEX_GAMMA;Free gamma +!TP_RETINEX_GAMMA;Gamma +!TP_RETINEX_GAMMA_FREE;Free +!TP_RETINEX_GAMMA_HIGH;High +!TP_RETINEX_GAMMA_LOW;Low +!TP_RETINEX_GAMMA_MID;Middle +!TP_RETINEX_GAMMA_NONE;None +!TP_RETINEX_GAMMA_TOOLTIP;Restore tones by applying gamma before and after Retinex. Different from Retinex curves or others curves (Lab, Exposure, etc.). +!TP_RETINEX_HIGHLIGHT;Highlight threshold +!TP_RETINEX_HIGHLIGHT_TOOLTIP;Increase action of High algorithm.\nMay require you to re-adjust "Neighboring pixels" and to increase the "White-point correction" in the Raw tab -> Raw White Points tool. +!TP_RETINEX_HIGHLIG;Highlight +!TP_RETINEX_HIGH;High +!TP_RETINEX_HSLSPACE_LIN;HSL-Linear +!TP_RETINEX_HSLSPACE_LOG;HSL-Logarithmic +!TP_RETINEX_LABEL;Retinex +!TP_RETINEX_LABSPACE;L*a*b* +!TP_RETINEX_LOW;Low +!TP_RETINEX_MEDIAN;Transmission median filter +!TP_RETINEX_METHOD;Method +!TP_RETINEX_METHOD_TOOLTIP;Low = Reinforce low light,\nUniform = Equalize action,\nHigh = Reinforce high light,\nHighlight = Remove magenta in highlights. +!TP_RETINEX_MLABEL;Restored haze-free Min=%1 Max=%2 +!TP_RETINEX_MLABEL_TOOLTIP;Should be near min=0 max=32768\nRestored image with no mixture. +!TP_RETINEX_NEIGHBOR;Neighboring pixels +!TP_RETINEX_NEUTRAL;Reset +!TP_RETINEX_NEUTRAL_TIP;Reset all sliders and curves to their default values. +!TP_RETINEX_OFFSET;Offset +!TP_RETINEX_SETTINGS;Settings +!TP_RETINEX_SLOPE;Free gamma slope +!TP_RETINEX_STRENGTH;Strength +!TP_RETINEX_THRESHOLD;Threshold +!TP_RETINEX_THRESHOLD_TOOLTIP;Limits in/out.\nIn = image source,\nOut = image gauss. +!TP_RETINEX_TLABEL2;TM Tm=%1 TM=%2 +!TP_RETINEX_TLABEL;TM Min=%1 Max=%2 Mean=%3 Sigma=%4 +!TP_RETINEX_TLABEL_TOOLTIP;Transmission map result.\nMin and Max are used by Variance.\nMean and Sigma\nTm=Min TM=Max of transmission map. +!TP_RETINEX_TRANSMISSION;Transmission map +!TP_RETINEX_TRANSMISSION_TOOLTIP;Transmission according to transmission.\nAbscissa: transmission from negative values (min), mean, and positives values (max).\nOrdinate: amplification or reduction. +!TP_RETINEX_UNIFORM;Uniform +!TP_RETINEX_VARIANCE;Variance +!TP_RETINEX_VARIANCE_TOOLTIP;Low variance increase local contrast and saturation, but can lead to artifacts. !TP_SHARPENING_TOOLTIP;Expect a slightly different effect when using with CIECAM02. If difference is observed, adjust to taste. !TP_SHARPENMICRO_LABEL;Microcontrast !TP_SHARPENMICRO_MATRIX;3×3 matrix instead of 5×5 @@ -1734,7 +1802,6 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: - !TP_WAVELET_BASLI;Slider !TP_WAVELET_BATYPE;Contrast balance method !TP_WAVELET_CBENAB;Toning and Color Balance -!TP_WAVELET_CBTYPE;Toning and Color Balance !TP_WAVELET_CB_TOOLTIP;For strong values product color-toning by combining it or not with levels decomposition 'toning'\nFor low values you can change the white balance of the background (sky, ...) without changing that of the front plane, generally more contrasted !TP_WAVELET_CCURVE;Local contrast !TP_WAVELET_CH1;Whole chroma range @@ -1748,7 +1815,6 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: - !TP_WAVELET_CHSL;Sliders !TP_WAVELET_CHTYPE;Chrominance method !TP_WAVELET_COLORT;Opacity Red-Green -!TP_WAVELET_COMBOTH;Both !TP_WAVELET_COMPCONT;Contrast !TP_WAVELET_COMPGAMMA;Compression gamma !TP_WAVELET_COMPGAMMA_TOOLTIP;Adjusting the gamma of the residual image allows you to equilibrate the data and histogram. @@ -1760,9 +1826,9 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: - !TP_WAVELET_CONTRA_TOOLTIP;Changes contrast of the residual image. !TP_WAVELET_CONTR;Gamut !TP_WAVELET_CTYPE;Chrominance control -!TP_WAVELET_CURVEEDITOR_CC_TOOLTIP;Modifies local contrast as a function of the original local contrast (absciss)\nLow absciss represents small local contrast (real values about 10..20)\n50% absciss represents average of local contrast (real value about 100..300)\n66% absciss represents standard deviation of local contrast (real value about 300..800)\n100% represents maximum (real value about 3000..8000) +!TP_WAVELET_CURVEEDITOR_CC_TOOLTIP;Modifies local contrast as a function of the original local contrast (abscissa).\nLow abscissa values represent small local contrast (real values about 10..20).\n50% abscissa represents average local contrast (real value about 100..300).\n66% abscissa represents standard deviation of local contrast (real value about 300..800).\n100% abscissa represents maximum local contrast (real value about 3000..8000). !TP_WAVELET_CURVEEDITOR_CH;Contrast levels=f(Hue) -!TP_WAVELET_CURVEEDITOR_CH_TOOLTIP;Modifies each level's contrast as a function oh hue.\nTake care not to overwrite changes made with the Gamut Hue controls.\nThe curve will only have an effect when wavelet contrast level sliders are non-zero. +!TP_WAVELET_CURVEEDITOR_CH_TOOLTIP;Modifies each level's contrast as a function of hue.\nTake care not to overwrite changes made with the Gamut sub-tool's hue controls.\nThe curve will only have an effect when wavelet contrast level sliders are non-zero. !TP_WAVELET_CURVEEDITOR_CL;L !TP_WAVELET_CURVEEDITOR_CL_TOOLTIP;Applies a final contrast luminance curve at the end of the wavelet treatment. !TP_WAVELET_CURVEEDITOR_HH;HH @@ -1825,7 +1891,6 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: - !TP_WAVELET_LEVZERO;Level 1 !TP_WAVELET_LINKEDG;Link with Edge Sharpness' Strength !TP_WAVELET_LIPST;Enhanced algoritm -!TP_WAVELET_LIPST_TOOLTIP;This algorithm uses the proximity of a pixel and eight of its neighbors. If less difference, edges are reinforced. !TP_WAVELET_LOWLIGHT;Shadow luminance range !TP_WAVELET_MEDGREINF;First level !TP_WAVELET_MEDILEV;Edge detection @@ -1872,10 +1937,6 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: - !TP_WAVELET_TILESIZE;Tiling method !TP_WAVELET_TILESLIT;Little tiles !TP_WAVELET_TILES_TOOLTIP;Processing the full image leads to better quality and is the recommended option, while using tiles is a fall-back solution for users with little RAM. Refer to RawPedia for memory requirements. -!TP_WAVELET_TMHIGH;High -!TP_WAVELET_TMLOWHIGH;Low+High -!TP_WAVELET_TMNONE;None -!TP_WAVELET_TMSTD;Standard !TP_WAVELET_TMSTRENGTH;Compression strength !TP_WAVELET_TMSTRENGTH_TOOLTIP;Control the strength of tone mapping or contrast compression of the residual image. When the value is different from 0, the Strength and Gamma sliders of the Tone Mapping tool in the Exposure tab will become grayed out. !TP_WAVELET_TMTYPE;Compression method diff --git a/rtdata/languages/Chinese (Traditional) b/rtdata/languages/Chinese (Traditional) index 710706d1b..55433c068 100644 --- a/rtdata/languages/Chinese (Traditional) +++ b/rtdata/languages/Chinese (Traditional) @@ -922,6 +922,26 @@ TP_WBALANCE_TEMPERATURE;色溫 !HISTORY_MSG_404;W - ES - Base amplification !HISTORY_MSG_405;W - Denoise - Level 4 !HISTORY_MSG_406;W - ES - Neighboring pixels +!HISTORY_MSG_407;Retinex - Method +!HISTORY_MSG_408;Retinex - Neighboring +!HISTORY_MSG_409;Retinex - Gain +!HISTORY_MSG_410;Retinex - Offset +!HISTORY_MSG_411;Retinex - Strength +!HISTORY_MSG_412;Retinex - Scales +!HISTORY_MSG_413;Retinex - Variance +!HISTORY_MSG_414;Retinex - Histogram - Lab +!HISTORY_MSG_415;Retinex - Transmission +!HISTORY_MSG_416;Retinex +!HISTORY_MSG_417;Retinex - Transmission median +!HISTORY_MSG_418;Retinex - Threshold +!HISTORY_MSG_419;Retinex - Color space +!HISTORY_MSG_420;Retinex - Histogram - HSL +!HISTORY_MSG_421;Retinex - Gamma +!HISTORY_MSG_422;Retinex - Gamma +!HISTORY_MSG_423;Retinex - Gamma slope +!HISTORY_MSG_424;Retinex - HL threshold +!HISTORY_MSG_425;Retinex - Log base +!HISTORY_MSG_426;Retinex - Hue equalizer !HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s !MAIN_BUTTON_FULLSCREEN;Fullscreen !MAIN_BUTTON_NAVNEXT_TOOLTIP;Navigate to the next image relative to image opened in the Editor.\nShortcut: Shift-F4\n\nTo navigate to the next image relative to the currently selected thumbnail in the File Browser or Filmstrip:\nShortcut: F4 @@ -1002,7 +1022,6 @@ TP_WBALANCE_TEMPERATURE;色溫 !PARTIALPASTE_FLATFIELDFILE;Flat-field file !PARTIALPASTE_GRADIENT;Graduated filter !PARTIALPASTE_HSVEQUALIZER;HSV equalizer -!PARTIALPASTE_ICMGAMMA;Output gamma !PARTIALPASTE_IMPULSEDENOISE;Impulse noise reduction !PARTIALPASTE_LABCURVE;L*a*b* adjustments !PARTIALPASTE_LENSPROFILE;Lens correction profile @@ -1024,6 +1043,7 @@ TP_WBALANCE_TEMPERATURE;色溫 !PARTIALPASTE_RAW_DMETHOD;Demosaic method !PARTIALPASTE_RAW_FALSECOLOR;False color suppression !PARTIALPASTE_RAW_LMMSEITERATIONS;LMMSE enhancement steps +!PARTIALPASTE_RETINEX;Retinex !PARTIALPASTE_RGBCURVES;RGB curves !PARTIALPASTE_SHARPENEDGE;Edges !PARTIALPASTE_SHARPENMICRO;Microcontrast @@ -1399,7 +1419,7 @@ TP_WBALANCE_TEMPERATURE;色溫 !TP_DIRPYRDENOISE_CCCURVE;Chrominance curve !TP_DIRPYRDENOISE_CHROMAFR;Chrominance !TP_DIRPYRDENOISE_CHROMA;Chrominance - Master -!TP_DIRPYRDENOISE_CTYPE;Auto method +!TP_DIRPYRDENOISE_CTYPE;Method !TP_DIRPYRDENOISE_CTYPE_TOOLTIP;Manual\nActs on the full image.\nYou control the noise reduction settings manually.\n\nAutomatic global\nActs on the full image.\n9 zones are used to calculate a global chrominance noise reduction setting.\n\nAutomatic multi-zones\nNo preview - works only during saving, but using the "Preview" method by matching the tile size and center to the preview size and center you can get an idea of the expected results.\nThe image is divided into tiles (about 10 to 70 depending on image size) and each tile receives its own chrominance noise reduction settings.\n\nPreview\nActs on the whole image.\nThe part of the image visible in the preview is used to calculate global chrominance noise reduction settings. !TP_DIRPYRDENOISE_CURVEEDITOR_CC;Chroma !TP_DIRPYRDENOISE_CURVEEDITOR_CC_TOOLTIP;Increase (multiply) the value of all chrominance sliders.\nThis curve lets you adjust the strength of chromatic noise reduction as a function of chromaticity, for instance to increase the action in areas of low saturation and to decrease it in those of high saturation. @@ -1656,6 +1676,54 @@ TP_WBALANCE_TEMPERATURE;色溫 !TP_RESIZE_FITBOX;Bounding Box !TP_RESIZE_FULLIMAGE;Full Image !TP_RESIZE_LANCZOS;Lanczos +!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL +!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b* +!TP_RETINEX_CONTEDIT_LH;Hue equalizer +!TP_RETINEX_CURVEEDITOR_CD;L=f(L) +!TP_RETINEX_CURVEEDITOR_CD_TOOLTIP;Luminance according to luminance L=f(L)\nCorrect raw data to reduce halos and artifacts. +!TP_RETINEX_CURVEEDITOR_LH;Strength=f(H) +!TP_RETINEX_CURVEEDITOR_LH_TOOLTIP;Strength according to hue Strength=f(H)\nThis curve also acts on chroma when using the "Highlight" retinex method. +!TP_RETINEX_GAIN;Gain +!TP_RETINEX_GAIN_TOOLTIP;Acts on the transmission in combination with the offset. This is very different from the others settings. Used for black or white pixels, and to help balance the histogram. +!TP_RETINEX_GAMMA;Free gamma +!TP_RETINEX_GAMMA;Gamma +!TP_RETINEX_GAMMA_FREE;Free +!TP_RETINEX_GAMMA_HIGH;High +!TP_RETINEX_GAMMA_LOW;Low +!TP_RETINEX_GAMMA_MID;Middle +!TP_RETINEX_GAMMA_NONE;None +!TP_RETINEX_GAMMA_TOOLTIP;Restore tones by applying gamma before and after Retinex. Different from Retinex curves or others curves (Lab, Exposure, etc.). +!TP_RETINEX_HIGHLIGHT;Highlight threshold +!TP_RETINEX_HIGHLIGHT_TOOLTIP;Increase action of High algorithm.\nMay require you to re-adjust "Neighboring pixels" and to increase the "White-point correction" in the Raw tab -> Raw White Points tool. +!TP_RETINEX_HIGHLIG;Highlight +!TP_RETINEX_HIGH;High +!TP_RETINEX_HSLSPACE_LIN;HSL-Linear +!TP_RETINEX_HSLSPACE_LOG;HSL-Logarithmic +!TP_RETINEX_LABEL;Retinex +!TP_RETINEX_LABSPACE;L*a*b* +!TP_RETINEX_LOW;Low +!TP_RETINEX_MEDIAN;Transmission median filter +!TP_RETINEX_METHOD;Method +!TP_RETINEX_METHOD_TOOLTIP;Low = Reinforce low light,\nUniform = Equalize action,\nHigh = Reinforce high light,\nHighlight = Remove magenta in highlights. +!TP_RETINEX_MLABEL;Restored haze-free Min=%1 Max=%2 +!TP_RETINEX_MLABEL_TOOLTIP;Should be near min=0 max=32768\nRestored image with no mixture. +!TP_RETINEX_NEIGHBOR;Neighboring pixels +!TP_RETINEX_NEUTRAL;Reset +!TP_RETINEX_NEUTRAL_TIP;Reset all sliders and curves to their default values. +!TP_RETINEX_OFFSET;Offset +!TP_RETINEX_SETTINGS;Settings +!TP_RETINEX_SLOPE;Free gamma slope +!TP_RETINEX_STRENGTH;Strength +!TP_RETINEX_THRESHOLD;Threshold +!TP_RETINEX_THRESHOLD_TOOLTIP;Limits in/out.\nIn = image source,\nOut = image gauss. +!TP_RETINEX_TLABEL2;TM Tm=%1 TM=%2 +!TP_RETINEX_TLABEL;TM Min=%1 Max=%2 Mean=%3 Sigma=%4 +!TP_RETINEX_TLABEL_TOOLTIP;Transmission map result.\nMin and Max are used by Variance.\nMean and Sigma\nTm=Min TM=Max of transmission map. +!TP_RETINEX_TRANSMISSION;Transmission map +!TP_RETINEX_TRANSMISSION_TOOLTIP;Transmission according to transmission.\nAbscissa: transmission from negative values (min), mean, and positives values (max).\nOrdinate: amplification or reduction. +!TP_RETINEX_UNIFORM;Uniform +!TP_RETINEX_VARIANCE;Variance +!TP_RETINEX_VARIANCE_TOOLTIP;Low variance increase local contrast and saturation, but can lead to artifacts. !TP_RGBCURVES_BLUE;B !TP_RGBCURVES_CHANNEL;Channel !TP_RGBCURVES_GREEN;G @@ -1719,7 +1787,6 @@ TP_WBALANCE_TEMPERATURE;色溫 !TP_WAVELET_BASLI;Slider !TP_WAVELET_BATYPE;Contrast balance method !TP_WAVELET_CBENAB;Toning and Color Balance -!TP_WAVELET_CBTYPE;Toning and Color Balance !TP_WAVELET_CB_TOOLTIP;For strong values product color-toning by combining it or not with levels decomposition 'toning'\nFor low values you can change the white balance of the background (sky, ...) without changing that of the front plane, generally more contrasted !TP_WAVELET_CCURVE;Local contrast !TP_WAVELET_CH1;Whole chroma range @@ -1733,7 +1800,6 @@ TP_WBALANCE_TEMPERATURE;色溫 !TP_WAVELET_CHSL;Sliders !TP_WAVELET_CHTYPE;Chrominance method !TP_WAVELET_COLORT;Opacity Red-Green -!TP_WAVELET_COMBOTH;Both !TP_WAVELET_COMPCONT;Contrast !TP_WAVELET_COMPGAMMA;Compression gamma !TP_WAVELET_COMPGAMMA_TOOLTIP;Adjusting the gamma of the residual image allows you to equilibrate the data and histogram. @@ -1745,9 +1811,9 @@ TP_WBALANCE_TEMPERATURE;色溫 !TP_WAVELET_CONTRA_TOOLTIP;Changes contrast of the residual image. !TP_WAVELET_CONTR;Gamut !TP_WAVELET_CTYPE;Chrominance control -!TP_WAVELET_CURVEEDITOR_CC_TOOLTIP;Modifies local contrast as a function of the original local contrast (absciss)\nLow absciss represents small local contrast (real values about 10..20)\n50% absciss represents average of local contrast (real value about 100..300)\n66% absciss represents standard deviation of local contrast (real value about 300..800)\n100% represents maximum (real value about 3000..8000) +!TP_WAVELET_CURVEEDITOR_CC_TOOLTIP;Modifies local contrast as a function of the original local contrast (abscissa).\nLow abscissa values represent small local contrast (real values about 10..20).\n50% abscissa represents average local contrast (real value about 100..300).\n66% abscissa represents standard deviation of local contrast (real value about 300..800).\n100% abscissa represents maximum local contrast (real value about 3000..8000). !TP_WAVELET_CURVEEDITOR_CH;Contrast levels=f(Hue) -!TP_WAVELET_CURVEEDITOR_CH_TOOLTIP;Modifies each level's contrast as a function oh hue.\nTake care not to overwrite changes made with the Gamut Hue controls.\nThe curve will only have an effect when wavelet contrast level sliders are non-zero. +!TP_WAVELET_CURVEEDITOR_CH_TOOLTIP;Modifies each level's contrast as a function of hue.\nTake care not to overwrite changes made with the Gamut sub-tool's hue controls.\nThe curve will only have an effect when wavelet contrast level sliders are non-zero. !TP_WAVELET_CURVEEDITOR_CL;L !TP_WAVELET_CURVEEDITOR_CL_TOOLTIP;Applies a final contrast luminance curve at the end of the wavelet treatment. !TP_WAVELET_CURVEEDITOR_HH;HH @@ -1810,7 +1876,6 @@ TP_WBALANCE_TEMPERATURE;色溫 !TP_WAVELET_LEVZERO;Level 1 !TP_WAVELET_LINKEDG;Link with Edge Sharpness' Strength !TP_WAVELET_LIPST;Enhanced algoritm -!TP_WAVELET_LIPST_TOOLTIP;This algorithm uses the proximity of a pixel and eight of its neighbors. If less difference, edges are reinforced. !TP_WAVELET_LOWLIGHT;Shadow luminance range !TP_WAVELET_MEDGREINF;First level !TP_WAVELET_MEDILEV;Edge detection @@ -1857,10 +1922,6 @@ TP_WBALANCE_TEMPERATURE;色溫 !TP_WAVELET_TILESIZE;Tiling method !TP_WAVELET_TILESLIT;Little tiles !TP_WAVELET_TILES_TOOLTIP;Processing the full image leads to better quality and is the recommended option, while using tiles is a fall-back solution for users with little RAM. Refer to RawPedia for memory requirements. -!TP_WAVELET_TMHIGH;High -!TP_WAVELET_TMLOWHIGH;Low+High -!TP_WAVELET_TMNONE;None -!TP_WAVELET_TMSTD;Standard !TP_WAVELET_TMSTRENGTH;Compression strength !TP_WAVELET_TMSTRENGTH_TOOLTIP;Control the strength of tone mapping or contrast compression of the residual image. When the value is different from 0, the Strength and Gamma sliders of the Tone Mapping tool in the Exposure tab will become grayed out. !TP_WAVELET_TMTYPE;Compression method diff --git a/rtdata/languages/Czech b/rtdata/languages/Czech index 8deab96b5..c1610bb87 100644 --- a/rtdata/languages/Czech +++ b/rtdata/languages/Czech @@ -747,7 +747,6 @@ PARTIALPASTE_FLATFIELDCLIPCONTROL;Flat-field kontrola oříznutí PARTIALPASTE_FLATFIELDFILE;Flat Field soubor PARTIALPASTE_GRADIENT;Přechodový filtr PARTIALPASTE_HSVEQUALIZER;HSV korekce -PARTIALPASTE_ICMGAMMA;Výstupní gama PARTIALPASTE_ICMSETTINGS;Nastavení správy barev PARTIALPASTE_IMPULSEDENOISE;Redukce impulzního šumu PARTIALPASTE_IPTCINFO;IPTC @@ -1604,7 +1603,6 @@ TP_WAVELET_6;Úroveň 6 TP_WAVELET_7;Úroveň 7 TP_WAVELET_8;Úroveň 8 TP_WAVELET_9;Úroveň 9 -TP_WAVELET_ALL;Všechny úrovně ve všech směrech TP_WAVELET_APPLYTO;Použít na TP_WAVELET_AVOID;Zabránit posunu barev TP_WAVELET_CH1;Všechny barvy @@ -1621,7 +1619,6 @@ TP_WAVELET_CONTRA;Kontrast TP_WAVELET_CONTRA_TOOLTIP;Změní kontrast zůstatku obrazu\nFunkce maximálních úrovní TP_WAVELET_CONTR;Paleta - nastavení TP_WAVELET_DALL;Všechny směry -TP_WAVELET_DISP;Nastavení náhledu TP_WAVELET_DONE;Svisle TP_WAVELET_DTHR;Napříč TP_WAVELET_DTWO;Vodorovně @@ -1637,7 +1634,6 @@ TP_WAVELET_HUESKIN;Rozsah odstínů (pleť) TP_WAVELET_HUESKIN_TOOLTIP;Pyramida je pro horní část, kde je algoritmus nejvíce efektivní.\nKe spodní části, tranzitním zónám.\nPokud potřebujete posunout oblast hodně doleva nebo doprava - nebo pokud se vyskytnou artefakty = vyvážení bílé není správné, můžete mírně zmenšit zónu aby jste zabránili ovlivnění ostatních částí obrázku. TP_WAVELET_HUESKY;Rozsah odstínů (obloha) TP_WAVELET_HUESKY_TOOLTIP;Pyramida je pro horní část, kde je algoritmus nejvíce efektivní.\nKe spodní části, tranzitním zónám.\nPokud potřebujete posunout oblast hodně doleva nebo doprava - nebo pokud se vyskytnou artefakty = vyvážení bílé není správné, můžete mírně zmenšit zónu aby jste zabránili ovlivnění ostatních částí obrázku. -TP_WAVELET_INF;Méně nebo shodně s úrovní TP_WAVELET_LABEL;Úrovně vlnky TP_WAVELET_LARGEST;Nejhrubší TP_WAVELET_LEVCH;Barevnost @@ -1648,10 +1644,8 @@ TP_WAVELET_LEVLABEL;Náhled maximálně dostupné úrovně=%1 TP_WAVELET_LOWLIGHT;Rozsah projasnění stínů TP_WAVELET_MEDI;Omezení artefaktů na modré obloze TP_WAVELET_NEUTRAL;Neutrální -TP_WAVELET_ONE;Jedna úroveň TP_WAVELET_OPACITY;Neprůhlednost modrá-žlutá Úrovně TP_WAVELET_PASTEL;Barevnost pastelů -TP_WAVELET_PREVIEWLEVELS;Náhled TP_WAVELET_RESCHRO;Barevnost TP_WAVELET_RESCONH;Světla TP_WAVELET_RESCON;Stíny @@ -1814,8 +1808,29 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: - !HISTORY_MSG_404;W - ES - Base amplification !HISTORY_MSG_405;W - Denoise - Level 4 !HISTORY_MSG_406;W - ES - Neighboring pixels +!HISTORY_MSG_407;Retinex - Method +!HISTORY_MSG_408;Retinex - Neighboring +!HISTORY_MSG_409;Retinex - Gain +!HISTORY_MSG_410;Retinex - Offset +!HISTORY_MSG_411;Retinex - Strength +!HISTORY_MSG_412;Retinex - Scales +!HISTORY_MSG_413;Retinex - Variance +!HISTORY_MSG_414;Retinex - Histogram - Lab +!HISTORY_MSG_415;Retinex - Transmission +!HISTORY_MSG_416;Retinex +!HISTORY_MSG_417;Retinex - Transmission median +!HISTORY_MSG_418;Retinex - Threshold +!HISTORY_MSG_419;Retinex - Color space +!HISTORY_MSG_420;Retinex - Histogram - HSL +!HISTORY_MSG_421;Retinex - Gamma +!HISTORY_MSG_422;Retinex - Gamma +!HISTORY_MSG_423;Retinex - Gamma slope +!HISTORY_MSG_424;Retinex - HL threshold +!HISTORY_MSG_425;Retinex - Log base +!HISTORY_MSG_426;Retinex - Hue equalizer !MAIN_TAB_WAVELET;Wavelet !MAIN_TAB_WAVELET_TOOLTIP;Shortcut: Alt-w +!PARTIALPASTE_RETINEX;Retinex !PARTIALPASTE_WAVELETGROUP;Wavelet Levels !PREFERENCES_CURVEBBOXPOS;Position of curve copypasta buttons !PREFERENCES_CURVEBBOXPOS_ABOVE;Above @@ -1848,6 +1863,54 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: - !TP_PRSHARPENING_TOOLTIP;Sharpens the image after resizing. Only works when the "Lanczos" resizing method is used. It is impossible to preview the effects of this tool. See RawPedia for usage instructions. !TP_RAW_HD;Threshold !TP_RAW_HD_TOOLTIP;Lower values make hot/dead pixel detection more aggressive, but false positives may lead to artifacts. If you notice any artifacts appearing when enabling the Hot/Dead Pixel Filters, gradually increase the threshold value until they disappear. +!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL +!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b* +!TP_RETINEX_CONTEDIT_LH;Hue equalizer +!TP_RETINEX_CURVEEDITOR_CD;L=f(L) +!TP_RETINEX_CURVEEDITOR_CD_TOOLTIP;Luminance according to luminance L=f(L)\nCorrect raw data to reduce halos and artifacts. +!TP_RETINEX_CURVEEDITOR_LH;Strength=f(H) +!TP_RETINEX_CURVEEDITOR_LH_TOOLTIP;Strength according to hue Strength=f(H)\nThis curve also acts on chroma when using the "Highlight" retinex method. +!TP_RETINEX_GAIN;Gain +!TP_RETINEX_GAIN_TOOLTIP;Acts on the transmission in combination with the offset. This is very different from the others settings. Used for black or white pixels, and to help balance the histogram. +!TP_RETINEX_GAMMA;Free gamma +!TP_RETINEX_GAMMA;Gamma +!TP_RETINEX_GAMMA_FREE;Free +!TP_RETINEX_GAMMA_HIGH;High +!TP_RETINEX_GAMMA_LOW;Low +!TP_RETINEX_GAMMA_MID;Middle +!TP_RETINEX_GAMMA_NONE;None +!TP_RETINEX_GAMMA_TOOLTIP;Restore tones by applying gamma before and after Retinex. Different from Retinex curves or others curves (Lab, Exposure, etc.). +!TP_RETINEX_HIGHLIGHT;Highlight threshold +!TP_RETINEX_HIGHLIGHT_TOOLTIP;Increase action of High algorithm.\nMay require you to re-adjust "Neighboring pixels" and to increase the "White-point correction" in the Raw tab -> Raw White Points tool. +!TP_RETINEX_HIGHLIG;Highlight +!TP_RETINEX_HIGH;High +!TP_RETINEX_HSLSPACE_LIN;HSL-Linear +!TP_RETINEX_HSLSPACE_LOG;HSL-Logarithmic +!TP_RETINEX_LABEL;Retinex +!TP_RETINEX_LABSPACE;L*a*b* +!TP_RETINEX_LOW;Low +!TP_RETINEX_MEDIAN;Transmission median filter +!TP_RETINEX_METHOD;Method +!TP_RETINEX_METHOD_TOOLTIP;Low = Reinforce low light,\nUniform = Equalize action,\nHigh = Reinforce high light,\nHighlight = Remove magenta in highlights. +!TP_RETINEX_MLABEL;Restored haze-free Min=%1 Max=%2 +!TP_RETINEX_MLABEL_TOOLTIP;Should be near min=0 max=32768\nRestored image with no mixture. +!TP_RETINEX_NEIGHBOR;Neighboring pixels +!TP_RETINEX_NEUTRAL;Reset +!TP_RETINEX_NEUTRAL_TIP;Reset all sliders and curves to their default values. +!TP_RETINEX_OFFSET;Offset +!TP_RETINEX_SETTINGS;Settings +!TP_RETINEX_SLOPE;Free gamma slope +!TP_RETINEX_STRENGTH;Strength +!TP_RETINEX_THRESHOLD;Threshold +!TP_RETINEX_THRESHOLD_TOOLTIP;Limits in/out.\nIn = image source,\nOut = image gauss. +!TP_RETINEX_TLABEL2;TM Tm=%1 TM=%2 +!TP_RETINEX_TLABEL;TM Min=%1 Max=%2 Mean=%3 Sigma=%4 +!TP_RETINEX_TLABEL_TOOLTIP;Transmission map result.\nMin and Max are used by Variance.\nMean and Sigma\nTm=Min TM=Max of transmission map. +!TP_RETINEX_TRANSMISSION;Transmission map +!TP_RETINEX_TRANSMISSION_TOOLTIP;Transmission according to transmission.\nAbscissa: transmission from negative values (min), mean, and positives values (max).\nOrdinate: amplification or reduction. +!TP_RETINEX_UNIFORM;Uniform +!TP_RETINEX_VARIANCE;Variance +!TP_RETINEX_VARIANCE_TOOLTIP;Low variance increase local contrast and saturation, but can lead to artifacts. !TP_WAVELET_B0;Black !TP_WAVELET_B1;Grey !TP_WAVELET_B2;Residual @@ -1861,22 +1924,20 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: - !TP_WAVELET_BASLI;Slider !TP_WAVELET_BATYPE;Contrast balance method !TP_WAVELET_CBENAB;Toning and Color Balance -!TP_WAVELET_CBTYPE;Toning and Color Balance !TP_WAVELET_CB_TOOLTIP;For strong values product color-toning by combining it or not with levels decomposition 'toning'\nFor low values you can change the white balance of the background (sky, ...) without changing that of the front plane, generally more contrasted !TP_WAVELET_CCURVE;Local contrast !TP_WAVELET_CHCU;Curve !TP_WAVELET_CHSL;Sliders !TP_WAVELET_CHTYPE;Chrominance method -!TP_WAVELET_COMBOTH;Both !TP_WAVELET_COMPCONT;Contrast !TP_WAVELET_COMPGAMMA;Compression gamma !TP_WAVELET_COMPGAMMA_TOOLTIP;Adjusting the gamma of the residual image allows you to equilibrate the data and histogram. !TP_WAVELET_COMPTM;Tone mapping !TP_WAVELET_CONTEDIT;'After' contrast curve !TP_WAVELET_CTYPE;Chrominance control -!TP_WAVELET_CURVEEDITOR_CC_TOOLTIP;Modifies local contrast as a function of the original local contrast (absciss)\nLow absciss represents small local contrast (real values about 10..20)\n50% absciss represents average of local contrast (real value about 100..300)\n66% absciss represents standard deviation of local contrast (real value about 300..800)\n100% represents maximum (real value about 3000..8000) +!TP_WAVELET_CURVEEDITOR_CC_TOOLTIP;Modifies local contrast as a function of the original local contrast (abscissa).\nLow abscissa values represent small local contrast (real values about 10..20).\n50% abscissa represents average local contrast (real value about 100..300).\n66% abscissa represents standard deviation of local contrast (real value about 300..800).\n100% abscissa represents maximum local contrast (real value about 3000..8000). !TP_WAVELET_CURVEEDITOR_CH;Contrast levels=f(Hue) -!TP_WAVELET_CURVEEDITOR_CH_TOOLTIP;Modifies each level's contrast as a function oh hue.\nTake care not to overwrite changes made with the Gamut Hue controls.\nThe curve will only have an effect when wavelet contrast level sliders are non-zero. +!TP_WAVELET_CURVEEDITOR_CH_TOOLTIP;Modifies each level's contrast as a function of hue.\nTake care not to overwrite changes made with the Gamut sub-tool's hue controls.\nThe curve will only have an effect when wavelet contrast level sliders are non-zero. !TP_WAVELET_CURVEEDITOR_CL;L !TP_WAVELET_CURVEEDITOR_CL_TOOLTIP;Applies a final contrast luminance curve at the end of the wavelet treatment. !TP_WAVELET_CURVEEDITOR_HH;HH @@ -1916,7 +1977,6 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: - !TP_WAVELET_LEVZERO;Level 1 !TP_WAVELET_LINKEDG;Link with Edge Sharpness' Strength !TP_WAVELET_LIPST;Enhanced algoritm -!TP_WAVELET_LIPST_TOOLTIP;This algorithm uses the proximity of a pixel and eight of its neighbors. If less difference, edges are reinforced. !TP_WAVELET_MEDGREINF;First level !TP_WAVELET_MEDILEV;Edge detection !TP_WAVELET_MEDILEV_TOOLTIP;When you enable Edge Detection, it is recommanded:\n- to disabled low contrast levels to avoid artifacts,\n- to use high values of gradient sensitivity.\n\nYou can modulate the strength with 'refine' from Denoise and Refine. @@ -1934,10 +1994,6 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: - !TP_WAVELET_RE1;Reinforced !TP_WAVELET_RE2;Unchanged !TP_WAVELET_RE3;Reduced -!TP_WAVELET_TMHIGH;High -!TP_WAVELET_TMLOWHIGH;Low+High -!TP_WAVELET_TMNONE;None -!TP_WAVELET_TMSTD;Standard !TP_WAVELET_TMSTRENGTH;Compression strength !TP_WAVELET_TMSTRENGTH_TOOLTIP;Control the strength of tone mapping or contrast compression of the residual image. When the value is different from 0, the Strength and Gamma sliders of the Tone Mapping tool in the Exposure tab will become grayed out. !TP_WAVELET_TMTYPE;Compression method diff --git a/rtdata/languages/Dansk b/rtdata/languages/Dansk index 66acbfb22..8c3c0d651 100644 --- a/rtdata/languages/Dansk +++ b/rtdata/languages/Dansk @@ -918,6 +918,26 @@ TP_WBALANCE_TEMPERATURE;Temperatur !HISTORY_MSG_404;W - ES - Base amplification !HISTORY_MSG_405;W - Denoise - Level 4 !HISTORY_MSG_406;W - ES - Neighboring pixels +!HISTORY_MSG_407;Retinex - Method +!HISTORY_MSG_408;Retinex - Neighboring +!HISTORY_MSG_409;Retinex - Gain +!HISTORY_MSG_410;Retinex - Offset +!HISTORY_MSG_411;Retinex - Strength +!HISTORY_MSG_412;Retinex - Scales +!HISTORY_MSG_413;Retinex - Variance +!HISTORY_MSG_414;Retinex - Histogram - Lab +!HISTORY_MSG_415;Retinex - Transmission +!HISTORY_MSG_416;Retinex +!HISTORY_MSG_417;Retinex - Transmission median +!HISTORY_MSG_418;Retinex - Threshold +!HISTORY_MSG_419;Retinex - Color space +!HISTORY_MSG_420;Retinex - Histogram - HSL +!HISTORY_MSG_421;Retinex - Gamma +!HISTORY_MSG_422;Retinex - Gamma +!HISTORY_MSG_423;Retinex - Gamma slope +!HISTORY_MSG_424;Retinex - HL threshold +!HISTORY_MSG_425;Retinex - Log base +!HISTORY_MSG_426;Retinex - Hue equalizer !HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s !MAIN_BUTTON_FULLSCREEN;Fullscreen !MAIN_BUTTON_NAVNEXT_TOOLTIP;Navigate to the next image relative to image opened in the Editor.\nShortcut: Shift-F4\n\nTo navigate to the next image relative to the currently selected thumbnail in the File Browser or Filmstrip:\nShortcut: F4 @@ -1000,7 +1020,6 @@ TP_WBALANCE_TEMPERATURE;Temperatur !PARTIALPASTE_FLATFIELDFILE;Flat-field file !PARTIALPASTE_GRADIENT;Graduated filter !PARTIALPASTE_HSVEQUALIZER;HSV equalizer -!PARTIALPASTE_ICMGAMMA;Output gamma !PARTIALPASTE_IMPULSEDENOISE;Impulse noise reduction !PARTIALPASTE_LABCURVE;L*a*b* adjustments !PARTIALPASTE_LENSPROFILE;Lens correction profile @@ -1022,6 +1041,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur !PARTIALPASTE_RAW_DMETHOD;Demosaic method !PARTIALPASTE_RAW_FALSECOLOR;False color suppression !PARTIALPASTE_RAW_LMMSEITERATIONS;LMMSE enhancement steps +!PARTIALPASTE_RETINEX;Retinex !PARTIALPASTE_RGBCURVES;RGB curves !PARTIALPASTE_SHARPENEDGE;Edges !PARTIALPASTE_SHARPENMICRO;Microcontrast @@ -1397,7 +1417,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur !TP_DIRPYRDENOISE_CCCURVE;Chrominance curve !TP_DIRPYRDENOISE_CHROMAFR;Chrominance !TP_DIRPYRDENOISE_CHROMA;Chrominance - Master -!TP_DIRPYRDENOISE_CTYPE;Auto method +!TP_DIRPYRDENOISE_CTYPE;Method !TP_DIRPYRDENOISE_CTYPE_TOOLTIP;Manual\nActs on the full image.\nYou control the noise reduction settings manually.\n\nAutomatic global\nActs on the full image.\n9 zones are used to calculate a global chrominance noise reduction setting.\n\nAutomatic multi-zones\nNo preview - works only during saving, but using the "Preview" method by matching the tile size and center to the preview size and center you can get an idea of the expected results.\nThe image is divided into tiles (about 10 to 70 depending on image size) and each tile receives its own chrominance noise reduction settings.\n\nPreview\nActs on the whole image.\nThe part of the image visible in the preview is used to calculate global chrominance noise reduction settings. !TP_DIRPYRDENOISE_CURVEEDITOR_CC;Chroma !TP_DIRPYRDENOISE_CURVEEDITOR_CC_TOOLTIP;Increase (multiply) the value of all chrominance sliders.\nThis curve lets you adjust the strength of chromatic noise reduction as a function of chromaticity, for instance to increase the action in areas of low saturation and to decrease it in those of high saturation. @@ -1655,6 +1675,54 @@ TP_WBALANCE_TEMPERATURE;Temperatur !TP_RESIZE_LANCZOS;Lanczos !TP_RESIZE_SPECIFY;Specify: !TP_RESIZE_WIDTH;Width +!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL +!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b* +!TP_RETINEX_CONTEDIT_LH;Hue equalizer +!TP_RETINEX_CURVEEDITOR_CD;L=f(L) +!TP_RETINEX_CURVEEDITOR_CD_TOOLTIP;Luminance according to luminance L=f(L)\nCorrect raw data to reduce halos and artifacts. +!TP_RETINEX_CURVEEDITOR_LH;Strength=f(H) +!TP_RETINEX_CURVEEDITOR_LH_TOOLTIP;Strength according to hue Strength=f(H)\nThis curve also acts on chroma when using the "Highlight" retinex method. +!TP_RETINEX_GAIN;Gain +!TP_RETINEX_GAIN_TOOLTIP;Acts on the transmission in combination with the offset. This is very different from the others settings. Used for black or white pixels, and to help balance the histogram. +!TP_RETINEX_GAMMA;Free gamma +!TP_RETINEX_GAMMA;Gamma +!TP_RETINEX_GAMMA_FREE;Free +!TP_RETINEX_GAMMA_HIGH;High +!TP_RETINEX_GAMMA_LOW;Low +!TP_RETINEX_GAMMA_MID;Middle +!TP_RETINEX_GAMMA_NONE;None +!TP_RETINEX_GAMMA_TOOLTIP;Restore tones by applying gamma before and after Retinex. Different from Retinex curves or others curves (Lab, Exposure, etc.). +!TP_RETINEX_HIGHLIGHT;Highlight threshold +!TP_RETINEX_HIGHLIGHT_TOOLTIP;Increase action of High algorithm.\nMay require you to re-adjust "Neighboring pixels" and to increase the "White-point correction" in the Raw tab -> Raw White Points tool. +!TP_RETINEX_HIGHLIG;Highlight +!TP_RETINEX_HIGH;High +!TP_RETINEX_HSLSPACE_LIN;HSL-Linear +!TP_RETINEX_HSLSPACE_LOG;HSL-Logarithmic +!TP_RETINEX_LABEL;Retinex +!TP_RETINEX_LABSPACE;L*a*b* +!TP_RETINEX_LOW;Low +!TP_RETINEX_MEDIAN;Transmission median filter +!TP_RETINEX_METHOD;Method +!TP_RETINEX_METHOD_TOOLTIP;Low = Reinforce low light,\nUniform = Equalize action,\nHigh = Reinforce high light,\nHighlight = Remove magenta in highlights. +!TP_RETINEX_MLABEL;Restored haze-free Min=%1 Max=%2 +!TP_RETINEX_MLABEL_TOOLTIP;Should be near min=0 max=32768\nRestored image with no mixture. +!TP_RETINEX_NEIGHBOR;Neighboring pixels +!TP_RETINEX_NEUTRAL;Reset +!TP_RETINEX_NEUTRAL_TIP;Reset all sliders and curves to their default values. +!TP_RETINEX_OFFSET;Offset +!TP_RETINEX_SETTINGS;Settings +!TP_RETINEX_SLOPE;Free gamma slope +!TP_RETINEX_STRENGTH;Strength +!TP_RETINEX_THRESHOLD;Threshold +!TP_RETINEX_THRESHOLD_TOOLTIP;Limits in/out.\nIn = image source,\nOut = image gauss. +!TP_RETINEX_TLABEL2;TM Tm=%1 TM=%2 +!TP_RETINEX_TLABEL;TM Min=%1 Max=%2 Mean=%3 Sigma=%4 +!TP_RETINEX_TLABEL_TOOLTIP;Transmission map result.\nMin and Max are used by Variance.\nMean and Sigma\nTm=Min TM=Max of transmission map. +!TP_RETINEX_TRANSMISSION;Transmission map +!TP_RETINEX_TRANSMISSION_TOOLTIP;Transmission according to transmission.\nAbscissa: transmission from negative values (min), mean, and positives values (max).\nOrdinate: amplification or reduction. +!TP_RETINEX_UNIFORM;Uniform +!TP_RETINEX_VARIANCE;Variance +!TP_RETINEX_VARIANCE_TOOLTIP;Low variance increase local contrast and saturation, but can lead to artifacts. !TP_RGBCURVES_BLUE;B !TP_RGBCURVES_CHANNEL;Channel !TP_RGBCURVES_GREEN;G @@ -1718,7 +1786,6 @@ TP_WBALANCE_TEMPERATURE;Temperatur !TP_WAVELET_BASLI;Slider !TP_WAVELET_BATYPE;Contrast balance method !TP_WAVELET_CBENAB;Toning and Color Balance -!TP_WAVELET_CBTYPE;Toning and Color Balance !TP_WAVELET_CB_TOOLTIP;For strong values product color-toning by combining it or not with levels decomposition 'toning'\nFor low values you can change the white balance of the background (sky, ...) without changing that of the front plane, generally more contrasted !TP_WAVELET_CCURVE;Local contrast !TP_WAVELET_CH1;Whole chroma range @@ -1732,7 +1799,6 @@ TP_WBALANCE_TEMPERATURE;Temperatur !TP_WAVELET_CHSL;Sliders !TP_WAVELET_CHTYPE;Chrominance method !TP_WAVELET_COLORT;Opacity Red-Green -!TP_WAVELET_COMBOTH;Both !TP_WAVELET_COMPCONT;Contrast !TP_WAVELET_COMPGAMMA;Compression gamma !TP_WAVELET_COMPGAMMA_TOOLTIP;Adjusting the gamma of the residual image allows you to equilibrate the data and histogram. @@ -1744,9 +1810,9 @@ TP_WBALANCE_TEMPERATURE;Temperatur !TP_WAVELET_CONTRA_TOOLTIP;Changes contrast of the residual image. !TP_WAVELET_CONTR;Gamut !TP_WAVELET_CTYPE;Chrominance control -!TP_WAVELET_CURVEEDITOR_CC_TOOLTIP;Modifies local contrast as a function of the original local contrast (absciss)\nLow absciss represents small local contrast (real values about 10..20)\n50% absciss represents average of local contrast (real value about 100..300)\n66% absciss represents standard deviation of local contrast (real value about 300..800)\n100% represents maximum (real value about 3000..8000) +!TP_WAVELET_CURVEEDITOR_CC_TOOLTIP;Modifies local contrast as a function of the original local contrast (abscissa).\nLow abscissa values represent small local contrast (real values about 10..20).\n50% abscissa represents average local contrast (real value about 100..300).\n66% abscissa represents standard deviation of local contrast (real value about 300..800).\n100% abscissa represents maximum local contrast (real value about 3000..8000). !TP_WAVELET_CURVEEDITOR_CH;Contrast levels=f(Hue) -!TP_WAVELET_CURVEEDITOR_CH_TOOLTIP;Modifies each level's contrast as a function oh hue.\nTake care not to overwrite changes made with the Gamut Hue controls.\nThe curve will only have an effect when wavelet contrast level sliders are non-zero. +!TP_WAVELET_CURVEEDITOR_CH_TOOLTIP;Modifies each level's contrast as a function of hue.\nTake care not to overwrite changes made with the Gamut sub-tool's hue controls.\nThe curve will only have an effect when wavelet contrast level sliders are non-zero. !TP_WAVELET_CURVEEDITOR_CL;L !TP_WAVELET_CURVEEDITOR_CL_TOOLTIP;Applies a final contrast luminance curve at the end of the wavelet treatment. !TP_WAVELET_CURVEEDITOR_HH;HH @@ -1809,7 +1875,6 @@ TP_WBALANCE_TEMPERATURE;Temperatur !TP_WAVELET_LEVZERO;Level 1 !TP_WAVELET_LINKEDG;Link with Edge Sharpness' Strength !TP_WAVELET_LIPST;Enhanced algoritm -!TP_WAVELET_LIPST_TOOLTIP;This algorithm uses the proximity of a pixel and eight of its neighbors. If less difference, edges are reinforced. !TP_WAVELET_LOWLIGHT;Shadow luminance range !TP_WAVELET_MEDGREINF;First level !TP_WAVELET_MEDILEV;Edge detection @@ -1856,10 +1921,6 @@ TP_WBALANCE_TEMPERATURE;Temperatur !TP_WAVELET_TILESIZE;Tiling method !TP_WAVELET_TILESLIT;Little tiles !TP_WAVELET_TILES_TOOLTIP;Processing the full image leads to better quality and is the recommended option, while using tiles is a fall-back solution for users with little RAM. Refer to RawPedia for memory requirements. -!TP_WAVELET_TMHIGH;High -!TP_WAVELET_TMLOWHIGH;Low+High -!TP_WAVELET_TMNONE;None -!TP_WAVELET_TMSTD;Standard !TP_WAVELET_TMSTRENGTH;Compression strength !TP_WAVELET_TMSTRENGTH_TOOLTIP;Control the strength of tone mapping or contrast compression of the residual image. When the value is different from 0, the Strength and Gamma sliders of the Tone Mapping tool in the Exposure tab will become grayed out. !TP_WAVELET_TMTYPE;Compression method diff --git a/rtdata/languages/Deutsch b/rtdata/languages/Deutsch index 362879fa6..a7afd6fdc 100644 --- a/rtdata/languages/Deutsch +++ b/rtdata/languages/Deutsch @@ -818,7 +818,6 @@ PARTIALPASTE_FLATFIELDCLIPCONTROL;Weißbild: Kontrolle zu heller Bereiche PARTIALPASTE_FLATFIELDFILE;Weißbild: Datei PARTIALPASTE_GRADIENT;Grauverlaufsfilter PARTIALPASTE_HSVEQUALIZER;Farbton (H) / Sättigung (S) / Dynamik (V) -PARTIALPASTE_ICMGAMMA;Ausgabe-Gamma PARTIALPASTE_ICMSETTINGS;ICM-Einstellungen PARTIALPASTE_IMPULSEDENOISE;Impulsrauschreduzierung PARTIALPASTE_IPTCINFO;IPTC-Informationen @@ -1722,7 +1721,6 @@ TP_WAVELET_BANONE;Keine TP_WAVELET_BASLI;Regler TP_WAVELET_BATYPE;Kontrastmethode TP_WAVELET_CBENAB;Farbausgleich -TP_WAVELET_CBTYPE;Farbausgleich TP_WAVELET_CCURVE;Lokaler Kontrast TP_WAVELET_CH1;Gesamter Farbbereich TP_WAVELET_CH2;Sättigung/Pastell @@ -1735,7 +1733,6 @@ TP_WAVELET_CHR_TOOLTIP;Farbton als Funktion des Kontrasts und der Farbton-Kontra TP_WAVELET_CHSL;Regler TP_WAVELET_CHTYPE;Chrominanzmethode TP_WAVELET_COLORT;Deckkraft Rot/Grün -TP_WAVELET_COMBOTH;Beide TP_WAVELET_COMPCONT;Kontrast TP_WAVELET_COMPGAMMA;Gammakompression TP_WAVELET_COMPGAMMA_TOOLTIP;Das Anpassen des Gammawerts des Nachbildes ermöglicht das Angleichen der Daten und des Histogramms @@ -1812,7 +1809,6 @@ TP_WAVELET_LEVTWO;Ebene 3 TP_WAVELET_LEVZERO;Ebene 1 TP_WAVELET_LINKEDG;Mit der Kantenschärfungsstärke verlinken TP_WAVELET_LIPST;Erweiterter Algorithmus -TP_WAVELET_LIPST_TOOLTIP;Dieser Algorithmus verwendet einen Pixel und acht seiner Nachbarn. Sind die Unterschiede gering, werden die Ränder verstärkt. TP_WAVELET_LOWLIGHT;Schatten-Luminanzbereich TP_WAVELET_MEDGREINF;Erste Ebene TP_WAVELET_MEDILEV;Kantenerkennung @@ -1859,10 +1855,6 @@ TP_WAVELET_TILESFULL;Ganzes Bild TP_WAVELET_TILESIZE;Kachelgröße TP_WAVELET_TILESLIT;Kleine Kacheln TP_WAVELET_TILES_TOOLTIP;“Ganzes Bild“ (empfohlen) liefert eine bessere Qualität.\n“Kacheln“ benötigen weniger Speicher und sind nur für Computer mit wenig RAM zu empfehlen. -TP_WAVELET_TMHIGH;Hoch -TP_WAVELET_TMLOWHIGH;Niedrig + Hoch -TP_WAVELET_TMNONE;Keine -TP_WAVELET_TMSTD;Standard TP_WAVELET_TMSTRENGTH;Stärke TP_WAVELET_TMSTRENGTH_TOOLTIP;Kontrolliert die Stärke der Dynamik- oder Kontrastkompression des Nachbildes. Ist der Wert ungleich 0, werden die Stärke- und Gammaregler des Dynamikkompressions-Werkzeugs im Belichtungsreiter deaktiviert. TP_WAVELET_TMTYPE;Kompression @@ -1925,4 +1917,73 @@ ZOOMPANEL_ZOOMOUT;Herauszoomen\nTaste: - ! Untranslated keys follow; remove the ! prefix after an entry is translated. !!!!!!!!!!!!!!!!!!!!!!!!! +!HISTORY_MSG_407;Retinex - Method +!HISTORY_MSG_408;Retinex - Neighboring +!HISTORY_MSG_409;Retinex - Gain +!HISTORY_MSG_410;Retinex - Offset +!HISTORY_MSG_411;Retinex - Strength +!HISTORY_MSG_412;Retinex - Scales +!HISTORY_MSG_413;Retinex - Variance +!HISTORY_MSG_414;Retinex - Histogram - Lab +!HISTORY_MSG_415;Retinex - Transmission +!HISTORY_MSG_416;Retinex +!HISTORY_MSG_417;Retinex - Transmission median +!HISTORY_MSG_418;Retinex - Threshold +!HISTORY_MSG_419;Retinex - Color space +!HISTORY_MSG_420;Retinex - Histogram - HSL +!HISTORY_MSG_421;Retinex - Gamma +!HISTORY_MSG_422;Retinex - Gamma +!HISTORY_MSG_423;Retinex - Gamma slope +!HISTORY_MSG_424;Retinex - HL threshold +!HISTORY_MSG_425;Retinex - Log base +!HISTORY_MSG_426;Retinex - Hue equalizer +!PARTIALPASTE_RETINEX;Retinex +!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL +!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b* +!TP_RETINEX_CONTEDIT_LH;Hue equalizer +!TP_RETINEX_CURVEEDITOR_CD;L=f(L) +!TP_RETINEX_CURVEEDITOR_CD_TOOLTIP;Luminance according to luminance L=f(L)\nCorrect raw data to reduce halos and artifacts. +!TP_RETINEX_CURVEEDITOR_LH;Strength=f(H) +!TP_RETINEX_CURVEEDITOR_LH_TOOLTIP;Strength according to hue Strength=f(H)\nThis curve also acts on chroma when using the "Highlight" retinex method. +!TP_RETINEX_GAIN;Gain +!TP_RETINEX_GAIN_TOOLTIP;Acts on the transmission in combination with the offset. This is very different from the others settings. Used for black or white pixels, and to help balance the histogram. +!TP_RETINEX_GAMMA;Free gamma +!TP_RETINEX_GAMMA;Gamma +!TP_RETINEX_GAMMA_FREE;Free +!TP_RETINEX_GAMMA_HIGH;High +!TP_RETINEX_GAMMA_LOW;Low +!TP_RETINEX_GAMMA_MID;Middle +!TP_RETINEX_GAMMA_NONE;None +!TP_RETINEX_GAMMA_TOOLTIP;Restore tones by applying gamma before and after Retinex. Different from Retinex curves or others curves (Lab, Exposure, etc.). +!TP_RETINEX_HIGHLIGHT;Highlight threshold +!TP_RETINEX_HIGHLIGHT_TOOLTIP;Increase action of High algorithm.\nMay require you to re-adjust "Neighboring pixels" and to increase the "White-point correction" in the Raw tab -> Raw White Points tool. +!TP_RETINEX_HIGHLIG;Highlight +!TP_RETINEX_HIGH;High +!TP_RETINEX_HSLSPACE_LIN;HSL-Linear +!TP_RETINEX_HSLSPACE_LOG;HSL-Logarithmic +!TP_RETINEX_LABEL;Retinex +!TP_RETINEX_LABSPACE;L*a*b* +!TP_RETINEX_LOW;Low +!TP_RETINEX_MEDIAN;Transmission median filter +!TP_RETINEX_METHOD;Method +!TP_RETINEX_METHOD_TOOLTIP;Low = Reinforce low light,\nUniform = Equalize action,\nHigh = Reinforce high light,\nHighlight = Remove magenta in highlights. +!TP_RETINEX_MLABEL;Restored haze-free Min=%1 Max=%2 +!TP_RETINEX_MLABEL_TOOLTIP;Should be near min=0 max=32768\nRestored image with no mixture. +!TP_RETINEX_NEIGHBOR;Neighboring pixels +!TP_RETINEX_NEUTRAL;Reset +!TP_RETINEX_NEUTRAL_TIP;Reset all sliders and curves to their default values. +!TP_RETINEX_OFFSET;Offset +!TP_RETINEX_SETTINGS;Settings +!TP_RETINEX_SLOPE;Free gamma slope +!TP_RETINEX_STRENGTH;Strength +!TP_RETINEX_THRESHOLD;Threshold +!TP_RETINEX_THRESHOLD_TOOLTIP;Limits in/out.\nIn = image source,\nOut = image gauss. +!TP_RETINEX_TLABEL2;TM Tm=%1 TM=%2 +!TP_RETINEX_TLABEL;TM Min=%1 Max=%2 Mean=%3 Sigma=%4 +!TP_RETINEX_TLABEL_TOOLTIP;Transmission map result.\nMin and Max are used by Variance.\nMean and Sigma\nTm=Min TM=Max of transmission map. +!TP_RETINEX_TRANSMISSION;Transmission map +!TP_RETINEX_TRANSMISSION_TOOLTIP;Transmission according to transmission.\nAbscissa: transmission from negative values (min), mean, and positives values (max).\nOrdinate: amplification or reduction. +!TP_RETINEX_UNIFORM;Uniform +!TP_RETINEX_VARIANCE;Variance +!TP_RETINEX_VARIANCE_TOOLTIP;Low variance increase local contrast and saturation, but can lead to artifacts. !TP_WAVELET_CB_TOOLTIP;For strong values product color-toning by combining it or not with levels decomposition 'toning'\nFor low values you can change the white balance of the background (sky, ...) without changing that of the front plane, generally more contrasted diff --git a/rtdata/languages/English (UK) b/rtdata/languages/English (UK) index 9df9ea9b6..e30422f98 100644 --- a/rtdata/languages/English (UK) +++ b/rtdata/languages/English (UK) @@ -20,6 +20,7 @@ HISTORY_MSG_257;Colour Toning HISTORY_MSG_258;CT - Colour curve HISTORY_MSG_322;W - Gamut - Avoid colour shift HISTORY_MSG_385;W - Residual - Colour Balance +HISTORY_MSG_419;Retinex - Colour space MAIN_TAB_COLOR;Colour MAIN_TOOLTIP_BACKCOLOR0;Background colour of the preview: Theme-based\nShortcut: 9 MAIN_TOOLTIP_BACKCOLOR1;Background colour of the preview: Black\nShortcut: 9 @@ -96,7 +97,6 @@ TP_VIGNETTING_CENTER_X;Centre X TP_VIGNETTING_CENTER_Y;Centre Y TP_WAVELET_AVOID;Avoid colour shift TP_WAVELET_CBENAB;Toning and Colour Balance -TP_WAVELET_CBTYPE;Toning and Colour Balance TP_WAVELET_CB_TOOLTIP;For strong values product colour-toning by combining it or not with levels decomposition 'toning'\nFor low values you can change the white balance of the background (sky, ...) without changing that of the front plane, generally more contrasted TP_WAVELET_CHRO_TOOLTIP;Sets the wavelet level which will be the threshold between saturated and pastel colours.\n1-x: saturated\nx-9: pastel\n\nIf the value exceeds the amount of wavelet levels you are using then it will be ignored. TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "white balance" by modulating the blue/red balance.\nThis can be useful when shooting conditions:\na) are far from the standard illuminant (e.g. underwater),\nb) are far from conditions where calibrations were performed,\nc) where the matrices or ICC profiles are unsuitable. @@ -716,6 +716,25 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh !HISTORY_MSG_404;W - ES - Base amplification !HISTORY_MSG_405;W - Denoise - Level 4 !HISTORY_MSG_406;W - ES - Neighboring pixels +!HISTORY_MSG_407;Retinex - Method +!HISTORY_MSG_408;Retinex - Neighboring +!HISTORY_MSG_409;Retinex - Gain +!HISTORY_MSG_410;Retinex - Offset +!HISTORY_MSG_411;Retinex - Strength +!HISTORY_MSG_412;Retinex - Scales +!HISTORY_MSG_413;Retinex - Variance +!HISTORY_MSG_414;Retinex - Histogram - Lab +!HISTORY_MSG_415;Retinex - Transmission +!HISTORY_MSG_416;Retinex +!HISTORY_MSG_417;Retinex - Transmission median +!HISTORY_MSG_418;Retinex - Threshold +!HISTORY_MSG_420;Retinex - Histogram - HSL +!HISTORY_MSG_421;Retinex - Gamma +!HISTORY_MSG_422;Retinex - Gamma +!HISTORY_MSG_423;Retinex - Gamma slope +!HISTORY_MSG_424;Retinex - HL threshold +!HISTORY_MSG_425;Retinex - Log base +!HISTORY_MSG_426;Retinex - Hue equalizer !HISTORY_NEWSNAPSHOT;Add !HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s !HISTORY_SNAPSHOTS;Snapshots @@ -872,7 +891,6 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh !PARTIALPASTE_FLATFIELDFILE;Flat-field file !PARTIALPASTE_GRADIENT;Graduated filter !PARTIALPASTE_HSVEQUALIZER;HSV equalizer -!PARTIALPASTE_ICMGAMMA;Output gamma !PARTIALPASTE_IMPULSEDENOISE;Impulse noise reduction !PARTIALPASTE_IPTCINFO;IPTC !PARTIALPASTE_LABCURVE;L*a*b* adjustments @@ -897,6 +915,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh !PARTIALPASTE_RAW_DMETHOD;Demosaic method !PARTIALPASTE_RAW_LMMSEITERATIONS;LMMSE enhancement steps !PARTIALPASTE_RESIZE;Resize +!PARTIALPASTE_RETINEX;Retinex !PARTIALPASTE_RGBCURVES;RGB curves !PARTIALPASTE_ROTATION;Rotation !PARTIALPASTE_SHADOWSHIGHLIGHTS;Shadows/highlights @@ -1354,7 +1373,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh !TP_DIRPYRDENOISE_CCCURVE;Chrominance curve !TP_DIRPYRDENOISE_CHROMAFR;Chrominance !TP_DIRPYRDENOISE_CHROMA;Chrominance - Master -!TP_DIRPYRDENOISE_CTYPE;Auto method +!TP_DIRPYRDENOISE_CTYPE;Method !TP_DIRPYRDENOISE_CURVEEDITOR_CC;Chroma !TP_DIRPYRDENOISE_CURVEEDITOR_CC_TOOLTIP;Increase (multiply) the value of all chrominance sliders.\nThis curve lets you adjust the strength of chromatic noise reduction as a function of chromaticity, for instance to increase the action in areas of low saturation and to decrease it in those of high saturation. !TP_DIRPYRDENOISE_CURVEEDITOR_L_TOOLTIP;Modulates action of 'Luminance' denoise @@ -1622,6 +1641,54 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh !TP_RESIZE_SPECIFY;Specify: !TP_RESIZE_WIDTH;Width !TP_RESIZE_W;Width: +!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL +!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b* +!TP_RETINEX_CONTEDIT_LH;Hue equalizer +!TP_RETINEX_CURVEEDITOR_CD;L=f(L) +!TP_RETINEX_CURVEEDITOR_CD_TOOLTIP;Luminance according to luminance L=f(L)\nCorrect raw data to reduce halos and artifacts. +!TP_RETINEX_CURVEEDITOR_LH;Strength=f(H) +!TP_RETINEX_CURVEEDITOR_LH_TOOLTIP;Strength according to hue Strength=f(H)\nThis curve also acts on chroma when using the "Highlight" retinex method. +!TP_RETINEX_GAIN;Gain +!TP_RETINEX_GAIN_TOOLTIP;Acts on the transmission in combination with the offset. This is very different from the others settings. Used for black or white pixels, and to help balance the histogram. +!TP_RETINEX_GAMMA;Free gamma +!TP_RETINEX_GAMMA;Gamma +!TP_RETINEX_GAMMA_FREE;Free +!TP_RETINEX_GAMMA_HIGH;High +!TP_RETINEX_GAMMA_LOW;Low +!TP_RETINEX_GAMMA_MID;Middle +!TP_RETINEX_GAMMA_NONE;None +!TP_RETINEX_GAMMA_TOOLTIP;Restore tones by applying gamma before and after Retinex. Different from Retinex curves or others curves (Lab, Exposure, etc.). +!TP_RETINEX_HIGHLIGHT;Highlight threshold +!TP_RETINEX_HIGHLIGHT_TOOLTIP;Increase action of High algorithm.\nMay require you to re-adjust "Neighboring pixels" and to increase the "White-point correction" in the Raw tab -> Raw White Points tool. +!TP_RETINEX_HIGHLIG;Highlight +!TP_RETINEX_HIGH;High +!TP_RETINEX_HSLSPACE_LIN;HSL-Linear +!TP_RETINEX_HSLSPACE_LOG;HSL-Logarithmic +!TP_RETINEX_LABEL;Retinex +!TP_RETINEX_LABSPACE;L*a*b* +!TP_RETINEX_LOW;Low +!TP_RETINEX_MEDIAN;Transmission median filter +!TP_RETINEX_METHOD;Method +!TP_RETINEX_METHOD_TOOLTIP;Low = Reinforce low light,\nUniform = Equalize action,\nHigh = Reinforce high light,\nHighlight = Remove magenta in highlights. +!TP_RETINEX_MLABEL;Restored haze-free Min=%1 Max=%2 +!TP_RETINEX_MLABEL_TOOLTIP;Should be near min=0 max=32768\nRestored image with no mixture. +!TP_RETINEX_NEIGHBOR;Neighboring pixels +!TP_RETINEX_NEUTRAL;Reset +!TP_RETINEX_NEUTRAL_TIP;Reset all sliders and curves to their default values. +!TP_RETINEX_OFFSET;Offset +!TP_RETINEX_SETTINGS;Settings +!TP_RETINEX_SLOPE;Free gamma slope +!TP_RETINEX_STRENGTH;Strength +!TP_RETINEX_THRESHOLD;Threshold +!TP_RETINEX_THRESHOLD_TOOLTIP;Limits in/out.\nIn = image source,\nOut = image gauss. +!TP_RETINEX_TLABEL2;TM Tm=%1 TM=%2 +!TP_RETINEX_TLABEL;TM Min=%1 Max=%2 Mean=%3 Sigma=%4 +!TP_RETINEX_TLABEL_TOOLTIP;Transmission map result.\nMin and Max are used by Variance.\nMean and Sigma\nTm=Min TM=Max of transmission map. +!TP_RETINEX_TRANSMISSION;Transmission map +!TP_RETINEX_TRANSMISSION_TOOLTIP;Transmission according to transmission.\nAbscissa: transmission from negative values (min), mean, and positives values (max).\nOrdinate: amplification or reduction. +!TP_RETINEX_UNIFORM;Uniform +!TP_RETINEX_VARIANCE;Variance +!TP_RETINEX_VARIANCE_TOOLTIP;Low variance increase local contrast and saturation, but can lead to artifacts. !TP_RGBCURVES_BLUE;B !TP_RGBCURVES_CHANNEL;Channel !TP_RGBCURVES_GREEN;G @@ -1717,7 +1784,6 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh !TP_WAVELET_CHSL;Sliders !TP_WAVELET_CHTYPE;Chrominance method !TP_WAVELET_COLORT;Opacity Red-Green -!TP_WAVELET_COMBOTH;Both !TP_WAVELET_COMPCONT;Contrast !TP_WAVELET_COMPGAMMA;Compression gamma !TP_WAVELET_COMPGAMMA_TOOLTIP;Adjusting the gamma of the residual image allows you to equilibrate the data and histogram. @@ -1729,9 +1795,9 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh !TP_WAVELET_CONTRA_TOOLTIP;Changes contrast of the residual image. !TP_WAVELET_CONTR;Gamut !TP_WAVELET_CTYPE;Chrominance control -!TP_WAVELET_CURVEEDITOR_CC_TOOLTIP;Modifies local contrast as a function of the original local contrast (absciss)\nLow absciss represents small local contrast (real values about 10..20)\n50% absciss represents average of local contrast (real value about 100..300)\n66% absciss represents standard deviation of local contrast (real value about 300..800)\n100% represents maximum (real value about 3000..8000) +!TP_WAVELET_CURVEEDITOR_CC_TOOLTIP;Modifies local contrast as a function of the original local contrast (abscissa).\nLow abscissa values represent small local contrast (real values about 10..20).\n50% abscissa represents average local contrast (real value about 100..300).\n66% abscissa represents standard deviation of local contrast (real value about 300..800).\n100% abscissa represents maximum local contrast (real value about 3000..8000). !TP_WAVELET_CURVEEDITOR_CH;Contrast levels=f(Hue) -!TP_WAVELET_CURVEEDITOR_CH_TOOLTIP;Modifies each level's contrast as a function oh hue.\nTake care not to overwrite changes made with the Gamut Hue controls.\nThe curve will only have an effect when wavelet contrast level sliders are non-zero. +!TP_WAVELET_CURVEEDITOR_CH_TOOLTIP;Modifies each level's contrast as a function of hue.\nTake care not to overwrite changes made with the Gamut sub-tool's hue controls.\nThe curve will only have an effect when wavelet contrast level sliders are non-zero. !TP_WAVELET_CURVEEDITOR_CL;L !TP_WAVELET_CURVEEDITOR_CL_TOOLTIP;Applies a final contrast luminance curve at the end of the wavelet treatment. !TP_WAVELET_CURVEEDITOR_HH;HH @@ -1794,7 +1860,6 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh !TP_WAVELET_LEVZERO;Level 1 !TP_WAVELET_LINKEDG;Link with Edge Sharpness' Strength !TP_WAVELET_LIPST;Enhanced algoritm -!TP_WAVELET_LIPST_TOOLTIP;This algorithm uses the proximity of a pixel and eight of its neighbors. If less difference, edges are reinforced. !TP_WAVELET_LOWLIGHT;Shadow luminance range !TP_WAVELET_MEDGREINF;First level !TP_WAVELET_MEDILEV;Edge detection @@ -1841,10 +1906,6 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh !TP_WAVELET_TILESIZE;Tiling method !TP_WAVELET_TILESLIT;Little tiles !TP_WAVELET_TILES_TOOLTIP;Processing the full image leads to better quality and is the recommended option, while using tiles is a fall-back solution for users with little RAM. Refer to RawPedia for memory requirements. -!TP_WAVELET_TMHIGH;High -!TP_WAVELET_TMLOWHIGH;Low+High -!TP_WAVELET_TMNONE;None -!TP_WAVELET_TMSTD;Standard !TP_WAVELET_TMSTRENGTH;Compression strength !TP_WAVELET_TMSTRENGTH_TOOLTIP;Control the strength of tone mapping or contrast compression of the residual image. When the value is different from 0, the Strength and Gamma sliders of the Tone Mapping tool in the Exposure tab will become grayed out. !TP_WAVELET_TMTYPE;Compression method diff --git a/rtdata/languages/English (US) b/rtdata/languages/English (US) index 34413967d..9edc36113 100644 --- a/rtdata/languages/English (US) +++ b/rtdata/languages/English (US) @@ -636,6 +636,26 @@ !HISTORY_MSG_404;W - ES - Base amplification !HISTORY_MSG_405;W - Denoise - Level 4 !HISTORY_MSG_406;W - ES - Neighboring pixels +!HISTORY_MSG_407;Retinex - Method +!HISTORY_MSG_408;Retinex - Neighboring +!HISTORY_MSG_409;Retinex - Gain +!HISTORY_MSG_410;Retinex - Offset +!HISTORY_MSG_411;Retinex - Strength +!HISTORY_MSG_412;Retinex - Scales +!HISTORY_MSG_413;Retinex - Variance +!HISTORY_MSG_414;Retinex - Histogram - Lab +!HISTORY_MSG_415;Retinex - Transmission +!HISTORY_MSG_416;Retinex +!HISTORY_MSG_417;Retinex - Transmission median +!HISTORY_MSG_418;Retinex - Threshold +!HISTORY_MSG_419;Retinex - Color space +!HISTORY_MSG_420;Retinex - Histogram - HSL +!HISTORY_MSG_421;Retinex - Gamma +!HISTORY_MSG_422;Retinex - Gamma +!HISTORY_MSG_423;Retinex - Gamma slope +!HISTORY_MSG_424;Retinex - HL threshold +!HISTORY_MSG_425;Retinex - Log base +!HISTORY_MSG_426;Retinex - Hue equalizer !HISTORY_NEWSNAPSHOT;Add !HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s !HISTORY_SNAPSHOTS;Snapshots @@ -798,7 +818,6 @@ !PARTIALPASTE_FLATFIELDFILE;Flat-field file !PARTIALPASTE_GRADIENT;Graduated filter !PARTIALPASTE_HSVEQUALIZER;HSV equalizer -!PARTIALPASTE_ICMGAMMA;Output gamma !PARTIALPASTE_ICMSETTINGS;Color management settings !PARTIALPASTE_IMPULSEDENOISE;Impulse noise reduction !PARTIALPASTE_IPTCINFO;IPTC @@ -825,6 +844,7 @@ !PARTIALPASTE_RAW_FALSECOLOR;False color suppression !PARTIALPASTE_RAW_LMMSEITERATIONS;LMMSE enhancement steps !PARTIALPASTE_RESIZE;Resize +!PARTIALPASTE_RETINEX;Retinex !PARTIALPASTE_RGBCURVES;RGB curves !PARTIALPASTE_ROTATION;Rotation !PARTIALPASTE_SHADOWSHIGHLIGHTS;Shadows/highlights @@ -1319,7 +1339,7 @@ !TP_DIRPYRDENOISE_CCCURVE;Chrominance curve !TP_DIRPYRDENOISE_CHROMAFR;Chrominance !TP_DIRPYRDENOISE_CHROMA;Chrominance - Master -!TP_DIRPYRDENOISE_CTYPE;Auto method +!TP_DIRPYRDENOISE_CTYPE;Method !TP_DIRPYRDENOISE_CTYPE_TOOLTIP;Manual\nActs on the full image.\nYou control the noise reduction settings manually.\n\nAutomatic global\nActs on the full image.\n9 zones are used to calculate a global chrominance noise reduction setting.\n\nAutomatic multi-zones\nNo preview - works only during saving, but using the "Preview" method by matching the tile size and center to the preview size and center you can get an idea of the expected results.\nThe image is divided into tiles (about 10 to 70 depending on image size) and each tile receives its own chrominance noise reduction settings.\n\nPreview\nActs on the whole image.\nThe part of the image visible in the preview is used to calculate global chrominance noise reduction settings. !TP_DIRPYRDENOISE_CURVEEDITOR_CC;Chroma !TP_DIRPYRDENOISE_CURVEEDITOR_CC_TOOLTIP;Increase (multiply) the value of all chrominance sliders.\nThis curve lets you adjust the strength of chromatic noise reduction as a function of chromaticity, for instance to increase the action in areas of low saturation and to decrease it in those of high saturation. @@ -1611,6 +1631,54 @@ !TP_RESIZE_SPECIFY;Specify: !TP_RESIZE_WIDTH;Width !TP_RESIZE_W;Width: +!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL +!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b* +!TP_RETINEX_CONTEDIT_LH;Hue equalizer +!TP_RETINEX_CURVEEDITOR_CD;L=f(L) +!TP_RETINEX_CURVEEDITOR_CD_TOOLTIP;Luminance according to luminance L=f(L)\nCorrect raw data to reduce halos and artifacts. +!TP_RETINEX_CURVEEDITOR_LH;Strength=f(H) +!TP_RETINEX_CURVEEDITOR_LH_TOOLTIP;Strength according to hue Strength=f(H)\nThis curve also acts on chroma when using the "Highlight" retinex method. +!TP_RETINEX_GAIN;Gain +!TP_RETINEX_GAIN_TOOLTIP;Acts on the transmission in combination with the offset. This is very different from the others settings. Used for black or white pixels, and to help balance the histogram. +!TP_RETINEX_GAMMA;Free gamma +!TP_RETINEX_GAMMA;Gamma +!TP_RETINEX_GAMMA_FREE;Free +!TP_RETINEX_GAMMA_HIGH;High +!TP_RETINEX_GAMMA_LOW;Low +!TP_RETINEX_GAMMA_MID;Middle +!TP_RETINEX_GAMMA_NONE;None +!TP_RETINEX_GAMMA_TOOLTIP;Restore tones by applying gamma before and after Retinex. Different from Retinex curves or others curves (Lab, Exposure, etc.). +!TP_RETINEX_HIGHLIGHT;Highlight threshold +!TP_RETINEX_HIGHLIGHT_TOOLTIP;Increase action of High algorithm.\nMay require you to re-adjust "Neighboring pixels" and to increase the "White-point correction" in the Raw tab -> Raw White Points tool. +!TP_RETINEX_HIGHLIG;Highlight +!TP_RETINEX_HIGH;High +!TP_RETINEX_HSLSPACE_LIN;HSL-Linear +!TP_RETINEX_HSLSPACE_LOG;HSL-Logarithmic +!TP_RETINEX_LABEL;Retinex +!TP_RETINEX_LABSPACE;L*a*b* +!TP_RETINEX_LOW;Low +!TP_RETINEX_MEDIAN;Transmission median filter +!TP_RETINEX_METHOD;Method +!TP_RETINEX_METHOD_TOOLTIP;Low = Reinforce low light,\nUniform = Equalize action,\nHigh = Reinforce high light,\nHighlight = Remove magenta in highlights. +!TP_RETINEX_MLABEL;Restored haze-free Min=%1 Max=%2 +!TP_RETINEX_MLABEL_TOOLTIP;Should be near min=0 max=32768\nRestored image with no mixture. +!TP_RETINEX_NEIGHBOR;Neighboring pixels +!TP_RETINEX_NEUTRAL;Reset +!TP_RETINEX_NEUTRAL_TIP;Reset all sliders and curves to their default values. +!TP_RETINEX_OFFSET;Offset +!TP_RETINEX_SETTINGS;Settings +!TP_RETINEX_SLOPE;Free gamma slope +!TP_RETINEX_STRENGTH;Strength +!TP_RETINEX_THRESHOLD;Threshold +!TP_RETINEX_THRESHOLD_TOOLTIP;Limits in/out.\nIn = image source,\nOut = image gauss. +!TP_RETINEX_TLABEL2;TM Tm=%1 TM=%2 +!TP_RETINEX_TLABEL;TM Min=%1 Max=%2 Mean=%3 Sigma=%4 +!TP_RETINEX_TLABEL_TOOLTIP;Transmission map result.\nMin and Max are used by Variance.\nMean and Sigma\nTm=Min TM=Max of transmission map. +!TP_RETINEX_TRANSMISSION;Transmission map +!TP_RETINEX_TRANSMISSION_TOOLTIP;Transmission according to transmission.\nAbscissa: transmission from negative values (min), mean, and positives values (max).\nOrdinate: amplification or reduction. +!TP_RETINEX_UNIFORM;Uniform +!TP_RETINEX_VARIANCE;Variance +!TP_RETINEX_VARIANCE_TOOLTIP;Low variance increase local contrast and saturation, but can lead to artifacts. !TP_RGBCURVES_BLUE;B !TP_RGBCURVES_CHANNEL;Channel !TP_RGBCURVES_GREEN;G @@ -1702,7 +1770,6 @@ !TP_WAVELET_BASLI;Slider !TP_WAVELET_BATYPE;Contrast balance method !TP_WAVELET_CBENAB;Toning and Color Balance -!TP_WAVELET_CBTYPE;Toning and Color Balance !TP_WAVELET_CB_TOOLTIP;For strong values product color-toning by combining it or not with levels decomposition 'toning'\nFor low values you can change the white balance of the background (sky, ...) without changing that of the front plane, generally more contrasted !TP_WAVELET_CCURVE;Local contrast !TP_WAVELET_CH1;Whole chroma range @@ -1716,7 +1783,6 @@ !TP_WAVELET_CHSL;Sliders !TP_WAVELET_CHTYPE;Chrominance method !TP_WAVELET_COLORT;Opacity Red-Green -!TP_WAVELET_COMBOTH;Both !TP_WAVELET_COMPCONT;Contrast !TP_WAVELET_COMPGAMMA;Compression gamma !TP_WAVELET_COMPGAMMA_TOOLTIP;Adjusting the gamma of the residual image allows you to equilibrate the data and histogram. @@ -1728,9 +1794,9 @@ !TP_WAVELET_CONTRA_TOOLTIP;Changes contrast of the residual image. !TP_WAVELET_CONTR;Gamut !TP_WAVELET_CTYPE;Chrominance control -!TP_WAVELET_CURVEEDITOR_CC_TOOLTIP;Modifies local contrast as a function of the original local contrast (absciss)\nLow absciss represents small local contrast (real values about 10..20)\n50% absciss represents average of local contrast (real value about 100..300)\n66% absciss represents standard deviation of local contrast (real value about 300..800)\n100% represents maximum (real value about 3000..8000) +!TP_WAVELET_CURVEEDITOR_CC_TOOLTIP;Modifies local contrast as a function of the original local contrast (abscissa).\nLow abscissa values represent small local contrast (real values about 10..20).\n50% abscissa represents average local contrast (real value about 100..300).\n66% abscissa represents standard deviation of local contrast (real value about 300..800).\n100% abscissa represents maximum local contrast (real value about 3000..8000). !TP_WAVELET_CURVEEDITOR_CH;Contrast levels=f(Hue) -!TP_WAVELET_CURVEEDITOR_CH_TOOLTIP;Modifies each level's contrast as a function oh hue.\nTake care not to overwrite changes made with the Gamut Hue controls.\nThe curve will only have an effect when wavelet contrast level sliders are non-zero. +!TP_WAVELET_CURVEEDITOR_CH_TOOLTIP;Modifies each level's contrast as a function of hue.\nTake care not to overwrite changes made with the Gamut sub-tool's hue controls.\nThe curve will only have an effect when wavelet contrast level sliders are non-zero. !TP_WAVELET_CURVEEDITOR_CL;L !TP_WAVELET_CURVEEDITOR_CL_TOOLTIP;Applies a final contrast luminance curve at the end of the wavelet treatment. !TP_WAVELET_CURVEEDITOR_HH;HH @@ -1793,7 +1859,6 @@ !TP_WAVELET_LEVZERO;Level 1 !TP_WAVELET_LINKEDG;Link with Edge Sharpness' Strength !TP_WAVELET_LIPST;Enhanced algoritm -!TP_WAVELET_LIPST_TOOLTIP;This algorithm uses the proximity of a pixel and eight of its neighbors. If less difference, edges are reinforced. !TP_WAVELET_LOWLIGHT;Shadow luminance range !TP_WAVELET_MEDGREINF;First level !TP_WAVELET_MEDILEV;Edge detection @@ -1840,10 +1905,6 @@ !TP_WAVELET_TILESIZE;Tiling method !TP_WAVELET_TILESLIT;Little tiles !TP_WAVELET_TILES_TOOLTIP;Processing the full image leads to better quality and is the recommended option, while using tiles is a fall-back solution for users with little RAM. Refer to RawPedia for memory requirements. -!TP_WAVELET_TMHIGH;High -!TP_WAVELET_TMLOWHIGH;Low+High -!TP_WAVELET_TMNONE;None -!TP_WAVELET_TMSTD;Standard !TP_WAVELET_TMSTRENGTH;Compression strength !TP_WAVELET_TMSTRENGTH_TOOLTIP;Control the strength of tone mapping or contrast compression of the residual image. When the value is different from 0, the Strength and Gamma sliders of the Tone Mapping tool in the Exposure tab will become grayed out. !TP_WAVELET_TMTYPE;Compression method diff --git a/rtdata/languages/Espanol b/rtdata/languages/Espanol index 05611d2da..a8777b87e 100644 --- a/rtdata/languages/Espanol +++ b/rtdata/languages/Espanol @@ -722,7 +722,6 @@ PARTIALPASTE_FLATFIELDBLURTYPE;Tipo de difuminado de campo plano PARTIALPASTE_FLATFIELDCLIPCONTROL;Control de recorte de Campo Plano PARTIALPASTE_FLATFIELDFILE;Archivo de campo plano PARTIALPASTE_HSVEQUALIZER;Ecualizador HSV -PARTIALPASTE_ICMGAMMA;Gamma de salida PARTIALPASTE_ICMSETTINGS;Ajustes de Gestión de Color PARTIALPASTE_IMPULSEDENOISE;Impulsar Reducción de ruido PARTIALPASTE_IPTCINFO;Información IPTC @@ -1678,6 +1677,26 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nAtajo: - !HISTORY_MSG_404;W - ES - Base amplification !HISTORY_MSG_405;W - Denoise - Level 4 !HISTORY_MSG_406;W - ES - Neighboring pixels +!HISTORY_MSG_407;Retinex - Method +!HISTORY_MSG_408;Retinex - Neighboring +!HISTORY_MSG_409;Retinex - Gain +!HISTORY_MSG_410;Retinex - Offset +!HISTORY_MSG_411;Retinex - Strength +!HISTORY_MSG_412;Retinex - Scales +!HISTORY_MSG_413;Retinex - Variance +!HISTORY_MSG_414;Retinex - Histogram - Lab +!HISTORY_MSG_415;Retinex - Transmission +!HISTORY_MSG_416;Retinex +!HISTORY_MSG_417;Retinex - Transmission median +!HISTORY_MSG_418;Retinex - Threshold +!HISTORY_MSG_419;Retinex - Color space +!HISTORY_MSG_420;Retinex - Histogram - HSL +!HISTORY_MSG_421;Retinex - Gamma +!HISTORY_MSG_422;Retinex - Gamma +!HISTORY_MSG_423;Retinex - Gamma slope +!HISTORY_MSG_424;Retinex - HL threshold +!HISTORY_MSG_425;Retinex - Log base +!HISTORY_MSG_426;Retinex - Hue equalizer !MAIN_TAB_INSPECT; Inspect !MAIN_TAB_WAVELET;Wavelet !MAIN_TAB_WAVELET_TOOLTIP;Shortcut: Alt-w @@ -1692,6 +1711,7 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nAtajo: - !NAVIGATOR_V;V: !PARTIALPASTE_EQUALIZER;Wavelet levels !PARTIALPASTE_GRADIENT;Graduated filter +!PARTIALPASTE_RETINEX;Retinex !PARTIALPASTE_WAVELETGROUP;Wavelet Levels !PREFERENCES_AUTLISLOW;Low !PREFERENCES_AUTLISMAX;Max - Average of all tiles @@ -1760,7 +1780,7 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nAtajo: - !TP_DIRPYRDENOISE_C2TYPE_TOOLTIP;Manual\nActs on the full image.\nYou control the noise reduction settings manually.\n\nAutomatic global\nActs on the full image.\n9 zones are used to calculate a global chrominance noise reduction setting.\n\nPreview\nActs on the whole image.\nThe part of the image visible in the preview is used to calculate global chrominance noise reduction settings. !TP_DIRPYRDENOISE_CCCURVE;Chrominance curve !TP_DIRPYRDENOISE_CHROMAFR;Chrominance -!TP_DIRPYRDENOISE_CTYPE;Auto method +!TP_DIRPYRDENOISE_CTYPE;Method !TP_DIRPYRDENOISE_CTYPE_TOOLTIP;Manual\nActs on the full image.\nYou control the noise reduction settings manually.\n\nAutomatic global\nActs on the full image.\n9 zones are used to calculate a global chrominance noise reduction setting.\n\nAutomatic multi-zones\nNo preview - works only during saving, but using the "Preview" method by matching the tile size and center to the preview size and center you can get an idea of the expected results.\nThe image is divided into tiles (about 10 to 70 depending on image size) and each tile receives its own chrominance noise reduction settings.\n\nPreview\nActs on the whole image.\nThe part of the image visible in the preview is used to calculate global chrominance noise reduction settings. !TP_DIRPYRDENOISE_CURVEEDITOR_CC;Chroma !TP_DIRPYRDENOISE_CURVEEDITOR_CC_TOOLTIP;Increase (multiply) the value of all chrominance sliders.\nThis curve lets you adjust the strength of chromatic noise reduction as a function of chromaticity, for instance to increase the action in areas of low saturation and to decrease it in those of high saturation. @@ -1795,6 +1815,54 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nAtajo: - !TP_PRSHARPENING_TOOLTIP;Sharpens the image after resizing. Only works when the "Lanczos" resizing method is used. It is impossible to preview the effects of this tool. See RawPedia for usage instructions. !TP_RAW_HD;Threshold !TP_RAW_HD_TOOLTIP;Lower values make hot/dead pixel detection more aggressive, but false positives may lead to artifacts. If you notice any artifacts appearing when enabling the Hot/Dead Pixel Filters, gradually increase the threshold value until they disappear. +!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL +!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b* +!TP_RETINEX_CONTEDIT_LH;Hue equalizer +!TP_RETINEX_CURVEEDITOR_CD;L=f(L) +!TP_RETINEX_CURVEEDITOR_CD_TOOLTIP;Luminance according to luminance L=f(L)\nCorrect raw data to reduce halos and artifacts. +!TP_RETINEX_CURVEEDITOR_LH;Strength=f(H) +!TP_RETINEX_CURVEEDITOR_LH_TOOLTIP;Strength according to hue Strength=f(H)\nThis curve also acts on chroma when using the "Highlight" retinex method. +!TP_RETINEX_GAIN;Gain +!TP_RETINEX_GAIN_TOOLTIP;Acts on the transmission in combination with the offset. This is very different from the others settings. Used for black or white pixels, and to help balance the histogram. +!TP_RETINEX_GAMMA;Free gamma +!TP_RETINEX_GAMMA;Gamma +!TP_RETINEX_GAMMA_FREE;Free +!TP_RETINEX_GAMMA_HIGH;High +!TP_RETINEX_GAMMA_LOW;Low +!TP_RETINEX_GAMMA_MID;Middle +!TP_RETINEX_GAMMA_NONE;None +!TP_RETINEX_GAMMA_TOOLTIP;Restore tones by applying gamma before and after Retinex. Different from Retinex curves or others curves (Lab, Exposure, etc.). +!TP_RETINEX_HIGHLIGHT;Highlight threshold +!TP_RETINEX_HIGHLIGHT_TOOLTIP;Increase action of High algorithm.\nMay require you to re-adjust "Neighboring pixels" and to increase the "White-point correction" in the Raw tab -> Raw White Points tool. +!TP_RETINEX_HIGHLIG;Highlight +!TP_RETINEX_HIGH;High +!TP_RETINEX_HSLSPACE_LIN;HSL-Linear +!TP_RETINEX_HSLSPACE_LOG;HSL-Logarithmic +!TP_RETINEX_LABEL;Retinex +!TP_RETINEX_LABSPACE;L*a*b* +!TP_RETINEX_LOW;Low +!TP_RETINEX_MEDIAN;Transmission median filter +!TP_RETINEX_METHOD;Method +!TP_RETINEX_METHOD_TOOLTIP;Low = Reinforce low light,\nUniform = Equalize action,\nHigh = Reinforce high light,\nHighlight = Remove magenta in highlights. +!TP_RETINEX_MLABEL;Restored haze-free Min=%1 Max=%2 +!TP_RETINEX_MLABEL_TOOLTIP;Should be near min=0 max=32768\nRestored image with no mixture. +!TP_RETINEX_NEIGHBOR;Neighboring pixels +!TP_RETINEX_NEUTRAL;Reset +!TP_RETINEX_NEUTRAL_TIP;Reset all sliders and curves to their default values. +!TP_RETINEX_OFFSET;Offset +!TP_RETINEX_SETTINGS;Settings +!TP_RETINEX_SLOPE;Free gamma slope +!TP_RETINEX_STRENGTH;Strength +!TP_RETINEX_THRESHOLD;Threshold +!TP_RETINEX_THRESHOLD_TOOLTIP;Limits in/out.\nIn = image source,\nOut = image gauss. +!TP_RETINEX_TLABEL2;TM Tm=%1 TM=%2 +!TP_RETINEX_TLABEL;TM Min=%1 Max=%2 Mean=%3 Sigma=%4 +!TP_RETINEX_TLABEL_TOOLTIP;Transmission map result.\nMin and Max are used by Variance.\nMean and Sigma\nTm=Min TM=Max of transmission map. +!TP_RETINEX_TRANSMISSION;Transmission map +!TP_RETINEX_TRANSMISSION_TOOLTIP;Transmission according to transmission.\nAbscissa: transmission from negative values (min), mean, and positives values (max).\nOrdinate: amplification or reduction. +!TP_RETINEX_UNIFORM;Uniform +!TP_RETINEX_VARIANCE;Variance +!TP_RETINEX_VARIANCE_TOOLTIP;Low variance increase local contrast and saturation, but can lead to artifacts. !TP_WAVELET_1;Level 1 !TP_WAVELET_2;Level 2 !TP_WAVELET_3;Level 3 @@ -1819,7 +1887,6 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nAtajo: - !TP_WAVELET_BASLI;Slider !TP_WAVELET_BATYPE;Contrast balance method !TP_WAVELET_CBENAB;Toning and Color Balance -!TP_WAVELET_CBTYPE;Toning and Color Balance !TP_WAVELET_CB_TOOLTIP;For strong values product color-toning by combining it or not with levels decomposition 'toning'\nFor low values you can change the white balance of the background (sky, ...) without changing that of the front plane, generally more contrasted !TP_WAVELET_CCURVE;Local contrast !TP_WAVELET_CH1;Whole chroma range @@ -1833,7 +1900,6 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nAtajo: - !TP_WAVELET_CHSL;Sliders !TP_WAVELET_CHTYPE;Chrominance method !TP_WAVELET_COLORT;Opacity Red-Green -!TP_WAVELET_COMBOTH;Both !TP_WAVELET_COMPCONT;Contrast !TP_WAVELET_COMPGAMMA;Compression gamma !TP_WAVELET_COMPGAMMA_TOOLTIP;Adjusting the gamma of the residual image allows you to equilibrate the data and histogram. @@ -1845,9 +1911,9 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nAtajo: - !TP_WAVELET_CONTRA_TOOLTIP;Changes contrast of the residual image. !TP_WAVELET_CONTR;Gamut !TP_WAVELET_CTYPE;Chrominance control -!TP_WAVELET_CURVEEDITOR_CC_TOOLTIP;Modifies local contrast as a function of the original local contrast (absciss)\nLow absciss represents small local contrast (real values about 10..20)\n50% absciss represents average of local contrast (real value about 100..300)\n66% absciss represents standard deviation of local contrast (real value about 300..800)\n100% represents maximum (real value about 3000..8000) +!TP_WAVELET_CURVEEDITOR_CC_TOOLTIP;Modifies local contrast as a function of the original local contrast (abscissa).\nLow abscissa values represent small local contrast (real values about 10..20).\n50% abscissa represents average local contrast (real value about 100..300).\n66% abscissa represents standard deviation of local contrast (real value about 300..800).\n100% abscissa represents maximum local contrast (real value about 3000..8000). !TP_WAVELET_CURVEEDITOR_CH;Contrast levels=f(Hue) -!TP_WAVELET_CURVEEDITOR_CH_TOOLTIP;Modifies each level's contrast as a function oh hue.\nTake care not to overwrite changes made with the Gamut Hue controls.\nThe curve will only have an effect when wavelet contrast level sliders are non-zero. +!TP_WAVELET_CURVEEDITOR_CH_TOOLTIP;Modifies each level's contrast as a function of hue.\nTake care not to overwrite changes made with the Gamut sub-tool's hue controls.\nThe curve will only have an effect when wavelet contrast level sliders are non-zero. !TP_WAVELET_CURVEEDITOR_CL;L !TP_WAVELET_CURVEEDITOR_CL_TOOLTIP;Applies a final contrast luminance curve at the end of the wavelet treatment. !TP_WAVELET_CURVEEDITOR_HH;HH @@ -1910,7 +1976,6 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nAtajo: - !TP_WAVELET_LEVZERO;Level 1 !TP_WAVELET_LINKEDG;Link with Edge Sharpness' Strength !TP_WAVELET_LIPST;Enhanced algoritm -!TP_WAVELET_LIPST_TOOLTIP;This algorithm uses the proximity of a pixel and eight of its neighbors. If less difference, edges are reinforced. !TP_WAVELET_LOWLIGHT;Shadow luminance range !TP_WAVELET_MEDGREINF;First level !TP_WAVELET_MEDILEV;Edge detection @@ -1957,10 +2022,6 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nAtajo: - !TP_WAVELET_TILESIZE;Tiling method !TP_WAVELET_TILESLIT;Little tiles !TP_WAVELET_TILES_TOOLTIP;Processing the full image leads to better quality and is the recommended option, while using tiles is a fall-back solution for users with little RAM. Refer to RawPedia for memory requirements. -!TP_WAVELET_TMHIGH;High -!TP_WAVELET_TMLOWHIGH;Low+High -!TP_WAVELET_TMNONE;None -!TP_WAVELET_TMSTD;Standard !TP_WAVELET_TMSTRENGTH;Compression strength !TP_WAVELET_TMSTRENGTH_TOOLTIP;Control the strength of tone mapping or contrast compression of the residual image. When the value is different from 0, the Strength and Gamma sliders of the Tone Mapping tool in the Exposure tab will become grayed out. !TP_WAVELET_TMTYPE;Compression method diff --git a/rtdata/languages/Euskara b/rtdata/languages/Euskara index e2365b060..bc4f034f8 100644 --- a/rtdata/languages/Euskara +++ b/rtdata/languages/Euskara @@ -918,6 +918,26 @@ TP_WBALANCE_TEMPERATURE;Tenperatura !HISTORY_MSG_404;W - ES - Base amplification !HISTORY_MSG_405;W - Denoise - Level 4 !HISTORY_MSG_406;W - ES - Neighboring pixels +!HISTORY_MSG_407;Retinex - Method +!HISTORY_MSG_408;Retinex - Neighboring +!HISTORY_MSG_409;Retinex - Gain +!HISTORY_MSG_410;Retinex - Offset +!HISTORY_MSG_411;Retinex - Strength +!HISTORY_MSG_412;Retinex - Scales +!HISTORY_MSG_413;Retinex - Variance +!HISTORY_MSG_414;Retinex - Histogram - Lab +!HISTORY_MSG_415;Retinex - Transmission +!HISTORY_MSG_416;Retinex +!HISTORY_MSG_417;Retinex - Transmission median +!HISTORY_MSG_418;Retinex - Threshold +!HISTORY_MSG_419;Retinex - Color space +!HISTORY_MSG_420;Retinex - Histogram - HSL +!HISTORY_MSG_421;Retinex - Gamma +!HISTORY_MSG_422;Retinex - Gamma +!HISTORY_MSG_423;Retinex - Gamma slope +!HISTORY_MSG_424;Retinex - HL threshold +!HISTORY_MSG_425;Retinex - Log base +!HISTORY_MSG_426;Retinex - Hue equalizer !HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s !MAIN_BUTTON_FULLSCREEN;Fullscreen !MAIN_BUTTON_NAVNEXT_TOOLTIP;Navigate to the next image relative to image opened in the Editor.\nShortcut: Shift-F4\n\nTo navigate to the next image relative to the currently selected thumbnail in the File Browser or Filmstrip:\nShortcut: F4 @@ -1000,7 +1020,6 @@ TP_WBALANCE_TEMPERATURE;Tenperatura !PARTIALPASTE_FLATFIELDFILE;Flat-field file !PARTIALPASTE_GRADIENT;Graduated filter !PARTIALPASTE_HSVEQUALIZER;HSV equalizer -!PARTIALPASTE_ICMGAMMA;Output gamma !PARTIALPASTE_IMPULSEDENOISE;Impulse noise reduction !PARTIALPASTE_LABCURVE;L*a*b* adjustments !PARTIALPASTE_LENSPROFILE;Lens correction profile @@ -1022,6 +1041,7 @@ TP_WBALANCE_TEMPERATURE;Tenperatura !PARTIALPASTE_RAW_DMETHOD;Demosaic method !PARTIALPASTE_RAW_FALSECOLOR;False color suppression !PARTIALPASTE_RAW_LMMSEITERATIONS;LMMSE enhancement steps +!PARTIALPASTE_RETINEX;Retinex !PARTIALPASTE_RGBCURVES;RGB curves !PARTIALPASTE_SHARPENEDGE;Edges !PARTIALPASTE_SHARPENMICRO;Microcontrast @@ -1397,7 +1417,7 @@ TP_WBALANCE_TEMPERATURE;Tenperatura !TP_DIRPYRDENOISE_CCCURVE;Chrominance curve !TP_DIRPYRDENOISE_CHROMAFR;Chrominance !TP_DIRPYRDENOISE_CHROMA;Chrominance - Master -!TP_DIRPYRDENOISE_CTYPE;Auto method +!TP_DIRPYRDENOISE_CTYPE;Method !TP_DIRPYRDENOISE_CTYPE_TOOLTIP;Manual\nActs on the full image.\nYou control the noise reduction settings manually.\n\nAutomatic global\nActs on the full image.\n9 zones are used to calculate a global chrominance noise reduction setting.\n\nAutomatic multi-zones\nNo preview - works only during saving, but using the "Preview" method by matching the tile size and center to the preview size and center you can get an idea of the expected results.\nThe image is divided into tiles (about 10 to 70 depending on image size) and each tile receives its own chrominance noise reduction settings.\n\nPreview\nActs on the whole image.\nThe part of the image visible in the preview is used to calculate global chrominance noise reduction settings. !TP_DIRPYRDENOISE_CURVEEDITOR_CC;Chroma !TP_DIRPYRDENOISE_CURVEEDITOR_CC_TOOLTIP;Increase (multiply) the value of all chrominance sliders.\nThis curve lets you adjust the strength of chromatic noise reduction as a function of chromaticity, for instance to increase the action in areas of low saturation and to decrease it in those of high saturation. @@ -1655,6 +1675,54 @@ TP_WBALANCE_TEMPERATURE;Tenperatura !TP_RESIZE_LANCZOS;Lanczos !TP_RESIZE_SPECIFY;Specify: !TP_RESIZE_WIDTH;Width +!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL +!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b* +!TP_RETINEX_CONTEDIT_LH;Hue equalizer +!TP_RETINEX_CURVEEDITOR_CD;L=f(L) +!TP_RETINEX_CURVEEDITOR_CD_TOOLTIP;Luminance according to luminance L=f(L)\nCorrect raw data to reduce halos and artifacts. +!TP_RETINEX_CURVEEDITOR_LH;Strength=f(H) +!TP_RETINEX_CURVEEDITOR_LH_TOOLTIP;Strength according to hue Strength=f(H)\nThis curve also acts on chroma when using the "Highlight" retinex method. +!TP_RETINEX_GAIN;Gain +!TP_RETINEX_GAIN_TOOLTIP;Acts on the transmission in combination with the offset. This is very different from the others settings. Used for black or white pixels, and to help balance the histogram. +!TP_RETINEX_GAMMA;Free gamma +!TP_RETINEX_GAMMA;Gamma +!TP_RETINEX_GAMMA_FREE;Free +!TP_RETINEX_GAMMA_HIGH;High +!TP_RETINEX_GAMMA_LOW;Low +!TP_RETINEX_GAMMA_MID;Middle +!TP_RETINEX_GAMMA_NONE;None +!TP_RETINEX_GAMMA_TOOLTIP;Restore tones by applying gamma before and after Retinex. Different from Retinex curves or others curves (Lab, Exposure, etc.). +!TP_RETINEX_HIGHLIGHT;Highlight threshold +!TP_RETINEX_HIGHLIGHT_TOOLTIP;Increase action of High algorithm.\nMay require you to re-adjust "Neighboring pixels" and to increase the "White-point correction" in the Raw tab -> Raw White Points tool. +!TP_RETINEX_HIGHLIG;Highlight +!TP_RETINEX_HIGH;High +!TP_RETINEX_HSLSPACE_LIN;HSL-Linear +!TP_RETINEX_HSLSPACE_LOG;HSL-Logarithmic +!TP_RETINEX_LABEL;Retinex +!TP_RETINEX_LABSPACE;L*a*b* +!TP_RETINEX_LOW;Low +!TP_RETINEX_MEDIAN;Transmission median filter +!TP_RETINEX_METHOD;Method +!TP_RETINEX_METHOD_TOOLTIP;Low = Reinforce low light,\nUniform = Equalize action,\nHigh = Reinforce high light,\nHighlight = Remove magenta in highlights. +!TP_RETINEX_MLABEL;Restored haze-free Min=%1 Max=%2 +!TP_RETINEX_MLABEL_TOOLTIP;Should be near min=0 max=32768\nRestored image with no mixture. +!TP_RETINEX_NEIGHBOR;Neighboring pixels +!TP_RETINEX_NEUTRAL;Reset +!TP_RETINEX_NEUTRAL_TIP;Reset all sliders and curves to their default values. +!TP_RETINEX_OFFSET;Offset +!TP_RETINEX_SETTINGS;Settings +!TP_RETINEX_SLOPE;Free gamma slope +!TP_RETINEX_STRENGTH;Strength +!TP_RETINEX_THRESHOLD;Threshold +!TP_RETINEX_THRESHOLD_TOOLTIP;Limits in/out.\nIn = image source,\nOut = image gauss. +!TP_RETINEX_TLABEL2;TM Tm=%1 TM=%2 +!TP_RETINEX_TLABEL;TM Min=%1 Max=%2 Mean=%3 Sigma=%4 +!TP_RETINEX_TLABEL_TOOLTIP;Transmission map result.\nMin and Max are used by Variance.\nMean and Sigma\nTm=Min TM=Max of transmission map. +!TP_RETINEX_TRANSMISSION;Transmission map +!TP_RETINEX_TRANSMISSION_TOOLTIP;Transmission according to transmission.\nAbscissa: transmission from negative values (min), mean, and positives values (max).\nOrdinate: amplification or reduction. +!TP_RETINEX_UNIFORM;Uniform +!TP_RETINEX_VARIANCE;Variance +!TP_RETINEX_VARIANCE_TOOLTIP;Low variance increase local contrast and saturation, but can lead to artifacts. !TP_RGBCURVES_BLUE;B !TP_RGBCURVES_CHANNEL;Channel !TP_RGBCURVES_GREEN;G @@ -1718,7 +1786,6 @@ TP_WBALANCE_TEMPERATURE;Tenperatura !TP_WAVELET_BASLI;Slider !TP_WAVELET_BATYPE;Contrast balance method !TP_WAVELET_CBENAB;Toning and Color Balance -!TP_WAVELET_CBTYPE;Toning and Color Balance !TP_WAVELET_CB_TOOLTIP;For strong values product color-toning by combining it or not with levels decomposition 'toning'\nFor low values you can change the white balance of the background (sky, ...) without changing that of the front plane, generally more contrasted !TP_WAVELET_CCURVE;Local contrast !TP_WAVELET_CH1;Whole chroma range @@ -1732,7 +1799,6 @@ TP_WBALANCE_TEMPERATURE;Tenperatura !TP_WAVELET_CHSL;Sliders !TP_WAVELET_CHTYPE;Chrominance method !TP_WAVELET_COLORT;Opacity Red-Green -!TP_WAVELET_COMBOTH;Both !TP_WAVELET_COMPCONT;Contrast !TP_WAVELET_COMPGAMMA;Compression gamma !TP_WAVELET_COMPGAMMA_TOOLTIP;Adjusting the gamma of the residual image allows you to equilibrate the data and histogram. @@ -1744,9 +1810,9 @@ TP_WBALANCE_TEMPERATURE;Tenperatura !TP_WAVELET_CONTRA_TOOLTIP;Changes contrast of the residual image. !TP_WAVELET_CONTR;Gamut !TP_WAVELET_CTYPE;Chrominance control -!TP_WAVELET_CURVEEDITOR_CC_TOOLTIP;Modifies local contrast as a function of the original local contrast (absciss)\nLow absciss represents small local contrast (real values about 10..20)\n50% absciss represents average of local contrast (real value about 100..300)\n66% absciss represents standard deviation of local contrast (real value about 300..800)\n100% represents maximum (real value about 3000..8000) +!TP_WAVELET_CURVEEDITOR_CC_TOOLTIP;Modifies local contrast as a function of the original local contrast (abscissa).\nLow abscissa values represent small local contrast (real values about 10..20).\n50% abscissa represents average local contrast (real value about 100..300).\n66% abscissa represents standard deviation of local contrast (real value about 300..800).\n100% abscissa represents maximum local contrast (real value about 3000..8000). !TP_WAVELET_CURVEEDITOR_CH;Contrast levels=f(Hue) -!TP_WAVELET_CURVEEDITOR_CH_TOOLTIP;Modifies each level's contrast as a function oh hue.\nTake care not to overwrite changes made with the Gamut Hue controls.\nThe curve will only have an effect when wavelet contrast level sliders are non-zero. +!TP_WAVELET_CURVEEDITOR_CH_TOOLTIP;Modifies each level's contrast as a function of hue.\nTake care not to overwrite changes made with the Gamut sub-tool's hue controls.\nThe curve will only have an effect when wavelet contrast level sliders are non-zero. !TP_WAVELET_CURVEEDITOR_CL;L !TP_WAVELET_CURVEEDITOR_CL_TOOLTIP;Applies a final contrast luminance curve at the end of the wavelet treatment. !TP_WAVELET_CURVEEDITOR_HH;HH @@ -1809,7 +1875,6 @@ TP_WBALANCE_TEMPERATURE;Tenperatura !TP_WAVELET_LEVZERO;Level 1 !TP_WAVELET_LINKEDG;Link with Edge Sharpness' Strength !TP_WAVELET_LIPST;Enhanced algoritm -!TP_WAVELET_LIPST_TOOLTIP;This algorithm uses the proximity of a pixel and eight of its neighbors. If less difference, edges are reinforced. !TP_WAVELET_LOWLIGHT;Shadow luminance range !TP_WAVELET_MEDGREINF;First level !TP_WAVELET_MEDILEV;Edge detection @@ -1856,10 +1921,6 @@ TP_WBALANCE_TEMPERATURE;Tenperatura !TP_WAVELET_TILESIZE;Tiling method !TP_WAVELET_TILESLIT;Little tiles !TP_WAVELET_TILES_TOOLTIP;Processing the full image leads to better quality and is the recommended option, while using tiles is a fall-back solution for users with little RAM. Refer to RawPedia for memory requirements. -!TP_WAVELET_TMHIGH;High -!TP_WAVELET_TMLOWHIGH;Low+High -!TP_WAVELET_TMNONE;None -!TP_WAVELET_TMSTD;Standard !TP_WAVELET_TMSTRENGTH;Compression strength !TP_WAVELET_TMSTRENGTH_TOOLTIP;Control the strength of tone mapping or contrast compression of the residual image. When the value is different from 0, the Strength and Gamma sliders of the Tone Mapping tool in the Exposure tab will become grayed out. !TP_WAVELET_TMTYPE;Compression method diff --git a/rtdata/languages/Francais b/rtdata/languages/Francais index 56c7a7fa3..e49957537 100644 --- a/rtdata/languages/Francais +++ b/rtdata/languages/Francais @@ -796,7 +796,6 @@ PARTIALPASTE_FLATFIELDCLIPCONTROL;Contrôle de l'écrêtage du Champs Uniforme PARTIALPASTE_FLATFIELDFILE;Fichier de Champ Uniforme PARTIALPASTE_GRADIENT;Filtre Dégradé PARTIALPASTE_HSVEQUALIZER;Égaliseur TSV -PARTIALPASTE_ICMGAMMA;Gamma de sortie PARTIALPASTE_ICMSETTINGS;Réglages ICM PARTIALPASTE_IMPULSEDENOISE;Réduction du bruit d'impulsion PARTIALPASTE_IPTCINFO;Infos IPTC @@ -1700,7 +1699,6 @@ TP_WAVELET_BANONE;Aucun TP_WAVELET_BASLI;Curseur TP_WAVELET_BATYPE;Bal. du contraste par TP_WAVELET_CBENAB;Virage Partiel et Balance Couleur -TP_WAVELET_CBTYPE;Virage Partiel et Balance Couleur TP_WAVELET_CB_TOOLTIP;Pour les valeurs élevées, produit un virage partiel en les combinant ou non avec les valeurs (courbes) spécifiées dans 'Virage'\nPour les faible valeurs, vous pouvez changer la balance des blancs du fond (ciel, ...) sans changer celui du premier plan, généralement plus contrasté. TP_WAVELET_CCURVE;Contraste local TP_WAVELET_CH1;Plage chromatique complète @@ -1714,7 +1712,6 @@ TP_WAVELET_CHR_TOOLTIP;Ajuste le chroma en fonction des "niveaux de contraste" e TP_WAVELET_CHSL;Curseurs TP_WAVELET_CHTYPE;Méthode de chrominance TP_WAVELET_COLORT;Opacité Rouge-Vert -TP_WAVELET_COMBOTH;Les deux TP_WAVELET_COMPCONT;Contraste TP_WAVELET_COMPGAMMA;Compression gamma TP_WAVELET_COMPGAMMA_TOOLTIP;Ajuster le gamma de l'image résiduelle vous permet d'équiilibrer les données de l'histograme. @@ -1791,7 +1788,6 @@ TP_WAVELET_LEVTWO;Niveau 3 TP_WAVELET_LEVZERO;Niveau 1 TP_WAVELET_LINKEDG;Lier à la 'Force' de la 'Netteté des bords' TP_WAVELET_LIPST;Algorithme amélioré -TP_WAVELET_LIPST_TOOLTIP;Cet algorithme utilise la proximité d'un pixel et huit de ses voisins. Si moins de différence, les bords sont renforcés. TP_WAVELET_LOWLIGHT;Plage de luminance des ombres TP_WAVELET_MEDGREINF;Premier niveau TP_WAVELET_MEDILEV;Détection des bords @@ -1838,10 +1834,6 @@ TP_WAVELET_TILESFULL;Image entière TP_WAVELET_TILESIZE;Méthode de découpage TP_WAVELET_TILESLIT;Petites tuiles TP_WAVELET_TILES_TOOLTIP;Traiter l'image entière donnera les meilleurs résulats et est l'option recommandé, l'usage des tuiles étant une solution alternative recommandé pour les utilisateurs disposant de peu de RAM. Cf. RawPedia pour la configuration mémoire requise. -TP_WAVELET_TMHIGH;Haut -TP_WAVELET_TMLOWHIGH;Bas+Haut -TP_WAVELET_TMNONE;Aucun -TP_WAVELET_TMSTD;Standard TP_WAVELET_TMSTRENGTH;Force de la compression TP_WAVELET_TMSTRENGTH_TOOLTIP;Contrôle la force de la compression tonale ou de la compression de contraste de l'image résiduelle. Lorsque la valeur est différente de 0, les curseurs Force et Gamma de l'outil Compression Tonale dans l'onglet Exposition seront grisés. TP_WAVELET_TMTYPE;Méthode de compression @@ -1901,3 +1893,76 @@ ZOOMPANEL_ZOOMFITSCREEN;Ajuster à la fenêtre\nRaccourci: f ZOOMPANEL_ZOOMIN;Zoom Avant\nRaccourci: + ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: - +!!!!!!!!!!!!!!!!!!!!!!!!! +! Untranslated keys follow; remove the ! prefix after an entry is translated. +!!!!!!!!!!!!!!!!!!!!!!!!! + +!HISTORY_MSG_407;Retinex - Method +!HISTORY_MSG_408;Retinex - Neighboring +!HISTORY_MSG_409;Retinex - Gain +!HISTORY_MSG_410;Retinex - Offset +!HISTORY_MSG_411;Retinex - Strength +!HISTORY_MSG_412;Retinex - Scales +!HISTORY_MSG_413;Retinex - Variance +!HISTORY_MSG_414;Retinex - Histogram - Lab +!HISTORY_MSG_415;Retinex - Transmission +!HISTORY_MSG_416;Retinex +!HISTORY_MSG_417;Retinex - Transmission median +!HISTORY_MSG_418;Retinex - Threshold +!HISTORY_MSG_419;Retinex - Color space +!HISTORY_MSG_420;Retinex - Histogram - HSL +!HISTORY_MSG_421;Retinex - Gamma +!HISTORY_MSG_422;Retinex - Gamma +!HISTORY_MSG_423;Retinex - Gamma slope +!HISTORY_MSG_424;Retinex - HL threshold +!HISTORY_MSG_425;Retinex - Log base +!HISTORY_MSG_426;Retinex - Hue equalizer +!PARTIALPASTE_RETINEX;Retinex +!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL +!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b* +!TP_RETINEX_CONTEDIT_LH;Hue equalizer +!TP_RETINEX_CURVEEDITOR_CD;L=f(L) +!TP_RETINEX_CURVEEDITOR_CD_TOOLTIP;Luminance according to luminance L=f(L)\nCorrect raw data to reduce halos and artifacts. +!TP_RETINEX_CURVEEDITOR_LH;Strength=f(H) +!TP_RETINEX_CURVEEDITOR_LH_TOOLTIP;Strength according to hue Strength=f(H)\nThis curve also acts on chroma when using the "Highlight" retinex method. +!TP_RETINEX_GAIN;Gain +!TP_RETINEX_GAIN_TOOLTIP;Acts on the transmission in combination with the offset. This is very different from the others settings. Used for black or white pixels, and to help balance the histogram. +!TP_RETINEX_GAMMA;Free gamma +!TP_RETINEX_GAMMA;Gamma +!TP_RETINEX_GAMMA_FREE;Free +!TP_RETINEX_GAMMA_HIGH;High +!TP_RETINEX_GAMMA_LOW;Low +!TP_RETINEX_GAMMA_MID;Middle +!TP_RETINEX_GAMMA_NONE;None +!TP_RETINEX_GAMMA_TOOLTIP;Restore tones by applying gamma before and after Retinex. Different from Retinex curves or others curves (Lab, Exposure, etc.). +!TP_RETINEX_HIGHLIGHT;Highlight threshold +!TP_RETINEX_HIGHLIGHT_TOOLTIP;Increase action of High algorithm.\nMay require you to re-adjust "Neighboring pixels" and to increase the "White-point correction" in the Raw tab -> Raw White Points tool. +!TP_RETINEX_HIGHLIG;Highlight +!TP_RETINEX_HIGH;High +!TP_RETINEX_HSLSPACE_LIN;HSL-Linear +!TP_RETINEX_HSLSPACE_LOG;HSL-Logarithmic +!TP_RETINEX_LABEL;Retinex +!TP_RETINEX_LABSPACE;L*a*b* +!TP_RETINEX_LOW;Low +!TP_RETINEX_MEDIAN;Transmission median filter +!TP_RETINEX_METHOD;Method +!TP_RETINEX_METHOD_TOOLTIP;Low = Reinforce low light,\nUniform = Equalize action,\nHigh = Reinforce high light,\nHighlight = Remove magenta in highlights. +!TP_RETINEX_MLABEL;Restored haze-free Min=%1 Max=%2 +!TP_RETINEX_MLABEL_TOOLTIP;Should be near min=0 max=32768\nRestored image with no mixture. +!TP_RETINEX_NEIGHBOR;Neighboring pixels +!TP_RETINEX_NEUTRAL;Reset +!TP_RETINEX_NEUTRAL_TIP;Reset all sliders and curves to their default values. +!TP_RETINEX_OFFSET;Offset +!TP_RETINEX_SETTINGS;Settings +!TP_RETINEX_SLOPE;Free gamma slope +!TP_RETINEX_STRENGTH;Strength +!TP_RETINEX_THRESHOLD;Threshold +!TP_RETINEX_THRESHOLD_TOOLTIP;Limits in/out.\nIn = image source,\nOut = image gauss. +!TP_RETINEX_TLABEL2;TM Tm=%1 TM=%2 +!TP_RETINEX_TLABEL;TM Min=%1 Max=%2 Mean=%3 Sigma=%4 +!TP_RETINEX_TLABEL_TOOLTIP;Transmission map result.\nMin and Max are used by Variance.\nMean and Sigma\nTm=Min TM=Max of transmission map. +!TP_RETINEX_TRANSMISSION;Transmission map +!TP_RETINEX_TRANSMISSION_TOOLTIP;Transmission according to transmission.\nAbscissa: transmission from negative values (min), mean, and positives values (max).\nOrdinate: amplification or reduction. +!TP_RETINEX_UNIFORM;Uniform +!TP_RETINEX_VARIANCE;Variance +!TP_RETINEX_VARIANCE_TOOLTIP;Low variance increase local contrast and saturation, but can lead to artifacts. diff --git a/rtdata/languages/Greek b/rtdata/languages/Greek index 1529e40c4..a02384e50 100644 --- a/rtdata/languages/Greek +++ b/rtdata/languages/Greek @@ -917,6 +917,26 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία !HISTORY_MSG_404;W - ES - Base amplification !HISTORY_MSG_405;W - Denoise - Level 4 !HISTORY_MSG_406;W - ES - Neighboring pixels +!HISTORY_MSG_407;Retinex - Method +!HISTORY_MSG_408;Retinex - Neighboring +!HISTORY_MSG_409;Retinex - Gain +!HISTORY_MSG_410;Retinex - Offset +!HISTORY_MSG_411;Retinex - Strength +!HISTORY_MSG_412;Retinex - Scales +!HISTORY_MSG_413;Retinex - Variance +!HISTORY_MSG_414;Retinex - Histogram - Lab +!HISTORY_MSG_415;Retinex - Transmission +!HISTORY_MSG_416;Retinex +!HISTORY_MSG_417;Retinex - Transmission median +!HISTORY_MSG_418;Retinex - Threshold +!HISTORY_MSG_419;Retinex - Color space +!HISTORY_MSG_420;Retinex - Histogram - HSL +!HISTORY_MSG_421;Retinex - Gamma +!HISTORY_MSG_422;Retinex - Gamma +!HISTORY_MSG_423;Retinex - Gamma slope +!HISTORY_MSG_424;Retinex - HL threshold +!HISTORY_MSG_425;Retinex - Log base +!HISTORY_MSG_426;Retinex - Hue equalizer !HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s !MAIN_BUTTON_FULLSCREEN;Fullscreen !MAIN_BUTTON_NAVNEXT_TOOLTIP;Navigate to the next image relative to image opened in the Editor.\nShortcut: Shift-F4\n\nTo navigate to the next image relative to the currently selected thumbnail in the File Browser or Filmstrip:\nShortcut: F4 @@ -999,7 +1019,6 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία !PARTIALPASTE_FLATFIELDFILE;Flat-field file !PARTIALPASTE_GRADIENT;Graduated filter !PARTIALPASTE_HSVEQUALIZER;HSV equalizer -!PARTIALPASTE_ICMGAMMA;Output gamma !PARTIALPASTE_IMPULSEDENOISE;Impulse noise reduction !PARTIALPASTE_LABCURVE;L*a*b* adjustments !PARTIALPASTE_LENSPROFILE;Lens correction profile @@ -1021,6 +1040,7 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία !PARTIALPASTE_RAW_DMETHOD;Demosaic method !PARTIALPASTE_RAW_FALSECOLOR;False color suppression !PARTIALPASTE_RAW_LMMSEITERATIONS;LMMSE enhancement steps +!PARTIALPASTE_RETINEX;Retinex !PARTIALPASTE_RGBCURVES;RGB curves !PARTIALPASTE_SHARPENEDGE;Edges !PARTIALPASTE_SHARPENMICRO;Microcontrast @@ -1396,7 +1416,7 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία !TP_DIRPYRDENOISE_CCCURVE;Chrominance curve !TP_DIRPYRDENOISE_CHROMAFR;Chrominance !TP_DIRPYRDENOISE_CHROMA;Chrominance - Master -!TP_DIRPYRDENOISE_CTYPE;Auto method +!TP_DIRPYRDENOISE_CTYPE;Method !TP_DIRPYRDENOISE_CTYPE_TOOLTIP;Manual\nActs on the full image.\nYou control the noise reduction settings manually.\n\nAutomatic global\nActs on the full image.\n9 zones are used to calculate a global chrominance noise reduction setting.\n\nAutomatic multi-zones\nNo preview - works only during saving, but using the "Preview" method by matching the tile size and center to the preview size and center you can get an idea of the expected results.\nThe image is divided into tiles (about 10 to 70 depending on image size) and each tile receives its own chrominance noise reduction settings.\n\nPreview\nActs on the whole image.\nThe part of the image visible in the preview is used to calculate global chrominance noise reduction settings. !TP_DIRPYRDENOISE_CURVEEDITOR_CC;Chroma !TP_DIRPYRDENOISE_CURVEEDITOR_CC_TOOLTIP;Increase (multiply) the value of all chrominance sliders.\nThis curve lets you adjust the strength of chromatic noise reduction as a function of chromaticity, for instance to increase the action in areas of low saturation and to decrease it in those of high saturation. @@ -1654,6 +1674,54 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία !TP_RESIZE_LANCZOS;Lanczos !TP_RESIZE_SPECIFY;Specify: !TP_RESIZE_WIDTH;Width +!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL +!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b* +!TP_RETINEX_CONTEDIT_LH;Hue equalizer +!TP_RETINEX_CURVEEDITOR_CD;L=f(L) +!TP_RETINEX_CURVEEDITOR_CD_TOOLTIP;Luminance according to luminance L=f(L)\nCorrect raw data to reduce halos and artifacts. +!TP_RETINEX_CURVEEDITOR_LH;Strength=f(H) +!TP_RETINEX_CURVEEDITOR_LH_TOOLTIP;Strength according to hue Strength=f(H)\nThis curve also acts on chroma when using the "Highlight" retinex method. +!TP_RETINEX_GAIN;Gain +!TP_RETINEX_GAIN_TOOLTIP;Acts on the transmission in combination with the offset. This is very different from the others settings. Used for black or white pixels, and to help balance the histogram. +!TP_RETINEX_GAMMA;Free gamma +!TP_RETINEX_GAMMA;Gamma +!TP_RETINEX_GAMMA_FREE;Free +!TP_RETINEX_GAMMA_HIGH;High +!TP_RETINEX_GAMMA_LOW;Low +!TP_RETINEX_GAMMA_MID;Middle +!TP_RETINEX_GAMMA_NONE;None +!TP_RETINEX_GAMMA_TOOLTIP;Restore tones by applying gamma before and after Retinex. Different from Retinex curves or others curves (Lab, Exposure, etc.). +!TP_RETINEX_HIGHLIGHT;Highlight threshold +!TP_RETINEX_HIGHLIGHT_TOOLTIP;Increase action of High algorithm.\nMay require you to re-adjust "Neighboring pixels" and to increase the "White-point correction" in the Raw tab -> Raw White Points tool. +!TP_RETINEX_HIGHLIG;Highlight +!TP_RETINEX_HIGH;High +!TP_RETINEX_HSLSPACE_LIN;HSL-Linear +!TP_RETINEX_HSLSPACE_LOG;HSL-Logarithmic +!TP_RETINEX_LABEL;Retinex +!TP_RETINEX_LABSPACE;L*a*b* +!TP_RETINEX_LOW;Low +!TP_RETINEX_MEDIAN;Transmission median filter +!TP_RETINEX_METHOD;Method +!TP_RETINEX_METHOD_TOOLTIP;Low = Reinforce low light,\nUniform = Equalize action,\nHigh = Reinforce high light,\nHighlight = Remove magenta in highlights. +!TP_RETINEX_MLABEL;Restored haze-free Min=%1 Max=%2 +!TP_RETINEX_MLABEL_TOOLTIP;Should be near min=0 max=32768\nRestored image with no mixture. +!TP_RETINEX_NEIGHBOR;Neighboring pixels +!TP_RETINEX_NEUTRAL;Reset +!TP_RETINEX_NEUTRAL_TIP;Reset all sliders and curves to their default values. +!TP_RETINEX_OFFSET;Offset +!TP_RETINEX_SETTINGS;Settings +!TP_RETINEX_SLOPE;Free gamma slope +!TP_RETINEX_STRENGTH;Strength +!TP_RETINEX_THRESHOLD;Threshold +!TP_RETINEX_THRESHOLD_TOOLTIP;Limits in/out.\nIn = image source,\nOut = image gauss. +!TP_RETINEX_TLABEL2;TM Tm=%1 TM=%2 +!TP_RETINEX_TLABEL;TM Min=%1 Max=%2 Mean=%3 Sigma=%4 +!TP_RETINEX_TLABEL_TOOLTIP;Transmission map result.\nMin and Max are used by Variance.\nMean and Sigma\nTm=Min TM=Max of transmission map. +!TP_RETINEX_TRANSMISSION;Transmission map +!TP_RETINEX_TRANSMISSION_TOOLTIP;Transmission according to transmission.\nAbscissa: transmission from negative values (min), mean, and positives values (max).\nOrdinate: amplification or reduction. +!TP_RETINEX_UNIFORM;Uniform +!TP_RETINEX_VARIANCE;Variance +!TP_RETINEX_VARIANCE_TOOLTIP;Low variance increase local contrast and saturation, but can lead to artifacts. !TP_RGBCURVES_BLUE;B !TP_RGBCURVES_CHANNEL;Channel !TP_RGBCURVES_GREEN;G @@ -1717,7 +1785,6 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία !TP_WAVELET_BASLI;Slider !TP_WAVELET_BATYPE;Contrast balance method !TP_WAVELET_CBENAB;Toning and Color Balance -!TP_WAVELET_CBTYPE;Toning and Color Balance !TP_WAVELET_CB_TOOLTIP;For strong values product color-toning by combining it or not with levels decomposition 'toning'\nFor low values you can change the white balance of the background (sky, ...) without changing that of the front plane, generally more contrasted !TP_WAVELET_CCURVE;Local contrast !TP_WAVELET_CH1;Whole chroma range @@ -1731,7 +1798,6 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία !TP_WAVELET_CHSL;Sliders !TP_WAVELET_CHTYPE;Chrominance method !TP_WAVELET_COLORT;Opacity Red-Green -!TP_WAVELET_COMBOTH;Both !TP_WAVELET_COMPCONT;Contrast !TP_WAVELET_COMPGAMMA;Compression gamma !TP_WAVELET_COMPGAMMA_TOOLTIP;Adjusting the gamma of the residual image allows you to equilibrate the data and histogram. @@ -1743,9 +1809,9 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία !TP_WAVELET_CONTRA_TOOLTIP;Changes contrast of the residual image. !TP_WAVELET_CONTR;Gamut !TP_WAVELET_CTYPE;Chrominance control -!TP_WAVELET_CURVEEDITOR_CC_TOOLTIP;Modifies local contrast as a function of the original local contrast (absciss)\nLow absciss represents small local contrast (real values about 10..20)\n50% absciss represents average of local contrast (real value about 100..300)\n66% absciss represents standard deviation of local contrast (real value about 300..800)\n100% represents maximum (real value about 3000..8000) +!TP_WAVELET_CURVEEDITOR_CC_TOOLTIP;Modifies local contrast as a function of the original local contrast (abscissa).\nLow abscissa values represent small local contrast (real values about 10..20).\n50% abscissa represents average local contrast (real value about 100..300).\n66% abscissa represents standard deviation of local contrast (real value about 300..800).\n100% abscissa represents maximum local contrast (real value about 3000..8000). !TP_WAVELET_CURVEEDITOR_CH;Contrast levels=f(Hue) -!TP_WAVELET_CURVEEDITOR_CH_TOOLTIP;Modifies each level's contrast as a function oh hue.\nTake care not to overwrite changes made with the Gamut Hue controls.\nThe curve will only have an effect when wavelet contrast level sliders are non-zero. +!TP_WAVELET_CURVEEDITOR_CH_TOOLTIP;Modifies each level's contrast as a function of hue.\nTake care not to overwrite changes made with the Gamut sub-tool's hue controls.\nThe curve will only have an effect when wavelet contrast level sliders are non-zero. !TP_WAVELET_CURVEEDITOR_CL;L !TP_WAVELET_CURVEEDITOR_CL_TOOLTIP;Applies a final contrast luminance curve at the end of the wavelet treatment. !TP_WAVELET_CURVEEDITOR_HH;HH @@ -1808,7 +1874,6 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία !TP_WAVELET_LEVZERO;Level 1 !TP_WAVELET_LINKEDG;Link with Edge Sharpness' Strength !TP_WAVELET_LIPST;Enhanced algoritm -!TP_WAVELET_LIPST_TOOLTIP;This algorithm uses the proximity of a pixel and eight of its neighbors. If less difference, edges are reinforced. !TP_WAVELET_LOWLIGHT;Shadow luminance range !TP_WAVELET_MEDGREINF;First level !TP_WAVELET_MEDILEV;Edge detection @@ -1855,10 +1920,6 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία !TP_WAVELET_TILESIZE;Tiling method !TP_WAVELET_TILESLIT;Little tiles !TP_WAVELET_TILES_TOOLTIP;Processing the full image leads to better quality and is the recommended option, while using tiles is a fall-back solution for users with little RAM. Refer to RawPedia for memory requirements. -!TP_WAVELET_TMHIGH;High -!TP_WAVELET_TMLOWHIGH;Low+High -!TP_WAVELET_TMNONE;None -!TP_WAVELET_TMSTD;Standard !TP_WAVELET_TMSTRENGTH;Compression strength !TP_WAVELET_TMSTRENGTH_TOOLTIP;Control the strength of tone mapping or contrast compression of the residual image. When the value is different from 0, the Strength and Gamma sliders of the Tone Mapping tool in the Exposure tab will become grayed out. !TP_WAVELET_TMTYPE;Compression method diff --git a/rtdata/languages/Hebrew b/rtdata/languages/Hebrew index a2cd5a37f..4d17da309 100644 --- a/rtdata/languages/Hebrew +++ b/rtdata/languages/Hebrew @@ -918,6 +918,26 @@ TP_WBALANCE_TEMPERATURE;מידת חום !HISTORY_MSG_404;W - ES - Base amplification !HISTORY_MSG_405;W - Denoise - Level 4 !HISTORY_MSG_406;W - ES - Neighboring pixels +!HISTORY_MSG_407;Retinex - Method +!HISTORY_MSG_408;Retinex - Neighboring +!HISTORY_MSG_409;Retinex - Gain +!HISTORY_MSG_410;Retinex - Offset +!HISTORY_MSG_411;Retinex - Strength +!HISTORY_MSG_412;Retinex - Scales +!HISTORY_MSG_413;Retinex - Variance +!HISTORY_MSG_414;Retinex - Histogram - Lab +!HISTORY_MSG_415;Retinex - Transmission +!HISTORY_MSG_416;Retinex +!HISTORY_MSG_417;Retinex - Transmission median +!HISTORY_MSG_418;Retinex - Threshold +!HISTORY_MSG_419;Retinex - Color space +!HISTORY_MSG_420;Retinex - Histogram - HSL +!HISTORY_MSG_421;Retinex - Gamma +!HISTORY_MSG_422;Retinex - Gamma +!HISTORY_MSG_423;Retinex - Gamma slope +!HISTORY_MSG_424;Retinex - HL threshold +!HISTORY_MSG_425;Retinex - Log base +!HISTORY_MSG_426;Retinex - Hue equalizer !HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s !MAIN_BUTTON_FULLSCREEN;Fullscreen !MAIN_BUTTON_NAVNEXT_TOOLTIP;Navigate to the next image relative to image opened in the Editor.\nShortcut: Shift-F4\n\nTo navigate to the next image relative to the currently selected thumbnail in the File Browser or Filmstrip:\nShortcut: F4 @@ -1000,7 +1020,6 @@ TP_WBALANCE_TEMPERATURE;מידת חום !PARTIALPASTE_FLATFIELDFILE;Flat-field file !PARTIALPASTE_GRADIENT;Graduated filter !PARTIALPASTE_HSVEQUALIZER;HSV equalizer -!PARTIALPASTE_ICMGAMMA;Output gamma !PARTIALPASTE_IMPULSEDENOISE;Impulse noise reduction !PARTIALPASTE_LABCURVE;L*a*b* adjustments !PARTIALPASTE_LENSPROFILE;Lens correction profile @@ -1022,6 +1041,7 @@ TP_WBALANCE_TEMPERATURE;מידת חום !PARTIALPASTE_RAW_DMETHOD;Demosaic method !PARTIALPASTE_RAW_FALSECOLOR;False color suppression !PARTIALPASTE_RAW_LMMSEITERATIONS;LMMSE enhancement steps +!PARTIALPASTE_RETINEX;Retinex !PARTIALPASTE_RGBCURVES;RGB curves !PARTIALPASTE_SHARPENEDGE;Edges !PARTIALPASTE_SHARPENMICRO;Microcontrast @@ -1397,7 +1417,7 @@ TP_WBALANCE_TEMPERATURE;מידת חום !TP_DIRPYRDENOISE_CCCURVE;Chrominance curve !TP_DIRPYRDENOISE_CHROMAFR;Chrominance !TP_DIRPYRDENOISE_CHROMA;Chrominance - Master -!TP_DIRPYRDENOISE_CTYPE;Auto method +!TP_DIRPYRDENOISE_CTYPE;Method !TP_DIRPYRDENOISE_CTYPE_TOOLTIP;Manual\nActs on the full image.\nYou control the noise reduction settings manually.\n\nAutomatic global\nActs on the full image.\n9 zones are used to calculate a global chrominance noise reduction setting.\n\nAutomatic multi-zones\nNo preview - works only during saving, but using the "Preview" method by matching the tile size and center to the preview size and center you can get an idea of the expected results.\nThe image is divided into tiles (about 10 to 70 depending on image size) and each tile receives its own chrominance noise reduction settings.\n\nPreview\nActs on the whole image.\nThe part of the image visible in the preview is used to calculate global chrominance noise reduction settings. !TP_DIRPYRDENOISE_CURVEEDITOR_CC;Chroma !TP_DIRPYRDENOISE_CURVEEDITOR_CC_TOOLTIP;Increase (multiply) the value of all chrominance sliders.\nThis curve lets you adjust the strength of chromatic noise reduction as a function of chromaticity, for instance to increase the action in areas of low saturation and to decrease it in those of high saturation. @@ -1655,6 +1675,54 @@ TP_WBALANCE_TEMPERATURE;מידת חום !TP_RESIZE_LANCZOS;Lanczos !TP_RESIZE_SPECIFY;Specify: !TP_RESIZE_WIDTH;Width +!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL +!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b* +!TP_RETINEX_CONTEDIT_LH;Hue equalizer +!TP_RETINEX_CURVEEDITOR_CD;L=f(L) +!TP_RETINEX_CURVEEDITOR_CD_TOOLTIP;Luminance according to luminance L=f(L)\nCorrect raw data to reduce halos and artifacts. +!TP_RETINEX_CURVEEDITOR_LH;Strength=f(H) +!TP_RETINEX_CURVEEDITOR_LH_TOOLTIP;Strength according to hue Strength=f(H)\nThis curve also acts on chroma when using the "Highlight" retinex method. +!TP_RETINEX_GAIN;Gain +!TP_RETINEX_GAIN_TOOLTIP;Acts on the transmission in combination with the offset. This is very different from the others settings. Used for black or white pixels, and to help balance the histogram. +!TP_RETINEX_GAMMA;Free gamma +!TP_RETINEX_GAMMA;Gamma +!TP_RETINEX_GAMMA_FREE;Free +!TP_RETINEX_GAMMA_HIGH;High +!TP_RETINEX_GAMMA_LOW;Low +!TP_RETINEX_GAMMA_MID;Middle +!TP_RETINEX_GAMMA_NONE;None +!TP_RETINEX_GAMMA_TOOLTIP;Restore tones by applying gamma before and after Retinex. Different from Retinex curves or others curves (Lab, Exposure, etc.). +!TP_RETINEX_HIGHLIGHT;Highlight threshold +!TP_RETINEX_HIGHLIGHT_TOOLTIP;Increase action of High algorithm.\nMay require you to re-adjust "Neighboring pixels" and to increase the "White-point correction" in the Raw tab -> Raw White Points tool. +!TP_RETINEX_HIGHLIG;Highlight +!TP_RETINEX_HIGH;High +!TP_RETINEX_HSLSPACE_LIN;HSL-Linear +!TP_RETINEX_HSLSPACE_LOG;HSL-Logarithmic +!TP_RETINEX_LABEL;Retinex +!TP_RETINEX_LABSPACE;L*a*b* +!TP_RETINEX_LOW;Low +!TP_RETINEX_MEDIAN;Transmission median filter +!TP_RETINEX_METHOD;Method +!TP_RETINEX_METHOD_TOOLTIP;Low = Reinforce low light,\nUniform = Equalize action,\nHigh = Reinforce high light,\nHighlight = Remove magenta in highlights. +!TP_RETINEX_MLABEL;Restored haze-free Min=%1 Max=%2 +!TP_RETINEX_MLABEL_TOOLTIP;Should be near min=0 max=32768\nRestored image with no mixture. +!TP_RETINEX_NEIGHBOR;Neighboring pixels +!TP_RETINEX_NEUTRAL;Reset +!TP_RETINEX_NEUTRAL_TIP;Reset all sliders and curves to their default values. +!TP_RETINEX_OFFSET;Offset +!TP_RETINEX_SETTINGS;Settings +!TP_RETINEX_SLOPE;Free gamma slope +!TP_RETINEX_STRENGTH;Strength +!TP_RETINEX_THRESHOLD;Threshold +!TP_RETINEX_THRESHOLD_TOOLTIP;Limits in/out.\nIn = image source,\nOut = image gauss. +!TP_RETINEX_TLABEL2;TM Tm=%1 TM=%2 +!TP_RETINEX_TLABEL;TM Min=%1 Max=%2 Mean=%3 Sigma=%4 +!TP_RETINEX_TLABEL_TOOLTIP;Transmission map result.\nMin and Max are used by Variance.\nMean and Sigma\nTm=Min TM=Max of transmission map. +!TP_RETINEX_TRANSMISSION;Transmission map +!TP_RETINEX_TRANSMISSION_TOOLTIP;Transmission according to transmission.\nAbscissa: transmission from negative values (min), mean, and positives values (max).\nOrdinate: amplification or reduction. +!TP_RETINEX_UNIFORM;Uniform +!TP_RETINEX_VARIANCE;Variance +!TP_RETINEX_VARIANCE_TOOLTIP;Low variance increase local contrast and saturation, but can lead to artifacts. !TP_RGBCURVES_BLUE;B !TP_RGBCURVES_CHANNEL;Channel !TP_RGBCURVES_GREEN;G @@ -1718,7 +1786,6 @@ TP_WBALANCE_TEMPERATURE;מידת חום !TP_WAVELET_BASLI;Slider !TP_WAVELET_BATYPE;Contrast balance method !TP_WAVELET_CBENAB;Toning and Color Balance -!TP_WAVELET_CBTYPE;Toning and Color Balance !TP_WAVELET_CB_TOOLTIP;For strong values product color-toning by combining it or not with levels decomposition 'toning'\nFor low values you can change the white balance of the background (sky, ...) without changing that of the front plane, generally more contrasted !TP_WAVELET_CCURVE;Local contrast !TP_WAVELET_CH1;Whole chroma range @@ -1732,7 +1799,6 @@ TP_WBALANCE_TEMPERATURE;מידת חום !TP_WAVELET_CHSL;Sliders !TP_WAVELET_CHTYPE;Chrominance method !TP_WAVELET_COLORT;Opacity Red-Green -!TP_WAVELET_COMBOTH;Both !TP_WAVELET_COMPCONT;Contrast !TP_WAVELET_COMPGAMMA;Compression gamma !TP_WAVELET_COMPGAMMA_TOOLTIP;Adjusting the gamma of the residual image allows you to equilibrate the data and histogram. @@ -1744,9 +1810,9 @@ TP_WBALANCE_TEMPERATURE;מידת חום !TP_WAVELET_CONTRA_TOOLTIP;Changes contrast of the residual image. !TP_WAVELET_CONTR;Gamut !TP_WAVELET_CTYPE;Chrominance control -!TP_WAVELET_CURVEEDITOR_CC_TOOLTIP;Modifies local contrast as a function of the original local contrast (absciss)\nLow absciss represents small local contrast (real values about 10..20)\n50% absciss represents average of local contrast (real value about 100..300)\n66% absciss represents standard deviation of local contrast (real value about 300..800)\n100% represents maximum (real value about 3000..8000) +!TP_WAVELET_CURVEEDITOR_CC_TOOLTIP;Modifies local contrast as a function of the original local contrast (abscissa).\nLow abscissa values represent small local contrast (real values about 10..20).\n50% abscissa represents average local contrast (real value about 100..300).\n66% abscissa represents standard deviation of local contrast (real value about 300..800).\n100% abscissa represents maximum local contrast (real value about 3000..8000). !TP_WAVELET_CURVEEDITOR_CH;Contrast levels=f(Hue) -!TP_WAVELET_CURVEEDITOR_CH_TOOLTIP;Modifies each level's contrast as a function oh hue.\nTake care not to overwrite changes made with the Gamut Hue controls.\nThe curve will only have an effect when wavelet contrast level sliders are non-zero. +!TP_WAVELET_CURVEEDITOR_CH_TOOLTIP;Modifies each level's contrast as a function of hue.\nTake care not to overwrite changes made with the Gamut sub-tool's hue controls.\nThe curve will only have an effect when wavelet contrast level sliders are non-zero. !TP_WAVELET_CURVEEDITOR_CL;L !TP_WAVELET_CURVEEDITOR_CL_TOOLTIP;Applies a final contrast luminance curve at the end of the wavelet treatment. !TP_WAVELET_CURVEEDITOR_HH;HH @@ -1809,7 +1875,6 @@ TP_WBALANCE_TEMPERATURE;מידת חום !TP_WAVELET_LEVZERO;Level 1 !TP_WAVELET_LINKEDG;Link with Edge Sharpness' Strength !TP_WAVELET_LIPST;Enhanced algoritm -!TP_WAVELET_LIPST_TOOLTIP;This algorithm uses the proximity of a pixel and eight of its neighbors. If less difference, edges are reinforced. !TP_WAVELET_LOWLIGHT;Shadow luminance range !TP_WAVELET_MEDGREINF;First level !TP_WAVELET_MEDILEV;Edge detection @@ -1856,10 +1921,6 @@ TP_WBALANCE_TEMPERATURE;מידת חום !TP_WAVELET_TILESIZE;Tiling method !TP_WAVELET_TILESLIT;Little tiles !TP_WAVELET_TILES_TOOLTIP;Processing the full image leads to better quality and is the recommended option, while using tiles is a fall-back solution for users with little RAM. Refer to RawPedia for memory requirements. -!TP_WAVELET_TMHIGH;High -!TP_WAVELET_TMLOWHIGH;Low+High -!TP_WAVELET_TMNONE;None -!TP_WAVELET_TMSTD;Standard !TP_WAVELET_TMSTRENGTH;Compression strength !TP_WAVELET_TMSTRENGTH_TOOLTIP;Control the strength of tone mapping or contrast compression of the residual image. When the value is different from 0, the Strength and Gamma sliders of the Tone Mapping tool in the Exposure tab will become grayed out. !TP_WAVELET_TMTYPE;Compression method diff --git a/rtdata/languages/Italiano b/rtdata/languages/Italiano index 253ce2f50..520011c11 100644 --- a/rtdata/languages/Italiano +++ b/rtdata/languages/Italiano @@ -627,7 +627,6 @@ PARTIALPASTE_FLATFIELDBLURTYPE;Flat Field - Modalità di sfocamento PARTIALPASTE_FLATFIELDFILE;File Flat Field PARTIALPASTE_GRADIENT;Filtro Graduato PARTIALPASTE_HSVEQUALIZER;Equalizzatore HSV -PARTIALPASTE_ICMGAMMA;Gamma di uscita PARTIALPASTE_ICMSETTINGS;Impostazioni Gestione Colore PARTIALPASTE_IMPULSEDENOISE;Riduzione Rumore Puntuale PARTIALPASTE_IPTCINFO;Informazioni IPTC @@ -1542,6 +1541,26 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !HISTORY_MSG_404;W - ES - Base amplification !HISTORY_MSG_405;W - Denoise - Level 4 !HISTORY_MSG_406;W - ES - Neighboring pixels +!HISTORY_MSG_407;Retinex - Method +!HISTORY_MSG_408;Retinex - Neighboring +!HISTORY_MSG_409;Retinex - Gain +!HISTORY_MSG_410;Retinex - Offset +!HISTORY_MSG_411;Retinex - Strength +!HISTORY_MSG_412;Retinex - Scales +!HISTORY_MSG_413;Retinex - Variance +!HISTORY_MSG_414;Retinex - Histogram - Lab +!HISTORY_MSG_415;Retinex - Transmission +!HISTORY_MSG_416;Retinex +!HISTORY_MSG_417;Retinex - Transmission median +!HISTORY_MSG_418;Retinex - Threshold +!HISTORY_MSG_419;Retinex - Color space +!HISTORY_MSG_420;Retinex - Histogram - HSL +!HISTORY_MSG_421;Retinex - Gamma +!HISTORY_MSG_422;Retinex - Gamma +!HISTORY_MSG_423;Retinex - Gamma slope +!HISTORY_MSG_424;Retinex - HL threshold +!HISTORY_MSG_425;Retinex - Log base +!HISTORY_MSG_426;Retinex - Hue equalizer !MAIN_TAB_INSPECT; Inspect !MAIN_TAB_WAVELET;Wavelet !MAIN_TAB_WAVELET_TOOLTIP;Shortcut: Alt-w @@ -1551,6 +1570,7 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !PARTIALPASTE_FLATFIELDCLIPCONTROL;Flat-field clip control !PARTIALPASTE_PREPROCESS_DEADPIXFILT;Dead pixel filter !PARTIALPASTE_PREPROCESS_HOTPIXFILT;Hot pixel filter +!PARTIALPASTE_RETINEX;Retinex !PARTIALPASTE_WAVELETGROUP;Wavelet Levels !PREFERENCES_AUTLISLOW;Low !PREFERENCES_AUTLISMAX;Max - Average of all tiles @@ -1661,7 +1681,7 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !TP_DIRPYRDENOISE_C2TYPE_TOOLTIP;Manual\nActs on the full image.\nYou control the noise reduction settings manually.\n\nAutomatic global\nActs on the full image.\n9 zones are used to calculate a global chrominance noise reduction setting.\n\nPreview\nActs on the whole image.\nThe part of the image visible in the preview is used to calculate global chrominance noise reduction settings. !TP_DIRPYRDENOISE_CCCURVE;Chrominance curve !TP_DIRPYRDENOISE_CHROMAFR;Chrominance -!TP_DIRPYRDENOISE_CTYPE;Auto method +!TP_DIRPYRDENOISE_CTYPE;Method !TP_DIRPYRDENOISE_CTYPE_TOOLTIP;Manual\nActs on the full image.\nYou control the noise reduction settings manually.\n\nAutomatic global\nActs on the full image.\n9 zones are used to calculate a global chrominance noise reduction setting.\n\nAutomatic multi-zones\nNo preview - works only during saving, but using the "Preview" method by matching the tile size and center to the preview size and center you can get an idea of the expected results.\nThe image is divided into tiles (about 10 to 70 depending on image size) and each tile receives its own chrominance noise reduction settings.\n\nPreview\nActs on the whole image.\nThe part of the image visible in the preview is used to calculate global chrominance noise reduction settings. !TP_DIRPYRDENOISE_CURVEEDITOR_CC;Chroma !TP_DIRPYRDENOISE_CURVEEDITOR_CC_TOOLTIP;Increase (multiply) the value of all chrominance sliders.\nThis curve lets you adjust the strength of chromatic noise reduction as a function of chromaticity, for instance to increase the action in areas of low saturation and to decrease it in those of high saturation. @@ -1737,6 +1757,54 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !TP_RAW_SENSOR_BAYER_LABEL;Sensor with Bayer Matrix !TP_RAW_SENSOR_XTRANS_DMETHOD_TOOLTIP;3-pass gives best results (recommended for low ISO images).\n1-pass is almost undistinguishable from 3-pass for high ISO images and is faster. !TP_RAW_SENSOR_XTRANS_LABEL;Sensor with X-Trans Matrix +!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL +!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b* +!TP_RETINEX_CONTEDIT_LH;Hue equalizer +!TP_RETINEX_CURVEEDITOR_CD;L=f(L) +!TP_RETINEX_CURVEEDITOR_CD_TOOLTIP;Luminance according to luminance L=f(L)\nCorrect raw data to reduce halos and artifacts. +!TP_RETINEX_CURVEEDITOR_LH;Strength=f(H) +!TP_RETINEX_CURVEEDITOR_LH_TOOLTIP;Strength according to hue Strength=f(H)\nThis curve also acts on chroma when using the "Highlight" retinex method. +!TP_RETINEX_GAIN;Gain +!TP_RETINEX_GAIN_TOOLTIP;Acts on the transmission in combination with the offset. This is very different from the others settings. Used for black or white pixels, and to help balance the histogram. +!TP_RETINEX_GAMMA;Free gamma +!TP_RETINEX_GAMMA;Gamma +!TP_RETINEX_GAMMA_FREE;Free +!TP_RETINEX_GAMMA_HIGH;High +!TP_RETINEX_GAMMA_LOW;Low +!TP_RETINEX_GAMMA_MID;Middle +!TP_RETINEX_GAMMA_NONE;None +!TP_RETINEX_GAMMA_TOOLTIP;Restore tones by applying gamma before and after Retinex. Different from Retinex curves or others curves (Lab, Exposure, etc.). +!TP_RETINEX_HIGHLIGHT;Highlight threshold +!TP_RETINEX_HIGHLIGHT_TOOLTIP;Increase action of High algorithm.\nMay require you to re-adjust "Neighboring pixels" and to increase the "White-point correction" in the Raw tab -> Raw White Points tool. +!TP_RETINEX_HIGHLIG;Highlight +!TP_RETINEX_HIGH;High +!TP_RETINEX_HSLSPACE_LIN;HSL-Linear +!TP_RETINEX_HSLSPACE_LOG;HSL-Logarithmic +!TP_RETINEX_LABEL;Retinex +!TP_RETINEX_LABSPACE;L*a*b* +!TP_RETINEX_LOW;Low +!TP_RETINEX_MEDIAN;Transmission median filter +!TP_RETINEX_METHOD;Method +!TP_RETINEX_METHOD_TOOLTIP;Low = Reinforce low light,\nUniform = Equalize action,\nHigh = Reinforce high light,\nHighlight = Remove magenta in highlights. +!TP_RETINEX_MLABEL;Restored haze-free Min=%1 Max=%2 +!TP_RETINEX_MLABEL_TOOLTIP;Should be near min=0 max=32768\nRestored image with no mixture. +!TP_RETINEX_NEIGHBOR;Neighboring pixels +!TP_RETINEX_NEUTRAL;Reset +!TP_RETINEX_NEUTRAL_TIP;Reset all sliders and curves to their default values. +!TP_RETINEX_OFFSET;Offset +!TP_RETINEX_SETTINGS;Settings +!TP_RETINEX_SLOPE;Free gamma slope +!TP_RETINEX_STRENGTH;Strength +!TP_RETINEX_THRESHOLD;Threshold +!TP_RETINEX_THRESHOLD_TOOLTIP;Limits in/out.\nIn = image source,\nOut = image gauss. +!TP_RETINEX_TLABEL2;TM Tm=%1 TM=%2 +!TP_RETINEX_TLABEL;TM Min=%1 Max=%2 Mean=%3 Sigma=%4 +!TP_RETINEX_TLABEL_TOOLTIP;Transmission map result.\nMin and Max are used by Variance.\nMean and Sigma\nTm=Min TM=Max of transmission map. +!TP_RETINEX_TRANSMISSION;Transmission map +!TP_RETINEX_TRANSMISSION_TOOLTIP;Transmission according to transmission.\nAbscissa: transmission from negative values (min), mean, and positives values (max).\nOrdinate: amplification or reduction. +!TP_RETINEX_UNIFORM;Uniform +!TP_RETINEX_VARIANCE;Variance +!TP_RETINEX_VARIANCE_TOOLTIP;Low variance increase local contrast and saturation, but can lead to artifacts. !TP_WAVELET_1;Level 1 !TP_WAVELET_2;Level 2 !TP_WAVELET_3;Level 3 @@ -1761,7 +1829,6 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !TP_WAVELET_BASLI;Slider !TP_WAVELET_BATYPE;Contrast balance method !TP_WAVELET_CBENAB;Toning and Color Balance -!TP_WAVELET_CBTYPE;Toning and Color Balance !TP_WAVELET_CB_TOOLTIP;For strong values product color-toning by combining it or not with levels decomposition 'toning'\nFor low values you can change the white balance of the background (sky, ...) without changing that of the front plane, generally more contrasted !TP_WAVELET_CCURVE;Local contrast !TP_WAVELET_CH1;Whole chroma range @@ -1775,7 +1842,6 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !TP_WAVELET_CHSL;Sliders !TP_WAVELET_CHTYPE;Chrominance method !TP_WAVELET_COLORT;Opacity Red-Green -!TP_WAVELET_COMBOTH;Both !TP_WAVELET_COMPCONT;Contrast !TP_WAVELET_COMPGAMMA;Compression gamma !TP_WAVELET_COMPGAMMA_TOOLTIP;Adjusting the gamma of the residual image allows you to equilibrate the data and histogram. @@ -1787,9 +1853,9 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !TP_WAVELET_CONTRA_TOOLTIP;Changes contrast of the residual image. !TP_WAVELET_CONTR;Gamut !TP_WAVELET_CTYPE;Chrominance control -!TP_WAVELET_CURVEEDITOR_CC_TOOLTIP;Modifies local contrast as a function of the original local contrast (absciss)\nLow absciss represents small local contrast (real values about 10..20)\n50% absciss represents average of local contrast (real value about 100..300)\n66% absciss represents standard deviation of local contrast (real value about 300..800)\n100% represents maximum (real value about 3000..8000) +!TP_WAVELET_CURVEEDITOR_CC_TOOLTIP;Modifies local contrast as a function of the original local contrast (abscissa).\nLow abscissa values represent small local contrast (real values about 10..20).\n50% abscissa represents average local contrast (real value about 100..300).\n66% abscissa represents standard deviation of local contrast (real value about 300..800).\n100% abscissa represents maximum local contrast (real value about 3000..8000). !TP_WAVELET_CURVEEDITOR_CH;Contrast levels=f(Hue) -!TP_WAVELET_CURVEEDITOR_CH_TOOLTIP;Modifies each level's contrast as a function oh hue.\nTake care not to overwrite changes made with the Gamut Hue controls.\nThe curve will only have an effect when wavelet contrast level sliders are non-zero. +!TP_WAVELET_CURVEEDITOR_CH_TOOLTIP;Modifies each level's contrast as a function of hue.\nTake care not to overwrite changes made with the Gamut sub-tool's hue controls.\nThe curve will only have an effect when wavelet contrast level sliders are non-zero. !TP_WAVELET_CURVEEDITOR_CL;L !TP_WAVELET_CURVEEDITOR_CL_TOOLTIP;Applies a final contrast luminance curve at the end of the wavelet treatment. !TP_WAVELET_CURVEEDITOR_HH;HH @@ -1852,7 +1918,6 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !TP_WAVELET_LEVZERO;Level 1 !TP_WAVELET_LINKEDG;Link with Edge Sharpness' Strength !TP_WAVELET_LIPST;Enhanced algoritm -!TP_WAVELET_LIPST_TOOLTIP;This algorithm uses the proximity of a pixel and eight of its neighbors. If less difference, edges are reinforced. !TP_WAVELET_LOWLIGHT;Shadow luminance range !TP_WAVELET_MEDGREINF;First level !TP_WAVELET_MEDILEV;Edge detection @@ -1899,10 +1964,6 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !TP_WAVELET_TILESIZE;Tiling method !TP_WAVELET_TILESLIT;Little tiles !TP_WAVELET_TILES_TOOLTIP;Processing the full image leads to better quality and is the recommended option, while using tiles is a fall-back solution for users with little RAM. Refer to RawPedia for memory requirements. -!TP_WAVELET_TMHIGH;High -!TP_WAVELET_TMLOWHIGH;Low+High -!TP_WAVELET_TMNONE;None -!TP_WAVELET_TMSTD;Standard !TP_WAVELET_TMSTRENGTH;Compression strength !TP_WAVELET_TMSTRENGTH_TOOLTIP;Control the strength of tone mapping or contrast compression of the residual image. When the value is different from 0, the Strength and Gamma sliders of the Tone Mapping tool in the Exposure tab will become grayed out. !TP_WAVELET_TMTYPE;Compression method diff --git a/rtdata/languages/Japanese b/rtdata/languages/Japanese index 206228497..55a737344 100644 --- a/rtdata/languages/Japanese +++ b/rtdata/languages/Japanese @@ -829,7 +829,6 @@ PARTIALPASTE_FLATFIELDCLIPCONTROL;フラットフィールド クリップコ PARTIALPASTE_FLATFIELDFILE;フラットフィールド ファイル PARTIALPASTE_GRADIENT;グラデーションフィルター PARTIALPASTE_HSVEQUALIZER;HSV イコライザ -PARTIALPASTE_ICMGAMMA;出力ガンマ PARTIALPASTE_ICMSETTINGS;ICM 設定 PARTIALPASTE_IMPULSEDENOISE;インパルス・ノイズ低減 PARTIALPASTE_IPTCINFO;IPTC 情報 @@ -1733,7 +1732,6 @@ TP_WAVELET_BANONE;なし TP_WAVELET_BASLI;スライダー TP_WAVELET_BATYPE;バランス方式 TP_WAVELET_CBENAB;カラートーンとカラーバランス -TP_WAVELET_CBTYPE;カラートーンとカラーバランス TP_WAVELET_CB_TOOLTIP;高い値は、’カラートーン’と併用するか、或いはカラートーンは使わないで単独で使います。\n低い値の場合は前景の色合いを変えずに背景(sky, ...) のホワイトバランスを変えるような効果を得られます。一般的にはコントラストが高くなる印象があります。 TP_WAVELET_CCURVE;ローカルコントラスト TP_WAVELET_CH1;全ての色 @@ -1747,7 +1745,6 @@ TP_WAVELET_CHR_TOOLTIP;色度を”コントラストレベル”と”色度と TP_WAVELET_CHSL;スライダー TP_WAVELET_CHTYPE;調整の方法 TP_WAVELET_COLORT;レッド/グリーンの不透明度 -TP_WAVELET_COMBOTH;両方 TP_WAVELET_COMPCONT;コントラスト TP_WAVELET_COMPGAMMA;ガンマの圧縮 TP_WAVELET_COMPGAMMA_TOOLTIP;残差画像のガンマを調整することで、画像データとヒストグラムの均衡を図ります。 @@ -1824,7 +1821,6 @@ TP_WAVELET_LEVTWO;レベル3 TP_WAVELET_LEVZERO;レベル1 TP_WAVELET_LINKEDG;エッジのシャープネスの強さとリンク TP_WAVELET_LIPST;高度なアルゴリズム -TP_WAVELET_LIPST_TOOLTIP;リプシッツ連続というアルゴリズムを使います。処理時間とメモリー消費量は増えますが、エッジ検出の精度は上がります TP_WAVELET_LOWLIGHT;シャドウの輝度範囲 TP_WAVELET_MEDGREINF;最初のレベル TP_WAVELET_MEDILEV;エッジ検出 @@ -1871,10 +1867,6 @@ TP_WAVELET_TILESFULL;画像全体 TP_WAVELET_TILESIZE;タイルのサイズ TP_WAVELET_TILESLIT;小さいタイル TP_WAVELET_TILES_TOOLTIP;画像全体を処理する方が良い結果をもたらすので、推奨される選択です。タイルによる処理はRAMの容量が小さいユーザー向けです。必要なメモリー容量に関してはRawPediaを参照して下さい。 -TP_WAVELET_TMHIGH;高 -TP_WAVELET_TMLOWHIGH;低と高に偏重 -TP_WAVELET_TMNONE;なし -TP_WAVELET_TMSTD;標準 TP_WAVELET_TMSTRENGTH;残差の効力を圧縮 TP_WAVELET_TMSTRENGTH_TOOLTIP;トーンマッピングの強さや残差画像のコントラストの圧縮を加減します。値が0以外の場合、露光補正パネルのトーンマッピングでは、強さとガンマのスライダー無効となります TP_WAVELET_TMTYPE;圧縮の方法 @@ -1933,3 +1925,76 @@ ZOOMPANEL_ZOOMFITSCREEN;画像全体を画面に合わせる\nショートカッ ZOOMPANEL_ZOOMIN;ズームイン\nショートカット: + ZOOMPANEL_ZOOMOUT;ズームアウト\nショートカット: - +!!!!!!!!!!!!!!!!!!!!!!!!! +! Untranslated keys follow; remove the ! prefix after an entry is translated. +!!!!!!!!!!!!!!!!!!!!!!!!! + +!HISTORY_MSG_407;Retinex - Method +!HISTORY_MSG_408;Retinex - Neighboring +!HISTORY_MSG_409;Retinex - Gain +!HISTORY_MSG_410;Retinex - Offset +!HISTORY_MSG_411;Retinex - Strength +!HISTORY_MSG_412;Retinex - Scales +!HISTORY_MSG_413;Retinex - Variance +!HISTORY_MSG_414;Retinex - Histogram - Lab +!HISTORY_MSG_415;Retinex - Transmission +!HISTORY_MSG_416;Retinex +!HISTORY_MSG_417;Retinex - Transmission median +!HISTORY_MSG_418;Retinex - Threshold +!HISTORY_MSG_419;Retinex - Color space +!HISTORY_MSG_420;Retinex - Histogram - HSL +!HISTORY_MSG_421;Retinex - Gamma +!HISTORY_MSG_422;Retinex - Gamma +!HISTORY_MSG_423;Retinex - Gamma slope +!HISTORY_MSG_424;Retinex - HL threshold +!HISTORY_MSG_425;Retinex - Log base +!HISTORY_MSG_426;Retinex - Hue equalizer +!PARTIALPASTE_RETINEX;Retinex +!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL +!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b* +!TP_RETINEX_CONTEDIT_LH;Hue equalizer +!TP_RETINEX_CURVEEDITOR_CD;L=f(L) +!TP_RETINEX_CURVEEDITOR_CD_TOOLTIP;Luminance according to luminance L=f(L)\nCorrect raw data to reduce halos and artifacts. +!TP_RETINEX_CURVEEDITOR_LH;Strength=f(H) +!TP_RETINEX_CURVEEDITOR_LH_TOOLTIP;Strength according to hue Strength=f(H)\nThis curve also acts on chroma when using the "Highlight" retinex method. +!TP_RETINEX_GAIN;Gain +!TP_RETINEX_GAIN_TOOLTIP;Acts on the transmission in combination with the offset. This is very different from the others settings. Used for black or white pixels, and to help balance the histogram. +!TP_RETINEX_GAMMA;Free gamma +!TP_RETINEX_GAMMA;Gamma +!TP_RETINEX_GAMMA_FREE;Free +!TP_RETINEX_GAMMA_HIGH;High +!TP_RETINEX_GAMMA_LOW;Low +!TP_RETINEX_GAMMA_MID;Middle +!TP_RETINEX_GAMMA_NONE;None +!TP_RETINEX_GAMMA_TOOLTIP;Restore tones by applying gamma before and after Retinex. Different from Retinex curves or others curves (Lab, Exposure, etc.). +!TP_RETINEX_HIGHLIGHT;Highlight threshold +!TP_RETINEX_HIGHLIGHT_TOOLTIP;Increase action of High algorithm.\nMay require you to re-adjust "Neighboring pixels" and to increase the "White-point correction" in the Raw tab -> Raw White Points tool. +!TP_RETINEX_HIGHLIG;Highlight +!TP_RETINEX_HIGH;High +!TP_RETINEX_HSLSPACE_LIN;HSL-Linear +!TP_RETINEX_HSLSPACE_LOG;HSL-Logarithmic +!TP_RETINEX_LABEL;Retinex +!TP_RETINEX_LABSPACE;L*a*b* +!TP_RETINEX_LOW;Low +!TP_RETINEX_MEDIAN;Transmission median filter +!TP_RETINEX_METHOD;Method +!TP_RETINEX_METHOD_TOOLTIP;Low = Reinforce low light,\nUniform = Equalize action,\nHigh = Reinforce high light,\nHighlight = Remove magenta in highlights. +!TP_RETINEX_MLABEL;Restored haze-free Min=%1 Max=%2 +!TP_RETINEX_MLABEL_TOOLTIP;Should be near min=0 max=32768\nRestored image with no mixture. +!TP_RETINEX_NEIGHBOR;Neighboring pixels +!TP_RETINEX_NEUTRAL;Reset +!TP_RETINEX_NEUTRAL_TIP;Reset all sliders and curves to their default values. +!TP_RETINEX_OFFSET;Offset +!TP_RETINEX_SETTINGS;Settings +!TP_RETINEX_SLOPE;Free gamma slope +!TP_RETINEX_STRENGTH;Strength +!TP_RETINEX_THRESHOLD;Threshold +!TP_RETINEX_THRESHOLD_TOOLTIP;Limits in/out.\nIn = image source,\nOut = image gauss. +!TP_RETINEX_TLABEL2;TM Tm=%1 TM=%2 +!TP_RETINEX_TLABEL;TM Min=%1 Max=%2 Mean=%3 Sigma=%4 +!TP_RETINEX_TLABEL_TOOLTIP;Transmission map result.\nMin and Max are used by Variance.\nMean and Sigma\nTm=Min TM=Max of transmission map. +!TP_RETINEX_TRANSMISSION;Transmission map +!TP_RETINEX_TRANSMISSION_TOOLTIP;Transmission according to transmission.\nAbscissa: transmission from negative values (min), mean, and positives values (max).\nOrdinate: amplification or reduction. +!TP_RETINEX_UNIFORM;Uniform +!TP_RETINEX_VARIANCE;Variance +!TP_RETINEX_VARIANCE_TOOLTIP;Low variance increase local contrast and saturation, but can lead to artifacts. diff --git a/rtdata/languages/Latvian b/rtdata/languages/Latvian index 934ded58e..67b4580ce 100644 --- a/rtdata/languages/Latvian +++ b/rtdata/languages/Latvian @@ -918,6 +918,26 @@ TP_WBALANCE_TEMPERATURE;Temperatūra !HISTORY_MSG_404;W - ES - Base amplification !HISTORY_MSG_405;W - Denoise - Level 4 !HISTORY_MSG_406;W - ES - Neighboring pixels +!HISTORY_MSG_407;Retinex - Method +!HISTORY_MSG_408;Retinex - Neighboring +!HISTORY_MSG_409;Retinex - Gain +!HISTORY_MSG_410;Retinex - Offset +!HISTORY_MSG_411;Retinex - Strength +!HISTORY_MSG_412;Retinex - Scales +!HISTORY_MSG_413;Retinex - Variance +!HISTORY_MSG_414;Retinex - Histogram - Lab +!HISTORY_MSG_415;Retinex - Transmission +!HISTORY_MSG_416;Retinex +!HISTORY_MSG_417;Retinex - Transmission median +!HISTORY_MSG_418;Retinex - Threshold +!HISTORY_MSG_419;Retinex - Color space +!HISTORY_MSG_420;Retinex - Histogram - HSL +!HISTORY_MSG_421;Retinex - Gamma +!HISTORY_MSG_422;Retinex - Gamma +!HISTORY_MSG_423;Retinex - Gamma slope +!HISTORY_MSG_424;Retinex - HL threshold +!HISTORY_MSG_425;Retinex - Log base +!HISTORY_MSG_426;Retinex - Hue equalizer !HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s !MAIN_BUTTON_FULLSCREEN;Fullscreen !MAIN_BUTTON_NAVNEXT_TOOLTIP;Navigate to the next image relative to image opened in the Editor.\nShortcut: Shift-F4\n\nTo navigate to the next image relative to the currently selected thumbnail in the File Browser or Filmstrip:\nShortcut: F4 @@ -1000,7 +1020,6 @@ TP_WBALANCE_TEMPERATURE;Temperatūra !PARTIALPASTE_FLATFIELDFILE;Flat-field file !PARTIALPASTE_GRADIENT;Graduated filter !PARTIALPASTE_HSVEQUALIZER;HSV equalizer -!PARTIALPASTE_ICMGAMMA;Output gamma !PARTIALPASTE_IMPULSEDENOISE;Impulse noise reduction !PARTIALPASTE_LABCURVE;L*a*b* adjustments !PARTIALPASTE_LENSPROFILE;Lens correction profile @@ -1022,6 +1041,7 @@ TP_WBALANCE_TEMPERATURE;Temperatūra !PARTIALPASTE_RAW_DMETHOD;Demosaic method !PARTIALPASTE_RAW_FALSECOLOR;False color suppression !PARTIALPASTE_RAW_LMMSEITERATIONS;LMMSE enhancement steps +!PARTIALPASTE_RETINEX;Retinex !PARTIALPASTE_RGBCURVES;RGB curves !PARTIALPASTE_SHARPENEDGE;Edges !PARTIALPASTE_SHARPENMICRO;Microcontrast @@ -1397,7 +1417,7 @@ TP_WBALANCE_TEMPERATURE;Temperatūra !TP_DIRPYRDENOISE_CCCURVE;Chrominance curve !TP_DIRPYRDENOISE_CHROMAFR;Chrominance !TP_DIRPYRDENOISE_CHROMA;Chrominance - Master -!TP_DIRPYRDENOISE_CTYPE;Auto method +!TP_DIRPYRDENOISE_CTYPE;Method !TP_DIRPYRDENOISE_CTYPE_TOOLTIP;Manual\nActs on the full image.\nYou control the noise reduction settings manually.\n\nAutomatic global\nActs on the full image.\n9 zones are used to calculate a global chrominance noise reduction setting.\n\nAutomatic multi-zones\nNo preview - works only during saving, but using the "Preview" method by matching the tile size and center to the preview size and center you can get an idea of the expected results.\nThe image is divided into tiles (about 10 to 70 depending on image size) and each tile receives its own chrominance noise reduction settings.\n\nPreview\nActs on the whole image.\nThe part of the image visible in the preview is used to calculate global chrominance noise reduction settings. !TP_DIRPYRDENOISE_CURVEEDITOR_CC;Chroma !TP_DIRPYRDENOISE_CURVEEDITOR_CC_TOOLTIP;Increase (multiply) the value of all chrominance sliders.\nThis curve lets you adjust the strength of chromatic noise reduction as a function of chromaticity, for instance to increase the action in areas of low saturation and to decrease it in those of high saturation. @@ -1655,6 +1675,54 @@ TP_WBALANCE_TEMPERATURE;Temperatūra !TP_RESIZE_LANCZOS;Lanczos !TP_RESIZE_SPECIFY;Specify: !TP_RESIZE_WIDTH;Width +!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL +!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b* +!TP_RETINEX_CONTEDIT_LH;Hue equalizer +!TP_RETINEX_CURVEEDITOR_CD;L=f(L) +!TP_RETINEX_CURVEEDITOR_CD_TOOLTIP;Luminance according to luminance L=f(L)\nCorrect raw data to reduce halos and artifacts. +!TP_RETINEX_CURVEEDITOR_LH;Strength=f(H) +!TP_RETINEX_CURVEEDITOR_LH_TOOLTIP;Strength according to hue Strength=f(H)\nThis curve also acts on chroma when using the "Highlight" retinex method. +!TP_RETINEX_GAIN;Gain +!TP_RETINEX_GAIN_TOOLTIP;Acts on the transmission in combination with the offset. This is very different from the others settings. Used for black or white pixels, and to help balance the histogram. +!TP_RETINEX_GAMMA;Free gamma +!TP_RETINEX_GAMMA;Gamma +!TP_RETINEX_GAMMA_FREE;Free +!TP_RETINEX_GAMMA_HIGH;High +!TP_RETINEX_GAMMA_LOW;Low +!TP_RETINEX_GAMMA_MID;Middle +!TP_RETINEX_GAMMA_NONE;None +!TP_RETINEX_GAMMA_TOOLTIP;Restore tones by applying gamma before and after Retinex. Different from Retinex curves or others curves (Lab, Exposure, etc.). +!TP_RETINEX_HIGHLIGHT;Highlight threshold +!TP_RETINEX_HIGHLIGHT_TOOLTIP;Increase action of High algorithm.\nMay require you to re-adjust "Neighboring pixels" and to increase the "White-point correction" in the Raw tab -> Raw White Points tool. +!TP_RETINEX_HIGHLIG;Highlight +!TP_RETINEX_HIGH;High +!TP_RETINEX_HSLSPACE_LIN;HSL-Linear +!TP_RETINEX_HSLSPACE_LOG;HSL-Logarithmic +!TP_RETINEX_LABEL;Retinex +!TP_RETINEX_LABSPACE;L*a*b* +!TP_RETINEX_LOW;Low +!TP_RETINEX_MEDIAN;Transmission median filter +!TP_RETINEX_METHOD;Method +!TP_RETINEX_METHOD_TOOLTIP;Low = Reinforce low light,\nUniform = Equalize action,\nHigh = Reinforce high light,\nHighlight = Remove magenta in highlights. +!TP_RETINEX_MLABEL;Restored haze-free Min=%1 Max=%2 +!TP_RETINEX_MLABEL_TOOLTIP;Should be near min=0 max=32768\nRestored image with no mixture. +!TP_RETINEX_NEIGHBOR;Neighboring pixels +!TP_RETINEX_NEUTRAL;Reset +!TP_RETINEX_NEUTRAL_TIP;Reset all sliders and curves to their default values. +!TP_RETINEX_OFFSET;Offset +!TP_RETINEX_SETTINGS;Settings +!TP_RETINEX_SLOPE;Free gamma slope +!TP_RETINEX_STRENGTH;Strength +!TP_RETINEX_THRESHOLD;Threshold +!TP_RETINEX_THRESHOLD_TOOLTIP;Limits in/out.\nIn = image source,\nOut = image gauss. +!TP_RETINEX_TLABEL2;TM Tm=%1 TM=%2 +!TP_RETINEX_TLABEL;TM Min=%1 Max=%2 Mean=%3 Sigma=%4 +!TP_RETINEX_TLABEL_TOOLTIP;Transmission map result.\nMin and Max are used by Variance.\nMean and Sigma\nTm=Min TM=Max of transmission map. +!TP_RETINEX_TRANSMISSION;Transmission map +!TP_RETINEX_TRANSMISSION_TOOLTIP;Transmission according to transmission.\nAbscissa: transmission from negative values (min), mean, and positives values (max).\nOrdinate: amplification or reduction. +!TP_RETINEX_UNIFORM;Uniform +!TP_RETINEX_VARIANCE;Variance +!TP_RETINEX_VARIANCE_TOOLTIP;Low variance increase local contrast and saturation, but can lead to artifacts. !TP_RGBCURVES_BLUE;B !TP_RGBCURVES_CHANNEL;Channel !TP_RGBCURVES_GREEN;G @@ -1718,7 +1786,6 @@ TP_WBALANCE_TEMPERATURE;Temperatūra !TP_WAVELET_BASLI;Slider !TP_WAVELET_BATYPE;Contrast balance method !TP_WAVELET_CBENAB;Toning and Color Balance -!TP_WAVELET_CBTYPE;Toning and Color Balance !TP_WAVELET_CB_TOOLTIP;For strong values product color-toning by combining it or not with levels decomposition 'toning'\nFor low values you can change the white balance of the background (sky, ...) without changing that of the front plane, generally more contrasted !TP_WAVELET_CCURVE;Local contrast !TP_WAVELET_CH1;Whole chroma range @@ -1732,7 +1799,6 @@ TP_WBALANCE_TEMPERATURE;Temperatūra !TP_WAVELET_CHSL;Sliders !TP_WAVELET_CHTYPE;Chrominance method !TP_WAVELET_COLORT;Opacity Red-Green -!TP_WAVELET_COMBOTH;Both !TP_WAVELET_COMPCONT;Contrast !TP_WAVELET_COMPGAMMA;Compression gamma !TP_WAVELET_COMPGAMMA_TOOLTIP;Adjusting the gamma of the residual image allows you to equilibrate the data and histogram. @@ -1744,9 +1810,9 @@ TP_WBALANCE_TEMPERATURE;Temperatūra !TP_WAVELET_CONTRA_TOOLTIP;Changes contrast of the residual image. !TP_WAVELET_CONTR;Gamut !TP_WAVELET_CTYPE;Chrominance control -!TP_WAVELET_CURVEEDITOR_CC_TOOLTIP;Modifies local contrast as a function of the original local contrast (absciss)\nLow absciss represents small local contrast (real values about 10..20)\n50% absciss represents average of local contrast (real value about 100..300)\n66% absciss represents standard deviation of local contrast (real value about 300..800)\n100% represents maximum (real value about 3000..8000) +!TP_WAVELET_CURVEEDITOR_CC_TOOLTIP;Modifies local contrast as a function of the original local contrast (abscissa).\nLow abscissa values represent small local contrast (real values about 10..20).\n50% abscissa represents average local contrast (real value about 100..300).\n66% abscissa represents standard deviation of local contrast (real value about 300..800).\n100% abscissa represents maximum local contrast (real value about 3000..8000). !TP_WAVELET_CURVEEDITOR_CH;Contrast levels=f(Hue) -!TP_WAVELET_CURVEEDITOR_CH_TOOLTIP;Modifies each level's contrast as a function oh hue.\nTake care not to overwrite changes made with the Gamut Hue controls.\nThe curve will only have an effect when wavelet contrast level sliders are non-zero. +!TP_WAVELET_CURVEEDITOR_CH_TOOLTIP;Modifies each level's contrast as a function of hue.\nTake care not to overwrite changes made with the Gamut sub-tool's hue controls.\nThe curve will only have an effect when wavelet contrast level sliders are non-zero. !TP_WAVELET_CURVEEDITOR_CL;L !TP_WAVELET_CURVEEDITOR_CL_TOOLTIP;Applies a final contrast luminance curve at the end of the wavelet treatment. !TP_WAVELET_CURVEEDITOR_HH;HH @@ -1809,7 +1875,6 @@ TP_WBALANCE_TEMPERATURE;Temperatūra !TP_WAVELET_LEVZERO;Level 1 !TP_WAVELET_LINKEDG;Link with Edge Sharpness' Strength !TP_WAVELET_LIPST;Enhanced algoritm -!TP_WAVELET_LIPST_TOOLTIP;This algorithm uses the proximity of a pixel and eight of its neighbors. If less difference, edges are reinforced. !TP_WAVELET_LOWLIGHT;Shadow luminance range !TP_WAVELET_MEDGREINF;First level !TP_WAVELET_MEDILEV;Edge detection @@ -1856,10 +1921,6 @@ TP_WBALANCE_TEMPERATURE;Temperatūra !TP_WAVELET_TILESIZE;Tiling method !TP_WAVELET_TILESLIT;Little tiles !TP_WAVELET_TILES_TOOLTIP;Processing the full image leads to better quality and is the recommended option, while using tiles is a fall-back solution for users with little RAM. Refer to RawPedia for memory requirements. -!TP_WAVELET_TMHIGH;High -!TP_WAVELET_TMLOWHIGH;Low+High -!TP_WAVELET_TMNONE;None -!TP_WAVELET_TMSTD;Standard !TP_WAVELET_TMSTRENGTH;Compression strength !TP_WAVELET_TMSTRENGTH_TOOLTIP;Control the strength of tone mapping or contrast compression of the residual image. When the value is different from 0, the Strength and Gamma sliders of the Tone Mapping tool in the Exposure tab will become grayed out. !TP_WAVELET_TMTYPE;Compression method diff --git a/rtdata/languages/Magyar b/rtdata/languages/Magyar index e2390022a..d2073c56f 100644 --- a/rtdata/languages/Magyar +++ b/rtdata/languages/Magyar @@ -477,7 +477,6 @@ PARTIALPASTE_FLATFIELDBLURRADIUS;FF elmosás sugara PARTIALPASTE_FLATFIELDBLURTYPE;FF elmosás típusa PARTIALPASTE_FLATFIELDFILE;Flat field (FF) állomány PARTIALPASTE_HSVEQUALIZER;HSV Equalizer -PARTIALPASTE_ICMGAMMA;Kimeneti gamma PARTIALPASTE_ICMSETTINGS;ICM beállítások PARTIALPASTE_IMPULSEDENOISE;Impulse zajszűrés PARTIALPASTE_IPTCINFO;IPTC információk @@ -1202,6 +1201,26 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !HISTORY_MSG_404;W - ES - Base amplification !HISTORY_MSG_405;W - Denoise - Level 4 !HISTORY_MSG_406;W - ES - Neighboring pixels +!HISTORY_MSG_407;Retinex - Method +!HISTORY_MSG_408;Retinex - Neighboring +!HISTORY_MSG_409;Retinex - Gain +!HISTORY_MSG_410;Retinex - Offset +!HISTORY_MSG_411;Retinex - Strength +!HISTORY_MSG_412;Retinex - Scales +!HISTORY_MSG_413;Retinex - Variance +!HISTORY_MSG_414;Retinex - Histogram - Lab +!HISTORY_MSG_415;Retinex - Transmission +!HISTORY_MSG_416;Retinex +!HISTORY_MSG_417;Retinex - Transmission median +!HISTORY_MSG_418;Retinex - Threshold +!HISTORY_MSG_419;Retinex - Color space +!HISTORY_MSG_420;Retinex - Histogram - HSL +!HISTORY_MSG_421;Retinex - Gamma +!HISTORY_MSG_422;Retinex - Gamma +!HISTORY_MSG_423;Retinex - Gamma slope +!HISTORY_MSG_424;Retinex - HL threshold +!HISTORY_MSG_425;Retinex - Log base +!HISTORY_MSG_426;Retinex - Hue equalizer !HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s !MAIN_BUTTON_NAVNEXT_TOOLTIP;Navigate to the next image relative to image opened in the Editor.\nShortcut: Shift-F4\n\nTo navigate to the next image relative to the currently selected thumbnail in the File Browser or Filmstrip:\nShortcut: F4 !MAIN_BUTTON_NAVPREV_TOOLTIP;Navigate to the previous image relative to image opened in the Editor.\nShortcut: Shift-F3\n\nTo navigate to the previous image relative to the currently selected thumbnail in the File Browser or Filmstrip:\nShortcut: F3 @@ -1242,6 +1261,7 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !PARTIALPASTE_PREPROCESS_DEADPIXFILT;Dead pixel filter !PARTIALPASTE_PREPROCESS_HOTPIXFILT;Hot pixel filter !PARTIALPASTE_RAW_LMMSEITERATIONS;LMMSE enhancement steps +!PARTIALPASTE_RETINEX;Retinex !PARTIALPASTE_WAVELETGROUP;Wavelet Levels !PREFERENCES_AUTLISLOW;Low !PREFERENCES_AUTLISMAX;Max - Average of all tiles @@ -1543,7 +1563,7 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !TP_DIRPYRDENOISE_C2TYPE_TOOLTIP;Manual\nActs on the full image.\nYou control the noise reduction settings manually.\n\nAutomatic global\nActs on the full image.\n9 zones are used to calculate a global chrominance noise reduction setting.\n\nPreview\nActs on the whole image.\nThe part of the image visible in the preview is used to calculate global chrominance noise reduction settings. !TP_DIRPYRDENOISE_CCCURVE;Chrominance curve !TP_DIRPYRDENOISE_CHROMAFR;Chrominance -!TP_DIRPYRDENOISE_CTYPE;Auto method +!TP_DIRPYRDENOISE_CTYPE;Method !TP_DIRPYRDENOISE_CTYPE_TOOLTIP;Manual\nActs on the full image.\nYou control the noise reduction settings manually.\n\nAutomatic global\nActs on the full image.\n9 zones are used to calculate a global chrominance noise reduction setting.\n\nAutomatic multi-zones\nNo preview - works only during saving, but using the "Preview" method by matching the tile size and center to the preview size and center you can get an idea of the expected results.\nThe image is divided into tiles (about 10 to 70 depending on image size) and each tile receives its own chrominance noise reduction settings.\n\nPreview\nActs on the whole image.\nThe part of the image visible in the preview is used to calculate global chrominance noise reduction settings. !TP_DIRPYRDENOISE_CURVEEDITOR_CC;Chroma !TP_DIRPYRDENOISE_CURVEEDITOR_CC_TOOLTIP;Increase (multiply) the value of all chrominance sliders.\nThis curve lets you adjust the strength of chromatic noise reduction as a function of chromaticity, for instance to increase the action in areas of low saturation and to decrease it in those of high saturation. @@ -1716,6 +1736,54 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !TP_RAW_SENSOR_BAYER_LABEL;Sensor with Bayer Matrix !TP_RAW_SENSOR_XTRANS_DMETHOD_TOOLTIP;3-pass gives best results (recommended for low ISO images).\n1-pass is almost undistinguishable from 3-pass for high ISO images and is faster. !TP_RAW_SENSOR_XTRANS_LABEL;Sensor with X-Trans Matrix +!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL +!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b* +!TP_RETINEX_CONTEDIT_LH;Hue equalizer +!TP_RETINEX_CURVEEDITOR_CD;L=f(L) +!TP_RETINEX_CURVEEDITOR_CD_TOOLTIP;Luminance according to luminance L=f(L)\nCorrect raw data to reduce halos and artifacts. +!TP_RETINEX_CURVEEDITOR_LH;Strength=f(H) +!TP_RETINEX_CURVEEDITOR_LH_TOOLTIP;Strength according to hue Strength=f(H)\nThis curve also acts on chroma when using the "Highlight" retinex method. +!TP_RETINEX_GAIN;Gain +!TP_RETINEX_GAIN_TOOLTIP;Acts on the transmission in combination with the offset. This is very different from the others settings. Used for black or white pixels, and to help balance the histogram. +!TP_RETINEX_GAMMA;Free gamma +!TP_RETINEX_GAMMA;Gamma +!TP_RETINEX_GAMMA_FREE;Free +!TP_RETINEX_GAMMA_HIGH;High +!TP_RETINEX_GAMMA_LOW;Low +!TP_RETINEX_GAMMA_MID;Middle +!TP_RETINEX_GAMMA_NONE;None +!TP_RETINEX_GAMMA_TOOLTIP;Restore tones by applying gamma before and after Retinex. Different from Retinex curves or others curves (Lab, Exposure, etc.). +!TP_RETINEX_HIGHLIGHT;Highlight threshold +!TP_RETINEX_HIGHLIGHT_TOOLTIP;Increase action of High algorithm.\nMay require you to re-adjust "Neighboring pixels" and to increase the "White-point correction" in the Raw tab -> Raw White Points tool. +!TP_RETINEX_HIGHLIG;Highlight +!TP_RETINEX_HIGH;High +!TP_RETINEX_HSLSPACE_LIN;HSL-Linear +!TP_RETINEX_HSLSPACE_LOG;HSL-Logarithmic +!TP_RETINEX_LABEL;Retinex +!TP_RETINEX_LABSPACE;L*a*b* +!TP_RETINEX_LOW;Low +!TP_RETINEX_MEDIAN;Transmission median filter +!TP_RETINEX_METHOD;Method +!TP_RETINEX_METHOD_TOOLTIP;Low = Reinforce low light,\nUniform = Equalize action,\nHigh = Reinforce high light,\nHighlight = Remove magenta in highlights. +!TP_RETINEX_MLABEL;Restored haze-free Min=%1 Max=%2 +!TP_RETINEX_MLABEL_TOOLTIP;Should be near min=0 max=32768\nRestored image with no mixture. +!TP_RETINEX_NEIGHBOR;Neighboring pixels +!TP_RETINEX_NEUTRAL;Reset +!TP_RETINEX_NEUTRAL_TIP;Reset all sliders and curves to their default values. +!TP_RETINEX_OFFSET;Offset +!TP_RETINEX_SETTINGS;Settings +!TP_RETINEX_SLOPE;Free gamma slope +!TP_RETINEX_STRENGTH;Strength +!TP_RETINEX_THRESHOLD;Threshold +!TP_RETINEX_THRESHOLD_TOOLTIP;Limits in/out.\nIn = image source,\nOut = image gauss. +!TP_RETINEX_TLABEL2;TM Tm=%1 TM=%2 +!TP_RETINEX_TLABEL;TM Min=%1 Max=%2 Mean=%3 Sigma=%4 +!TP_RETINEX_TLABEL_TOOLTIP;Transmission map result.\nMin and Max are used by Variance.\nMean and Sigma\nTm=Min TM=Max of transmission map. +!TP_RETINEX_TRANSMISSION;Transmission map +!TP_RETINEX_TRANSMISSION_TOOLTIP;Transmission according to transmission.\nAbscissa: transmission from negative values (min), mean, and positives values (max).\nOrdinate: amplification or reduction. +!TP_RETINEX_UNIFORM;Uniform +!TP_RETINEX_VARIANCE;Variance +!TP_RETINEX_VARIANCE_TOOLTIP;Low variance increase local contrast and saturation, but can lead to artifacts. !TP_RGBCURVES_LUMAMODE;Luminosity mode !TP_RGBCURVES_LUMAMODE_TOOLTIP;Luminosity mode allows to vary the contribution of R, G and B channels to the luminosity of the image, without altering image color. !TP_SAVEDIALOG_OK_TIP;Shortcut: Ctrl-Enter @@ -1755,7 +1823,6 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !TP_WAVELET_BASLI;Slider !TP_WAVELET_BATYPE;Contrast balance method !TP_WAVELET_CBENAB;Toning and Color Balance -!TP_WAVELET_CBTYPE;Toning and Color Balance !TP_WAVELET_CB_TOOLTIP;For strong values product color-toning by combining it or not with levels decomposition 'toning'\nFor low values you can change the white balance of the background (sky, ...) without changing that of the front plane, generally more contrasted !TP_WAVELET_CCURVE;Local contrast !TP_WAVELET_CH1;Whole chroma range @@ -1769,7 +1836,6 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !TP_WAVELET_CHSL;Sliders !TP_WAVELET_CHTYPE;Chrominance method !TP_WAVELET_COLORT;Opacity Red-Green -!TP_WAVELET_COMBOTH;Both !TP_WAVELET_COMPCONT;Contrast !TP_WAVELET_COMPGAMMA;Compression gamma !TP_WAVELET_COMPGAMMA_TOOLTIP;Adjusting the gamma of the residual image allows you to equilibrate the data and histogram. @@ -1781,9 +1847,9 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !TP_WAVELET_CONTRA_TOOLTIP;Changes contrast of the residual image. !TP_WAVELET_CONTR;Gamut !TP_WAVELET_CTYPE;Chrominance control -!TP_WAVELET_CURVEEDITOR_CC_TOOLTIP;Modifies local contrast as a function of the original local contrast (absciss)\nLow absciss represents small local contrast (real values about 10..20)\n50% absciss represents average of local contrast (real value about 100..300)\n66% absciss represents standard deviation of local contrast (real value about 300..800)\n100% represents maximum (real value about 3000..8000) +!TP_WAVELET_CURVEEDITOR_CC_TOOLTIP;Modifies local contrast as a function of the original local contrast (abscissa).\nLow abscissa values represent small local contrast (real values about 10..20).\n50% abscissa represents average local contrast (real value about 100..300).\n66% abscissa represents standard deviation of local contrast (real value about 300..800).\n100% abscissa represents maximum local contrast (real value about 3000..8000). !TP_WAVELET_CURVEEDITOR_CH;Contrast levels=f(Hue) -!TP_WAVELET_CURVEEDITOR_CH_TOOLTIP;Modifies each level's contrast as a function oh hue.\nTake care not to overwrite changes made with the Gamut Hue controls.\nThe curve will only have an effect when wavelet contrast level sliders are non-zero. +!TP_WAVELET_CURVEEDITOR_CH_TOOLTIP;Modifies each level's contrast as a function of hue.\nTake care not to overwrite changes made with the Gamut sub-tool's hue controls.\nThe curve will only have an effect when wavelet contrast level sliders are non-zero. !TP_WAVELET_CURVEEDITOR_CL;L !TP_WAVELET_CURVEEDITOR_CL_TOOLTIP;Applies a final contrast luminance curve at the end of the wavelet treatment. !TP_WAVELET_CURVEEDITOR_HH;HH @@ -1846,7 +1912,6 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !TP_WAVELET_LEVZERO;Level 1 !TP_WAVELET_LINKEDG;Link with Edge Sharpness' Strength !TP_WAVELET_LIPST;Enhanced algoritm -!TP_WAVELET_LIPST_TOOLTIP;This algorithm uses the proximity of a pixel and eight of its neighbors. If less difference, edges are reinforced. !TP_WAVELET_LOWLIGHT;Shadow luminance range !TP_WAVELET_MEDGREINF;First level !TP_WAVELET_MEDILEV;Edge detection @@ -1893,10 +1958,6 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !TP_WAVELET_TILESIZE;Tiling method !TP_WAVELET_TILESLIT;Little tiles !TP_WAVELET_TILES_TOOLTIP;Processing the full image leads to better quality and is the recommended option, while using tiles is a fall-back solution for users with little RAM. Refer to RawPedia for memory requirements. -!TP_WAVELET_TMHIGH;High -!TP_WAVELET_TMLOWHIGH;Low+High -!TP_WAVELET_TMNONE;None -!TP_WAVELET_TMSTD;Standard !TP_WAVELET_TMSTRENGTH;Compression strength !TP_WAVELET_TMSTRENGTH_TOOLTIP;Control the strength of tone mapping or contrast compression of the residual image. When the value is different from 0, the Strength and Gamma sliders of the Tone Mapping tool in the Exposure tab will become grayed out. !TP_WAVELET_TMTYPE;Compression method diff --git a/rtdata/languages/Nederlands b/rtdata/languages/Nederlands index ef344a423..6d8204721 100644 --- a/rtdata/languages/Nederlands +++ b/rtdata/languages/Nederlands @@ -727,7 +727,6 @@ PARTIALPASTE_FLATFIELDCLIPCONTROL;Vlakveld clip controle PARTIALPASTE_FLATFIELDFILE;Vlakveldopname PARTIALPASTE_GRADIENT;Grijsverloop Filter PARTIALPASTE_HSVEQUALIZER;HSV-balans -PARTIALPASTE_ICMGAMMA;Uitvoer gamma PARTIALPASTE_ICMSETTINGS;ICM-instellingen PARTIALPASTE_IMPULSEDENOISE;Spot ruisonderdrukking PARTIALPASTE_IPTCINFO;IPTC-informatie @@ -1580,7 +1579,6 @@ TP_WAVELET_5;Niveau 5 TP_WAVELET_6;Niveau 6 TP_WAVELET_7;Niveau 7 TP_WAVELET_8;Niveau 8 -TP_WAVELET_ALL;Alle niveau-richtingen TP_WAVELET_APPLYTO;Toepassen TP_WAVELET_AVOID;Vermijd kleurverschuiving TP_WAVELET_CH1;Alle chroma's @@ -1597,7 +1595,6 @@ TP_WAVELET_CONTRA;Contrast TP_WAVELET_CONTRA_TOOLTIP;Wijzig contrast in de rest van de afbeelding TP_WAVELET_CONTR;Gamut - controle TP_WAVELET_DALL;Alle richtingen -TP_WAVELET_DISP;Wavelet niveau's TP_WAVELET_DONE;Richting: Vertikaal TP_WAVELET_DTHR;Richting: Diagonaal TP_WAVELET_DTWO;Richting: Horizontaal @@ -1611,7 +1608,6 @@ TP_WAVELET_HS1;Alle luminanties TP_WAVELET_HS2;Hoge lichten/Schaduwen TP_WAVELET_HUESKIN;Tint reeks (huid) TP_WAVELET_HUESKY;Tint Reeks (lucht) -TP_WAVELET_INF;Onder of gelijk aan het niveau TP_WAVELET_LABEL;Wavelet niveau's TP_WAVELET_LARGEST;grof TP_WAVELET_LEVCH;Chromaticiteit @@ -1622,10 +1618,8 @@ TP_WAVELET_LEVLABEL;Voorbeeld maximum mogelijke niveau's=%1 TP_WAVELET_LOWLIGHT;Schaduwen: Luminantie Reeks (0..100) TP_WAVELET_MEDI;Verminder artefacten in blauwe lucht TP_WAVELET_NEUTRAL;Neutraal -TP_WAVELET_ONE;Eén niveau TP_WAVELET_OPACITY;Dekking Blauw-Geel Niveau TP_WAVELET_PASTEL;Pastel chromaciteit -TP_WAVELET_PREVIEWLEVELS;Voorbeeld TP_WAVELET_RESCHRO;Chromaticiteit TP_WAVELET_RESCONH;Hoge lichten TP_WAVELET_RESCON;Schaduwen @@ -1792,8 +1786,29 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !HISTORY_MSG_404;W - ES - Base amplification !HISTORY_MSG_405;W - Denoise - Level 4 !HISTORY_MSG_406;W - ES - Neighboring pixels +!HISTORY_MSG_407;Retinex - Method +!HISTORY_MSG_408;Retinex - Neighboring +!HISTORY_MSG_409;Retinex - Gain +!HISTORY_MSG_410;Retinex - Offset +!HISTORY_MSG_411;Retinex - Strength +!HISTORY_MSG_412;Retinex - Scales +!HISTORY_MSG_413;Retinex - Variance +!HISTORY_MSG_414;Retinex - Histogram - Lab +!HISTORY_MSG_415;Retinex - Transmission +!HISTORY_MSG_416;Retinex +!HISTORY_MSG_417;Retinex - Transmission median +!HISTORY_MSG_418;Retinex - Threshold +!HISTORY_MSG_419;Retinex - Color space +!HISTORY_MSG_420;Retinex - Histogram - HSL +!HISTORY_MSG_421;Retinex - Gamma +!HISTORY_MSG_422;Retinex - Gamma +!HISTORY_MSG_423;Retinex - Gamma slope +!HISTORY_MSG_424;Retinex - HL threshold +!HISTORY_MSG_425;Retinex - Log base +!HISTORY_MSG_426;Retinex - Hue equalizer !MAIN_TAB_WAVELET;Wavelet !MAIN_TAB_WAVELET_TOOLTIP;Shortcut: Alt-w +!PARTIALPASTE_RETINEX;Retinex !PARTIALPASTE_WAVELETGROUP;Wavelet Levels !PREFERENCES_AUTLISSTD;High !PREFERENCES_CURVEBBOXPOS;Position of curve copypasta buttons @@ -1829,6 +1844,54 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !TP_PRSHARPENING_TOOLTIP;Sharpens the image after resizing. Only works when the "Lanczos" resizing method is used. It is impossible to preview the effects of this tool. See RawPedia for usage instructions. !TP_RAW_HD;Threshold !TP_RAW_HD_TOOLTIP;Lower values make hot/dead pixel detection more aggressive, but false positives may lead to artifacts. If you notice any artifacts appearing when enabling the Hot/Dead Pixel Filters, gradually increase the threshold value until they disappear. +!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL +!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b* +!TP_RETINEX_CONTEDIT_LH;Hue equalizer +!TP_RETINEX_CURVEEDITOR_CD;L=f(L) +!TP_RETINEX_CURVEEDITOR_CD_TOOLTIP;Luminance according to luminance L=f(L)\nCorrect raw data to reduce halos and artifacts. +!TP_RETINEX_CURVEEDITOR_LH;Strength=f(H) +!TP_RETINEX_CURVEEDITOR_LH_TOOLTIP;Strength according to hue Strength=f(H)\nThis curve also acts on chroma when using the "Highlight" retinex method. +!TP_RETINEX_GAIN;Gain +!TP_RETINEX_GAIN_TOOLTIP;Acts on the transmission in combination with the offset. This is very different from the others settings. Used for black or white pixels, and to help balance the histogram. +!TP_RETINEX_GAMMA;Free gamma +!TP_RETINEX_GAMMA;Gamma +!TP_RETINEX_GAMMA_FREE;Free +!TP_RETINEX_GAMMA_HIGH;High +!TP_RETINEX_GAMMA_LOW;Low +!TP_RETINEX_GAMMA_MID;Middle +!TP_RETINEX_GAMMA_NONE;None +!TP_RETINEX_GAMMA_TOOLTIP;Restore tones by applying gamma before and after Retinex. Different from Retinex curves or others curves (Lab, Exposure, etc.). +!TP_RETINEX_HIGHLIGHT;Highlight threshold +!TP_RETINEX_HIGHLIGHT_TOOLTIP;Increase action of High algorithm.\nMay require you to re-adjust "Neighboring pixels" and to increase the "White-point correction" in the Raw tab -> Raw White Points tool. +!TP_RETINEX_HIGHLIG;Highlight +!TP_RETINEX_HIGH;High +!TP_RETINEX_HSLSPACE_LIN;HSL-Linear +!TP_RETINEX_HSLSPACE_LOG;HSL-Logarithmic +!TP_RETINEX_LABEL;Retinex +!TP_RETINEX_LABSPACE;L*a*b* +!TP_RETINEX_LOW;Low +!TP_RETINEX_MEDIAN;Transmission median filter +!TP_RETINEX_METHOD;Method +!TP_RETINEX_METHOD_TOOLTIP;Low = Reinforce low light,\nUniform = Equalize action,\nHigh = Reinforce high light,\nHighlight = Remove magenta in highlights. +!TP_RETINEX_MLABEL;Restored haze-free Min=%1 Max=%2 +!TP_RETINEX_MLABEL_TOOLTIP;Should be near min=0 max=32768\nRestored image with no mixture. +!TP_RETINEX_NEIGHBOR;Neighboring pixels +!TP_RETINEX_NEUTRAL;Reset +!TP_RETINEX_NEUTRAL_TIP;Reset all sliders and curves to their default values. +!TP_RETINEX_OFFSET;Offset +!TP_RETINEX_SETTINGS;Settings +!TP_RETINEX_SLOPE;Free gamma slope +!TP_RETINEX_STRENGTH;Strength +!TP_RETINEX_THRESHOLD;Threshold +!TP_RETINEX_THRESHOLD_TOOLTIP;Limits in/out.\nIn = image source,\nOut = image gauss. +!TP_RETINEX_TLABEL2;TM Tm=%1 TM=%2 +!TP_RETINEX_TLABEL;TM Min=%1 Max=%2 Mean=%3 Sigma=%4 +!TP_RETINEX_TLABEL_TOOLTIP;Transmission map result.\nMin and Max are used by Variance.\nMean and Sigma\nTm=Min TM=Max of transmission map. +!TP_RETINEX_TRANSMISSION;Transmission map +!TP_RETINEX_TRANSMISSION_TOOLTIP;Transmission according to transmission.\nAbscissa: transmission from negative values (min), mean, and positives values (max).\nOrdinate: amplification or reduction. +!TP_RETINEX_UNIFORM;Uniform +!TP_RETINEX_VARIANCE;Variance +!TP_RETINEX_VARIANCE_TOOLTIP;Low variance increase local contrast and saturation, but can lead to artifacts. !TP_WAVELET_9;Level 9 !TP_WAVELET_B0;Black !TP_WAVELET_B1;Grey @@ -1843,22 +1906,20 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !TP_WAVELET_BASLI;Slider !TP_WAVELET_BATYPE;Contrast balance method !TP_WAVELET_CBENAB;Toning and Color Balance -!TP_WAVELET_CBTYPE;Toning and Color Balance !TP_WAVELET_CB_TOOLTIP;For strong values product color-toning by combining it or not with levels decomposition 'toning'\nFor low values you can change the white balance of the background (sky, ...) without changing that of the front plane, generally more contrasted !TP_WAVELET_CCURVE;Local contrast !TP_WAVELET_CHCU;Curve !TP_WAVELET_CHSL;Sliders !TP_WAVELET_CHTYPE;Chrominance method -!TP_WAVELET_COMBOTH;Both !TP_WAVELET_COMPCONT;Contrast !TP_WAVELET_COMPGAMMA;Compression gamma !TP_WAVELET_COMPGAMMA_TOOLTIP;Adjusting the gamma of the residual image allows you to equilibrate the data and histogram. !TP_WAVELET_COMPTM;Tone mapping !TP_WAVELET_CONTEDIT;'After' contrast curve !TP_WAVELET_CTYPE;Chrominance control -!TP_WAVELET_CURVEEDITOR_CC_TOOLTIP;Modifies local contrast as a function of the original local contrast (absciss)\nLow absciss represents small local contrast (real values about 10..20)\n50% absciss represents average of local contrast (real value about 100..300)\n66% absciss represents standard deviation of local contrast (real value about 300..800)\n100% represents maximum (real value about 3000..8000) +!TP_WAVELET_CURVEEDITOR_CC_TOOLTIP;Modifies local contrast as a function of the original local contrast (abscissa).\nLow abscissa values represent small local contrast (real values about 10..20).\n50% abscissa represents average local contrast (real value about 100..300).\n66% abscissa represents standard deviation of local contrast (real value about 300..800).\n100% abscissa represents maximum local contrast (real value about 3000..8000). !TP_WAVELET_CURVEEDITOR_CH;Contrast levels=f(Hue) -!TP_WAVELET_CURVEEDITOR_CH_TOOLTIP;Modifies each level's contrast as a function oh hue.\nTake care not to overwrite changes made with the Gamut Hue controls.\nThe curve will only have an effect when wavelet contrast level sliders are non-zero. +!TP_WAVELET_CURVEEDITOR_CH_TOOLTIP;Modifies each level's contrast as a function of hue.\nTake care not to overwrite changes made with the Gamut sub-tool's hue controls.\nThe curve will only have an effect when wavelet contrast level sliders are non-zero. !TP_WAVELET_CURVEEDITOR_CL;L !TP_WAVELET_CURVEEDITOR_CL_TOOLTIP;Applies a final contrast luminance curve at the end of the wavelet treatment. !TP_WAVELET_CURVEEDITOR_HH;HH @@ -1898,7 +1959,6 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !TP_WAVELET_LEVZERO;Level 1 !TP_WAVELET_LINKEDG;Link with Edge Sharpness' Strength !TP_WAVELET_LIPST;Enhanced algoritm -!TP_WAVELET_LIPST_TOOLTIP;This algorithm uses the proximity of a pixel and eight of its neighbors. If less difference, edges are reinforced. !TP_WAVELET_MEDGREINF;First level !TP_WAVELET_MEDILEV;Edge detection !TP_WAVELET_MEDILEV_TOOLTIP;When you enable Edge Detection, it is recommanded:\n- to disabled low contrast levels to avoid artifacts,\n- to use high values of gradient sensitivity.\n\nYou can modulate the strength with 'refine' from Denoise and Refine. @@ -1916,10 +1976,6 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !TP_WAVELET_RE1;Reinforced !TP_WAVELET_RE2;Unchanged !TP_WAVELET_RE3;Reduced -!TP_WAVELET_TMHIGH;High -!TP_WAVELET_TMLOWHIGH;Low+High -!TP_WAVELET_TMNONE;None -!TP_WAVELET_TMSTD;Standard !TP_WAVELET_TMSTRENGTH;Compression strength !TP_WAVELET_TMSTRENGTH_TOOLTIP;Control the strength of tone mapping or contrast compression of the residual image. When the value is different from 0, the Strength and Gamma sliders of the Tone Mapping tool in the Exposure tab will become grayed out. !TP_WAVELET_TMTYPE;Compression method diff --git a/rtdata/languages/Norsk BM b/rtdata/languages/Norsk BM index f6a598b5e..028fb69ea 100644 --- a/rtdata/languages/Norsk BM +++ b/rtdata/languages/Norsk BM @@ -917,6 +917,26 @@ TP_WBALANCE_TEMPERATURE;Temperatur !HISTORY_MSG_404;W - ES - Base amplification !HISTORY_MSG_405;W - Denoise - Level 4 !HISTORY_MSG_406;W - ES - Neighboring pixels +!HISTORY_MSG_407;Retinex - Method +!HISTORY_MSG_408;Retinex - Neighboring +!HISTORY_MSG_409;Retinex - Gain +!HISTORY_MSG_410;Retinex - Offset +!HISTORY_MSG_411;Retinex - Strength +!HISTORY_MSG_412;Retinex - Scales +!HISTORY_MSG_413;Retinex - Variance +!HISTORY_MSG_414;Retinex - Histogram - Lab +!HISTORY_MSG_415;Retinex - Transmission +!HISTORY_MSG_416;Retinex +!HISTORY_MSG_417;Retinex - Transmission median +!HISTORY_MSG_418;Retinex - Threshold +!HISTORY_MSG_419;Retinex - Color space +!HISTORY_MSG_420;Retinex - Histogram - HSL +!HISTORY_MSG_421;Retinex - Gamma +!HISTORY_MSG_422;Retinex - Gamma +!HISTORY_MSG_423;Retinex - Gamma slope +!HISTORY_MSG_424;Retinex - HL threshold +!HISTORY_MSG_425;Retinex - Log base +!HISTORY_MSG_426;Retinex - Hue equalizer !HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s !MAIN_BUTTON_FULLSCREEN;Fullscreen !MAIN_BUTTON_NAVNEXT_TOOLTIP;Navigate to the next image relative to image opened in the Editor.\nShortcut: Shift-F4\n\nTo navigate to the next image relative to the currently selected thumbnail in the File Browser or Filmstrip:\nShortcut: F4 @@ -999,7 +1019,6 @@ TP_WBALANCE_TEMPERATURE;Temperatur !PARTIALPASTE_FLATFIELDFILE;Flat-field file !PARTIALPASTE_GRADIENT;Graduated filter !PARTIALPASTE_HSVEQUALIZER;HSV equalizer -!PARTIALPASTE_ICMGAMMA;Output gamma !PARTIALPASTE_IMPULSEDENOISE;Impulse noise reduction !PARTIALPASTE_LABCURVE;L*a*b* adjustments !PARTIALPASTE_LENSPROFILE;Lens correction profile @@ -1021,6 +1040,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur !PARTIALPASTE_RAW_DMETHOD;Demosaic method !PARTIALPASTE_RAW_FALSECOLOR;False color suppression !PARTIALPASTE_RAW_LMMSEITERATIONS;LMMSE enhancement steps +!PARTIALPASTE_RETINEX;Retinex !PARTIALPASTE_RGBCURVES;RGB curves !PARTIALPASTE_SHARPENEDGE;Edges !PARTIALPASTE_SHARPENMICRO;Microcontrast @@ -1396,7 +1416,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur !TP_DIRPYRDENOISE_CCCURVE;Chrominance curve !TP_DIRPYRDENOISE_CHROMAFR;Chrominance !TP_DIRPYRDENOISE_CHROMA;Chrominance - Master -!TP_DIRPYRDENOISE_CTYPE;Auto method +!TP_DIRPYRDENOISE_CTYPE;Method !TP_DIRPYRDENOISE_CTYPE_TOOLTIP;Manual\nActs on the full image.\nYou control the noise reduction settings manually.\n\nAutomatic global\nActs on the full image.\n9 zones are used to calculate a global chrominance noise reduction setting.\n\nAutomatic multi-zones\nNo preview - works only during saving, but using the "Preview" method by matching the tile size and center to the preview size and center you can get an idea of the expected results.\nThe image is divided into tiles (about 10 to 70 depending on image size) and each tile receives its own chrominance noise reduction settings.\n\nPreview\nActs on the whole image.\nThe part of the image visible in the preview is used to calculate global chrominance noise reduction settings. !TP_DIRPYRDENOISE_CURVEEDITOR_CC;Chroma !TP_DIRPYRDENOISE_CURVEEDITOR_CC_TOOLTIP;Increase (multiply) the value of all chrominance sliders.\nThis curve lets you adjust the strength of chromatic noise reduction as a function of chromaticity, for instance to increase the action in areas of low saturation and to decrease it in those of high saturation. @@ -1654,6 +1674,54 @@ TP_WBALANCE_TEMPERATURE;Temperatur !TP_RESIZE_LANCZOS;Lanczos !TP_RESIZE_SPECIFY;Specify: !TP_RESIZE_WIDTH;Width +!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL +!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b* +!TP_RETINEX_CONTEDIT_LH;Hue equalizer +!TP_RETINEX_CURVEEDITOR_CD;L=f(L) +!TP_RETINEX_CURVEEDITOR_CD_TOOLTIP;Luminance according to luminance L=f(L)\nCorrect raw data to reduce halos and artifacts. +!TP_RETINEX_CURVEEDITOR_LH;Strength=f(H) +!TP_RETINEX_CURVEEDITOR_LH_TOOLTIP;Strength according to hue Strength=f(H)\nThis curve also acts on chroma when using the "Highlight" retinex method. +!TP_RETINEX_GAIN;Gain +!TP_RETINEX_GAIN_TOOLTIP;Acts on the transmission in combination with the offset. This is very different from the others settings. Used for black or white pixels, and to help balance the histogram. +!TP_RETINEX_GAMMA;Free gamma +!TP_RETINEX_GAMMA;Gamma +!TP_RETINEX_GAMMA_FREE;Free +!TP_RETINEX_GAMMA_HIGH;High +!TP_RETINEX_GAMMA_LOW;Low +!TP_RETINEX_GAMMA_MID;Middle +!TP_RETINEX_GAMMA_NONE;None +!TP_RETINEX_GAMMA_TOOLTIP;Restore tones by applying gamma before and after Retinex. Different from Retinex curves or others curves (Lab, Exposure, etc.). +!TP_RETINEX_HIGHLIGHT;Highlight threshold +!TP_RETINEX_HIGHLIGHT_TOOLTIP;Increase action of High algorithm.\nMay require you to re-adjust "Neighboring pixels" and to increase the "White-point correction" in the Raw tab -> Raw White Points tool. +!TP_RETINEX_HIGHLIG;Highlight +!TP_RETINEX_HIGH;High +!TP_RETINEX_HSLSPACE_LIN;HSL-Linear +!TP_RETINEX_HSLSPACE_LOG;HSL-Logarithmic +!TP_RETINEX_LABEL;Retinex +!TP_RETINEX_LABSPACE;L*a*b* +!TP_RETINEX_LOW;Low +!TP_RETINEX_MEDIAN;Transmission median filter +!TP_RETINEX_METHOD;Method +!TP_RETINEX_METHOD_TOOLTIP;Low = Reinforce low light,\nUniform = Equalize action,\nHigh = Reinforce high light,\nHighlight = Remove magenta in highlights. +!TP_RETINEX_MLABEL;Restored haze-free Min=%1 Max=%2 +!TP_RETINEX_MLABEL_TOOLTIP;Should be near min=0 max=32768\nRestored image with no mixture. +!TP_RETINEX_NEIGHBOR;Neighboring pixels +!TP_RETINEX_NEUTRAL;Reset +!TP_RETINEX_NEUTRAL_TIP;Reset all sliders and curves to their default values. +!TP_RETINEX_OFFSET;Offset +!TP_RETINEX_SETTINGS;Settings +!TP_RETINEX_SLOPE;Free gamma slope +!TP_RETINEX_STRENGTH;Strength +!TP_RETINEX_THRESHOLD;Threshold +!TP_RETINEX_THRESHOLD_TOOLTIP;Limits in/out.\nIn = image source,\nOut = image gauss. +!TP_RETINEX_TLABEL2;TM Tm=%1 TM=%2 +!TP_RETINEX_TLABEL;TM Min=%1 Max=%2 Mean=%3 Sigma=%4 +!TP_RETINEX_TLABEL_TOOLTIP;Transmission map result.\nMin and Max are used by Variance.\nMean and Sigma\nTm=Min TM=Max of transmission map. +!TP_RETINEX_TRANSMISSION;Transmission map +!TP_RETINEX_TRANSMISSION_TOOLTIP;Transmission according to transmission.\nAbscissa: transmission from negative values (min), mean, and positives values (max).\nOrdinate: amplification or reduction. +!TP_RETINEX_UNIFORM;Uniform +!TP_RETINEX_VARIANCE;Variance +!TP_RETINEX_VARIANCE_TOOLTIP;Low variance increase local contrast and saturation, but can lead to artifacts. !TP_RGBCURVES_BLUE;B !TP_RGBCURVES_CHANNEL;Channel !TP_RGBCURVES_GREEN;G @@ -1717,7 +1785,6 @@ TP_WBALANCE_TEMPERATURE;Temperatur !TP_WAVELET_BASLI;Slider !TP_WAVELET_BATYPE;Contrast balance method !TP_WAVELET_CBENAB;Toning and Color Balance -!TP_WAVELET_CBTYPE;Toning and Color Balance !TP_WAVELET_CB_TOOLTIP;For strong values product color-toning by combining it or not with levels decomposition 'toning'\nFor low values you can change the white balance of the background (sky, ...) without changing that of the front plane, generally more contrasted !TP_WAVELET_CCURVE;Local contrast !TP_WAVELET_CH1;Whole chroma range @@ -1731,7 +1798,6 @@ TP_WBALANCE_TEMPERATURE;Temperatur !TP_WAVELET_CHSL;Sliders !TP_WAVELET_CHTYPE;Chrominance method !TP_WAVELET_COLORT;Opacity Red-Green -!TP_WAVELET_COMBOTH;Both !TP_WAVELET_COMPCONT;Contrast !TP_WAVELET_COMPGAMMA;Compression gamma !TP_WAVELET_COMPGAMMA_TOOLTIP;Adjusting the gamma of the residual image allows you to equilibrate the data and histogram. @@ -1743,9 +1809,9 @@ TP_WBALANCE_TEMPERATURE;Temperatur !TP_WAVELET_CONTRA_TOOLTIP;Changes contrast of the residual image. !TP_WAVELET_CONTR;Gamut !TP_WAVELET_CTYPE;Chrominance control -!TP_WAVELET_CURVEEDITOR_CC_TOOLTIP;Modifies local contrast as a function of the original local contrast (absciss)\nLow absciss represents small local contrast (real values about 10..20)\n50% absciss represents average of local contrast (real value about 100..300)\n66% absciss represents standard deviation of local contrast (real value about 300..800)\n100% represents maximum (real value about 3000..8000) +!TP_WAVELET_CURVEEDITOR_CC_TOOLTIP;Modifies local contrast as a function of the original local contrast (abscissa).\nLow abscissa values represent small local contrast (real values about 10..20).\n50% abscissa represents average local contrast (real value about 100..300).\n66% abscissa represents standard deviation of local contrast (real value about 300..800).\n100% abscissa represents maximum local contrast (real value about 3000..8000). !TP_WAVELET_CURVEEDITOR_CH;Contrast levels=f(Hue) -!TP_WAVELET_CURVEEDITOR_CH_TOOLTIP;Modifies each level's contrast as a function oh hue.\nTake care not to overwrite changes made with the Gamut Hue controls.\nThe curve will only have an effect when wavelet contrast level sliders are non-zero. +!TP_WAVELET_CURVEEDITOR_CH_TOOLTIP;Modifies each level's contrast as a function of hue.\nTake care not to overwrite changes made with the Gamut sub-tool's hue controls.\nThe curve will only have an effect when wavelet contrast level sliders are non-zero. !TP_WAVELET_CURVEEDITOR_CL;L !TP_WAVELET_CURVEEDITOR_CL_TOOLTIP;Applies a final contrast luminance curve at the end of the wavelet treatment. !TP_WAVELET_CURVEEDITOR_HH;HH @@ -1808,7 +1874,6 @@ TP_WBALANCE_TEMPERATURE;Temperatur !TP_WAVELET_LEVZERO;Level 1 !TP_WAVELET_LINKEDG;Link with Edge Sharpness' Strength !TP_WAVELET_LIPST;Enhanced algoritm -!TP_WAVELET_LIPST_TOOLTIP;This algorithm uses the proximity of a pixel and eight of its neighbors. If less difference, edges are reinforced. !TP_WAVELET_LOWLIGHT;Shadow luminance range !TP_WAVELET_MEDGREINF;First level !TP_WAVELET_MEDILEV;Edge detection @@ -1855,10 +1920,6 @@ TP_WBALANCE_TEMPERATURE;Temperatur !TP_WAVELET_TILESIZE;Tiling method !TP_WAVELET_TILESLIT;Little tiles !TP_WAVELET_TILES_TOOLTIP;Processing the full image leads to better quality and is the recommended option, while using tiles is a fall-back solution for users with little RAM. Refer to RawPedia for memory requirements. -!TP_WAVELET_TMHIGH;High -!TP_WAVELET_TMLOWHIGH;Low+High -!TP_WAVELET_TMNONE;None -!TP_WAVELET_TMSTD;Standard !TP_WAVELET_TMSTRENGTH;Compression strength !TP_WAVELET_TMSTRENGTH_TOOLTIP;Control the strength of tone mapping or contrast compression of the residual image. When the value is different from 0, the Strength and Gamma sliders of the Tone Mapping tool in the Exposure tab will become grayed out. !TP_WAVELET_TMTYPE;Compression method diff --git a/rtdata/languages/Polish b/rtdata/languages/Polish index 63d153c25..1657da6f2 100644 --- a/rtdata/languages/Polish +++ b/rtdata/languages/Polish @@ -677,7 +677,6 @@ PARTIALPASTE_FLATFIELDCLIPCONTROL;Puste pole - Zabezp. przed obcinaniem PARTIALPASTE_FLATFIELDFILE;Puste pole - Wybór PARTIALPASTE_GRADIENT;Filtr połówkowy PARTIALPASTE_HSVEQUALIZER;Ekwalizator HSV -PARTIALPASTE_ICMGAMMA;Gamma wyjściowa PARTIALPASTE_ICMSETTINGS;Ustawienia ICM PARTIALPASTE_IMPULSEDENOISE;Redukcja szumów impulsowych PARTIALPASTE_IPTCINFO;IPTC @@ -1634,10 +1633,31 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !HISTORY_MSG_404;W - ES - Base amplification !HISTORY_MSG_405;W - Denoise - Level 4 !HISTORY_MSG_406;W - ES - Neighboring pixels +!HISTORY_MSG_407;Retinex - Method +!HISTORY_MSG_408;Retinex - Neighboring +!HISTORY_MSG_409;Retinex - Gain +!HISTORY_MSG_410;Retinex - Offset +!HISTORY_MSG_411;Retinex - Strength +!HISTORY_MSG_412;Retinex - Scales +!HISTORY_MSG_413;Retinex - Variance +!HISTORY_MSG_414;Retinex - Histogram - Lab +!HISTORY_MSG_415;Retinex - Transmission +!HISTORY_MSG_416;Retinex +!HISTORY_MSG_417;Retinex - Transmission median +!HISTORY_MSG_418;Retinex - Threshold +!HISTORY_MSG_419;Retinex - Color space +!HISTORY_MSG_420;Retinex - Histogram - HSL +!HISTORY_MSG_421;Retinex - Gamma +!HISTORY_MSG_422;Retinex - Gamma +!HISTORY_MSG_423;Retinex - Gamma slope +!HISTORY_MSG_424;Retinex - HL threshold +!HISTORY_MSG_425;Retinex - Log base +!HISTORY_MSG_426;Retinex - Hue equalizer !MAIN_TAB_INSPECT; Inspect !MAIN_TAB_WAVELET;Wavelet !MAIN_TAB_WAVELET_TOOLTIP;Shortcut: Alt-w !PARTIALPASTE_EQUALIZER;Wavelet levels +!PARTIALPASTE_RETINEX;Retinex !PARTIALPASTE_WAVELETGROUP;Wavelet Levels !PREFERENCES_AUTLISLOW;Low !PREFERENCES_AUTLISMAX;Max - Average of all tiles @@ -1706,7 +1726,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !TP_DIRPYRDENOISE_C2TYPE_TOOLTIP;Manual\nActs on the full image.\nYou control the noise reduction settings manually.\n\nAutomatic global\nActs on the full image.\n9 zones are used to calculate a global chrominance noise reduction setting.\n\nPreview\nActs on the whole image.\nThe part of the image visible in the preview is used to calculate global chrominance noise reduction settings. !TP_DIRPYRDENOISE_CCCURVE;Chrominance curve !TP_DIRPYRDENOISE_CHROMAFR;Chrominance -!TP_DIRPYRDENOISE_CTYPE;Auto method +!TP_DIRPYRDENOISE_CTYPE;Method !TP_DIRPYRDENOISE_CTYPE_TOOLTIP;Manual\nActs on the full image.\nYou control the noise reduction settings manually.\n\nAutomatic global\nActs on the full image.\n9 zones are used to calculate a global chrominance noise reduction setting.\n\nAutomatic multi-zones\nNo preview - works only during saving, but using the "Preview" method by matching the tile size and center to the preview size and center you can get an idea of the expected results.\nThe image is divided into tiles (about 10 to 70 depending on image size) and each tile receives its own chrominance noise reduction settings.\n\nPreview\nActs on the whole image.\nThe part of the image visible in the preview is used to calculate global chrominance noise reduction settings. !TP_DIRPYRDENOISE_CURVEEDITOR_CC;Chroma !TP_DIRPYRDENOISE_CURVEEDITOR_CC_TOOLTIP;Increase (multiply) the value of all chrominance sliders.\nThis curve lets you adjust the strength of chromatic noise reduction as a function of chromaticity, for instance to increase the action in areas of low saturation and to decrease it in those of high saturation. @@ -1741,6 +1761,54 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !TP_PRSHARPENING_TOOLTIP;Sharpens the image after resizing. Only works when the "Lanczos" resizing method is used. It is impossible to preview the effects of this tool. See RawPedia for usage instructions. !TP_RAW_HD;Threshold !TP_RAW_HD_TOOLTIP;Lower values make hot/dead pixel detection more aggressive, but false positives may lead to artifacts. If you notice any artifacts appearing when enabling the Hot/Dead Pixel Filters, gradually increase the threshold value until they disappear. +!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL +!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b* +!TP_RETINEX_CONTEDIT_LH;Hue equalizer +!TP_RETINEX_CURVEEDITOR_CD;L=f(L) +!TP_RETINEX_CURVEEDITOR_CD_TOOLTIP;Luminance according to luminance L=f(L)\nCorrect raw data to reduce halos and artifacts. +!TP_RETINEX_CURVEEDITOR_LH;Strength=f(H) +!TP_RETINEX_CURVEEDITOR_LH_TOOLTIP;Strength according to hue Strength=f(H)\nThis curve also acts on chroma when using the "Highlight" retinex method. +!TP_RETINEX_GAIN;Gain +!TP_RETINEX_GAIN_TOOLTIP;Acts on the transmission in combination with the offset. This is very different from the others settings. Used for black or white pixels, and to help balance the histogram. +!TP_RETINEX_GAMMA;Free gamma +!TP_RETINEX_GAMMA;Gamma +!TP_RETINEX_GAMMA_FREE;Free +!TP_RETINEX_GAMMA_HIGH;High +!TP_RETINEX_GAMMA_LOW;Low +!TP_RETINEX_GAMMA_MID;Middle +!TP_RETINEX_GAMMA_NONE;None +!TP_RETINEX_GAMMA_TOOLTIP;Restore tones by applying gamma before and after Retinex. Different from Retinex curves or others curves (Lab, Exposure, etc.). +!TP_RETINEX_HIGHLIGHT;Highlight threshold +!TP_RETINEX_HIGHLIGHT_TOOLTIP;Increase action of High algorithm.\nMay require you to re-adjust "Neighboring pixels" and to increase the "White-point correction" in the Raw tab -> Raw White Points tool. +!TP_RETINEX_HIGHLIG;Highlight +!TP_RETINEX_HIGH;High +!TP_RETINEX_HSLSPACE_LIN;HSL-Linear +!TP_RETINEX_HSLSPACE_LOG;HSL-Logarithmic +!TP_RETINEX_LABEL;Retinex +!TP_RETINEX_LABSPACE;L*a*b* +!TP_RETINEX_LOW;Low +!TP_RETINEX_MEDIAN;Transmission median filter +!TP_RETINEX_METHOD;Method +!TP_RETINEX_METHOD_TOOLTIP;Low = Reinforce low light,\nUniform = Equalize action,\nHigh = Reinforce high light,\nHighlight = Remove magenta in highlights. +!TP_RETINEX_MLABEL;Restored haze-free Min=%1 Max=%2 +!TP_RETINEX_MLABEL_TOOLTIP;Should be near min=0 max=32768\nRestored image with no mixture. +!TP_RETINEX_NEIGHBOR;Neighboring pixels +!TP_RETINEX_NEUTRAL;Reset +!TP_RETINEX_NEUTRAL_TIP;Reset all sliders and curves to their default values. +!TP_RETINEX_OFFSET;Offset +!TP_RETINEX_SETTINGS;Settings +!TP_RETINEX_SLOPE;Free gamma slope +!TP_RETINEX_STRENGTH;Strength +!TP_RETINEX_THRESHOLD;Threshold +!TP_RETINEX_THRESHOLD_TOOLTIP;Limits in/out.\nIn = image source,\nOut = image gauss. +!TP_RETINEX_TLABEL2;TM Tm=%1 TM=%2 +!TP_RETINEX_TLABEL;TM Min=%1 Max=%2 Mean=%3 Sigma=%4 +!TP_RETINEX_TLABEL_TOOLTIP;Transmission map result.\nMin and Max are used by Variance.\nMean and Sigma\nTm=Min TM=Max of transmission map. +!TP_RETINEX_TRANSMISSION;Transmission map +!TP_RETINEX_TRANSMISSION_TOOLTIP;Transmission according to transmission.\nAbscissa: transmission from negative values (min), mean, and positives values (max).\nOrdinate: amplification or reduction. +!TP_RETINEX_UNIFORM;Uniform +!TP_RETINEX_VARIANCE;Variance +!TP_RETINEX_VARIANCE_TOOLTIP;Low variance increase local contrast and saturation, but can lead to artifacts. !TP_WAVELET_1;Level 1 !TP_WAVELET_2;Level 2 !TP_WAVELET_3;Level 3 @@ -1765,7 +1833,6 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !TP_WAVELET_BASLI;Slider !TP_WAVELET_BATYPE;Contrast balance method !TP_WAVELET_CBENAB;Toning and Color Balance -!TP_WAVELET_CBTYPE;Toning and Color Balance !TP_WAVELET_CB_TOOLTIP;For strong values product color-toning by combining it or not with levels decomposition 'toning'\nFor low values you can change the white balance of the background (sky, ...) without changing that of the front plane, generally more contrasted !TP_WAVELET_CCURVE;Local contrast !TP_WAVELET_CH1;Whole chroma range @@ -1779,7 +1846,6 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !TP_WAVELET_CHSL;Sliders !TP_WAVELET_CHTYPE;Chrominance method !TP_WAVELET_COLORT;Opacity Red-Green -!TP_WAVELET_COMBOTH;Both !TP_WAVELET_COMPCONT;Contrast !TP_WAVELET_COMPGAMMA;Compression gamma !TP_WAVELET_COMPGAMMA_TOOLTIP;Adjusting the gamma of the residual image allows you to equilibrate the data and histogram. @@ -1791,9 +1857,9 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !TP_WAVELET_CONTRA_TOOLTIP;Changes contrast of the residual image. !TP_WAVELET_CONTR;Gamut !TP_WAVELET_CTYPE;Chrominance control -!TP_WAVELET_CURVEEDITOR_CC_TOOLTIP;Modifies local contrast as a function of the original local contrast (absciss)\nLow absciss represents small local contrast (real values about 10..20)\n50% absciss represents average of local contrast (real value about 100..300)\n66% absciss represents standard deviation of local contrast (real value about 300..800)\n100% represents maximum (real value about 3000..8000) +!TP_WAVELET_CURVEEDITOR_CC_TOOLTIP;Modifies local contrast as a function of the original local contrast (abscissa).\nLow abscissa values represent small local contrast (real values about 10..20).\n50% abscissa represents average local contrast (real value about 100..300).\n66% abscissa represents standard deviation of local contrast (real value about 300..800).\n100% abscissa represents maximum local contrast (real value about 3000..8000). !TP_WAVELET_CURVEEDITOR_CH;Contrast levels=f(Hue) -!TP_WAVELET_CURVEEDITOR_CH_TOOLTIP;Modifies each level's contrast as a function oh hue.\nTake care not to overwrite changes made with the Gamut Hue controls.\nThe curve will only have an effect when wavelet contrast level sliders are non-zero. +!TP_WAVELET_CURVEEDITOR_CH_TOOLTIP;Modifies each level's contrast as a function of hue.\nTake care not to overwrite changes made with the Gamut sub-tool's hue controls.\nThe curve will only have an effect when wavelet contrast level sliders are non-zero. !TP_WAVELET_CURVEEDITOR_CL;L !TP_WAVELET_CURVEEDITOR_CL_TOOLTIP;Applies a final contrast luminance curve at the end of the wavelet treatment. !TP_WAVELET_CURVEEDITOR_HH;HH @@ -1856,7 +1922,6 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !TP_WAVELET_LEVZERO;Level 1 !TP_WAVELET_LINKEDG;Link with Edge Sharpness' Strength !TP_WAVELET_LIPST;Enhanced algoritm -!TP_WAVELET_LIPST_TOOLTIP;This algorithm uses the proximity of a pixel and eight of its neighbors. If less difference, edges are reinforced. !TP_WAVELET_LOWLIGHT;Shadow luminance range !TP_WAVELET_MEDGREINF;First level !TP_WAVELET_MEDILEV;Edge detection @@ -1903,10 +1968,6 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !TP_WAVELET_TILESIZE;Tiling method !TP_WAVELET_TILESLIT;Little tiles !TP_WAVELET_TILES_TOOLTIP;Processing the full image leads to better quality and is the recommended option, while using tiles is a fall-back solution for users with little RAM. Refer to RawPedia for memory requirements. -!TP_WAVELET_TMHIGH;High -!TP_WAVELET_TMLOWHIGH;Low+High -!TP_WAVELET_TMNONE;None -!TP_WAVELET_TMSTD;Standard !TP_WAVELET_TMSTRENGTH;Compression strength !TP_WAVELET_TMSTRENGTH_TOOLTIP;Control the strength of tone mapping or contrast compression of the residual image. When the value is different from 0, the Strength and Gamma sliders of the Tone Mapping tool in the Exposure tab will become grayed out. !TP_WAVELET_TMTYPE;Compression method diff --git a/rtdata/languages/Polish (Latin Characters) b/rtdata/languages/Polish (Latin Characters) index 0289fb0f6..0381c2395 100644 --- a/rtdata/languages/Polish (Latin Characters) +++ b/rtdata/languages/Polish (Latin Characters) @@ -677,7 +677,6 @@ PARTIALPASTE_FLATFIELDCLIPCONTROL;Puste pole - Zabezp. przed obcinaniem PARTIALPASTE_FLATFIELDFILE;Puste pole - Wybor PARTIALPASTE_GRADIENT;Filtr polowkowy PARTIALPASTE_HSVEQUALIZER;Ekwalizator HSV -PARTIALPASTE_ICMGAMMA;Gamma wyjsciowa PARTIALPASTE_ICMSETTINGS;Ustawienia ICM PARTIALPASTE_IMPULSEDENOISE;Redukcja szumow impulsowych PARTIALPASTE_IPTCINFO;IPTC @@ -1634,10 +1633,31 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrot: - !HISTORY_MSG_404;W - ES - Base amplification !HISTORY_MSG_405;W - Denoise - Level 4 !HISTORY_MSG_406;W - ES - Neighboring pixels +!HISTORY_MSG_407;Retinex - Method +!HISTORY_MSG_408;Retinex - Neighboring +!HISTORY_MSG_409;Retinex - Gain +!HISTORY_MSG_410;Retinex - Offset +!HISTORY_MSG_411;Retinex - Strength +!HISTORY_MSG_412;Retinex - Scales +!HISTORY_MSG_413;Retinex - Variance +!HISTORY_MSG_414;Retinex - Histogram - Lab +!HISTORY_MSG_415;Retinex - Transmission +!HISTORY_MSG_416;Retinex +!HISTORY_MSG_417;Retinex - Transmission median +!HISTORY_MSG_418;Retinex - Threshold +!HISTORY_MSG_419;Retinex - Color space +!HISTORY_MSG_420;Retinex - Histogram - HSL +!HISTORY_MSG_421;Retinex - Gamma +!HISTORY_MSG_422;Retinex - Gamma +!HISTORY_MSG_423;Retinex - Gamma slope +!HISTORY_MSG_424;Retinex - HL threshold +!HISTORY_MSG_425;Retinex - Log base +!HISTORY_MSG_426;Retinex - Hue equalizer !MAIN_TAB_INSPECT; Inspect !MAIN_TAB_WAVELET;Wavelet !MAIN_TAB_WAVELET_TOOLTIP;Shortcut: Alt-w !PARTIALPASTE_EQUALIZER;Wavelet levels +!PARTIALPASTE_RETINEX;Retinex !PARTIALPASTE_WAVELETGROUP;Wavelet Levels !PREFERENCES_AUTLISLOW;Low !PREFERENCES_AUTLISMAX;Max - Average of all tiles @@ -1706,7 +1726,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrot: - !TP_DIRPYRDENOISE_C2TYPE_TOOLTIP;Manual\nActs on the full image.\nYou control the noise reduction settings manually.\n\nAutomatic global\nActs on the full image.\n9 zones are used to calculate a global chrominance noise reduction setting.\n\nPreview\nActs on the whole image.\nThe part of the image visible in the preview is used to calculate global chrominance noise reduction settings. !TP_DIRPYRDENOISE_CCCURVE;Chrominance curve !TP_DIRPYRDENOISE_CHROMAFR;Chrominance -!TP_DIRPYRDENOISE_CTYPE;Auto method +!TP_DIRPYRDENOISE_CTYPE;Method !TP_DIRPYRDENOISE_CTYPE_TOOLTIP;Manual\nActs on the full image.\nYou control the noise reduction settings manually.\n\nAutomatic global\nActs on the full image.\n9 zones are used to calculate a global chrominance noise reduction setting.\n\nAutomatic multi-zones\nNo preview - works only during saving, but using the "Preview" method by matching the tile size and center to the preview size and center you can get an idea of the expected results.\nThe image is divided into tiles (about 10 to 70 depending on image size) and each tile receives its own chrominance noise reduction settings.\n\nPreview\nActs on the whole image.\nThe part of the image visible in the preview is used to calculate global chrominance noise reduction settings. !TP_DIRPYRDENOISE_CURVEEDITOR_CC;Chroma !TP_DIRPYRDENOISE_CURVEEDITOR_CC_TOOLTIP;Increase (multiply) the value of all chrominance sliders.\nThis curve lets you adjust the strength of chromatic noise reduction as a function of chromaticity, for instance to increase the action in areas of low saturation and to decrease it in those of high saturation. @@ -1741,6 +1761,54 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrot: - !TP_PRSHARPENING_TOOLTIP;Sharpens the image after resizing. Only works when the "Lanczos" resizing method is used. It is impossible to preview the effects of this tool. See RawPedia for usage instructions. !TP_RAW_HD;Threshold !TP_RAW_HD_TOOLTIP;Lower values make hot/dead pixel detection more aggressive, but false positives may lead to artifacts. If you notice any artifacts appearing when enabling the Hot/Dead Pixel Filters, gradually increase the threshold value until they disappear. +!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL +!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b* +!TP_RETINEX_CONTEDIT_LH;Hue equalizer +!TP_RETINEX_CURVEEDITOR_CD;L=f(L) +!TP_RETINEX_CURVEEDITOR_CD_TOOLTIP;Luminance according to luminance L=f(L)\nCorrect raw data to reduce halos and artifacts. +!TP_RETINEX_CURVEEDITOR_LH;Strength=f(H) +!TP_RETINEX_CURVEEDITOR_LH_TOOLTIP;Strength according to hue Strength=f(H)\nThis curve also acts on chroma when using the "Highlight" retinex method. +!TP_RETINEX_GAIN;Gain +!TP_RETINEX_GAIN_TOOLTIP;Acts on the transmission in combination with the offset. This is very different from the others settings. Used for black or white pixels, and to help balance the histogram. +!TP_RETINEX_GAMMA;Free gamma +!TP_RETINEX_GAMMA;Gamma +!TP_RETINEX_GAMMA_FREE;Free +!TP_RETINEX_GAMMA_HIGH;High +!TP_RETINEX_GAMMA_LOW;Low +!TP_RETINEX_GAMMA_MID;Middle +!TP_RETINEX_GAMMA_NONE;None +!TP_RETINEX_GAMMA_TOOLTIP;Restore tones by applying gamma before and after Retinex. Different from Retinex curves or others curves (Lab, Exposure, etc.). +!TP_RETINEX_HIGHLIGHT;Highlight threshold +!TP_RETINEX_HIGHLIGHT_TOOLTIP;Increase action of High algorithm.\nMay require you to re-adjust "Neighboring pixels" and to increase the "White-point correction" in the Raw tab -> Raw White Points tool. +!TP_RETINEX_HIGHLIG;Highlight +!TP_RETINEX_HIGH;High +!TP_RETINEX_HSLSPACE_LIN;HSL-Linear +!TP_RETINEX_HSLSPACE_LOG;HSL-Logarithmic +!TP_RETINEX_LABEL;Retinex +!TP_RETINEX_LABSPACE;L*a*b* +!TP_RETINEX_LOW;Low +!TP_RETINEX_MEDIAN;Transmission median filter +!TP_RETINEX_METHOD;Method +!TP_RETINEX_METHOD_TOOLTIP;Low = Reinforce low light,\nUniform = Equalize action,\nHigh = Reinforce high light,\nHighlight = Remove magenta in highlights. +!TP_RETINEX_MLABEL;Restored haze-free Min=%1 Max=%2 +!TP_RETINEX_MLABEL_TOOLTIP;Should be near min=0 max=32768\nRestored image with no mixture. +!TP_RETINEX_NEIGHBOR;Neighboring pixels +!TP_RETINEX_NEUTRAL;Reset +!TP_RETINEX_NEUTRAL_TIP;Reset all sliders and curves to their default values. +!TP_RETINEX_OFFSET;Offset +!TP_RETINEX_SETTINGS;Settings +!TP_RETINEX_SLOPE;Free gamma slope +!TP_RETINEX_STRENGTH;Strength +!TP_RETINEX_THRESHOLD;Threshold +!TP_RETINEX_THRESHOLD_TOOLTIP;Limits in/out.\nIn = image source,\nOut = image gauss. +!TP_RETINEX_TLABEL2;TM Tm=%1 TM=%2 +!TP_RETINEX_TLABEL;TM Min=%1 Max=%2 Mean=%3 Sigma=%4 +!TP_RETINEX_TLABEL_TOOLTIP;Transmission map result.\nMin and Max are used by Variance.\nMean and Sigma\nTm=Min TM=Max of transmission map. +!TP_RETINEX_TRANSMISSION;Transmission map +!TP_RETINEX_TRANSMISSION_TOOLTIP;Transmission according to transmission.\nAbscissa: transmission from negative values (min), mean, and positives values (max).\nOrdinate: amplification or reduction. +!TP_RETINEX_UNIFORM;Uniform +!TP_RETINEX_VARIANCE;Variance +!TP_RETINEX_VARIANCE_TOOLTIP;Low variance increase local contrast and saturation, but can lead to artifacts. !TP_WAVELET_1;Level 1 !TP_WAVELET_2;Level 2 !TP_WAVELET_3;Level 3 @@ -1765,7 +1833,6 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrot: - !TP_WAVELET_BASLI;Slider !TP_WAVELET_BATYPE;Contrast balance method !TP_WAVELET_CBENAB;Toning and Color Balance -!TP_WAVELET_CBTYPE;Toning and Color Balance !TP_WAVELET_CB_TOOLTIP;For strong values product color-toning by combining it or not with levels decomposition 'toning'\nFor low values you can change the white balance of the background (sky, ...) without changing that of the front plane, generally more contrasted !TP_WAVELET_CCURVE;Local contrast !TP_WAVELET_CH1;Whole chroma range @@ -1779,7 +1846,6 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrot: - !TP_WAVELET_CHSL;Sliders !TP_WAVELET_CHTYPE;Chrominance method !TP_WAVELET_COLORT;Opacity Red-Green -!TP_WAVELET_COMBOTH;Both !TP_WAVELET_COMPCONT;Contrast !TP_WAVELET_COMPGAMMA;Compression gamma !TP_WAVELET_COMPGAMMA_TOOLTIP;Adjusting the gamma of the residual image allows you to equilibrate the data and histogram. @@ -1791,9 +1857,9 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrot: - !TP_WAVELET_CONTRA_TOOLTIP;Changes contrast of the residual image. !TP_WAVELET_CONTR;Gamut !TP_WAVELET_CTYPE;Chrominance control -!TP_WAVELET_CURVEEDITOR_CC_TOOLTIP;Modifies local contrast as a function of the original local contrast (absciss)\nLow absciss represents small local contrast (real values about 10..20)\n50% absciss represents average of local contrast (real value about 100..300)\n66% absciss represents standard deviation of local contrast (real value about 300..800)\n100% represents maximum (real value about 3000..8000) +!TP_WAVELET_CURVEEDITOR_CC_TOOLTIP;Modifies local contrast as a function of the original local contrast (abscissa).\nLow abscissa values represent small local contrast (real values about 10..20).\n50% abscissa represents average local contrast (real value about 100..300).\n66% abscissa represents standard deviation of local contrast (real value about 300..800).\n100% abscissa represents maximum local contrast (real value about 3000..8000). !TP_WAVELET_CURVEEDITOR_CH;Contrast levels=f(Hue) -!TP_WAVELET_CURVEEDITOR_CH_TOOLTIP;Modifies each level's contrast as a function oh hue.\nTake care not to overwrite changes made with the Gamut Hue controls.\nThe curve will only have an effect when wavelet contrast level sliders are non-zero. +!TP_WAVELET_CURVEEDITOR_CH_TOOLTIP;Modifies each level's contrast as a function of hue.\nTake care not to overwrite changes made with the Gamut sub-tool's hue controls.\nThe curve will only have an effect when wavelet contrast level sliders are non-zero. !TP_WAVELET_CURVEEDITOR_CL;L !TP_WAVELET_CURVEEDITOR_CL_TOOLTIP;Applies a final contrast luminance curve at the end of the wavelet treatment. !TP_WAVELET_CURVEEDITOR_HH;HH @@ -1856,7 +1922,6 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrot: - !TP_WAVELET_LEVZERO;Level 1 !TP_WAVELET_LINKEDG;Link with Edge Sharpness' Strength !TP_WAVELET_LIPST;Enhanced algoritm -!TP_WAVELET_LIPST_TOOLTIP;This algorithm uses the proximity of a pixel and eight of its neighbors. If less difference, edges are reinforced. !TP_WAVELET_LOWLIGHT;Shadow luminance range !TP_WAVELET_MEDGREINF;First level !TP_WAVELET_MEDILEV;Edge detection @@ -1903,10 +1968,6 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrot: - !TP_WAVELET_TILESIZE;Tiling method !TP_WAVELET_TILESLIT;Little tiles !TP_WAVELET_TILES_TOOLTIP;Processing the full image leads to better quality and is the recommended option, while using tiles is a fall-back solution for users with little RAM. Refer to RawPedia for memory requirements. -!TP_WAVELET_TMHIGH;High -!TP_WAVELET_TMLOWHIGH;Low+High -!TP_WAVELET_TMNONE;None -!TP_WAVELET_TMSTD;Standard !TP_WAVELET_TMSTRENGTH;Compression strength !TP_WAVELET_TMSTRENGTH_TOOLTIP;Control the strength of tone mapping or contrast compression of the residual image. When the value is different from 0, the Strength and Gamma sliders of the Tone Mapping tool in the Exposure tab will become grayed out. !TP_WAVELET_TMTYPE;Compression method diff --git a/rtdata/languages/Portugues (Brasil) b/rtdata/languages/Portugues (Brasil) index 26060cd9b..3bd28c81f 100644 --- a/rtdata/languages/Portugues (Brasil) +++ b/rtdata/languages/Portugues (Brasil) @@ -918,6 +918,26 @@ TP_WBALANCE_TEMPERATURE;Temperatura !HISTORY_MSG_404;W - ES - Base amplification !HISTORY_MSG_405;W - Denoise - Level 4 !HISTORY_MSG_406;W - ES - Neighboring pixels +!HISTORY_MSG_407;Retinex - Method +!HISTORY_MSG_408;Retinex - Neighboring +!HISTORY_MSG_409;Retinex - Gain +!HISTORY_MSG_410;Retinex - Offset +!HISTORY_MSG_411;Retinex - Strength +!HISTORY_MSG_412;Retinex - Scales +!HISTORY_MSG_413;Retinex - Variance +!HISTORY_MSG_414;Retinex - Histogram - Lab +!HISTORY_MSG_415;Retinex - Transmission +!HISTORY_MSG_416;Retinex +!HISTORY_MSG_417;Retinex - Transmission median +!HISTORY_MSG_418;Retinex - Threshold +!HISTORY_MSG_419;Retinex - Color space +!HISTORY_MSG_420;Retinex - Histogram - HSL +!HISTORY_MSG_421;Retinex - Gamma +!HISTORY_MSG_422;Retinex - Gamma +!HISTORY_MSG_423;Retinex - Gamma slope +!HISTORY_MSG_424;Retinex - HL threshold +!HISTORY_MSG_425;Retinex - Log base +!HISTORY_MSG_426;Retinex - Hue equalizer !HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s !MAIN_BUTTON_FULLSCREEN;Fullscreen !MAIN_BUTTON_NAVNEXT_TOOLTIP;Navigate to the next image relative to image opened in the Editor.\nShortcut: Shift-F4\n\nTo navigate to the next image relative to the currently selected thumbnail in the File Browser or Filmstrip:\nShortcut: F4 @@ -1000,7 +1020,6 @@ TP_WBALANCE_TEMPERATURE;Temperatura !PARTIALPASTE_FLATFIELDFILE;Flat-field file !PARTIALPASTE_GRADIENT;Graduated filter !PARTIALPASTE_HSVEQUALIZER;HSV equalizer -!PARTIALPASTE_ICMGAMMA;Output gamma !PARTIALPASTE_IMPULSEDENOISE;Impulse noise reduction !PARTIALPASTE_LABCURVE;L*a*b* adjustments !PARTIALPASTE_LENSPROFILE;Lens correction profile @@ -1022,6 +1041,7 @@ TP_WBALANCE_TEMPERATURE;Temperatura !PARTIALPASTE_RAW_DMETHOD;Demosaic method !PARTIALPASTE_RAW_FALSECOLOR;False color suppression !PARTIALPASTE_RAW_LMMSEITERATIONS;LMMSE enhancement steps +!PARTIALPASTE_RETINEX;Retinex !PARTIALPASTE_RGBCURVES;RGB curves !PARTIALPASTE_SHARPENEDGE;Edges !PARTIALPASTE_SHARPENMICRO;Microcontrast @@ -1397,7 +1417,7 @@ TP_WBALANCE_TEMPERATURE;Temperatura !TP_DIRPYRDENOISE_CCCURVE;Chrominance curve !TP_DIRPYRDENOISE_CHROMAFR;Chrominance !TP_DIRPYRDENOISE_CHROMA;Chrominance - Master -!TP_DIRPYRDENOISE_CTYPE;Auto method +!TP_DIRPYRDENOISE_CTYPE;Method !TP_DIRPYRDENOISE_CTYPE_TOOLTIP;Manual\nActs on the full image.\nYou control the noise reduction settings manually.\n\nAutomatic global\nActs on the full image.\n9 zones are used to calculate a global chrominance noise reduction setting.\n\nAutomatic multi-zones\nNo preview - works only during saving, but using the "Preview" method by matching the tile size and center to the preview size and center you can get an idea of the expected results.\nThe image is divided into tiles (about 10 to 70 depending on image size) and each tile receives its own chrominance noise reduction settings.\n\nPreview\nActs on the whole image.\nThe part of the image visible in the preview is used to calculate global chrominance noise reduction settings. !TP_DIRPYRDENOISE_CURVEEDITOR_CC;Chroma !TP_DIRPYRDENOISE_CURVEEDITOR_CC_TOOLTIP;Increase (multiply) the value of all chrominance sliders.\nThis curve lets you adjust the strength of chromatic noise reduction as a function of chromaticity, for instance to increase the action in areas of low saturation and to decrease it in those of high saturation. @@ -1655,6 +1675,54 @@ TP_WBALANCE_TEMPERATURE;Temperatura !TP_RESIZE_LANCZOS;Lanczos !TP_RESIZE_SPECIFY;Specify: !TP_RESIZE_WIDTH;Width +!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL +!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b* +!TP_RETINEX_CONTEDIT_LH;Hue equalizer +!TP_RETINEX_CURVEEDITOR_CD;L=f(L) +!TP_RETINEX_CURVEEDITOR_CD_TOOLTIP;Luminance according to luminance L=f(L)\nCorrect raw data to reduce halos and artifacts. +!TP_RETINEX_CURVEEDITOR_LH;Strength=f(H) +!TP_RETINEX_CURVEEDITOR_LH_TOOLTIP;Strength according to hue Strength=f(H)\nThis curve also acts on chroma when using the "Highlight" retinex method. +!TP_RETINEX_GAIN;Gain +!TP_RETINEX_GAIN_TOOLTIP;Acts on the transmission in combination with the offset. This is very different from the others settings. Used for black or white pixels, and to help balance the histogram. +!TP_RETINEX_GAMMA;Free gamma +!TP_RETINEX_GAMMA;Gamma +!TP_RETINEX_GAMMA_FREE;Free +!TP_RETINEX_GAMMA_HIGH;High +!TP_RETINEX_GAMMA_LOW;Low +!TP_RETINEX_GAMMA_MID;Middle +!TP_RETINEX_GAMMA_NONE;None +!TP_RETINEX_GAMMA_TOOLTIP;Restore tones by applying gamma before and after Retinex. Different from Retinex curves or others curves (Lab, Exposure, etc.). +!TP_RETINEX_HIGHLIGHT;Highlight threshold +!TP_RETINEX_HIGHLIGHT_TOOLTIP;Increase action of High algorithm.\nMay require you to re-adjust "Neighboring pixels" and to increase the "White-point correction" in the Raw tab -> Raw White Points tool. +!TP_RETINEX_HIGHLIG;Highlight +!TP_RETINEX_HIGH;High +!TP_RETINEX_HSLSPACE_LIN;HSL-Linear +!TP_RETINEX_HSLSPACE_LOG;HSL-Logarithmic +!TP_RETINEX_LABEL;Retinex +!TP_RETINEX_LABSPACE;L*a*b* +!TP_RETINEX_LOW;Low +!TP_RETINEX_MEDIAN;Transmission median filter +!TP_RETINEX_METHOD;Method +!TP_RETINEX_METHOD_TOOLTIP;Low = Reinforce low light,\nUniform = Equalize action,\nHigh = Reinforce high light,\nHighlight = Remove magenta in highlights. +!TP_RETINEX_MLABEL;Restored haze-free Min=%1 Max=%2 +!TP_RETINEX_MLABEL_TOOLTIP;Should be near min=0 max=32768\nRestored image with no mixture. +!TP_RETINEX_NEIGHBOR;Neighboring pixels +!TP_RETINEX_NEUTRAL;Reset +!TP_RETINEX_NEUTRAL_TIP;Reset all sliders and curves to their default values. +!TP_RETINEX_OFFSET;Offset +!TP_RETINEX_SETTINGS;Settings +!TP_RETINEX_SLOPE;Free gamma slope +!TP_RETINEX_STRENGTH;Strength +!TP_RETINEX_THRESHOLD;Threshold +!TP_RETINEX_THRESHOLD_TOOLTIP;Limits in/out.\nIn = image source,\nOut = image gauss. +!TP_RETINEX_TLABEL2;TM Tm=%1 TM=%2 +!TP_RETINEX_TLABEL;TM Min=%1 Max=%2 Mean=%3 Sigma=%4 +!TP_RETINEX_TLABEL_TOOLTIP;Transmission map result.\nMin and Max are used by Variance.\nMean and Sigma\nTm=Min TM=Max of transmission map. +!TP_RETINEX_TRANSMISSION;Transmission map +!TP_RETINEX_TRANSMISSION_TOOLTIP;Transmission according to transmission.\nAbscissa: transmission from negative values (min), mean, and positives values (max).\nOrdinate: amplification or reduction. +!TP_RETINEX_UNIFORM;Uniform +!TP_RETINEX_VARIANCE;Variance +!TP_RETINEX_VARIANCE_TOOLTIP;Low variance increase local contrast and saturation, but can lead to artifacts. !TP_RGBCURVES_BLUE;B !TP_RGBCURVES_CHANNEL;Channel !TP_RGBCURVES_GREEN;G @@ -1718,7 +1786,6 @@ TP_WBALANCE_TEMPERATURE;Temperatura !TP_WAVELET_BASLI;Slider !TP_WAVELET_BATYPE;Contrast balance method !TP_WAVELET_CBENAB;Toning and Color Balance -!TP_WAVELET_CBTYPE;Toning and Color Balance !TP_WAVELET_CB_TOOLTIP;For strong values product color-toning by combining it or not with levels decomposition 'toning'\nFor low values you can change the white balance of the background (sky, ...) without changing that of the front plane, generally more contrasted !TP_WAVELET_CCURVE;Local contrast !TP_WAVELET_CH1;Whole chroma range @@ -1732,7 +1799,6 @@ TP_WBALANCE_TEMPERATURE;Temperatura !TP_WAVELET_CHSL;Sliders !TP_WAVELET_CHTYPE;Chrominance method !TP_WAVELET_COLORT;Opacity Red-Green -!TP_WAVELET_COMBOTH;Both !TP_WAVELET_COMPCONT;Contrast !TP_WAVELET_COMPGAMMA;Compression gamma !TP_WAVELET_COMPGAMMA_TOOLTIP;Adjusting the gamma of the residual image allows you to equilibrate the data and histogram. @@ -1744,9 +1810,9 @@ TP_WBALANCE_TEMPERATURE;Temperatura !TP_WAVELET_CONTRA_TOOLTIP;Changes contrast of the residual image. !TP_WAVELET_CONTR;Gamut !TP_WAVELET_CTYPE;Chrominance control -!TP_WAVELET_CURVEEDITOR_CC_TOOLTIP;Modifies local contrast as a function of the original local contrast (absciss)\nLow absciss represents small local contrast (real values about 10..20)\n50% absciss represents average of local contrast (real value about 100..300)\n66% absciss represents standard deviation of local contrast (real value about 300..800)\n100% represents maximum (real value about 3000..8000) +!TP_WAVELET_CURVEEDITOR_CC_TOOLTIP;Modifies local contrast as a function of the original local contrast (abscissa).\nLow abscissa values represent small local contrast (real values about 10..20).\n50% abscissa represents average local contrast (real value about 100..300).\n66% abscissa represents standard deviation of local contrast (real value about 300..800).\n100% abscissa represents maximum local contrast (real value about 3000..8000). !TP_WAVELET_CURVEEDITOR_CH;Contrast levels=f(Hue) -!TP_WAVELET_CURVEEDITOR_CH_TOOLTIP;Modifies each level's contrast as a function oh hue.\nTake care not to overwrite changes made with the Gamut Hue controls.\nThe curve will only have an effect when wavelet contrast level sliders are non-zero. +!TP_WAVELET_CURVEEDITOR_CH_TOOLTIP;Modifies each level's contrast as a function of hue.\nTake care not to overwrite changes made with the Gamut sub-tool's hue controls.\nThe curve will only have an effect when wavelet contrast level sliders are non-zero. !TP_WAVELET_CURVEEDITOR_CL;L !TP_WAVELET_CURVEEDITOR_CL_TOOLTIP;Applies a final contrast luminance curve at the end of the wavelet treatment. !TP_WAVELET_CURVEEDITOR_HH;HH @@ -1809,7 +1875,6 @@ TP_WBALANCE_TEMPERATURE;Temperatura !TP_WAVELET_LEVZERO;Level 1 !TP_WAVELET_LINKEDG;Link with Edge Sharpness' Strength !TP_WAVELET_LIPST;Enhanced algoritm -!TP_WAVELET_LIPST_TOOLTIP;This algorithm uses the proximity of a pixel and eight of its neighbors. If less difference, edges are reinforced. !TP_WAVELET_LOWLIGHT;Shadow luminance range !TP_WAVELET_MEDGREINF;First level !TP_WAVELET_MEDILEV;Edge detection @@ -1856,10 +1921,6 @@ TP_WBALANCE_TEMPERATURE;Temperatura !TP_WAVELET_TILESIZE;Tiling method !TP_WAVELET_TILESLIT;Little tiles !TP_WAVELET_TILES_TOOLTIP;Processing the full image leads to better quality and is the recommended option, while using tiles is a fall-back solution for users with little RAM. Refer to RawPedia for memory requirements. -!TP_WAVELET_TMHIGH;High -!TP_WAVELET_TMLOWHIGH;Low+High -!TP_WAVELET_TMNONE;None -!TP_WAVELET_TMSTD;Standard !TP_WAVELET_TMSTRENGTH;Compression strength !TP_WAVELET_TMSTRENGTH_TOOLTIP;Control the strength of tone mapping or contrast compression of the residual image. When the value is different from 0, the Strength and Gamma sliders of the Tone Mapping tool in the Exposure tab will become grayed out. !TP_WAVELET_TMTYPE;Compression method diff --git a/rtdata/languages/Russian b/rtdata/languages/Russian index d75ed6995..465e9c781 100644 --- a/rtdata/languages/Russian +++ b/rtdata/languages/Russian @@ -611,7 +611,6 @@ PARTIALPASTE_FLATFIELDBLURTYPE;Тип размытия ПП PARTIALPASTE_FLATFIELDFILE;Файл плоского поля (ПП) PARTIALPASTE_GRADIENT;Градиентный фильтр PARTIALPASTE_HSVEQUALIZER;HSV Эквалайзер -PARTIALPASTE_ICMGAMMA;Выходная гамма PARTIALPASTE_ICMSETTINGS;Параметры ICM PARTIALPASTE_IMPULSEDENOISE;Подавление импульсного шума PARTIALPASTE_IPTCINFO;Данные IPTC @@ -1485,6 +1484,26 @@ ZOOMPANEL_ZOOMOUT;Удалить - !HISTORY_MSG_404;W - ES - Base amplification !HISTORY_MSG_405;W - Denoise - Level 4 !HISTORY_MSG_406;W - ES - Neighboring pixels +!HISTORY_MSG_407;Retinex - Method +!HISTORY_MSG_408;Retinex - Neighboring +!HISTORY_MSG_409;Retinex - Gain +!HISTORY_MSG_410;Retinex - Offset +!HISTORY_MSG_411;Retinex - Strength +!HISTORY_MSG_412;Retinex - Scales +!HISTORY_MSG_413;Retinex - Variance +!HISTORY_MSG_414;Retinex - Histogram - Lab +!HISTORY_MSG_415;Retinex - Transmission +!HISTORY_MSG_416;Retinex +!HISTORY_MSG_417;Retinex - Transmission median +!HISTORY_MSG_418;Retinex - Threshold +!HISTORY_MSG_419;Retinex - Color space +!HISTORY_MSG_420;Retinex - Histogram - HSL +!HISTORY_MSG_421;Retinex - Gamma +!HISTORY_MSG_422;Retinex - Gamma +!HISTORY_MSG_423;Retinex - Gamma slope +!HISTORY_MSG_424;Retinex - HL threshold +!HISTORY_MSG_425;Retinex - Log base +!HISTORY_MSG_426;Retinex - Hue equalizer !MAIN_TAB_INSPECT; Inspect !MAIN_TAB_WAVELET;Wavelet !MAIN_TAB_WAVELET_TOOLTIP;Shortcut: Alt-w @@ -1505,6 +1524,7 @@ ZOOMPANEL_ZOOMOUT;Удалить - !PARTIALPASTE_FLATFIELDCLIPCONTROL;Flat-field clip control !PARTIALPASTE_PREPROCESS_DEADPIXFILT;Dead pixel filter !PARTIALPASTE_PREPROCESS_HOTPIXFILT;Hot pixel filter +!PARTIALPASTE_RETINEX;Retinex !PARTIALPASTE_WAVELETGROUP;Wavelet Levels !PREFERENCES_AUTLISLOW;Low !PREFERENCES_AUTLISMAX;Max - Average of all tiles @@ -1655,7 +1675,7 @@ ZOOMPANEL_ZOOMOUT;Удалить - !TP_DIRPYRDENOISE_C2TYPE_TOOLTIP;Manual\nActs on the full image.\nYou control the noise reduction settings manually.\n\nAutomatic global\nActs on the full image.\n9 zones are used to calculate a global chrominance noise reduction setting.\n\nPreview\nActs on the whole image.\nThe part of the image visible in the preview is used to calculate global chrominance noise reduction settings. !TP_DIRPYRDENOISE_CCCURVE;Chrominance curve !TP_DIRPYRDENOISE_CHROMAFR;Chrominance -!TP_DIRPYRDENOISE_CTYPE;Auto method +!TP_DIRPYRDENOISE_CTYPE;Method !TP_DIRPYRDENOISE_CTYPE_TOOLTIP;Manual\nActs on the full image.\nYou control the noise reduction settings manually.\n\nAutomatic global\nActs on the full image.\n9 zones are used to calculate a global chrominance noise reduction setting.\n\nAutomatic multi-zones\nNo preview - works only during saving, but using the "Preview" method by matching the tile size and center to the preview size and center you can get an idea of the expected results.\nThe image is divided into tiles (about 10 to 70 depending on image size) and each tile receives its own chrominance noise reduction settings.\n\nPreview\nActs on the whole image.\nThe part of the image visible in the preview is used to calculate global chrominance noise reduction settings. !TP_DIRPYRDENOISE_CURVEEDITOR_CC;Chroma !TP_DIRPYRDENOISE_CURVEEDITOR_CC_TOOLTIP;Increase (multiply) the value of all chrominance sliders.\nThis curve lets you adjust the strength of chromatic noise reduction as a function of chromaticity, for instance to increase the action in areas of low saturation and to decrease it in those of high saturation. @@ -1739,6 +1759,54 @@ ZOOMPANEL_ZOOMOUT;Удалить - !TP_RAW_SENSOR_BAYER_LABEL;Sensor with Bayer Matrix !TP_RAW_SENSOR_XTRANS_DMETHOD_TOOLTIP;3-pass gives best results (recommended for low ISO images).\n1-pass is almost undistinguishable from 3-pass for high ISO images and is faster. !TP_RAW_SENSOR_XTRANS_LABEL;Sensor with X-Trans Matrix +!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL +!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b* +!TP_RETINEX_CONTEDIT_LH;Hue equalizer +!TP_RETINEX_CURVEEDITOR_CD;L=f(L) +!TP_RETINEX_CURVEEDITOR_CD_TOOLTIP;Luminance according to luminance L=f(L)\nCorrect raw data to reduce halos and artifacts. +!TP_RETINEX_CURVEEDITOR_LH;Strength=f(H) +!TP_RETINEX_CURVEEDITOR_LH_TOOLTIP;Strength according to hue Strength=f(H)\nThis curve also acts on chroma when using the "Highlight" retinex method. +!TP_RETINEX_GAIN;Gain +!TP_RETINEX_GAIN_TOOLTIP;Acts on the transmission in combination with the offset. This is very different from the others settings. Used for black or white pixels, and to help balance the histogram. +!TP_RETINEX_GAMMA;Free gamma +!TP_RETINEX_GAMMA;Gamma +!TP_RETINEX_GAMMA_FREE;Free +!TP_RETINEX_GAMMA_HIGH;High +!TP_RETINEX_GAMMA_LOW;Low +!TP_RETINEX_GAMMA_MID;Middle +!TP_RETINEX_GAMMA_NONE;None +!TP_RETINEX_GAMMA_TOOLTIP;Restore tones by applying gamma before and after Retinex. Different from Retinex curves or others curves (Lab, Exposure, etc.). +!TP_RETINEX_HIGHLIGHT;Highlight threshold +!TP_RETINEX_HIGHLIGHT_TOOLTIP;Increase action of High algorithm.\nMay require you to re-adjust "Neighboring pixels" and to increase the "White-point correction" in the Raw tab -> Raw White Points tool. +!TP_RETINEX_HIGHLIG;Highlight +!TP_RETINEX_HIGH;High +!TP_RETINEX_HSLSPACE_LIN;HSL-Linear +!TP_RETINEX_HSLSPACE_LOG;HSL-Logarithmic +!TP_RETINEX_LABEL;Retinex +!TP_RETINEX_LABSPACE;L*a*b* +!TP_RETINEX_LOW;Low +!TP_RETINEX_MEDIAN;Transmission median filter +!TP_RETINEX_METHOD;Method +!TP_RETINEX_METHOD_TOOLTIP;Low = Reinforce low light,\nUniform = Equalize action,\nHigh = Reinforce high light,\nHighlight = Remove magenta in highlights. +!TP_RETINEX_MLABEL;Restored haze-free Min=%1 Max=%2 +!TP_RETINEX_MLABEL_TOOLTIP;Should be near min=0 max=32768\nRestored image with no mixture. +!TP_RETINEX_NEIGHBOR;Neighboring pixels +!TP_RETINEX_NEUTRAL;Reset +!TP_RETINEX_NEUTRAL_TIP;Reset all sliders and curves to their default values. +!TP_RETINEX_OFFSET;Offset +!TP_RETINEX_SETTINGS;Settings +!TP_RETINEX_SLOPE;Free gamma slope +!TP_RETINEX_STRENGTH;Strength +!TP_RETINEX_THRESHOLD;Threshold +!TP_RETINEX_THRESHOLD_TOOLTIP;Limits in/out.\nIn = image source,\nOut = image gauss. +!TP_RETINEX_TLABEL2;TM Tm=%1 TM=%2 +!TP_RETINEX_TLABEL;TM Min=%1 Max=%2 Mean=%3 Sigma=%4 +!TP_RETINEX_TLABEL_TOOLTIP;Transmission map result.\nMin and Max are used by Variance.\nMean and Sigma\nTm=Min TM=Max of transmission map. +!TP_RETINEX_TRANSMISSION;Transmission map +!TP_RETINEX_TRANSMISSION_TOOLTIP;Transmission according to transmission.\nAbscissa: transmission from negative values (min), mean, and positives values (max).\nOrdinate: amplification or reduction. +!TP_RETINEX_UNIFORM;Uniform +!TP_RETINEX_VARIANCE;Variance +!TP_RETINEX_VARIANCE_TOOLTIP;Low variance increase local contrast and saturation, but can lead to artifacts. !TP_WAVELET_1;Level 1 !TP_WAVELET_2;Level 2 !TP_WAVELET_3;Level 3 @@ -1763,7 +1831,6 @@ ZOOMPANEL_ZOOMOUT;Удалить - !TP_WAVELET_BASLI;Slider !TP_WAVELET_BATYPE;Contrast balance method !TP_WAVELET_CBENAB;Toning and Color Balance -!TP_WAVELET_CBTYPE;Toning and Color Balance !TP_WAVELET_CB_TOOLTIP;For strong values product color-toning by combining it or not with levels decomposition 'toning'\nFor low values you can change the white balance of the background (sky, ...) without changing that of the front plane, generally more contrasted !TP_WAVELET_CCURVE;Local contrast !TP_WAVELET_CH1;Whole chroma range @@ -1777,7 +1844,6 @@ ZOOMPANEL_ZOOMOUT;Удалить - !TP_WAVELET_CHSL;Sliders !TP_WAVELET_CHTYPE;Chrominance method !TP_WAVELET_COLORT;Opacity Red-Green -!TP_WAVELET_COMBOTH;Both !TP_WAVELET_COMPCONT;Contrast !TP_WAVELET_COMPGAMMA;Compression gamma !TP_WAVELET_COMPGAMMA_TOOLTIP;Adjusting the gamma of the residual image allows you to equilibrate the data and histogram. @@ -1789,9 +1855,9 @@ ZOOMPANEL_ZOOMOUT;Удалить - !TP_WAVELET_CONTRA_TOOLTIP;Changes contrast of the residual image. !TP_WAVELET_CONTR;Gamut !TP_WAVELET_CTYPE;Chrominance control -!TP_WAVELET_CURVEEDITOR_CC_TOOLTIP;Modifies local contrast as a function of the original local contrast (absciss)\nLow absciss represents small local contrast (real values about 10..20)\n50% absciss represents average of local contrast (real value about 100..300)\n66% absciss represents standard deviation of local contrast (real value about 300..800)\n100% represents maximum (real value about 3000..8000) +!TP_WAVELET_CURVEEDITOR_CC_TOOLTIP;Modifies local contrast as a function of the original local contrast (abscissa).\nLow abscissa values represent small local contrast (real values about 10..20).\n50% abscissa represents average local contrast (real value about 100..300).\n66% abscissa represents standard deviation of local contrast (real value about 300..800).\n100% abscissa represents maximum local contrast (real value about 3000..8000). !TP_WAVELET_CURVEEDITOR_CH;Contrast levels=f(Hue) -!TP_WAVELET_CURVEEDITOR_CH_TOOLTIP;Modifies each level's contrast as a function oh hue.\nTake care not to overwrite changes made with the Gamut Hue controls.\nThe curve will only have an effect when wavelet contrast level sliders are non-zero. +!TP_WAVELET_CURVEEDITOR_CH_TOOLTIP;Modifies each level's contrast as a function of hue.\nTake care not to overwrite changes made with the Gamut sub-tool's hue controls.\nThe curve will only have an effect when wavelet contrast level sliders are non-zero. !TP_WAVELET_CURVEEDITOR_CL;L !TP_WAVELET_CURVEEDITOR_CL_TOOLTIP;Applies a final contrast luminance curve at the end of the wavelet treatment. !TP_WAVELET_CURVEEDITOR_HH;HH @@ -1854,7 +1920,6 @@ ZOOMPANEL_ZOOMOUT;Удалить - !TP_WAVELET_LEVZERO;Level 1 !TP_WAVELET_LINKEDG;Link with Edge Sharpness' Strength !TP_WAVELET_LIPST;Enhanced algoritm -!TP_WAVELET_LIPST_TOOLTIP;This algorithm uses the proximity of a pixel and eight of its neighbors. If less difference, edges are reinforced. !TP_WAVELET_LOWLIGHT;Shadow luminance range !TP_WAVELET_MEDGREINF;First level !TP_WAVELET_MEDILEV;Edge detection @@ -1901,10 +1966,6 @@ ZOOMPANEL_ZOOMOUT;Удалить - !TP_WAVELET_TILESIZE;Tiling method !TP_WAVELET_TILESLIT;Little tiles !TP_WAVELET_TILES_TOOLTIP;Processing the full image leads to better quality and is the recommended option, while using tiles is a fall-back solution for users with little RAM. Refer to RawPedia for memory requirements. -!TP_WAVELET_TMHIGH;High -!TP_WAVELET_TMLOWHIGH;Low+High -!TP_WAVELET_TMNONE;None -!TP_WAVELET_TMSTD;Standard !TP_WAVELET_TMSTRENGTH;Compression strength !TP_WAVELET_TMSTRENGTH_TOOLTIP;Control the strength of tone mapping or contrast compression of the residual image. When the value is different from 0, the Strength and Gamma sliders of the Tone Mapping tool in the Exposure tab will become grayed out. !TP_WAVELET_TMTYPE;Compression method diff --git a/rtdata/languages/Serbian (Cyrilic Characters) b/rtdata/languages/Serbian (Cyrilic Characters) index f2c537d7c..344818259 100644 --- a/rtdata/languages/Serbian (Cyrilic Characters) +++ b/rtdata/languages/Serbian (Cyrilic Characters) @@ -1123,6 +1123,26 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !HISTORY_MSG_404;W - ES - Base amplification !HISTORY_MSG_405;W - Denoise - Level 4 !HISTORY_MSG_406;W - ES - Neighboring pixels +!HISTORY_MSG_407;Retinex - Method +!HISTORY_MSG_408;Retinex - Neighboring +!HISTORY_MSG_409;Retinex - Gain +!HISTORY_MSG_410;Retinex - Offset +!HISTORY_MSG_411;Retinex - Strength +!HISTORY_MSG_412;Retinex - Scales +!HISTORY_MSG_413;Retinex - Variance +!HISTORY_MSG_414;Retinex - Histogram - Lab +!HISTORY_MSG_415;Retinex - Transmission +!HISTORY_MSG_416;Retinex +!HISTORY_MSG_417;Retinex - Transmission median +!HISTORY_MSG_418;Retinex - Threshold +!HISTORY_MSG_419;Retinex - Color space +!HISTORY_MSG_420;Retinex - Histogram - HSL +!HISTORY_MSG_421;Retinex - Gamma +!HISTORY_MSG_422;Retinex - Gamma +!HISTORY_MSG_423;Retinex - Gamma slope +!HISTORY_MSG_424;Retinex - HL threshold +!HISTORY_MSG_425;Retinex - Log base +!HISTORY_MSG_426;Retinex - Hue equalizer !HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s !MAIN_BUTTON_NAVNEXT_TOOLTIP;Navigate to the next image relative to image opened in the Editor.\nShortcut: Shift-F4\n\nTo navigate to the next image relative to the currently selected thumbnail in the File Browser or Filmstrip:\nShortcut: F4 !MAIN_BUTTON_NAVPREV_TOOLTIP;Navigate to the previous image relative to image opened in the Editor.\nShortcut: Shift-F3\n\nTo navigate to the previous image relative to the currently selected thumbnail in the File Browser or Filmstrip:\nShortcut: F3 @@ -1167,12 +1187,12 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !PARTIALPASTE_FILMSIMULATION;Film simulation !PARTIALPASTE_FLATFIELDCLIPCONTROL;Flat-field clip control !PARTIALPASTE_GRADIENT;Graduated filter -!PARTIALPASTE_ICMGAMMA;Output gamma !PARTIALPASTE_LENSPROFILE;Lens correction profile !PARTIALPASTE_PCVIGNETTE;Vignette filter !PARTIALPASTE_PREPROCESS_DEADPIXFILT;Dead pixel filter !PARTIALPASTE_PREPROCESS_HOTPIXFILT;Hot pixel filter !PARTIALPASTE_RAW_LMMSEITERATIONS;LMMSE enhancement steps +!PARTIALPASTE_RETINEX;Retinex !PARTIALPASTE_RGBCURVES;RGB curves !PARTIALPASTE_VIBRANCE;Vibrance !PARTIALPASTE_WAVELETGROUP;Wavelet Levels @@ -1484,7 +1504,7 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !TP_DIRPYRDENOISE_C2TYPE_TOOLTIP;Manual\nActs on the full image.\nYou control the noise reduction settings manually.\n\nAutomatic global\nActs on the full image.\n9 zones are used to calculate a global chrominance noise reduction setting.\n\nPreview\nActs on the whole image.\nThe part of the image visible in the preview is used to calculate global chrominance noise reduction settings. !TP_DIRPYRDENOISE_CCCURVE;Chrominance curve !TP_DIRPYRDENOISE_CHROMAFR;Chrominance -!TP_DIRPYRDENOISE_CTYPE;Auto method +!TP_DIRPYRDENOISE_CTYPE;Method !TP_DIRPYRDENOISE_CTYPE_TOOLTIP;Manual\nActs on the full image.\nYou control the noise reduction settings manually.\n\nAutomatic global\nActs on the full image.\n9 zones are used to calculate a global chrominance noise reduction setting.\n\nAutomatic multi-zones\nNo preview - works only during saving, but using the "Preview" method by matching the tile size and center to the preview size and center you can get an idea of the expected results.\nThe image is divided into tiles (about 10 to 70 depending on image size) and each tile receives its own chrominance noise reduction settings.\n\nPreview\nActs on the whole image.\nThe part of the image visible in the preview is used to calculate global chrominance noise reduction settings. !TP_DIRPYRDENOISE_CURVEEDITOR_CC;Chroma !TP_DIRPYRDENOISE_CURVEEDITOR_CC_TOOLTIP;Increase (multiply) the value of all chrominance sliders.\nThis curve lets you adjust the strength of chromatic noise reduction as a function of chromaticity, for instance to increase the action in areas of low saturation and to decrease it in those of high saturation. @@ -1673,6 +1693,54 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !TP_RAW_SENSOR_BAYER_LABEL;Sensor with Bayer Matrix !TP_RAW_SENSOR_XTRANS_DMETHOD_TOOLTIP;3-pass gives best results (recommended for low ISO images).\n1-pass is almost undistinguishable from 3-pass for high ISO images and is faster. !TP_RAW_SENSOR_XTRANS_LABEL;Sensor with X-Trans Matrix +!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL +!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b* +!TP_RETINEX_CONTEDIT_LH;Hue equalizer +!TP_RETINEX_CURVEEDITOR_CD;L=f(L) +!TP_RETINEX_CURVEEDITOR_CD_TOOLTIP;Luminance according to luminance L=f(L)\nCorrect raw data to reduce halos and artifacts. +!TP_RETINEX_CURVEEDITOR_LH;Strength=f(H) +!TP_RETINEX_CURVEEDITOR_LH_TOOLTIP;Strength according to hue Strength=f(H)\nThis curve also acts on chroma when using the "Highlight" retinex method. +!TP_RETINEX_GAIN;Gain +!TP_RETINEX_GAIN_TOOLTIP;Acts on the transmission in combination with the offset. This is very different from the others settings. Used for black or white pixels, and to help balance the histogram. +!TP_RETINEX_GAMMA;Free gamma +!TP_RETINEX_GAMMA;Gamma +!TP_RETINEX_GAMMA_FREE;Free +!TP_RETINEX_GAMMA_HIGH;High +!TP_RETINEX_GAMMA_LOW;Low +!TP_RETINEX_GAMMA_MID;Middle +!TP_RETINEX_GAMMA_NONE;None +!TP_RETINEX_GAMMA_TOOLTIP;Restore tones by applying gamma before and after Retinex. Different from Retinex curves or others curves (Lab, Exposure, etc.). +!TP_RETINEX_HIGHLIGHT;Highlight threshold +!TP_RETINEX_HIGHLIGHT_TOOLTIP;Increase action of High algorithm.\nMay require you to re-adjust "Neighboring pixels" and to increase the "White-point correction" in the Raw tab -> Raw White Points tool. +!TP_RETINEX_HIGHLIG;Highlight +!TP_RETINEX_HIGH;High +!TP_RETINEX_HSLSPACE_LIN;HSL-Linear +!TP_RETINEX_HSLSPACE_LOG;HSL-Logarithmic +!TP_RETINEX_LABEL;Retinex +!TP_RETINEX_LABSPACE;L*a*b* +!TP_RETINEX_LOW;Low +!TP_RETINEX_MEDIAN;Transmission median filter +!TP_RETINEX_METHOD;Method +!TP_RETINEX_METHOD_TOOLTIP;Low = Reinforce low light,\nUniform = Equalize action,\nHigh = Reinforce high light,\nHighlight = Remove magenta in highlights. +!TP_RETINEX_MLABEL;Restored haze-free Min=%1 Max=%2 +!TP_RETINEX_MLABEL_TOOLTIP;Should be near min=0 max=32768\nRestored image with no mixture. +!TP_RETINEX_NEIGHBOR;Neighboring pixels +!TP_RETINEX_NEUTRAL;Reset +!TP_RETINEX_NEUTRAL_TIP;Reset all sliders and curves to their default values. +!TP_RETINEX_OFFSET;Offset +!TP_RETINEX_SETTINGS;Settings +!TP_RETINEX_SLOPE;Free gamma slope +!TP_RETINEX_STRENGTH;Strength +!TP_RETINEX_THRESHOLD;Threshold +!TP_RETINEX_THRESHOLD_TOOLTIP;Limits in/out.\nIn = image source,\nOut = image gauss. +!TP_RETINEX_TLABEL2;TM Tm=%1 TM=%2 +!TP_RETINEX_TLABEL;TM Min=%1 Max=%2 Mean=%3 Sigma=%4 +!TP_RETINEX_TLABEL_TOOLTIP;Transmission map result.\nMin and Max are used by Variance.\nMean and Sigma\nTm=Min TM=Max of transmission map. +!TP_RETINEX_TRANSMISSION;Transmission map +!TP_RETINEX_TRANSMISSION_TOOLTIP;Transmission according to transmission.\nAbscissa: transmission from negative values (min), mean, and positives values (max).\nOrdinate: amplification or reduction. +!TP_RETINEX_UNIFORM;Uniform +!TP_RETINEX_VARIANCE;Variance +!TP_RETINEX_VARIANCE_TOOLTIP;Low variance increase local contrast and saturation, but can lead to artifacts. !TP_RGBCURVES_BLUE;B !TP_RGBCURVES_CHANNEL;Channel !TP_RGBCURVES_GREEN;G @@ -1724,7 +1792,6 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !TP_WAVELET_BASLI;Slider !TP_WAVELET_BATYPE;Contrast balance method !TP_WAVELET_CBENAB;Toning and Color Balance -!TP_WAVELET_CBTYPE;Toning and Color Balance !TP_WAVELET_CB_TOOLTIP;For strong values product color-toning by combining it or not with levels decomposition 'toning'\nFor low values you can change the white balance of the background (sky, ...) without changing that of the front plane, generally more contrasted !TP_WAVELET_CCURVE;Local contrast !TP_WAVELET_CH1;Whole chroma range @@ -1738,7 +1805,6 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !TP_WAVELET_CHSL;Sliders !TP_WAVELET_CHTYPE;Chrominance method !TP_WAVELET_COLORT;Opacity Red-Green -!TP_WAVELET_COMBOTH;Both !TP_WAVELET_COMPCONT;Contrast !TP_WAVELET_COMPGAMMA;Compression gamma !TP_WAVELET_COMPGAMMA_TOOLTIP;Adjusting the gamma of the residual image allows you to equilibrate the data and histogram. @@ -1750,9 +1816,9 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !TP_WAVELET_CONTRA_TOOLTIP;Changes contrast of the residual image. !TP_WAVELET_CONTR;Gamut !TP_WAVELET_CTYPE;Chrominance control -!TP_WAVELET_CURVEEDITOR_CC_TOOLTIP;Modifies local contrast as a function of the original local contrast (absciss)\nLow absciss represents small local contrast (real values about 10..20)\n50% absciss represents average of local contrast (real value about 100..300)\n66% absciss represents standard deviation of local contrast (real value about 300..800)\n100% represents maximum (real value about 3000..8000) +!TP_WAVELET_CURVEEDITOR_CC_TOOLTIP;Modifies local contrast as a function of the original local contrast (abscissa).\nLow abscissa values represent small local contrast (real values about 10..20).\n50% abscissa represents average local contrast (real value about 100..300).\n66% abscissa represents standard deviation of local contrast (real value about 300..800).\n100% abscissa represents maximum local contrast (real value about 3000..8000). !TP_WAVELET_CURVEEDITOR_CH;Contrast levels=f(Hue) -!TP_WAVELET_CURVEEDITOR_CH_TOOLTIP;Modifies each level's contrast as a function oh hue.\nTake care not to overwrite changes made with the Gamut Hue controls.\nThe curve will only have an effect when wavelet contrast level sliders are non-zero. +!TP_WAVELET_CURVEEDITOR_CH_TOOLTIP;Modifies each level's contrast as a function of hue.\nTake care not to overwrite changes made with the Gamut sub-tool's hue controls.\nThe curve will only have an effect when wavelet contrast level sliders are non-zero. !TP_WAVELET_CURVEEDITOR_CL;L !TP_WAVELET_CURVEEDITOR_CL_TOOLTIP;Applies a final contrast luminance curve at the end of the wavelet treatment. !TP_WAVELET_CURVEEDITOR_HH;HH @@ -1815,7 +1881,6 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !TP_WAVELET_LEVZERO;Level 1 !TP_WAVELET_LINKEDG;Link with Edge Sharpness' Strength !TP_WAVELET_LIPST;Enhanced algoritm -!TP_WAVELET_LIPST_TOOLTIP;This algorithm uses the proximity of a pixel and eight of its neighbors. If less difference, edges are reinforced. !TP_WAVELET_LOWLIGHT;Shadow luminance range !TP_WAVELET_MEDGREINF;First level !TP_WAVELET_MEDILEV;Edge detection @@ -1862,10 +1927,6 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !TP_WAVELET_TILESIZE;Tiling method !TP_WAVELET_TILESLIT;Little tiles !TP_WAVELET_TILES_TOOLTIP;Processing the full image leads to better quality and is the recommended option, while using tiles is a fall-back solution for users with little RAM. Refer to RawPedia for memory requirements. -!TP_WAVELET_TMHIGH;High -!TP_WAVELET_TMLOWHIGH;Low+High -!TP_WAVELET_TMNONE;None -!TP_WAVELET_TMSTD;Standard !TP_WAVELET_TMSTRENGTH;Compression strength !TP_WAVELET_TMSTRENGTH_TOOLTIP;Control the strength of tone mapping or contrast compression of the residual image. When the value is different from 0, the Strength and Gamma sliders of the Tone Mapping tool in the Exposure tab will become grayed out. !TP_WAVELET_TMTYPE;Compression method diff --git a/rtdata/languages/Serbian (Latin Characters) b/rtdata/languages/Serbian (Latin Characters) index 049923837..dab79ad6b 100644 --- a/rtdata/languages/Serbian (Latin Characters) +++ b/rtdata/languages/Serbian (Latin Characters) @@ -1123,6 +1123,26 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike - !HISTORY_MSG_404;W - ES - Base amplification !HISTORY_MSG_405;W - Denoise - Level 4 !HISTORY_MSG_406;W - ES - Neighboring pixels +!HISTORY_MSG_407;Retinex - Method +!HISTORY_MSG_408;Retinex - Neighboring +!HISTORY_MSG_409;Retinex - Gain +!HISTORY_MSG_410;Retinex - Offset +!HISTORY_MSG_411;Retinex - Strength +!HISTORY_MSG_412;Retinex - Scales +!HISTORY_MSG_413;Retinex - Variance +!HISTORY_MSG_414;Retinex - Histogram - Lab +!HISTORY_MSG_415;Retinex - Transmission +!HISTORY_MSG_416;Retinex +!HISTORY_MSG_417;Retinex - Transmission median +!HISTORY_MSG_418;Retinex - Threshold +!HISTORY_MSG_419;Retinex - Color space +!HISTORY_MSG_420;Retinex - Histogram - HSL +!HISTORY_MSG_421;Retinex - Gamma +!HISTORY_MSG_422;Retinex - Gamma +!HISTORY_MSG_423;Retinex - Gamma slope +!HISTORY_MSG_424;Retinex - HL threshold +!HISTORY_MSG_425;Retinex - Log base +!HISTORY_MSG_426;Retinex - Hue equalizer !HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s !MAIN_BUTTON_NAVNEXT_TOOLTIP;Navigate to the next image relative to image opened in the Editor.\nShortcut: Shift-F4\n\nTo navigate to the next image relative to the currently selected thumbnail in the File Browser or Filmstrip:\nShortcut: F4 !MAIN_BUTTON_NAVPREV_TOOLTIP;Navigate to the previous image relative to image opened in the Editor.\nShortcut: Shift-F3\n\nTo navigate to the previous image relative to the currently selected thumbnail in the File Browser or Filmstrip:\nShortcut: F3 @@ -1167,12 +1187,12 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike - !PARTIALPASTE_FILMSIMULATION;Film simulation !PARTIALPASTE_FLATFIELDCLIPCONTROL;Flat-field clip control !PARTIALPASTE_GRADIENT;Graduated filter -!PARTIALPASTE_ICMGAMMA;Output gamma !PARTIALPASTE_LENSPROFILE;Lens correction profile !PARTIALPASTE_PCVIGNETTE;Vignette filter !PARTIALPASTE_PREPROCESS_DEADPIXFILT;Dead pixel filter !PARTIALPASTE_PREPROCESS_HOTPIXFILT;Hot pixel filter !PARTIALPASTE_RAW_LMMSEITERATIONS;LMMSE enhancement steps +!PARTIALPASTE_RETINEX;Retinex !PARTIALPASTE_RGBCURVES;RGB curves !PARTIALPASTE_VIBRANCE;Vibrance !PARTIALPASTE_WAVELETGROUP;Wavelet Levels @@ -1484,7 +1504,7 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike - !TP_DIRPYRDENOISE_C2TYPE_TOOLTIP;Manual\nActs on the full image.\nYou control the noise reduction settings manually.\n\nAutomatic global\nActs on the full image.\n9 zones are used to calculate a global chrominance noise reduction setting.\n\nPreview\nActs on the whole image.\nThe part of the image visible in the preview is used to calculate global chrominance noise reduction settings. !TP_DIRPYRDENOISE_CCCURVE;Chrominance curve !TP_DIRPYRDENOISE_CHROMAFR;Chrominance -!TP_DIRPYRDENOISE_CTYPE;Auto method +!TP_DIRPYRDENOISE_CTYPE;Method !TP_DIRPYRDENOISE_CTYPE_TOOLTIP;Manual\nActs on the full image.\nYou control the noise reduction settings manually.\n\nAutomatic global\nActs on the full image.\n9 zones are used to calculate a global chrominance noise reduction setting.\n\nAutomatic multi-zones\nNo preview - works only during saving, but using the "Preview" method by matching the tile size and center to the preview size and center you can get an idea of the expected results.\nThe image is divided into tiles (about 10 to 70 depending on image size) and each tile receives its own chrominance noise reduction settings.\n\nPreview\nActs on the whole image.\nThe part of the image visible in the preview is used to calculate global chrominance noise reduction settings. !TP_DIRPYRDENOISE_CURVEEDITOR_CC;Chroma !TP_DIRPYRDENOISE_CURVEEDITOR_CC_TOOLTIP;Increase (multiply) the value of all chrominance sliders.\nThis curve lets you adjust the strength of chromatic noise reduction as a function of chromaticity, for instance to increase the action in areas of low saturation and to decrease it in those of high saturation. @@ -1673,6 +1693,54 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike - !TP_RAW_SENSOR_BAYER_LABEL;Sensor with Bayer Matrix !TP_RAW_SENSOR_XTRANS_DMETHOD_TOOLTIP;3-pass gives best results (recommended for low ISO images).\n1-pass is almost undistinguishable from 3-pass for high ISO images and is faster. !TP_RAW_SENSOR_XTRANS_LABEL;Sensor with X-Trans Matrix +!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL +!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b* +!TP_RETINEX_CONTEDIT_LH;Hue equalizer +!TP_RETINEX_CURVEEDITOR_CD;L=f(L) +!TP_RETINEX_CURVEEDITOR_CD_TOOLTIP;Luminance according to luminance L=f(L)\nCorrect raw data to reduce halos and artifacts. +!TP_RETINEX_CURVEEDITOR_LH;Strength=f(H) +!TP_RETINEX_CURVEEDITOR_LH_TOOLTIP;Strength according to hue Strength=f(H)\nThis curve also acts on chroma when using the "Highlight" retinex method. +!TP_RETINEX_GAIN;Gain +!TP_RETINEX_GAIN_TOOLTIP;Acts on the transmission in combination with the offset. This is very different from the others settings. Used for black or white pixels, and to help balance the histogram. +!TP_RETINEX_GAMMA;Free gamma +!TP_RETINEX_GAMMA;Gamma +!TP_RETINEX_GAMMA_FREE;Free +!TP_RETINEX_GAMMA_HIGH;High +!TP_RETINEX_GAMMA_LOW;Low +!TP_RETINEX_GAMMA_MID;Middle +!TP_RETINEX_GAMMA_NONE;None +!TP_RETINEX_GAMMA_TOOLTIP;Restore tones by applying gamma before and after Retinex. Different from Retinex curves or others curves (Lab, Exposure, etc.). +!TP_RETINEX_HIGHLIGHT;Highlight threshold +!TP_RETINEX_HIGHLIGHT_TOOLTIP;Increase action of High algorithm.\nMay require you to re-adjust "Neighboring pixels" and to increase the "White-point correction" in the Raw tab -> Raw White Points tool. +!TP_RETINEX_HIGHLIG;Highlight +!TP_RETINEX_HIGH;High +!TP_RETINEX_HSLSPACE_LIN;HSL-Linear +!TP_RETINEX_HSLSPACE_LOG;HSL-Logarithmic +!TP_RETINEX_LABEL;Retinex +!TP_RETINEX_LABSPACE;L*a*b* +!TP_RETINEX_LOW;Low +!TP_RETINEX_MEDIAN;Transmission median filter +!TP_RETINEX_METHOD;Method +!TP_RETINEX_METHOD_TOOLTIP;Low = Reinforce low light,\nUniform = Equalize action,\nHigh = Reinforce high light,\nHighlight = Remove magenta in highlights. +!TP_RETINEX_MLABEL;Restored haze-free Min=%1 Max=%2 +!TP_RETINEX_MLABEL_TOOLTIP;Should be near min=0 max=32768\nRestored image with no mixture. +!TP_RETINEX_NEIGHBOR;Neighboring pixels +!TP_RETINEX_NEUTRAL;Reset +!TP_RETINEX_NEUTRAL_TIP;Reset all sliders and curves to their default values. +!TP_RETINEX_OFFSET;Offset +!TP_RETINEX_SETTINGS;Settings +!TP_RETINEX_SLOPE;Free gamma slope +!TP_RETINEX_STRENGTH;Strength +!TP_RETINEX_THRESHOLD;Threshold +!TP_RETINEX_THRESHOLD_TOOLTIP;Limits in/out.\nIn = image source,\nOut = image gauss. +!TP_RETINEX_TLABEL2;TM Tm=%1 TM=%2 +!TP_RETINEX_TLABEL;TM Min=%1 Max=%2 Mean=%3 Sigma=%4 +!TP_RETINEX_TLABEL_TOOLTIP;Transmission map result.\nMin and Max are used by Variance.\nMean and Sigma\nTm=Min TM=Max of transmission map. +!TP_RETINEX_TRANSMISSION;Transmission map +!TP_RETINEX_TRANSMISSION_TOOLTIP;Transmission according to transmission.\nAbscissa: transmission from negative values (min), mean, and positives values (max).\nOrdinate: amplification or reduction. +!TP_RETINEX_UNIFORM;Uniform +!TP_RETINEX_VARIANCE;Variance +!TP_RETINEX_VARIANCE_TOOLTIP;Low variance increase local contrast and saturation, but can lead to artifacts. !TP_RGBCURVES_BLUE;B !TP_RGBCURVES_CHANNEL;Channel !TP_RGBCURVES_GREEN;G @@ -1724,7 +1792,6 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike - !TP_WAVELET_BASLI;Slider !TP_WAVELET_BATYPE;Contrast balance method !TP_WAVELET_CBENAB;Toning and Color Balance -!TP_WAVELET_CBTYPE;Toning and Color Balance !TP_WAVELET_CB_TOOLTIP;For strong values product color-toning by combining it or not with levels decomposition 'toning'\nFor low values you can change the white balance of the background (sky, ...) without changing that of the front plane, generally more contrasted !TP_WAVELET_CCURVE;Local contrast !TP_WAVELET_CH1;Whole chroma range @@ -1738,7 +1805,6 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike - !TP_WAVELET_CHSL;Sliders !TP_WAVELET_CHTYPE;Chrominance method !TP_WAVELET_COLORT;Opacity Red-Green -!TP_WAVELET_COMBOTH;Both !TP_WAVELET_COMPCONT;Contrast !TP_WAVELET_COMPGAMMA;Compression gamma !TP_WAVELET_COMPGAMMA_TOOLTIP;Adjusting the gamma of the residual image allows you to equilibrate the data and histogram. @@ -1750,9 +1816,9 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike - !TP_WAVELET_CONTRA_TOOLTIP;Changes contrast of the residual image. !TP_WAVELET_CONTR;Gamut !TP_WAVELET_CTYPE;Chrominance control -!TP_WAVELET_CURVEEDITOR_CC_TOOLTIP;Modifies local contrast as a function of the original local contrast (absciss)\nLow absciss represents small local contrast (real values about 10..20)\n50% absciss represents average of local contrast (real value about 100..300)\n66% absciss represents standard deviation of local contrast (real value about 300..800)\n100% represents maximum (real value about 3000..8000) +!TP_WAVELET_CURVEEDITOR_CC_TOOLTIP;Modifies local contrast as a function of the original local contrast (abscissa).\nLow abscissa values represent small local contrast (real values about 10..20).\n50% abscissa represents average local contrast (real value about 100..300).\n66% abscissa represents standard deviation of local contrast (real value about 300..800).\n100% abscissa represents maximum local contrast (real value about 3000..8000). !TP_WAVELET_CURVEEDITOR_CH;Contrast levels=f(Hue) -!TP_WAVELET_CURVEEDITOR_CH_TOOLTIP;Modifies each level's contrast as a function oh hue.\nTake care not to overwrite changes made with the Gamut Hue controls.\nThe curve will only have an effect when wavelet contrast level sliders are non-zero. +!TP_WAVELET_CURVEEDITOR_CH_TOOLTIP;Modifies each level's contrast as a function of hue.\nTake care not to overwrite changes made with the Gamut sub-tool's hue controls.\nThe curve will only have an effect when wavelet contrast level sliders are non-zero. !TP_WAVELET_CURVEEDITOR_CL;L !TP_WAVELET_CURVEEDITOR_CL_TOOLTIP;Applies a final contrast luminance curve at the end of the wavelet treatment. !TP_WAVELET_CURVEEDITOR_HH;HH @@ -1815,7 +1881,6 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike - !TP_WAVELET_LEVZERO;Level 1 !TP_WAVELET_LINKEDG;Link with Edge Sharpness' Strength !TP_WAVELET_LIPST;Enhanced algoritm -!TP_WAVELET_LIPST_TOOLTIP;This algorithm uses the proximity of a pixel and eight of its neighbors. If less difference, edges are reinforced. !TP_WAVELET_LOWLIGHT;Shadow luminance range !TP_WAVELET_MEDGREINF;First level !TP_WAVELET_MEDILEV;Edge detection @@ -1862,10 +1927,6 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike - !TP_WAVELET_TILESIZE;Tiling method !TP_WAVELET_TILESLIT;Little tiles !TP_WAVELET_TILES_TOOLTIP;Processing the full image leads to better quality and is the recommended option, while using tiles is a fall-back solution for users with little RAM. Refer to RawPedia for memory requirements. -!TP_WAVELET_TMHIGH;High -!TP_WAVELET_TMLOWHIGH;Low+High -!TP_WAVELET_TMNONE;None -!TP_WAVELET_TMSTD;Standard !TP_WAVELET_TMSTRENGTH;Compression strength !TP_WAVELET_TMSTRENGTH_TOOLTIP;Control the strength of tone mapping or contrast compression of the residual image. When the value is different from 0, the Strength and Gamma sliders of the Tone Mapping tool in the Exposure tab will become grayed out. !TP_WAVELET_TMTYPE;Compression method diff --git a/rtdata/languages/Slovak b/rtdata/languages/Slovak index 4f1a92446..0a5010a0f 100644 --- a/rtdata/languages/Slovak +++ b/rtdata/languages/Slovak @@ -981,6 +981,26 @@ ZOOMPANEL_ZOOMOUT;Oddialiť - !HISTORY_MSG_404;W - ES - Base amplification !HISTORY_MSG_405;W - Denoise - Level 4 !HISTORY_MSG_406;W - ES - Neighboring pixels +!HISTORY_MSG_407;Retinex - Method +!HISTORY_MSG_408;Retinex - Neighboring +!HISTORY_MSG_409;Retinex - Gain +!HISTORY_MSG_410;Retinex - Offset +!HISTORY_MSG_411;Retinex - Strength +!HISTORY_MSG_412;Retinex - Scales +!HISTORY_MSG_413;Retinex - Variance +!HISTORY_MSG_414;Retinex - Histogram - Lab +!HISTORY_MSG_415;Retinex - Transmission +!HISTORY_MSG_416;Retinex +!HISTORY_MSG_417;Retinex - Transmission median +!HISTORY_MSG_418;Retinex - Threshold +!HISTORY_MSG_419;Retinex - Color space +!HISTORY_MSG_420;Retinex - Histogram - HSL +!HISTORY_MSG_421;Retinex - Gamma +!HISTORY_MSG_422;Retinex - Gamma +!HISTORY_MSG_423;Retinex - Gamma slope +!HISTORY_MSG_424;Retinex - HL threshold +!HISTORY_MSG_425;Retinex - Log base +!HISTORY_MSG_426;Retinex - Hue equalizer !HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s !MAIN_BUTTON_NAVNEXT_TOOLTIP;Navigate to the next image relative to image opened in the Editor.\nShortcut: Shift-F4\n\nTo navigate to the next image relative to the currently selected thumbnail in the File Browser or Filmstrip:\nShortcut: F4 !MAIN_BUTTON_NAVPREV_TOOLTIP;Navigate to the previous image relative to image opened in the Editor.\nShortcut: Shift-F3\n\nTo navigate to the previous image relative to the currently selected thumbnail in the File Browser or Filmstrip:\nShortcut: F3 @@ -1055,7 +1075,6 @@ ZOOMPANEL_ZOOMOUT;Oddialiť - !PARTIALPASTE_FLATFIELDFILE;Flat-field file !PARTIALPASTE_GRADIENT;Graduated filter !PARTIALPASTE_HSVEQUALIZER;HSV equalizer -!PARTIALPASTE_ICMGAMMA;Output gamma !PARTIALPASTE_IMPULSEDENOISE;Impulse noise reduction !PARTIALPASTE_LENSPROFILE;Lens correction profile !PARTIALPASTE_PCVIGNETTE;Vignette filter @@ -1076,6 +1095,7 @@ ZOOMPANEL_ZOOMOUT;Oddialiť - !PARTIALPASTE_RAW_DMETHOD;Demosaic method !PARTIALPASTE_RAW_FALSECOLOR;False color suppression !PARTIALPASTE_RAW_LMMSEITERATIONS;LMMSE enhancement steps +!PARTIALPASTE_RETINEX;Retinex !PARTIALPASTE_RGBCURVES;RGB curves !PARTIALPASTE_SHARPENEDGE;Edges !PARTIALPASTE_SHARPENMICRO;Microcontrast @@ -1435,7 +1455,7 @@ ZOOMPANEL_ZOOMOUT;Oddialiť - !TP_DIRPYRDENOISE_C2TYPE_TOOLTIP;Manual\nActs on the full image.\nYou control the noise reduction settings manually.\n\nAutomatic global\nActs on the full image.\n9 zones are used to calculate a global chrominance noise reduction setting.\n\nPreview\nActs on the whole image.\nThe part of the image visible in the preview is used to calculate global chrominance noise reduction settings. !TP_DIRPYRDENOISE_CCCURVE;Chrominance curve !TP_DIRPYRDENOISE_CHROMAFR;Chrominance -!TP_DIRPYRDENOISE_CTYPE;Auto method +!TP_DIRPYRDENOISE_CTYPE;Method !TP_DIRPYRDENOISE_CTYPE_TOOLTIP;Manual\nActs on the full image.\nYou control the noise reduction settings manually.\n\nAutomatic global\nActs on the full image.\n9 zones are used to calculate a global chrominance noise reduction setting.\n\nAutomatic multi-zones\nNo preview - works only during saving, but using the "Preview" method by matching the tile size and center to the preview size and center you can get an idea of the expected results.\nThe image is divided into tiles (about 10 to 70 depending on image size) and each tile receives its own chrominance noise reduction settings.\n\nPreview\nActs on the whole image.\nThe part of the image visible in the preview is used to calculate global chrominance noise reduction settings. !TP_DIRPYRDENOISE_CURVEEDITOR_CC;Chroma !TP_DIRPYRDENOISE_CURVEEDITOR_CC_TOOLTIP;Increase (multiply) the value of all chrominance sliders.\nThis curve lets you adjust the strength of chromatic noise reduction as a function of chromaticity, for instance to increase the action in areas of low saturation and to decrease it in those of high saturation. @@ -1662,6 +1682,54 @@ ZOOMPANEL_ZOOMOUT;Oddialiť - !TP_RESIZE_FITBOX;Bounding Box !TP_RESIZE_FULLIMAGE;Full Image !TP_RESIZE_LANCZOS;Lanczos +!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL +!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b* +!TP_RETINEX_CONTEDIT_LH;Hue equalizer +!TP_RETINEX_CURVEEDITOR_CD;L=f(L) +!TP_RETINEX_CURVEEDITOR_CD_TOOLTIP;Luminance according to luminance L=f(L)\nCorrect raw data to reduce halos and artifacts. +!TP_RETINEX_CURVEEDITOR_LH;Strength=f(H) +!TP_RETINEX_CURVEEDITOR_LH_TOOLTIP;Strength according to hue Strength=f(H)\nThis curve also acts on chroma when using the "Highlight" retinex method. +!TP_RETINEX_GAIN;Gain +!TP_RETINEX_GAIN_TOOLTIP;Acts on the transmission in combination with the offset. This is very different from the others settings. Used for black or white pixels, and to help balance the histogram. +!TP_RETINEX_GAMMA;Free gamma +!TP_RETINEX_GAMMA;Gamma +!TP_RETINEX_GAMMA_FREE;Free +!TP_RETINEX_GAMMA_HIGH;High +!TP_RETINEX_GAMMA_LOW;Low +!TP_RETINEX_GAMMA_MID;Middle +!TP_RETINEX_GAMMA_NONE;None +!TP_RETINEX_GAMMA_TOOLTIP;Restore tones by applying gamma before and after Retinex. Different from Retinex curves or others curves (Lab, Exposure, etc.). +!TP_RETINEX_HIGHLIGHT;Highlight threshold +!TP_RETINEX_HIGHLIGHT_TOOLTIP;Increase action of High algorithm.\nMay require you to re-adjust "Neighboring pixels" and to increase the "White-point correction" in the Raw tab -> Raw White Points tool. +!TP_RETINEX_HIGHLIG;Highlight +!TP_RETINEX_HIGH;High +!TP_RETINEX_HSLSPACE_LIN;HSL-Linear +!TP_RETINEX_HSLSPACE_LOG;HSL-Logarithmic +!TP_RETINEX_LABEL;Retinex +!TP_RETINEX_LABSPACE;L*a*b* +!TP_RETINEX_LOW;Low +!TP_RETINEX_MEDIAN;Transmission median filter +!TP_RETINEX_METHOD;Method +!TP_RETINEX_METHOD_TOOLTIP;Low = Reinforce low light,\nUniform = Equalize action,\nHigh = Reinforce high light,\nHighlight = Remove magenta in highlights. +!TP_RETINEX_MLABEL;Restored haze-free Min=%1 Max=%2 +!TP_RETINEX_MLABEL_TOOLTIP;Should be near min=0 max=32768\nRestored image with no mixture. +!TP_RETINEX_NEIGHBOR;Neighboring pixels +!TP_RETINEX_NEUTRAL;Reset +!TP_RETINEX_NEUTRAL_TIP;Reset all sliders and curves to their default values. +!TP_RETINEX_OFFSET;Offset +!TP_RETINEX_SETTINGS;Settings +!TP_RETINEX_SLOPE;Free gamma slope +!TP_RETINEX_STRENGTH;Strength +!TP_RETINEX_THRESHOLD;Threshold +!TP_RETINEX_THRESHOLD_TOOLTIP;Limits in/out.\nIn = image source,\nOut = image gauss. +!TP_RETINEX_TLABEL2;TM Tm=%1 TM=%2 +!TP_RETINEX_TLABEL;TM Min=%1 Max=%2 Mean=%3 Sigma=%4 +!TP_RETINEX_TLABEL_TOOLTIP;Transmission map result.\nMin and Max are used by Variance.\nMean and Sigma\nTm=Min TM=Max of transmission map. +!TP_RETINEX_TRANSMISSION;Transmission map +!TP_RETINEX_TRANSMISSION_TOOLTIP;Transmission according to transmission.\nAbscissa: transmission from negative values (min), mean, and positives values (max).\nOrdinate: amplification or reduction. +!TP_RETINEX_UNIFORM;Uniform +!TP_RETINEX_VARIANCE;Variance +!TP_RETINEX_VARIANCE_TOOLTIP;Low variance increase local contrast and saturation, but can lead to artifacts. !TP_RGBCURVES_BLUE;B !TP_RGBCURVES_CHANNEL;Channel !TP_RGBCURVES_GREEN;G @@ -1725,7 +1793,6 @@ ZOOMPANEL_ZOOMOUT;Oddialiť - !TP_WAVELET_BASLI;Slider !TP_WAVELET_BATYPE;Contrast balance method !TP_WAVELET_CBENAB;Toning and Color Balance -!TP_WAVELET_CBTYPE;Toning and Color Balance !TP_WAVELET_CB_TOOLTIP;For strong values product color-toning by combining it or not with levels decomposition 'toning'\nFor low values you can change the white balance of the background (sky, ...) without changing that of the front plane, generally more contrasted !TP_WAVELET_CCURVE;Local contrast !TP_WAVELET_CH1;Whole chroma range @@ -1739,7 +1806,6 @@ ZOOMPANEL_ZOOMOUT;Oddialiť - !TP_WAVELET_CHSL;Sliders !TP_WAVELET_CHTYPE;Chrominance method !TP_WAVELET_COLORT;Opacity Red-Green -!TP_WAVELET_COMBOTH;Both !TP_WAVELET_COMPCONT;Contrast !TP_WAVELET_COMPGAMMA;Compression gamma !TP_WAVELET_COMPGAMMA_TOOLTIP;Adjusting the gamma of the residual image allows you to equilibrate the data and histogram. @@ -1751,9 +1817,9 @@ ZOOMPANEL_ZOOMOUT;Oddialiť - !TP_WAVELET_CONTRA_TOOLTIP;Changes contrast of the residual image. !TP_WAVELET_CONTR;Gamut !TP_WAVELET_CTYPE;Chrominance control -!TP_WAVELET_CURVEEDITOR_CC_TOOLTIP;Modifies local contrast as a function of the original local contrast (absciss)\nLow absciss represents small local contrast (real values about 10..20)\n50% absciss represents average of local contrast (real value about 100..300)\n66% absciss represents standard deviation of local contrast (real value about 300..800)\n100% represents maximum (real value about 3000..8000) +!TP_WAVELET_CURVEEDITOR_CC_TOOLTIP;Modifies local contrast as a function of the original local contrast (abscissa).\nLow abscissa values represent small local contrast (real values about 10..20).\n50% abscissa represents average local contrast (real value about 100..300).\n66% abscissa represents standard deviation of local contrast (real value about 300..800).\n100% abscissa represents maximum local contrast (real value about 3000..8000). !TP_WAVELET_CURVEEDITOR_CH;Contrast levels=f(Hue) -!TP_WAVELET_CURVEEDITOR_CH_TOOLTIP;Modifies each level's contrast as a function oh hue.\nTake care not to overwrite changes made with the Gamut Hue controls.\nThe curve will only have an effect when wavelet contrast level sliders are non-zero. +!TP_WAVELET_CURVEEDITOR_CH_TOOLTIP;Modifies each level's contrast as a function of hue.\nTake care not to overwrite changes made with the Gamut sub-tool's hue controls.\nThe curve will only have an effect when wavelet contrast level sliders are non-zero. !TP_WAVELET_CURVEEDITOR_CL;L !TP_WAVELET_CURVEEDITOR_CL_TOOLTIP;Applies a final contrast luminance curve at the end of the wavelet treatment. !TP_WAVELET_CURVEEDITOR_HH;HH @@ -1816,7 +1882,6 @@ ZOOMPANEL_ZOOMOUT;Oddialiť - !TP_WAVELET_LEVZERO;Level 1 !TP_WAVELET_LINKEDG;Link with Edge Sharpness' Strength !TP_WAVELET_LIPST;Enhanced algoritm -!TP_WAVELET_LIPST_TOOLTIP;This algorithm uses the proximity of a pixel and eight of its neighbors. If less difference, edges are reinforced. !TP_WAVELET_LOWLIGHT;Shadow luminance range !TP_WAVELET_MEDGREINF;First level !TP_WAVELET_MEDILEV;Edge detection @@ -1863,10 +1928,6 @@ ZOOMPANEL_ZOOMOUT;Oddialiť - !TP_WAVELET_TILESIZE;Tiling method !TP_WAVELET_TILESLIT;Little tiles !TP_WAVELET_TILES_TOOLTIP;Processing the full image leads to better quality and is the recommended option, while using tiles is a fall-back solution for users with little RAM. Refer to RawPedia for memory requirements. -!TP_WAVELET_TMHIGH;High -!TP_WAVELET_TMLOWHIGH;Low+High -!TP_WAVELET_TMNONE;None -!TP_WAVELET_TMSTD;Standard !TP_WAVELET_TMSTRENGTH;Compression strength !TP_WAVELET_TMSTRENGTH_TOOLTIP;Control the strength of tone mapping or contrast compression of the residual image. When the value is different from 0, the Strength and Gamma sliders of the Tone Mapping tool in the Exposure tab will become grayed out. !TP_WAVELET_TMTYPE;Compression method diff --git a/rtdata/languages/Suomi b/rtdata/languages/Suomi index 083c7931a..0e792a868 100644 --- a/rtdata/languages/Suomi +++ b/rtdata/languages/Suomi @@ -919,6 +919,26 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K] !HISTORY_MSG_404;W - ES - Base amplification !HISTORY_MSG_405;W - Denoise - Level 4 !HISTORY_MSG_406;W - ES - Neighboring pixels +!HISTORY_MSG_407;Retinex - Method +!HISTORY_MSG_408;Retinex - Neighboring +!HISTORY_MSG_409;Retinex - Gain +!HISTORY_MSG_410;Retinex - Offset +!HISTORY_MSG_411;Retinex - Strength +!HISTORY_MSG_412;Retinex - Scales +!HISTORY_MSG_413;Retinex - Variance +!HISTORY_MSG_414;Retinex - Histogram - Lab +!HISTORY_MSG_415;Retinex - Transmission +!HISTORY_MSG_416;Retinex +!HISTORY_MSG_417;Retinex - Transmission median +!HISTORY_MSG_418;Retinex - Threshold +!HISTORY_MSG_419;Retinex - Color space +!HISTORY_MSG_420;Retinex - Histogram - HSL +!HISTORY_MSG_421;Retinex - Gamma +!HISTORY_MSG_422;Retinex - Gamma +!HISTORY_MSG_423;Retinex - Gamma slope +!HISTORY_MSG_424;Retinex - HL threshold +!HISTORY_MSG_425;Retinex - Log base +!HISTORY_MSG_426;Retinex - Hue equalizer !HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s !MAIN_BUTTON_FULLSCREEN;Fullscreen !MAIN_BUTTON_NAVNEXT_TOOLTIP;Navigate to the next image relative to image opened in the Editor.\nShortcut: Shift-F4\n\nTo navigate to the next image relative to the currently selected thumbnail in the File Browser or Filmstrip:\nShortcut: F4 @@ -1001,7 +1021,6 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K] !PARTIALPASTE_FLATFIELDFILE;Flat-field file !PARTIALPASTE_GRADIENT;Graduated filter !PARTIALPASTE_HSVEQUALIZER;HSV equalizer -!PARTIALPASTE_ICMGAMMA;Output gamma !PARTIALPASTE_IMPULSEDENOISE;Impulse noise reduction !PARTIALPASTE_LABCURVE;L*a*b* adjustments !PARTIALPASTE_LENSPROFILE;Lens correction profile @@ -1023,6 +1042,7 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K] !PARTIALPASTE_RAW_DMETHOD;Demosaic method !PARTIALPASTE_RAW_FALSECOLOR;False color suppression !PARTIALPASTE_RAW_LMMSEITERATIONS;LMMSE enhancement steps +!PARTIALPASTE_RETINEX;Retinex !PARTIALPASTE_RGBCURVES;RGB curves !PARTIALPASTE_SHARPENEDGE;Edges !PARTIALPASTE_SHARPENMICRO;Microcontrast @@ -1397,7 +1417,7 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K] !TP_DIRPYRDENOISE_CCCURVE;Chrominance curve !TP_DIRPYRDENOISE_CHROMAFR;Chrominance !TP_DIRPYRDENOISE_CHROMA;Chrominance - Master -!TP_DIRPYRDENOISE_CTYPE;Auto method +!TP_DIRPYRDENOISE_CTYPE;Method !TP_DIRPYRDENOISE_CTYPE_TOOLTIP;Manual\nActs on the full image.\nYou control the noise reduction settings manually.\n\nAutomatic global\nActs on the full image.\n9 zones are used to calculate a global chrominance noise reduction setting.\n\nAutomatic multi-zones\nNo preview - works only during saving, but using the "Preview" method by matching the tile size and center to the preview size and center you can get an idea of the expected results.\nThe image is divided into tiles (about 10 to 70 depending on image size) and each tile receives its own chrominance noise reduction settings.\n\nPreview\nActs on the whole image.\nThe part of the image visible in the preview is used to calculate global chrominance noise reduction settings. !TP_DIRPYRDENOISE_CURVEEDITOR_CC;Chroma !TP_DIRPYRDENOISE_CURVEEDITOR_CC_TOOLTIP;Increase (multiply) the value of all chrominance sliders.\nThis curve lets you adjust the strength of chromatic noise reduction as a function of chromaticity, for instance to increase the action in areas of low saturation and to decrease it in those of high saturation. @@ -1655,6 +1675,54 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K] !TP_RESIZE_LANCZOS;Lanczos !TP_RESIZE_SPECIFY;Specify: !TP_RESIZE_WIDTH;Width +!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL +!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b* +!TP_RETINEX_CONTEDIT_LH;Hue equalizer +!TP_RETINEX_CURVEEDITOR_CD;L=f(L) +!TP_RETINEX_CURVEEDITOR_CD_TOOLTIP;Luminance according to luminance L=f(L)\nCorrect raw data to reduce halos and artifacts. +!TP_RETINEX_CURVEEDITOR_LH;Strength=f(H) +!TP_RETINEX_CURVEEDITOR_LH_TOOLTIP;Strength according to hue Strength=f(H)\nThis curve also acts on chroma when using the "Highlight" retinex method. +!TP_RETINEX_GAIN;Gain +!TP_RETINEX_GAIN_TOOLTIP;Acts on the transmission in combination with the offset. This is very different from the others settings. Used for black or white pixels, and to help balance the histogram. +!TP_RETINEX_GAMMA;Free gamma +!TP_RETINEX_GAMMA;Gamma +!TP_RETINEX_GAMMA_FREE;Free +!TP_RETINEX_GAMMA_HIGH;High +!TP_RETINEX_GAMMA_LOW;Low +!TP_RETINEX_GAMMA_MID;Middle +!TP_RETINEX_GAMMA_NONE;None +!TP_RETINEX_GAMMA_TOOLTIP;Restore tones by applying gamma before and after Retinex. Different from Retinex curves or others curves (Lab, Exposure, etc.). +!TP_RETINEX_HIGHLIGHT;Highlight threshold +!TP_RETINEX_HIGHLIGHT_TOOLTIP;Increase action of High algorithm.\nMay require you to re-adjust "Neighboring pixels" and to increase the "White-point correction" in the Raw tab -> Raw White Points tool. +!TP_RETINEX_HIGHLIG;Highlight +!TP_RETINEX_HIGH;High +!TP_RETINEX_HSLSPACE_LIN;HSL-Linear +!TP_RETINEX_HSLSPACE_LOG;HSL-Logarithmic +!TP_RETINEX_LABEL;Retinex +!TP_RETINEX_LABSPACE;L*a*b* +!TP_RETINEX_LOW;Low +!TP_RETINEX_MEDIAN;Transmission median filter +!TP_RETINEX_METHOD;Method +!TP_RETINEX_METHOD_TOOLTIP;Low = Reinforce low light,\nUniform = Equalize action,\nHigh = Reinforce high light,\nHighlight = Remove magenta in highlights. +!TP_RETINEX_MLABEL;Restored haze-free Min=%1 Max=%2 +!TP_RETINEX_MLABEL_TOOLTIP;Should be near min=0 max=32768\nRestored image with no mixture. +!TP_RETINEX_NEIGHBOR;Neighboring pixels +!TP_RETINEX_NEUTRAL;Reset +!TP_RETINEX_NEUTRAL_TIP;Reset all sliders and curves to their default values. +!TP_RETINEX_OFFSET;Offset +!TP_RETINEX_SETTINGS;Settings +!TP_RETINEX_SLOPE;Free gamma slope +!TP_RETINEX_STRENGTH;Strength +!TP_RETINEX_THRESHOLD;Threshold +!TP_RETINEX_THRESHOLD_TOOLTIP;Limits in/out.\nIn = image source,\nOut = image gauss. +!TP_RETINEX_TLABEL2;TM Tm=%1 TM=%2 +!TP_RETINEX_TLABEL;TM Min=%1 Max=%2 Mean=%3 Sigma=%4 +!TP_RETINEX_TLABEL_TOOLTIP;Transmission map result.\nMin and Max are used by Variance.\nMean and Sigma\nTm=Min TM=Max of transmission map. +!TP_RETINEX_TRANSMISSION;Transmission map +!TP_RETINEX_TRANSMISSION_TOOLTIP;Transmission according to transmission.\nAbscissa: transmission from negative values (min), mean, and positives values (max).\nOrdinate: amplification or reduction. +!TP_RETINEX_UNIFORM;Uniform +!TP_RETINEX_VARIANCE;Variance +!TP_RETINEX_VARIANCE_TOOLTIP;Low variance increase local contrast and saturation, but can lead to artifacts. !TP_RGBCURVES_BLUE;B !TP_RGBCURVES_CHANNEL;Channel !TP_RGBCURVES_GREEN;G @@ -1718,7 +1786,6 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K] !TP_WAVELET_BASLI;Slider !TP_WAVELET_BATYPE;Contrast balance method !TP_WAVELET_CBENAB;Toning and Color Balance -!TP_WAVELET_CBTYPE;Toning and Color Balance !TP_WAVELET_CB_TOOLTIP;For strong values product color-toning by combining it or not with levels decomposition 'toning'\nFor low values you can change the white balance of the background (sky, ...) without changing that of the front plane, generally more contrasted !TP_WAVELET_CCURVE;Local contrast !TP_WAVELET_CH1;Whole chroma range @@ -1732,7 +1799,6 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K] !TP_WAVELET_CHSL;Sliders !TP_WAVELET_CHTYPE;Chrominance method !TP_WAVELET_COLORT;Opacity Red-Green -!TP_WAVELET_COMBOTH;Both !TP_WAVELET_COMPCONT;Contrast !TP_WAVELET_COMPGAMMA;Compression gamma !TP_WAVELET_COMPGAMMA_TOOLTIP;Adjusting the gamma of the residual image allows you to equilibrate the data and histogram. @@ -1744,9 +1810,9 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K] !TP_WAVELET_CONTRA_TOOLTIP;Changes contrast of the residual image. !TP_WAVELET_CONTR;Gamut !TP_WAVELET_CTYPE;Chrominance control -!TP_WAVELET_CURVEEDITOR_CC_TOOLTIP;Modifies local contrast as a function of the original local contrast (absciss)\nLow absciss represents small local contrast (real values about 10..20)\n50% absciss represents average of local contrast (real value about 100..300)\n66% absciss represents standard deviation of local contrast (real value about 300..800)\n100% represents maximum (real value about 3000..8000) +!TP_WAVELET_CURVEEDITOR_CC_TOOLTIP;Modifies local contrast as a function of the original local contrast (abscissa).\nLow abscissa values represent small local contrast (real values about 10..20).\n50% abscissa represents average local contrast (real value about 100..300).\n66% abscissa represents standard deviation of local contrast (real value about 300..800).\n100% abscissa represents maximum local contrast (real value about 3000..8000). !TP_WAVELET_CURVEEDITOR_CH;Contrast levels=f(Hue) -!TP_WAVELET_CURVEEDITOR_CH_TOOLTIP;Modifies each level's contrast as a function oh hue.\nTake care not to overwrite changes made with the Gamut Hue controls.\nThe curve will only have an effect when wavelet contrast level sliders are non-zero. +!TP_WAVELET_CURVEEDITOR_CH_TOOLTIP;Modifies each level's contrast as a function of hue.\nTake care not to overwrite changes made with the Gamut sub-tool's hue controls.\nThe curve will only have an effect when wavelet contrast level sliders are non-zero. !TP_WAVELET_CURVEEDITOR_CL;L !TP_WAVELET_CURVEEDITOR_CL_TOOLTIP;Applies a final contrast luminance curve at the end of the wavelet treatment. !TP_WAVELET_CURVEEDITOR_HH;HH @@ -1809,7 +1875,6 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K] !TP_WAVELET_LEVZERO;Level 1 !TP_WAVELET_LINKEDG;Link with Edge Sharpness' Strength !TP_WAVELET_LIPST;Enhanced algoritm -!TP_WAVELET_LIPST_TOOLTIP;This algorithm uses the proximity of a pixel and eight of its neighbors. If less difference, edges are reinforced. !TP_WAVELET_LOWLIGHT;Shadow luminance range !TP_WAVELET_MEDGREINF;First level !TP_WAVELET_MEDILEV;Edge detection @@ -1856,10 +1921,6 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K] !TP_WAVELET_TILESIZE;Tiling method !TP_WAVELET_TILESLIT;Little tiles !TP_WAVELET_TILES_TOOLTIP;Processing the full image leads to better quality and is the recommended option, while using tiles is a fall-back solution for users with little RAM. Refer to RawPedia for memory requirements. -!TP_WAVELET_TMHIGH;High -!TP_WAVELET_TMLOWHIGH;Low+High -!TP_WAVELET_TMNONE;None -!TP_WAVELET_TMSTD;Standard !TP_WAVELET_TMSTRENGTH;Compression strength !TP_WAVELET_TMSTRENGTH_TOOLTIP;Control the strength of tone mapping or contrast compression of the residual image. When the value is different from 0, the Strength and Gamma sliders of the Tone Mapping tool in the Exposure tab will become grayed out. !TP_WAVELET_TMTYPE;Compression method diff --git a/rtdata/languages/Swedish b/rtdata/languages/Swedish index 9ccc5af02..16f8686b6 100644 --- a/rtdata/languages/Swedish +++ b/rtdata/languages/Swedish @@ -762,7 +762,6 @@ PARTIALPASTE_FLATFIELDBLURTYPE;Oskärpetyp hos plattfältet PARTIALPASTE_FLATFIELDFILE;Plattfältsfil PARTIALPASTE_GRADIENT;Graderat filter PARTIALPASTE_HSVEQUALIZER;HSV-equalizer -PARTIALPASTE_ICMGAMMA;Utmatningsgamma PARTIALPASTE_ICMSETTINGS;Färghanteringsinställningar PARTIALPASTE_IMPULSEDENOISE;Brusreducering mha stegsvar PARTIALPASTE_IPTCINFO;IPTC-info @@ -1611,7 +1610,6 @@ TP_WAVELET_CHCU;Kurva TP_WAVELET_CHSL;Reglage TP_WAVELET_CHTYPE;Krominans-metod TP_WAVELET_COLORT;Opacitet rött-grönt -TP_WAVELET_COMBOTH;Båda TP_WAVELET_COMPCONT;Kontrast TP_WAVELET_DAUB2;D2 - låg TP_WAVELET_DAUB4;D4 - standard @@ -1668,8 +1666,6 @@ TP_WAVELET_THRESHOLD;Högdagernivåer TP_WAVELET_THRH;Högdagertröskel TP_WAVELET_THR;Skuggtröskel TP_WAVELET_TILESFULL;Hela bilden -TP_WAVELET_TMNONE;Ingen -TP_WAVELET_TMSTD;Standard TP_WBALANCE_AUTO;Auto TP_WBALANCE_CAMERA;Kamera TP_WBALANCE_CLOUDY;Molnigt @@ -1764,8 +1760,29 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !HISTORY_MSG_401;W - Toning sub-tool !HISTORY_MSG_402;W - Denoise sub-tool !HISTORY_MSG_406;W - ES - Neighboring pixels +!HISTORY_MSG_407;Retinex - Method +!HISTORY_MSG_408;Retinex - Neighboring +!HISTORY_MSG_409;Retinex - Gain +!HISTORY_MSG_410;Retinex - Offset +!HISTORY_MSG_411;Retinex - Strength +!HISTORY_MSG_412;Retinex - Scales +!HISTORY_MSG_413;Retinex - Variance +!HISTORY_MSG_414;Retinex - Histogram - Lab +!HISTORY_MSG_415;Retinex - Transmission +!HISTORY_MSG_416;Retinex +!HISTORY_MSG_417;Retinex - Transmission median +!HISTORY_MSG_418;Retinex - Threshold +!HISTORY_MSG_419;Retinex - Color space +!HISTORY_MSG_420;Retinex - Histogram - HSL +!HISTORY_MSG_421;Retinex - Gamma +!HISTORY_MSG_422;Retinex - Gamma +!HISTORY_MSG_423;Retinex - Gamma slope +!HISTORY_MSG_424;Retinex - HL threshold +!HISTORY_MSG_425;Retinex - Log base +!HISTORY_MSG_426;Retinex - Hue equalizer !PARTIALPASTE_COLORTONING;Color toning !PARTIALPASTE_FLATFIELDCLIPCONTROL;Flat-field clip control +!PARTIALPASTE_RETINEX;Retinex !PREFERENCES_INSPECT_MAXBUFFERS_TOOLTIP;Set the maximum number of images stored in cache when hovering over them in the File Browser; systems with little RAM (2GB) should keep this value set to 1 or 2. !PREFERENCES_LEVDN;Cell size !PREFERENCES_LISS;Auto multi-zone smoothing @@ -1783,7 +1800,7 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !TP_COLORTONING_TWOBY;Special a* and b* !TP_COLORTONING_TWOCOLOR_TOOLTIP;Standard chroma:\nLinear response, a* = b*.\n\nSpecial chroma:\nLinear response, a* = b*, but unbound - try under the diagonal.\n\nSpecial a* and b*:\nLinear response unbound with separate curves for a* and b*. Intended for special effects.\n\nSpecial chroma 2 colors:\nMore predictable. !TP_DIRPYRDENOISE_C2TYPE_TOOLTIP;Manual\nActs on the full image.\nYou control the noise reduction settings manually.\n\nAutomatic global\nActs on the full image.\n9 zones are used to calculate a global chrominance noise reduction setting.\n\nPreview\nActs on the whole image.\nThe part of the image visible in the preview is used to calculate global chrominance noise reduction settings. -!TP_DIRPYRDENOISE_CTYPE;Auto method +!TP_DIRPYRDENOISE_CTYPE;Method !TP_DIRPYRDENOISE_CTYPE_TOOLTIP;Manual\nActs on the full image.\nYou control the noise reduction settings manually.\n\nAutomatic global\nActs on the full image.\n9 zones are used to calculate a global chrominance noise reduction setting.\n\nAutomatic multi-zones\nNo preview - works only during saving, but using the "Preview" method by matching the tile size and center to the preview size and center you can get an idea of the expected results.\nThe image is divided into tiles (about 10 to 70 depending on image size) and each tile receives its own chrominance noise reduction settings.\n\nPreview\nActs on the whole image.\nThe part of the image visible in the preview is used to calculate global chrominance noise reduction settings. !TP_DIRPYRDENOISE_CURVEEDITOR_CC_TOOLTIP;Increase (multiply) the value of all chrominance sliders.\nThis curve lets you adjust the strength of chromatic noise reduction as a function of chromaticity, for instance to increase the action in areas of low saturation and to decrease it in those of high saturation. !TP_DIRPYRDENOISE_CURVEEDITOR_L_TOOLTIP;Modulates action of 'Luminance' denoise @@ -1818,8 +1835,55 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !TP_RAW_HD_TOOLTIP;Lower values make hot/dead pixel detection more aggressive, but false positives may lead to artifacts. If you notice any artifacts appearing when enabling the Hot/Dead Pixel Filters, gradually increase the threshold value until they disappear. !TP_RAW_SENSOR_XTRANS_DMETHOD_TOOLTIP;3-pass gives best results (recommended for low ISO images).\n1-pass is almost undistinguishable from 3-pass for high ISO images and is faster. !TP_RAW_SENSOR_XTRANS_LABEL;Sensor with X-Trans Matrix +!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL +!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b* +!TP_RETINEX_CONTEDIT_LH;Hue equalizer +!TP_RETINEX_CURVEEDITOR_CD;L=f(L) +!TP_RETINEX_CURVEEDITOR_CD_TOOLTIP;Luminance according to luminance L=f(L)\nCorrect raw data to reduce halos and artifacts. +!TP_RETINEX_CURVEEDITOR_LH;Strength=f(H) +!TP_RETINEX_CURVEEDITOR_LH_TOOLTIP;Strength according to hue Strength=f(H)\nThis curve also acts on chroma when using the "Highlight" retinex method. +!TP_RETINEX_GAIN;Gain +!TP_RETINEX_GAIN_TOOLTIP;Acts on the transmission in combination with the offset. This is very different from the others settings. Used for black or white pixels, and to help balance the histogram. +!TP_RETINEX_GAMMA;Free gamma +!TP_RETINEX_GAMMA;Gamma +!TP_RETINEX_GAMMA_FREE;Free +!TP_RETINEX_GAMMA_HIGH;High +!TP_RETINEX_GAMMA_LOW;Low +!TP_RETINEX_GAMMA_MID;Middle +!TP_RETINEX_GAMMA_NONE;None +!TP_RETINEX_GAMMA_TOOLTIP;Restore tones by applying gamma before and after Retinex. Different from Retinex curves or others curves (Lab, Exposure, etc.). +!TP_RETINEX_HIGHLIGHT;Highlight threshold +!TP_RETINEX_HIGHLIGHT_TOOLTIP;Increase action of High algorithm.\nMay require you to re-adjust "Neighboring pixels" and to increase the "White-point correction" in the Raw tab -> Raw White Points tool. +!TP_RETINEX_HIGHLIG;Highlight +!TP_RETINEX_HIGH;High +!TP_RETINEX_HSLSPACE_LIN;HSL-Linear +!TP_RETINEX_HSLSPACE_LOG;HSL-Logarithmic +!TP_RETINEX_LABEL;Retinex +!TP_RETINEX_LABSPACE;L*a*b* +!TP_RETINEX_LOW;Low +!TP_RETINEX_MEDIAN;Transmission median filter +!TP_RETINEX_METHOD;Method +!TP_RETINEX_METHOD_TOOLTIP;Low = Reinforce low light,\nUniform = Equalize action,\nHigh = Reinforce high light,\nHighlight = Remove magenta in highlights. +!TP_RETINEX_MLABEL;Restored haze-free Min=%1 Max=%2 +!TP_RETINEX_MLABEL_TOOLTIP;Should be near min=0 max=32768\nRestored image with no mixture. +!TP_RETINEX_NEIGHBOR;Neighboring pixels +!TP_RETINEX_NEUTRAL;Reset +!TP_RETINEX_NEUTRAL_TIP;Reset all sliders and curves to their default values. +!TP_RETINEX_OFFSET;Offset +!TP_RETINEX_SETTINGS;Settings +!TP_RETINEX_SLOPE;Free gamma slope +!TP_RETINEX_STRENGTH;Strength +!TP_RETINEX_THRESHOLD;Threshold +!TP_RETINEX_THRESHOLD_TOOLTIP;Limits in/out.\nIn = image source,\nOut = image gauss. +!TP_RETINEX_TLABEL2;TM Tm=%1 TM=%2 +!TP_RETINEX_TLABEL;TM Min=%1 Max=%2 Mean=%3 Sigma=%4 +!TP_RETINEX_TLABEL_TOOLTIP;Transmission map result.\nMin and Max are used by Variance.\nMean and Sigma\nTm=Min TM=Max of transmission map. +!TP_RETINEX_TRANSMISSION;Transmission map +!TP_RETINEX_TRANSMISSION_TOOLTIP;Transmission according to transmission.\nAbscissa: transmission from negative values (min), mean, and positives values (max).\nOrdinate: amplification or reduction. +!TP_RETINEX_UNIFORM;Uniform +!TP_RETINEX_VARIANCE;Variance +!TP_RETINEX_VARIANCE_TOOLTIP;Low variance increase local contrast and saturation, but can lead to artifacts. !TP_WAVELET_CBENAB;Toning and Color Balance -!TP_WAVELET_CBTYPE;Toning and Color Balance !TP_WAVELET_CB_TOOLTIP;For strong values product color-toning by combining it or not with levels decomposition 'toning'\nFor low values you can change the white balance of the background (sky, ...) without changing that of the front plane, generally more contrasted !TP_WAVELET_CH2;Saturated/pastel !TP_WAVELET_CHRO;Saturated/pastel threshold @@ -1836,9 +1900,9 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !TP_WAVELET_CONTRA_TOOLTIP;Changes contrast of the residual image. !TP_WAVELET_CONTR;Gamut !TP_WAVELET_CTYPE;Chrominance control -!TP_WAVELET_CURVEEDITOR_CC_TOOLTIP;Modifies local contrast as a function of the original local contrast (absciss)\nLow absciss represents small local contrast (real values about 10..20)\n50% absciss represents average of local contrast (real value about 100..300)\n66% absciss represents standard deviation of local contrast (real value about 300..800)\n100% represents maximum (real value about 3000..8000) +!TP_WAVELET_CURVEEDITOR_CC_TOOLTIP;Modifies local contrast as a function of the original local contrast (abscissa).\nLow abscissa values represent small local contrast (real values about 10..20).\n50% abscissa represents average local contrast (real value about 100..300).\n66% abscissa represents standard deviation of local contrast (real value about 300..800).\n100% abscissa represents maximum local contrast (real value about 3000..8000). !TP_WAVELET_CURVEEDITOR_CH;Contrast levels=f(Hue) -!TP_WAVELET_CURVEEDITOR_CH_TOOLTIP;Modifies each level's contrast as a function oh hue.\nTake care not to overwrite changes made with the Gamut Hue controls.\nThe curve will only have an effect when wavelet contrast level sliders are non-zero. +!TP_WAVELET_CURVEEDITOR_CH_TOOLTIP;Modifies each level's contrast as a function of hue.\nTake care not to overwrite changes made with the Gamut sub-tool's hue controls.\nThe curve will only have an effect when wavelet contrast level sliders are non-zero. !TP_WAVELET_CURVEEDITOR_CL;L !TP_WAVELET_CURVEEDITOR_CL_TOOLTIP;Applies a final contrast luminance curve at the end of the wavelet treatment. !TP_WAVELET_CURVEEDITOR_HH;HH @@ -1870,7 +1934,6 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !TP_WAVELET_LEVELS_TOOLTIP;Choose the number of detail levels the image is to be decomposed into. More levels require more RAM and require a longer processing time. !TP_WAVELET_LEVLABEL;Preview maximum possible levels = %1 !TP_WAVELET_LINKEDG;Link with Edge Sharpness' Strength -!TP_WAVELET_LIPST_TOOLTIP;This algorithm uses the proximity of a pixel and eight of its neighbors. If less difference, edges are reinforced. !TP_WAVELET_LOWLIGHT;Shadow luminance range !TP_WAVELET_MEDILEV_TOOLTIP;When you enable Edge Detection, it is recommanded:\n- to disabled low contrast levels to avoid artifacts,\n- to use high values of gradient sensitivity.\n\nYou can modulate the strength with 'refine' from Denoise and Refine. !TP_WAVELET_NOISE;Denoise and Refine @@ -1890,8 +1953,6 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !TP_WAVELET_TILESIZE;Tiling method !TP_WAVELET_TILESLIT;Little tiles !TP_WAVELET_TILES_TOOLTIP;Processing the full image leads to better quality and is the recommended option, while using tiles is a fall-back solution for users with little RAM. Refer to RawPedia for memory requirements. -!TP_WAVELET_TMHIGH;High -!TP_WAVELET_TMLOWHIGH;Low+High !TP_WAVELET_TMSTRENGTH;Compression strength !TP_WAVELET_TMSTRENGTH_TOOLTIP;Control the strength of tone mapping or contrast compression of the residual image. When the value is different from 0, the Strength and Gamma sliders of the Tone Mapping tool in the Exposure tab will become grayed out. !TP_WAVELET_TMTYPE;Compression method diff --git a/rtdata/languages/Turkish b/rtdata/languages/Turkish index 520caf65d..aaf21ef75 100644 --- a/rtdata/languages/Turkish +++ b/rtdata/languages/Turkish @@ -918,6 +918,26 @@ TP_WBALANCE_TEMPERATURE;Isı !HISTORY_MSG_404;W - ES - Base amplification !HISTORY_MSG_405;W - Denoise - Level 4 !HISTORY_MSG_406;W - ES - Neighboring pixels +!HISTORY_MSG_407;Retinex - Method +!HISTORY_MSG_408;Retinex - Neighboring +!HISTORY_MSG_409;Retinex - Gain +!HISTORY_MSG_410;Retinex - Offset +!HISTORY_MSG_411;Retinex - Strength +!HISTORY_MSG_412;Retinex - Scales +!HISTORY_MSG_413;Retinex - Variance +!HISTORY_MSG_414;Retinex - Histogram - Lab +!HISTORY_MSG_415;Retinex - Transmission +!HISTORY_MSG_416;Retinex +!HISTORY_MSG_417;Retinex - Transmission median +!HISTORY_MSG_418;Retinex - Threshold +!HISTORY_MSG_419;Retinex - Color space +!HISTORY_MSG_420;Retinex - Histogram - HSL +!HISTORY_MSG_421;Retinex - Gamma +!HISTORY_MSG_422;Retinex - Gamma +!HISTORY_MSG_423;Retinex - Gamma slope +!HISTORY_MSG_424;Retinex - HL threshold +!HISTORY_MSG_425;Retinex - Log base +!HISTORY_MSG_426;Retinex - Hue equalizer !HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s !MAIN_BUTTON_FULLSCREEN;Fullscreen !MAIN_BUTTON_NAVNEXT_TOOLTIP;Navigate to the next image relative to image opened in the Editor.\nShortcut: Shift-F4\n\nTo navigate to the next image relative to the currently selected thumbnail in the File Browser or Filmstrip:\nShortcut: F4 @@ -1000,7 +1020,6 @@ TP_WBALANCE_TEMPERATURE;Isı !PARTIALPASTE_FLATFIELDFILE;Flat-field file !PARTIALPASTE_GRADIENT;Graduated filter !PARTIALPASTE_HSVEQUALIZER;HSV equalizer -!PARTIALPASTE_ICMGAMMA;Output gamma !PARTIALPASTE_IMPULSEDENOISE;Impulse noise reduction !PARTIALPASTE_LABCURVE;L*a*b* adjustments !PARTIALPASTE_LENSPROFILE;Lens correction profile @@ -1022,6 +1041,7 @@ TP_WBALANCE_TEMPERATURE;Isı !PARTIALPASTE_RAW_DMETHOD;Demosaic method !PARTIALPASTE_RAW_FALSECOLOR;False color suppression !PARTIALPASTE_RAW_LMMSEITERATIONS;LMMSE enhancement steps +!PARTIALPASTE_RETINEX;Retinex !PARTIALPASTE_RGBCURVES;RGB curves !PARTIALPASTE_SHARPENEDGE;Edges !PARTIALPASTE_SHARPENMICRO;Microcontrast @@ -1396,7 +1416,7 @@ TP_WBALANCE_TEMPERATURE;Isı !TP_DIRPYRDENOISE_CCCURVE;Chrominance curve !TP_DIRPYRDENOISE_CHROMAFR;Chrominance !TP_DIRPYRDENOISE_CHROMA;Chrominance - Master -!TP_DIRPYRDENOISE_CTYPE;Auto method +!TP_DIRPYRDENOISE_CTYPE;Method !TP_DIRPYRDENOISE_CTYPE_TOOLTIP;Manual\nActs on the full image.\nYou control the noise reduction settings manually.\n\nAutomatic global\nActs on the full image.\n9 zones are used to calculate a global chrominance noise reduction setting.\n\nAutomatic multi-zones\nNo preview - works only during saving, but using the "Preview" method by matching the tile size and center to the preview size and center you can get an idea of the expected results.\nThe image is divided into tiles (about 10 to 70 depending on image size) and each tile receives its own chrominance noise reduction settings.\n\nPreview\nActs on the whole image.\nThe part of the image visible in the preview is used to calculate global chrominance noise reduction settings. !TP_DIRPYRDENOISE_CURVEEDITOR_CC;Chroma !TP_DIRPYRDENOISE_CURVEEDITOR_CC_TOOLTIP;Increase (multiply) the value of all chrominance sliders.\nThis curve lets you adjust the strength of chromatic noise reduction as a function of chromaticity, for instance to increase the action in areas of low saturation and to decrease it in those of high saturation. @@ -1654,6 +1674,54 @@ TP_WBALANCE_TEMPERATURE;Isı !TP_RESIZE_LANCZOS;Lanczos !TP_RESIZE_SPECIFY;Specify: !TP_RESIZE_WIDTH;Width +!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL +!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b* +!TP_RETINEX_CONTEDIT_LH;Hue equalizer +!TP_RETINEX_CURVEEDITOR_CD;L=f(L) +!TP_RETINEX_CURVEEDITOR_CD_TOOLTIP;Luminance according to luminance L=f(L)\nCorrect raw data to reduce halos and artifacts. +!TP_RETINEX_CURVEEDITOR_LH;Strength=f(H) +!TP_RETINEX_CURVEEDITOR_LH_TOOLTIP;Strength according to hue Strength=f(H)\nThis curve also acts on chroma when using the "Highlight" retinex method. +!TP_RETINEX_GAIN;Gain +!TP_RETINEX_GAIN_TOOLTIP;Acts on the transmission in combination with the offset. This is very different from the others settings. Used for black or white pixels, and to help balance the histogram. +!TP_RETINEX_GAMMA;Free gamma +!TP_RETINEX_GAMMA;Gamma +!TP_RETINEX_GAMMA_FREE;Free +!TP_RETINEX_GAMMA_HIGH;High +!TP_RETINEX_GAMMA_LOW;Low +!TP_RETINEX_GAMMA_MID;Middle +!TP_RETINEX_GAMMA_NONE;None +!TP_RETINEX_GAMMA_TOOLTIP;Restore tones by applying gamma before and after Retinex. Different from Retinex curves or others curves (Lab, Exposure, etc.). +!TP_RETINEX_HIGHLIGHT;Highlight threshold +!TP_RETINEX_HIGHLIGHT_TOOLTIP;Increase action of High algorithm.\nMay require you to re-adjust "Neighboring pixels" and to increase the "White-point correction" in the Raw tab -> Raw White Points tool. +!TP_RETINEX_HIGHLIG;Highlight +!TP_RETINEX_HIGH;High +!TP_RETINEX_HSLSPACE_LIN;HSL-Linear +!TP_RETINEX_HSLSPACE_LOG;HSL-Logarithmic +!TP_RETINEX_LABEL;Retinex +!TP_RETINEX_LABSPACE;L*a*b* +!TP_RETINEX_LOW;Low +!TP_RETINEX_MEDIAN;Transmission median filter +!TP_RETINEX_METHOD;Method +!TP_RETINEX_METHOD_TOOLTIP;Low = Reinforce low light,\nUniform = Equalize action,\nHigh = Reinforce high light,\nHighlight = Remove magenta in highlights. +!TP_RETINEX_MLABEL;Restored haze-free Min=%1 Max=%2 +!TP_RETINEX_MLABEL_TOOLTIP;Should be near min=0 max=32768\nRestored image with no mixture. +!TP_RETINEX_NEIGHBOR;Neighboring pixels +!TP_RETINEX_NEUTRAL;Reset +!TP_RETINEX_NEUTRAL_TIP;Reset all sliders and curves to their default values. +!TP_RETINEX_OFFSET;Offset +!TP_RETINEX_SETTINGS;Settings +!TP_RETINEX_SLOPE;Free gamma slope +!TP_RETINEX_STRENGTH;Strength +!TP_RETINEX_THRESHOLD;Threshold +!TP_RETINEX_THRESHOLD_TOOLTIP;Limits in/out.\nIn = image source,\nOut = image gauss. +!TP_RETINEX_TLABEL2;TM Tm=%1 TM=%2 +!TP_RETINEX_TLABEL;TM Min=%1 Max=%2 Mean=%3 Sigma=%4 +!TP_RETINEX_TLABEL_TOOLTIP;Transmission map result.\nMin and Max are used by Variance.\nMean and Sigma\nTm=Min TM=Max of transmission map. +!TP_RETINEX_TRANSMISSION;Transmission map +!TP_RETINEX_TRANSMISSION_TOOLTIP;Transmission according to transmission.\nAbscissa: transmission from negative values (min), mean, and positives values (max).\nOrdinate: amplification or reduction. +!TP_RETINEX_UNIFORM;Uniform +!TP_RETINEX_VARIANCE;Variance +!TP_RETINEX_VARIANCE_TOOLTIP;Low variance increase local contrast and saturation, but can lead to artifacts. !TP_RGBCURVES_BLUE;B !TP_RGBCURVES_CHANNEL;Channel !TP_RGBCURVES_GREEN;G @@ -1717,7 +1785,6 @@ TP_WBALANCE_TEMPERATURE;Isı !TP_WAVELET_BASLI;Slider !TP_WAVELET_BATYPE;Contrast balance method !TP_WAVELET_CBENAB;Toning and Color Balance -!TP_WAVELET_CBTYPE;Toning and Color Balance !TP_WAVELET_CB_TOOLTIP;For strong values product color-toning by combining it or not with levels decomposition 'toning'\nFor low values you can change the white balance of the background (sky, ...) without changing that of the front plane, generally more contrasted !TP_WAVELET_CCURVE;Local contrast !TP_WAVELET_CH1;Whole chroma range @@ -1731,7 +1798,6 @@ TP_WBALANCE_TEMPERATURE;Isı !TP_WAVELET_CHSL;Sliders !TP_WAVELET_CHTYPE;Chrominance method !TP_WAVELET_COLORT;Opacity Red-Green -!TP_WAVELET_COMBOTH;Both !TP_WAVELET_COMPCONT;Contrast !TP_WAVELET_COMPGAMMA;Compression gamma !TP_WAVELET_COMPGAMMA_TOOLTIP;Adjusting the gamma of the residual image allows you to equilibrate the data and histogram. @@ -1743,9 +1809,9 @@ TP_WBALANCE_TEMPERATURE;Isı !TP_WAVELET_CONTRA_TOOLTIP;Changes contrast of the residual image. !TP_WAVELET_CONTR;Gamut !TP_WAVELET_CTYPE;Chrominance control -!TP_WAVELET_CURVEEDITOR_CC_TOOLTIP;Modifies local contrast as a function of the original local contrast (absciss)\nLow absciss represents small local contrast (real values about 10..20)\n50% absciss represents average of local contrast (real value about 100..300)\n66% absciss represents standard deviation of local contrast (real value about 300..800)\n100% represents maximum (real value about 3000..8000) +!TP_WAVELET_CURVEEDITOR_CC_TOOLTIP;Modifies local contrast as a function of the original local contrast (abscissa).\nLow abscissa values represent small local contrast (real values about 10..20).\n50% abscissa represents average local contrast (real value about 100..300).\n66% abscissa represents standard deviation of local contrast (real value about 300..800).\n100% abscissa represents maximum local contrast (real value about 3000..8000). !TP_WAVELET_CURVEEDITOR_CH;Contrast levels=f(Hue) -!TP_WAVELET_CURVEEDITOR_CH_TOOLTIP;Modifies each level's contrast as a function oh hue.\nTake care not to overwrite changes made with the Gamut Hue controls.\nThe curve will only have an effect when wavelet contrast level sliders are non-zero. +!TP_WAVELET_CURVEEDITOR_CH_TOOLTIP;Modifies each level's contrast as a function of hue.\nTake care not to overwrite changes made with the Gamut sub-tool's hue controls.\nThe curve will only have an effect when wavelet contrast level sliders are non-zero. !TP_WAVELET_CURVEEDITOR_CL;L !TP_WAVELET_CURVEEDITOR_CL_TOOLTIP;Applies a final contrast luminance curve at the end of the wavelet treatment. !TP_WAVELET_CURVEEDITOR_HH;HH @@ -1808,7 +1874,6 @@ TP_WBALANCE_TEMPERATURE;Isı !TP_WAVELET_LEVZERO;Level 1 !TP_WAVELET_LINKEDG;Link with Edge Sharpness' Strength !TP_WAVELET_LIPST;Enhanced algoritm -!TP_WAVELET_LIPST_TOOLTIP;This algorithm uses the proximity of a pixel and eight of its neighbors. If less difference, edges are reinforced. !TP_WAVELET_LOWLIGHT;Shadow luminance range !TP_WAVELET_MEDGREINF;First level !TP_WAVELET_MEDILEV;Edge detection @@ -1855,10 +1920,6 @@ TP_WBALANCE_TEMPERATURE;Isı !TP_WAVELET_TILESIZE;Tiling method !TP_WAVELET_TILESLIT;Little tiles !TP_WAVELET_TILES_TOOLTIP;Processing the full image leads to better quality and is the recommended option, while using tiles is a fall-back solution for users with little RAM. Refer to RawPedia for memory requirements. -!TP_WAVELET_TMHIGH;High -!TP_WAVELET_TMLOWHIGH;Low+High -!TP_WAVELET_TMNONE;None -!TP_WAVELET_TMSTD;Standard !TP_WAVELET_TMSTRENGTH;Compression strength !TP_WAVELET_TMSTRENGTH_TOOLTIP;Control the strength of tone mapping or contrast compression of the residual image. When the value is different from 0, the Strength and Gamma sliders of the Tone Mapping tool in the Exposure tab will become grayed out. !TP_WAVELET_TMTYPE;Compression method diff --git a/rtdata/languages/default b/rtdata/languages/default index b9946c2cc..6c1918a89 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -84,7 +84,7 @@ EXPORT_FASTEXPORTOPTIONS;Fast Export Options EXPORT_INSTRUCTIONS;Fast Export options provide overrides to bypass time and resource consuming development settings and to run queue processing using the fast export settings instead. This method is recommended for quicker generation of lower resolution images when speed is a priority or when resized output is desired for one or many images without making modifications to their saved development parameters. EXPORT_MAXHEIGHT;Maximum height: EXPORT_MAXWIDTH;Maximum width: -EXPORT_PUTTOQUEUEFAST; Put to queue for fast export +EXPORT_PUTTOQUEUEFAST; Put to queue for fast export EXPORT_RAW_DMETHOD;Demosaic method EXTPROGTARGET_1;raw EXTPROGTARGET_2;queue-processed @@ -151,7 +151,7 @@ FILEBROWSER_POPUPUNRANK;Unrank FILEBROWSER_POPUPUNTRASH;Remove from trash FILEBROWSER_QUERYBUTTONHINT;Clear the Find query FILEBROWSER_QUERYHINT;Type filenames to search for. Supports partial filenames. Separate the search terms using commas, e.g.\n1001,1004,1199\n\nExclude search terms by prefixing them with !=\ne.g.\n!=1001,1004,1199\n\nShortcuts:\nCtrl-f - focus the Find box,\nEnter - search,\nEsc - clear the Find box,\nShift-Esc - defocus the Find box. -FILEBROWSER_QUERYLABEL; Find: +FILEBROWSER_QUERYLABEL; Find: FILEBROWSER_RANK1_TOOLTIP;Rank 1 *\nShortcut: Shift-1 FILEBROWSER_RANK2_TOOLTIP;Rank 2 *\nShortcut: Shift-2 FILEBROWSER_RANK3_TOOLTIP;Rank 3 *\nShortcut: Shift-3 @@ -638,6 +638,26 @@ HISTORY_MSG_403;W - ES - Edge sensitivity HISTORY_MSG_404;W - ES - Base amplification HISTORY_MSG_405;W - Denoise - Level 4 HISTORY_MSG_406;W - ES - Neighboring pixels +HISTORY_MSG_407;Retinex - Method +HISTORY_MSG_408;Retinex - Neighboring +HISTORY_MSG_409;Retinex - Gain +HISTORY_MSG_410;Retinex - Offset +HISTORY_MSG_411;Retinex - Strength +HISTORY_MSG_412;Retinex - Scales +HISTORY_MSG_413;Retinex - Variance +HISTORY_MSG_414;Retinex - Histogram - Lab +HISTORY_MSG_415;Retinex - Transmission +HISTORY_MSG_416;Retinex +HISTORY_MSG_417;Retinex - Transmission median +HISTORY_MSG_418;Retinex - Threshold +HISTORY_MSG_419;Retinex - Color space +HISTORY_MSG_420;Retinex - Histogram - HSL +HISTORY_MSG_421;Retinex - Gamma +HISTORY_MSG_422;Retinex - Gamma +HISTORY_MSG_423;Retinex - Gamma slope +HISTORY_MSG_424;Retinex - HL threshold +HISTORY_MSG_425;Retinex - Log base +HISTORY_MSG_426;Retinex - Hue equalizer HISTORY_NEWSNAPSHOT;Add HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s HISTORY_SNAPSHOTS;Snapshots @@ -720,12 +740,12 @@ MAIN_TAB_COLOR;Color MAIN_TAB_COLOR_TOOLTIP;Shortcut: Alt-c MAIN_TAB_DETAIL;Detail MAIN_TAB_DETAIL_TOOLTIP;Shortcut: Alt-d -MAIN_TAB_DEVELOP; Develop +MAIN_TAB_DEVELOP; Develop MAIN_TAB_EXIF;Exif -MAIN_TAB_EXPORT; Fast Export +MAIN_TAB_EXPORT; Fast Export MAIN_TAB_EXPOSURE;Exposure MAIN_TAB_EXPOSURE_TOOLTIP;Shortcut: Alt-e -MAIN_TAB_FILTER; Filter +MAIN_TAB_FILTER; Filter MAIN_TAB_INSPECT; Inspect MAIN_TAB_IPTC;IPTC MAIN_TAB_METADATA;Metadata @@ -800,7 +820,6 @@ PARTIALPASTE_FLATFIELDCLIPCONTROL;Flat-field clip control PARTIALPASTE_FLATFIELDFILE;Flat-field file PARTIALPASTE_GRADIENT;Graduated filter PARTIALPASTE_HSVEQUALIZER;HSV equalizer -PARTIALPASTE_ICMGAMMA;Output gamma PARTIALPASTE_ICMSETTINGS;Color management settings PARTIALPASTE_IMPULSEDENOISE;Impulse noise reduction PARTIALPASTE_IPTCINFO;IPTC @@ -827,6 +846,7 @@ PARTIALPASTE_RAW_DMETHOD;Demosaic method PARTIALPASTE_RAW_FALSECOLOR;False color suppression PARTIALPASTE_RAW_LMMSEITERATIONS;LMMSE enhancement steps PARTIALPASTE_RESIZE;Resize +PARTIALPASTE_RETINEX;Retinex PARTIALPASTE_RGBCURVES;RGB curves PARTIALPASTE_ROTATION;Rotation PARTIALPASTE_SHADOWSHIGHLIGHTS;Shadows/highlights @@ -1613,6 +1633,54 @@ TP_RESIZE_SCALE;Scale TP_RESIZE_SPECIFY;Specify: TP_RESIZE_WIDTH;Width TP_RESIZE_W;Width: +TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL +TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b* +TP_RETINEX_CONTEDIT_LH;Hue equalizer +TP_RETINEX_CURVEEDITOR_CD;L=f(L) +TP_RETINEX_CURVEEDITOR_CD_TOOLTIP;Luminance according to luminance L=f(L)\nCorrect raw data to reduce halos and artifacts. +TP_RETINEX_CURVEEDITOR_LH;Strength=f(H) +TP_RETINEX_CURVEEDITOR_LH_TOOLTIP;Strength according to hue Strength=f(H)\nThis curve also acts on chroma when using the "Highlight" retinex method. +TP_RETINEX_GAIN;Gain +TP_RETINEX_GAIN_TOOLTIP;Acts on the transmission in combination with the offset. This is very different from the others settings. Used for black or white pixels, and to help balance the histogram. +TP_RETINEX_GAMMA;Free gamma +TP_RETINEX_GAMMA;Gamma +TP_RETINEX_GAMMA_FREE;Free +TP_RETINEX_GAMMA_HIGH;High +TP_RETINEX_GAMMA_LOW;Low +TP_RETINEX_GAMMA_MID;Middle +TP_RETINEX_GAMMA_NONE;None +TP_RETINEX_GAMMA_TOOLTIP;Restore tones by applying gamma before and after Retinex. Different from Retinex curves or others curves (Lab, Exposure, etc.). +TP_RETINEX_HIGHLIGHT;Highlight threshold +TP_RETINEX_HIGHLIGHT_TOOLTIP;Increase action of High algorithm.\nMay require you to re-adjust "Neighboring pixels" and to increase the "White-point correction" in the Raw tab -> Raw White Points tool. +TP_RETINEX_HIGHLIG;Highlight +TP_RETINEX_HIGH;High +TP_RETINEX_HSLSPACE_LIN;HSL-Linear +TP_RETINEX_HSLSPACE_LOG;HSL-Logarithmic +TP_RETINEX_LABEL;Retinex +TP_RETINEX_LABSPACE;L*a*b* +TP_RETINEX_LOW;Low +TP_RETINEX_MEDIAN;Transmission median filter +TP_RETINEX_METHOD;Method +TP_RETINEX_METHOD_TOOLTIP;Low = Reinforce low light,\nUniform = Equalize action,\nHigh = Reinforce high light,\nHighlight = Remove magenta in highlights. +TP_RETINEX_MLABEL;Restored haze-free Min=%1 Max=%2 +TP_RETINEX_MLABEL_TOOLTIP;Should be near min=0 max=32768\nRestored image with no mixture. +TP_RETINEX_NEIGHBOR;Neighboring pixels +TP_RETINEX_NEUTRAL;Reset +TP_RETINEX_NEUTRAL_TIP;Reset all sliders and curves to their default values. +TP_RETINEX_OFFSET;Offset +TP_RETINEX_SETTINGS;Settings +TP_RETINEX_SLOPE;Free gamma slope +TP_RETINEX_STRENGTH;Strength +TP_RETINEX_THRESHOLD;Threshold +TP_RETINEX_THRESHOLD_TOOLTIP;Limits in/out.\nIn = image source,\nOut = image gauss. +TP_RETINEX_TLABEL2;TM Tm=%1 TM=%2 +TP_RETINEX_TLABEL;TM Min=%1 Max=%2 Mean=%3 Sigma=%4 +TP_RETINEX_TLABEL_TOOLTIP;Transmission map result.\nMin and Max are used by Variance.\nMean and Sigma\nTm=Min TM=Max of transmission map. +TP_RETINEX_TRANSMISSION;Transmission map +TP_RETINEX_TRANSMISSION_TOOLTIP;Transmission according to transmission.\nAbscissa: transmission from negative values (min), mean, and positives values (max).\nOrdinate: amplification or reduction. +TP_RETINEX_UNIFORM;Uniform +TP_RETINEX_VARIANCE;Variance +TP_RETINEX_VARIANCE_TOOLTIP;Low variance increase local contrast and saturation, but can lead to artifacts. TP_RGBCURVES_BLUE;B TP_RGBCURVES_CHANNEL;Channel TP_RGBCURVES_GREEN;G @@ -1704,7 +1772,6 @@ TP_WAVELET_BANONE;None TP_WAVELET_BASLI;Slider TP_WAVELET_BATYPE;Contrast balance method TP_WAVELET_CBENAB;Toning and Color Balance -TP_WAVELET_CBTYPE;Toning and Color Balance TP_WAVELET_CB_TOOLTIP;For strong values product color-toning by combining it or not with levels decomposition 'toning'\nFor low values you can change the white balance of the background (sky, ...) without changing that of the front plane, generally more contrasted TP_WAVELET_CCURVE;Local contrast TP_WAVELET_CH1;Whole chroma range @@ -1718,7 +1785,6 @@ TP_WAVELET_CHR_TOOLTIP;Adjusts chroma as a function of "contrast levels" and "ch TP_WAVELET_CHSL;Sliders TP_WAVELET_CHTYPE;Chrominance method TP_WAVELET_COLORT;Opacity Red-Green -TP_WAVELET_COMBOTH;Both TP_WAVELET_COMPCONT;Contrast TP_WAVELET_COMPGAMMA;Compression gamma TP_WAVELET_COMPGAMMA_TOOLTIP;Adjusting the gamma of the residual image allows you to equilibrate the data and histogram. @@ -1730,9 +1796,9 @@ TP_WAVELET_CONTRA;Contrast TP_WAVELET_CONTRA_TOOLTIP;Changes contrast of the residual image. TP_WAVELET_CONTR;Gamut TP_WAVELET_CTYPE;Chrominance control -TP_WAVELET_CURVEEDITOR_CC_TOOLTIP;Modifies local contrast as a function of the original local contrast (absciss)\nLow absciss represents small local contrast (real values about 10..20)\n50% absciss represents average of local contrast (real value about 100..300)\n66% absciss represents standard deviation of local contrast (real value about 300..800)\n100% represents maximum (real value about 3000..8000) +TP_WAVELET_CURVEEDITOR_CC_TOOLTIP;Modifies local contrast as a function of the original local contrast (abscissa).\nLow abscissa values represent small local contrast (real values about 10..20).\n50% abscissa represents average local contrast (real value about 100..300).\n66% abscissa represents standard deviation of local contrast (real value about 300..800).\n100% abscissa represents maximum local contrast (real value about 3000..8000). TP_WAVELET_CURVEEDITOR_CH;Contrast levels=f(Hue) -TP_WAVELET_CURVEEDITOR_CH_TOOLTIP;Modifies each level's contrast as a function oh hue.\nTake care not to overwrite changes made with the Gamut Hue controls.\nThe curve will only have an effect when wavelet contrast level sliders are non-zero. +TP_WAVELET_CURVEEDITOR_CH_TOOLTIP;Modifies each level's contrast as a function of hue.\nTake care not to overwrite changes made with the Gamut sub-tool's hue controls.\nThe curve will only have an effect when wavelet contrast level sliders are non-zero. TP_WAVELET_CURVEEDITOR_CL;L TP_WAVELET_CURVEEDITOR_CL_TOOLTIP;Applies a final contrast luminance curve at the end of the wavelet treatment. TP_WAVELET_CURVEEDITOR_HH;HH @@ -1795,7 +1861,6 @@ TP_WAVELET_LEVTWO;Level 3 TP_WAVELET_LEVZERO;Level 1 TP_WAVELET_LINKEDG;Link with Edge Sharpness' Strength TP_WAVELET_LIPST;Enhanced algoritm -TP_WAVELET_LIPST_TOOLTIP;This algorithm uses the proximity of a pixel and eight of its neighbors. If less difference, edges are reinforced. TP_WAVELET_LOWLIGHT;Shadow luminance range TP_WAVELET_MEDGREINF;First level TP_WAVELET_MEDILEV;Edge detection @@ -1842,10 +1907,6 @@ TP_WAVELET_TILESFULL;Full image TP_WAVELET_TILESIZE;Tiling method TP_WAVELET_TILESLIT;Little tiles TP_WAVELET_TILES_TOOLTIP;Processing the full image leads to better quality and is the recommended option, while using tiles is a fall-back solution for users with little RAM. Refer to RawPedia for memory requirements. -TP_WAVELET_TMHIGH;High -TP_WAVELET_TMLOWHIGH;Low+High -TP_WAVELET_TMNONE;None -TP_WAVELET_TMSTD;Standard TP_WAVELET_TMSTRENGTH;Compression strength TP_WAVELET_TMSTRENGTH_TOOLTIP;Control the strength of tone mapping or contrast compression of the residual image. When the value is different from 0, the Strength and Gamma sliders of the Tone Mapping tool in the Exposure tab will become grayed out. TP_WAVELET_TMTYPE;Compression method diff --git a/rtengine/CMakeLists.txt b/rtengine/CMakeLists.txt index 70c593a9c..231875f95 100644 --- a/rtengine/CMakeLists.txt +++ b/rtengine/CMakeLists.txt @@ -18,7 +18,7 @@ set (RTENGINESOURCEFILES safegtk.cc colortemp.cc curves.cc flatcurves.cc diagona EdgePreservingDecomposition.cc cplx_wavelet_dec.cc FTblockDN.cc PF_correct_RT.cc previewimage.cc ipwavelet.cc dirpyr_equalizer.cc - calc_distort.cc lcp.cc dcp.cc + calc_distort.cc lcp.cc dcp.cc ipretinex.cc cJSON.c camconst.cc klt/convolve.cc klt/error.cc klt/klt.cc klt/klt_util.cc klt/pnmio.cc klt/pyramid.cc klt/selectGoodFeatures.cc klt/storeFeatures.cc klt/trackFeatures.cc klt/writeFeatures.cc diff --git a/rtengine/PF_correct_RT.cc b/rtengine/PF_correct_RT.cc index 130a683d8..c56ce168d 100644 --- a/rtengine/PF_correct_RT.cc +++ b/rtengine/PF_correct_RT.cc @@ -65,11 +65,8 @@ SSEFUNCTION void ImProcFunctions::PF_correct_RT(LabImage * src, LabImage * dst, #pragma omp parallel #endif { - AlignedBufferMP buffer(max(src->W, src->H)); - gaussHorizontal (src->a, tmp1->a, buffer, src->W, src->H, radius); - gaussHorizontal (src->b, tmp1->b, buffer, src->W, src->H, radius); - gaussVertical (tmp1->a, tmp1->a, buffer, src->W, src->H, radius); - gaussVertical (tmp1->b, tmp1->b, buffer, src->W, src->H, radius); + gaussianBlur (src->a, tmp1->a, src->W, src->H, radius); + gaussianBlur (src->b, tmp1->b, src->W, src->H, radius); } float chromave = 0.0f; @@ -395,11 +392,8 @@ SSEFUNCTION void ImProcFunctions::PF_correct_RTcam(CieImage * src, CieImage * ds #pragma omp parallel #endif { - AlignedBufferMP buffer(max(src->W, src->H)); - gaussHorizontal (sraa, tmaa, buffer, src->W, src->H, radius); - gaussHorizontal (srbb, tmbb, buffer, src->W, src->H, radius); - gaussVertical (tmaa, tmaa, buffer, src->W, src->H, radius); - gaussVertical (tmbb, tmbb, buffer, src->W, src->H, radius); + gaussianBlur (sraa, tmaa, src->W, src->H, radius); + gaussianBlur (srbb, tmbb, src->W, src->H, radius); } float chromave = 0.0f; @@ -773,19 +767,14 @@ SSEFUNCTION void ImProcFunctions::Badpixelscam(CieImage * src, CieImage * dst, d #pragma omp parallel #endif { - AlignedBufferMP buffer(max(src->W, src->H)); - //chroma a and b if(mode == 2) { //choice of gaussian blur - gaussHorizontal (sraa, tmaa, buffer, src->W, src->H, radius); - gaussHorizontal (srbb, tmbb, buffer, src->W, src->H, radius); - gaussVertical (tmaa, tmaa, buffer, src->W, src->H, radius); - gaussVertical (tmbb, tmbb, buffer, src->W, src->H, radius); + gaussianBlur (sraa, tmaa, src->W, src->H, radius); + gaussianBlur (srbb, tmbb, src->W, src->H, radius); } //luma sh_p - gaussHorizontal (src->sh_p, tmL, buffer, src->W, src->H, 2.0);//low value to avoid artifacts - gaussVertical (tmL, tmL, buffer, src->W, src->H, 2.0); + gaussianBlur (src->sh_p, tmL, src->W, src->H, 2.0);//low value to avoid artifacts } if(mode == 1) { //choice of median @@ -1386,19 +1375,14 @@ SSEFUNCTION void ImProcFunctions::BadpixelsLab(LabImage * src, LabImage * dst, d #pragma omp parallel #endif { - AlignedBufferMP buffer(max(src->W, src->H)); - //chroma a and b if(mode >= 2) { //choice of gaussian blur - gaussHorizontal (sraa, tmaa, buffer, src->W, src->H, radius); - gaussHorizontal (srbb, tmbb, buffer, src->W, src->H, radius); - gaussVertical (tmaa, tmaa, buffer, src->W, src->H, radius); - gaussVertical (tmbb, tmbb, buffer, src->W, src->H, radius); + gaussianBlur (sraa, tmaa, src->W, src->H, radius); + gaussianBlur (srbb, tmbb, src->W, src->H, radius); } //luma sh_p - gaussHorizontal (src->L, tmL, buffer, src->W, src->H, 2.0);//low value to avoid artifacts - gaussVertical (tmL, tmL, buffer, src->W, src->H, 2.0); + gaussianBlur (src->L, tmL, src->W, src->H, 2.0);//low value to avoid artifacts } if(mode == 1) { //choice of median diff --git a/rtengine/amaze_demosaic_RT.cc b/rtengine/amaze_demosaic_RT.cc index 10a3687e6..dc2d4316e 100644 --- a/rtengine/amaze_demosaic_RT.cc +++ b/rtengine/amaze_demosaic_RT.cc @@ -37,7 +37,6 @@ namespace rtengine SSEFUNCTION void RawImageSource::amaze_demosaic_RT(int winx, int winy, int winw, int winh) { - #define HCLIP(x) x //is this still necessary??? //min(clip_pt,x) @@ -1615,10 +1614,10 @@ SSEFUNCTION void RawImageSource::amaze_demosaic_RT(int winx, int winy, int winw, if(plistener) { progresscounter++; - if(progresscounter % 4 == 0) { + if(progresscounter % 16 == 0) { #pragma omp critical { - progress += (double)4 * ((TS - 32) * (TS - 32)) / (height * width); + progress += (double)16 * ((TS - 32) * (TS - 32)) / (height * width); if (progress > 1.0) { diff --git a/rtengine/array2D.h b/rtengine/array2D.h index 93734a421..f9d92ac36 100644 --- a/rtengine/array2D.h +++ b/rtengine/array2D.h @@ -23,7 +23,7 @@ * Usage: * * array2D name (X-size,Y-size); - * array2D name (X-size,Y-size type ** data); + * array2D name (X-size,Y-size,type ** data); * * creates an array which is valid within the normal C/C++ scope "{ ... }" * @@ -75,7 +75,7 @@ private: T ** ptr; T * data; bool lock; // useful lock to ensure data is not changed anymore. - void ar_realloc(int w, int h) + void ar_realloc(int w, int h, int offset = 0) { if ((ptr) && ((h > y) || (4 * h < y))) { delete[] ptr; @@ -92,14 +92,14 @@ private: } if (data == NULL) { - data = new T[h * w]; + data = new T[h * w + offset]; } x = w; y = h; for (int i = 0; i < h; i++) { - ptr[i] = data + w * i; + ptr[i] = data + offset + w * i; } owner = 1; @@ -184,6 +184,19 @@ public: } } + void free() + { + if ((owner) && (data)) { + delete[] data; + data = NULL; + } + + if (ptr) { + delete [] ptr; + ptr = NULL; + } + } + // use with indices T * operator[](int index) { @@ -207,7 +220,7 @@ public: // useful within init of parent object // or use as resize of 2D array - void operator()(int w, int h, unsigned int flgs = 0) + void operator()(int w, int h, unsigned int flgs = 0, int offset = 0) { flags = flgs; @@ -223,10 +236,10 @@ public: lock = flags & ARRAY2D_LOCK_DATA; - ar_realloc(w, h); + ar_realloc(w, h, offset); if (flags & ARRAY2D_CLEAR_DATA) { - memset(data, 0, w * h * sizeof(T)); + memset(data + offset, 0, w * h * sizeof(T)); } } @@ -298,10 +311,10 @@ private: array2D list[num]; public: - multi_array2D(int x, int y, int flags = 0) + multi_array2D(int x, int y, int flags = 0, int offset = 0) { for (size_t i = 0; i < num; i++) { - list[i](x, y, flags); + list[i](x, y, flags, (i + 1) * offset); } } @@ -312,11 +325,7 @@ public: array2D & operator[](int index) { - if (static_cast(index) >= num) { - printf("index %0u is out of range[0..%0lu]", index, num - 1); - raise( SIGSEGV); - } - + assert(static_cast(index) < num); return list[index]; } }; diff --git a/rtengine/bilateral2.h b/rtengine/bilateral2.h index 925414fd4..7a919546f 100644 --- a/rtengine/bilateral2.h +++ b/rtengine/bilateral2.h @@ -26,9 +26,7 @@ #include "rtengine.h" #include "rt_math.h" -#include "alignedbuffer.h" #include "mytime.h" -#include "gauss.h" #include "array2D.h" #ifdef _OPENMP @@ -147,7 +145,7 @@ using namespace rtengine; a31*SULY(3,-5) + a32*SULY(3,-4) + a33*SULY(3,-3) + a34*SULY(3,-2) + a35*SULY(3,-1) + a36*SULY(3,0) + a35*SULY(3,1) + a34*SULY(3,2) + a33*SULY(3,3) + a32*SULY(3,4) + a31*SULY(3,5) + \ a21*SULY(4,-5) + a22*SULY(4,-4) + a23*SULY(4,-3) + a24*SULY(4,-2) + a25*SULY(4,-1) + a26*SULY(4,0) + a25*SULY(4,1) + a24*SULY(4,2) + a23*SULY(4,3) + a22*SULY(4,4) + a21*SULY(4,5) + \ a11*SULY(5,-5) + a12*SULY(5,-4) + a13*SULY(5,-3) + a14*SULY(5,-2) + a15*SULY(5,-1) + a16*SULY(5,0) + a15*SULY(5,1) + a14*SULY(5,2) + a13*SULY(5,3) + a12*SULY(5,4) + a11*SULY(5,5); \ - + // sigma = 0.5 template void bilateral05 (T** src, T** dst, T** buffer, int W, int H, double sens, bool multiThread) diff --git a/rtengine/color.cc b/rtengine/color.cc index c2bdcc9dd..c0dbab4d3 100644 --- a/rtengine/color.cc +++ b/rtengine/color.cc @@ -50,6 +50,11 @@ LUTf Color::gammatab_26_11; LUTf Color::igammatab_24_17; LUTf Color::gammatab_24_17a; LUTf Color::gammatab_13_2; +LUTf Color::igammatab_13_2; +LUTf Color::gammatab_115_2; +LUTf Color::igammatab_115_2; +LUTf Color::gammatab_145_3; +LUTf Color::igammatab_145_3; // Wikipedia sRGB: Unlike most other RGB color spaces, the sRGB gamma cannot be expressed as a single numerical value. // The overall gamma is approximately 2.2, consisting of a linear (gamma 1.0) section near black, and a non-linear section elsewhere involving a 2.4 exponent @@ -162,6 +167,11 @@ void Color::init () igammatab_24_17(65536, 0); gammatab_24_17a(65536, LUT_CLIP_ABOVE | LUT_CLIP_BELOW); gammatab_13_2(65536, 0); + igammatab_13_2(65536, 0); + gammatab_115_2(65536, 0); + igammatab_115_2(65536, 0); + gammatab_145_3(65536, 0); + igammatab_145_3(65536, 0); for (int i = 0; i < 65536; i++) { gammatab_srgb[i] = (65535.0 * gamma2 (i / 65535.0)); @@ -200,10 +210,31 @@ void Color::init () gammatab_13_2[i] = (65535.0 * gamma13_2 (i / 65535.0)); } + for (int i = 0; i < 65536; i++) { + igammatab_13_2[i] = (65535.0 * igamma13_2 (i / 65535.0)); + } + + for (int i = 0; i < 65536; i++) { + gammatab_115_2[i] = (65535.0 * gamma115_2 (i / 65535.0)); + } + + for (int i = 0; i < 65536; i++) { + igammatab_115_2[i] = (65535.0 * igamma115_2 (i / 65535.0)); + } + + for (int i = 0; i < 65536; i++) { + gammatab_145_3[i] = (65535.0 * gamma145_3 (i / 65535.0)); + } + + for (int i = 0; i < 65536; i++) { + igammatab_145_3[i] = (65535.0 * igamma145_3 (i / 65535.0)); + } + for (int i = 0; i < 65536; i++) { gammatab_26_11[i] = (65535.0 * gamma26_11 (i / 65535.0)); } +//gammatab_145_3 for (int i = 0; i < 65536; i++) { igammatab_26_11[i] = (65535.0 * igamma26_11 (i / 65535.0)); } @@ -280,6 +311,70 @@ void Color::rgb2hsl(float r, float g, float b, float &h, float &s, float &l) } } +void Color::rgb2hslfloat(float r, float g, float b, float &h, float &s, float &l) +{ + + float m = min(r, g, b); + float M = max(r, g, b); + float C = M - m; + + l = (M + m) * 7.6295109e-6f; // (0.5f / 65535.f) + + if (fabsf(C) < 0.65535f) { // 0.00001f * 65535.f + h = 0.f; + s = 0.f; + } else { + + if (l <= 0.5f) { + s = (M - m) / (M + m); + } else { + s = (M - m) / (131070.f - M - m); // 131070.f = 2.f * 65535.f + } + + if ( r == M ) { + h = (g - b); + } else if ( g == M ) { + h = (2.f * C) + (b - r); + } else { + h = (4.f * C) + (r - g); + } + + h /= (6.f * C); + + if ( h < 0.f ) { + h += 1.f; + } else if ( h > 1.f ) { + h -= 1.f; + } + } +} + +#ifdef __SSE2__ +void Color::rgb2hsl(vfloat r, vfloat g, vfloat b, vfloat &h, vfloat &s, vfloat &l) +{ + vfloat maxv = _mm_max_ps(r, _mm_max_ps(g, b)); + vfloat minv = _mm_min_ps(r, _mm_min_ps(g, b)); + vfloat C = maxv - minv; + vfloat tempv = maxv + minv; + l = (tempv) * F2V(7.6295109e-6f); + s = (maxv - minv); + s /= vself(vmaskf_gt(l, F2V(0.5f)), F2V(131070.f) - tempv, tempv); + + h = F2V(4.f) * C + r - g; + h = vself(vmaskf_eq(g, maxv), F2V(2.f) * C + b - r, h); + h = vself(vmaskf_eq(r, maxv), g - b, h); + + h /= (F2V(6.f) * C); + vfloat onev = F2V(1.f); + h = vself(vmaskf_lt(h, ZEROV), h + onev, h); + h = vself(vmaskf_gt(h, onev), h - onev, h); + + vmask zeromask = vmaskf_lt(vabsf(C), F2V(0.65535f)); + h = vself(zeromask, ZEROV, h); + s = vself(zeromask, ZEROV, s); +} +#endif + double Color::hue2rgb(double p, double q, double t) { if (t < 0.) { @@ -299,6 +394,42 @@ double Color::hue2rgb(double p, double q, double t) } } +float Color::hue2rgbfloat(float p, float q, float t) +{ + if (t < 0.f) { + t += 6.f; + } else if( t > 6.f) { + t -= 6.f; + } + + if (t < 1.f) { + return p + (q - p) * t; + } else if (t < 3.f) { + return q; + } else if (t < 4.f) { + return p + (q - p) * (4.f - t); + } else { + return p; + } +} + +#ifdef __SSE2__ +vfloat Color::hue2rgb(vfloat p, vfloat q, vfloat t) +{ + vfloat fourv = F2V(4.f); + vfloat threev = F2V(3.f); + vfloat sixv = threev + threev; + t = vself(vmaskf_lt(t, ZEROV), t + sixv, t); + t = vself(vmaskf_gt(t, sixv), t - sixv, t); + + vfloat temp1 = p + (q - p) * t; + vfloat temp2 = p + (q - p) * (fourv - t); + vfloat result = vself(vmaskf_lt(t, fourv), temp2, p); + result = vself(vmaskf_lt(t, threev), q, result); + return vself(vmaskf_lt(t, fourv - threev), temp1, result); +} +#endif + void Color::hsl2rgb (float h, float s, float l, float &r, float &g, float &b) { @@ -324,6 +455,53 @@ void Color::hsl2rgb (float h, float s, float l, float &r, float &g, float &b) } } +void Color::hsl2rgbfloat (float h, float s, float l, float &r, float &g, float &b) +{ + + if (s == 0.f) { + r = g = b = 65535.f * l; // achromatic + } else { + float m2; + + if (l <= 0.5f) { + m2 = l * (1.f + s); + } else { + m2 = l + s - l * s; + } + + float m1 = 2.f * l - m2; + + r = 65535.f * hue2rgbfloat (m1, m2, h * 6.f + 2.f); + g = 65535.f * hue2rgbfloat (m1, m2, h * 6.f); + b = 65535.f * hue2rgbfloat (m1, m2, h * 6.f - 2.f); + } +} + +#ifdef __SSE2__ +void Color::hsl2rgb (vfloat h, vfloat s, vfloat l, vfloat &r, vfloat &g, vfloat &b) +{ + + vfloat m2 = s * l; + m2 = vself(vmaskf_gt(l, F2V(0.5f)), s - m2, m2); + m2 += l; + + vfloat twov = F2V(2.f); + vfloat c65535v = F2V(65535.f); + vfloat m1 = l + l - m2; + + h *= F2V(6.f); + r = c65535v * hue2rgb (m1, m2, h + twov); + g = c65535v * hue2rgb (m1, m2, h); + b = c65535v * hue2rgb (m1, m2, h - twov); + + vmask selectsMask = vmaskf_eq(ZEROV, s); + vfloat lc65535v = c65535v * l; + r = vself(selectsMask, lc65535v, r); + g = vself(selectsMask, lc65535v, g); + b = vself(selectsMask, lc65535v, b); +} +#endif + void Color::hsl2rgb01 (float h, float s, float l, float &r, float &g, float &b) { @@ -595,6 +773,15 @@ void Color::xyz2rgb (float x, float y, float z, float &r, float &g, float &b, co b = ((rgb_xyz[2][0] * x + rgb_xyz[2][1] * y + rgb_xyz[2][2] * z)) ; } +#ifdef __SSE2__ +void Color::xyz2rgb (vfloat x, vfloat y, vfloat z, vfloat &r, vfloat &g, vfloat &b, const vfloat rgb_xyz[3][3]) +{ + r = ((rgb_xyz[0][0] * x + rgb_xyz[0][1] * y + rgb_xyz[0][2] * z)) ; + g = ((rgb_xyz[1][0] * x + rgb_xyz[1][1] * y + rgb_xyz[1][2] * z)) ; + b = ((rgb_xyz[2][0] * x + rgb_xyz[2][1] * y + rgb_xyz[2][2] * z)) ; +} +#endif // __SSE2__ + void Color::trcGammaBW (float &r, float &g, float &b, float gammabwr, float gammabwg, float gammabwb) { // correct gamma for black and white image : pseudo TRC curve of ICC profil @@ -1130,35 +1317,35 @@ void Color::calcGamma (double pwr, double ts, int mode, int imax, double &gamma0 { //from Dcraw (D.Coffin) int i; - double g[6], bnd[2] = {0, 0}; + double g[6], bnd[2] = {0., 0.}; g[0] = pwr; g[1] = ts; - g[2] = g[3] = g[4] = 0; - bnd[g[1] >= 1] = 1; + g[2] = g[3] = g[4] = 0.; + bnd[g[1] >= 1.] = 1.; - if (g[1] && (g[1] - 1) * (g[0] - 1) <= 0) { + if (g[1] && (g[1] - 1.) * (g[0] - 1.) <= 0.) { for (i = 0; i < 48; i++) { - g[2] = (bnd[0] + bnd[1]) / 2; + g[2] = (bnd[0] + bnd[1]) / 2.; if (g[0]) { - bnd[(pow(g[2] / g[1], -g[0]) - 1) / g[0] - 1 / g[2] > -1] = g[2]; + bnd[(pow(g[2] / g[1], -g[0]) - 1.) / g[0] - 1. / g[2] > -1.] = g[2]; } else { - bnd[g[2] / exp(1 - 1 / g[2]) < g[1]] = g[2]; + bnd[g[2] / exp(1. - 1. / g[2]) < g[1]] = g[2]; } } g[3] = g[2] / g[1]; if (g[0]) { - g[4] = g[2] * (1 / g[0] - 1); + g[4] = g[2] * (1. / g[0] - 1.); } } if (g[0]) { - g[5] = 1 / (g[1] * SQR(g[3]) / 2 - g[4] * (1 - g[3]) + (1 - pow(g[3], 1 + g[0])) * (1 + g[4]) / (1 + g[0])) - 1; + g[5] = 1. / (g[1] * SQR(g[3]) / 2. - g[4] * (1. - g[3]) + (1. - pow(g[3], 1. + g[0])) * (1. + g[4]) / (1. + g[0])) - 1.; } else { - g[5] = 1 / (g[1] * SQR(g[3]) / 2 + 1 - g[2] - g[3] - g[2] * g[3] * (log(g[3]) - 1)) - 1; + g[5] = 1. / (g[1] * SQR(g[3]) / 2. + 1. - g[2] - g[3] - g[2] * g[3] * (log(g[3]) - 1.)) - 1.; } if (!mode--) { diff --git a/rtengine/color.h b/rtengine/color.h index 9601ec3f6..c179946f0 100644 --- a/rtengine/color.h +++ b/rtengine/color.h @@ -89,7 +89,10 @@ private: // Separated from init() to keep the code clear static void initMunsell (); static double hue2rgb(double p, double q, double t); - + static float hue2rgbfloat(float p, float q, float t); +#ifdef __SSE2__ + static vfloat hue2rgb(vfloat p, vfloat q, vfloat t); +#endif public: typedef enum Channel { @@ -139,6 +142,11 @@ public: static LUTf igammatab_24_17; static LUTf gammatab_24_17a; static LUTf gammatab_13_2; + static LUTf igammatab_13_2; + static LUTf gammatab_115_2; + static LUTf igammatab_115_2; + static LUTf gammatab_145_3; + static LUTf igammatab_145_3; // look-up tables for the simple exponential gamma static LUTf gammatab; @@ -179,7 +187,10 @@ public: * @param l luminance channel [0; 1] (return value) */ static void rgb2hsl (float r, float g, float b, float &h, float &s, float &l); - + static void rgb2hslfloat (float r, float g, float b, float &h, float &s, float &l); +#ifdef __SSE2__ + static void rgb2hsl (vfloat r, vfloat g, vfloat b, vfloat &h, vfloat &s, vfloat &l); +#endif /** * @brief Convert hue/saturation/luminance in red/green/blue @@ -191,6 +202,10 @@ public: * @param b blue channel [0 ; 65535] (return value) */ static void hsl2rgb (float h, float s, float l, float &r, float &g, float &b); + static void hsl2rgbfloat (float h, float s, float l, float &r, float &g, float &b); +#ifdef __SSE2__ + static void hsl2rgb (vfloat h, vfloat s, vfloat l, vfloat &r, vfloat &g, vfloat &b); +#endif /** * @brief Convert hue/saturation/luminance in red/green/blue @@ -293,6 +308,9 @@ public: */ static void xyz2rgb (float x, float y, float z, float &r, float &g, float &b, const double rgb_xyz[3][3]); static void xyz2rgb (float x, float y, float z, float &r, float &g, float &b, const float rgb_xyz[3][3]); +#ifdef __SSE2__ + static void xyz2rgb (vfloat x, vfloat y, vfloat z, vfloat &r, vfloat &g, vfloat &b, const vfloat rgb_xyz[3][3]); +#endif /** @@ -936,9 +954,45 @@ public: */ static inline double gamma13_2 (double x) { - return x <= 0.016613 ? x * 2.0 : 1.009968 * exp(log(x) / 1.3) - 0.016613; + return x <= 0.016613 ? x * 2.0 : 1.009968 * exp(log(x) / 1.3) - 0.009968; } + static inline double igamma13_2 (double x) + { + return x <= 0.033226 ? x / 2.0 : exp(log((x + 0.009968) / 1.009968) * 1.3); + } + + static inline double gamma115_2 (double x) + { + return x <= 0.001692 ? x * 2.0 : 1.000508 * exp(log(x) / 1.15) - 0.000508; + } + + static inline double igamma115_2 (double x) + { + return x <= 0.003384 ? x / 2.0 : exp(log((x + 0.000508) / 1.000508) * 1.15); + } + + static inline double gamma145_3 (double x) + { + return x <= 0.009115 ? x * 3.0 : 1.012305 * exp(log(x) / 1.45) - 0.012305; + } + + static inline double igamma145_3 (double x) + { + return x <= 0.027345 ? x / 3.0 : exp(log((x + 0.012305) / 1.012305) * 1.45); + } + +//gamma for Retinex + static inline double gammareti (double x, double gamma, double start, double slope, double mul, double add) + { + return (x <= start ? x*slope : exp(log(x) / gamma) * mul - add); + } + static inline double igammareti (double x, double gamma, double start, double slope, double mul, double add) + { + return (x <= start * slope ? x / slope : exp(log((x + add) / mul) * gamma) ); + } + + // gamma function with adjustable parameters //same as above with values calculate with Calcgamma above diff --git a/rtengine/colortemp.cc b/rtengine/colortemp.cc index e22c2fd06..d4f1c995f 100644 --- a/rtengine/colortemp.cc +++ b/rtengine/colortemp.cc @@ -1794,7 +1794,7 @@ The next 3 methods are inspired from: This program is in the public domain. b) Bruce Lindbloom - Adapted to Rawtherapee by J.Desmis + Adapted to RawTherapee by J.Desmis this values are often called xBar yBar zBar and are characteristics of a color / illuminant diff --git a/rtengine/curves.cc b/rtengine/curves.cc index d712a9629..4ad1d06bd 100644 --- a/rtengine/curves.cc +++ b/rtengine/curves.cc @@ -503,6 +503,43 @@ void CurveFactory::curveCL ( bool & clcutili, const std::vector& clcurve dCurve = NULL; } } + +void CurveFactory::curveDehaContL ( bool & dehacontlutili, const std::vector& dehaclcurvePoints, LUTf & dehaclCurve, int skip, LUTu & histogram, LUTu & outBeforeCurveHistogram) +{ + bool needed = false; + DiagonalCurve* dCurve = NULL; + outBeforeCurveHistogram.clear(); + bool histNeeded = false; + + if (!dehaclcurvePoints.empty() && dehaclcurvePoints[0] != 0) { + dCurve = new DiagonalCurve (dehaclcurvePoints, CURVES_MIN_POLY_POINTS / skip); + + if (outBeforeCurveHistogram) { + histNeeded = true; + } + + if (dCurve && !dCurve->isIdentity()) { + needed = true; + dehacontlutili = true; + } + } + + if (histNeeded) { + for (int i = 0; i < 32768; i++) { + double hval = CLIPD((double)i / 32767.0); + int hi = (int)(255.0 * hval); + outBeforeCurveHistogram[hi] += histogram[i] ; + } + } + + fillCurveArray(dCurve, dehaclCurve, skip, needed); + + if (dCurve) { + delete dCurve; + dCurve = NULL; + } +} + // add curve Lab wavelet : Cont=f(L) void CurveFactory::curveWavContL ( bool & wavcontlutili, const std::vector& wavclcurvePoints, LUTf & wavclCurve, /*LUTu & histogramwavcl, LUTu & outBeforeWavCLurveHistogram,*/int skip) { @@ -1320,6 +1357,39 @@ void ColorAppearance::Set(Curve *pCurve) } } +// +RetinextransmissionCurve::RetinextransmissionCurve() {}; + +void RetinextransmissionCurve::Reset() +{ + luttransmission.reset(); +} + +void RetinextransmissionCurve::Set(const Curve &pCurve) +{ + if (pCurve.isIdentity()) { + luttransmission.reset(); // raise this value if the quality suffers from this number of samples + return; + } + + luttransmission(501); // raise this value if the quality suffers from this number of samples + + for (int i = 0; i < 501; i++) { + luttransmission[i] = pCurve.getVal(double(i) / 500.); + } +} + +void RetinextransmissionCurve::Set(const std::vector &curvePoints) +{ + if (!curvePoints.empty() && curvePoints[0] > FCT_Linear && curvePoints[0] < FCT_Unchanged) { + FlatCurve tcurve(curvePoints, false, CURVES_MIN_POLY_POINTS / 2); + tcurve.setIdentityValue(0.); + Set(tcurve); + } else { + Reset(); + } +} + void ToneCurve::Reset() { lutToneCurve.reset(); diff --git a/rtengine/curves.h b/rtengine/curves.h index 56681f4b6..f0643c7a9 100644 --- a/rtengine/curves.h +++ b/rtengine/curves.h @@ -282,6 +282,7 @@ public: static void curveCL ( bool & clcutili, const std::vector& clcurvePoints, LUTf & clCurve, LUTu & histogramcl, LUTu & outBeforeCLurveHistogram, int skip); static void curveWavContL ( bool & wavcontlutili, const std::vector& wavclcurvePoints, LUTf & wavclCurve,/* LUTu & histogramwavcl, LUTu & outBeforeWavCLurveHistogram,*/int skip); + static void curveDehaContL ( bool & dehacontlutili, const std::vector& dehaclcurvePoints, LUTf & dehaclCurve, int skip, LUTu & histogram, LUTu & outBeforeCurveHistogram); static void curveToningCL ( bool & clctoningutili, const std::vector& clcurvePoints, LUTf & clToningCurve, int skip); static void curveToningLL ( bool & llctoningutili, const std::vector& llcurvePoints, LUTf & llToningCurve, int skip); @@ -428,6 +429,32 @@ public: }; }; +class RetinextransmissionCurve +{ +private: + LUTf luttransmission; // 0xffff range + void Set(const Curve &pCurve); + +public: + virtual ~RetinextransmissionCurve() {}; + RetinextransmissionCurve(); + + void Reset(); + void Set(const Curve *pCurve); + void Set(const std::vector &curvePoints); + float operator[](float index) const + { + return luttransmission[index]; + } + + operator bool (void) const + { + return luttransmission; + } +}; + + + class ToneCurve { public: diff --git a/rtengine/dcraw.cc b/rtengine/dcraw.cc index add5b525d..8e0a36df2 100644 --- a/rtengine/dcraw.cc +++ b/rtengine/dcraw.cc @@ -136,10 +136,10 @@ const float d65_white[3] = { 0.950456, 1, 1.088754 }; #define SQR(x) rtengine::SQR(x) #define ABS(x) (((int)(x) ^ ((int)(x) >> 31)) - ((int)(x) >> 31)) -#define MIN(a,b) rtengine::min(a,static_cast(b)) -#define MAX(a,b) rtengine::max(a,static_cast(b)) -#define LIM(x,min,max) rtengine::LIM(x,static_cast(min),static_cast(max)) -#define ULIM(x,y,z) rtengine::ULIM(x,static_cast(y),static_cast(z)) +#define MIN(a,b) rtengine::min(a,static_cast<__typeof__(a)>(b)) +#define MAX(a,b) rtengine::max(a,static_cast<__typeof__(a)>(b)) +#define LIM(x,min,max) rtengine::LIM(x,static_cast<__typeof__(x)>(min),static_cast<__typeof__(x)>(max)) +#define ULIM(x,y,z) rtengine::ULIM(x,static_cast<__typeof__(x)>(y),static_cast<__typeof__(x)>(z)) #define CLIP(x) rtengine::CLIP(x) #define SWAP(a,b) { a=a+b; b=a-b; a=a-b; } diff --git a/rtengine/dcraw.patch b/rtengine/dcraw.patch index e1603864a..db24e7fe8 100644 --- a/rtengine/dcraw.patch +++ b/rtengine/dcraw.patch @@ -1,5 +1,5 @@ ---- dcraw.c 2015-08-15 15:35:27 +0000 -+++ dcraw.cc 2015-08-16 13:46:33 +0000 +--- dcraw.c 2015-09-21 10:08:04 +0000 ++++ dcraw.cc 2015-10-14 14:29:55 +0000 @@ -1,3 +1,15 @@ +/*RT*/#include +/*RT*/#include @@ -148,10 +148,10 @@ -#define LIM(x,min,max) MAX(min,MIN(x,max)) -#define ULIM(x,y,z) ((y) < (z) ? LIM(x,y,z) : LIM(x,z,y)) -#define CLIP(x) LIM(x,0,65535) -+#define MIN(a,b) rtengine::min(a,static_cast(b)) -+#define MAX(a,b) rtengine::max(a,static_cast(b)) -+#define LIM(x,min,max) rtengine::LIM(x,static_cast(min),static_cast(max)) -+#define ULIM(x,y,z) rtengine::ULIM(x,static_cast(y),static_cast(z)) ++#define MIN(a,b) rtengine::min(a,static_cast<__typeof__(a)>(b)) ++#define MAX(a,b) rtengine::max(a,static_cast<__typeof__(a)>(b)) ++#define LIM(x,min,max) rtengine::LIM(x,static_cast<__typeof__(x)>(min),static_cast<__typeof__(x)>(max)) ++#define ULIM(x,y,z) rtengine::ULIM(x,static_cast<__typeof__(x)>(y),static_cast<__typeof__(x)>(z)) +#define CLIP(x) rtengine::CLIP(x) #define SWAP(a,b) { a=a+b; b=a-b; a=a-b; } diff --git a/rtengine/dcrop.cc b/rtengine/dcrop.cc index 138a03594..a97ae7f39 100644 --- a/rtengine/dcrop.cc +++ b/rtengine/dcrop.cc @@ -807,6 +807,8 @@ void Crop::update (int todo) bool wavcontlutili = parent->wavcontlutili; LUTu dummy; + int moderetinex; + // parent->ipf.MSR(labnCrop, labnCrop->W, labnCrop->H, 1); parent->ipf.chromiLuminanceCurve (this, 1, labnCrop, labnCrop, parent->chroma_acurve, parent->chroma_bcurve, parent->satcurve, parent->lhskcurve, parent->clcurve, parent->lumacurve, utili, autili, butili, ccutili, cclutili, clcutili, dummy, dummy, dummy, dummy); parent->ipf.vibrance (labnCrop); diff --git a/rtengine/demosaic_algos.cc b/rtengine/demosaic_algos.cc index 954be456b..aa1b90278 100644 --- a/rtengine/demosaic_algos.cc +++ b/rtengine/demosaic_algos.cc @@ -1242,7 +1242,7 @@ void RawImageSource::border_interpolate2( int winw, int winh, int lborders) // Joint Demosaicing and Denoising using High Order Interpolation Techniques // Revision 0.9.1a - 09/02/2010 - Contact info: luis.sanz.rodriguez@gmail.com // Copyright Luis Sanz Rodriguez 2010 -// Adapted to RT by Jacques Desmis 3/2013 +// Adapted to RawTherapee by Jacques Desmis 3/2013 void RawImageSource::jdl_interpolate_omp() // from "Lassus" { @@ -1367,7 +1367,7 @@ void RawImageSource::jdl_interpolate_omp() // from "Lassus" // Color demozaicing via directional Linear Minimum Mean Square-error Estimation, // IEEE Trans. on Image Processing, vol. 14, pp. 2167-2178, // Dec. 2005. -// Adapted to RT by Jacques Desmis 3/2013 +// Adapted to RawTherapee by Jacques Desmis 3/2013 // Improved speed and reduced memory consumption by Ingo Weyrich 2/2015 //TODO Tiles to reduce memory consumption SSEFUNCTION void RawImageSource::lmmse_interpolate_omp(int winw, int winh, int iterations) @@ -2041,7 +2041,7 @@ SSEFUNCTION void RawImageSource::lmmse_interpolate_omp(int winw, int winh, int i * Visit for more information. * ***/ -// Adapted to RT by Jacques Desmis 3/2013 +// Adapted to RawTherapee by Jacques Desmis 3/2013 // SSE version by Ingo Weyrich 5/2013 #ifdef __SSE2__ #define CLIPV(a) LIMV(a,zerov,c65535v) @@ -2965,7 +2965,7 @@ void RawImageSource::nodemosaic(bool bw) /* Refinement based on EECI demosaicing algorithm by L. Chang and Y.P. Tan Paul Lee - Adapted for Rawtherapee - Jacques Desmis 04/2013 + Adapted for RawTherapee - Jacques Desmis 04/2013 */ #ifdef __SSE2__ diff --git a/rtengine/diagonalcurves.cc b/rtengine/diagonalcurves.cc index f46cdb8cb..f09eb3459 100644 --- a/rtengine/diagonalcurves.cc +++ b/rtengine/diagonalcurves.cc @@ -72,7 +72,11 @@ DiagonalCurve::DiagonalCurve (const std::vector& p, int poly_pn) if(x[0] == 0.f && x[1] == 0.f) // Avoid crash when first two points are at x = 0 (git Issue 2888) - x[1] = 0.5f; + x[1] = 0.01f; + + if(x[0] == 1.f && x[1] == 1.f) + // Avoid crash when first two points are at x = 1 (100 in gui) (git Issue 2923) + x[0] = 0.99f; if (!identity) { if (kind == DCT_Spline && N > 2) { diff --git a/rtengine/gauss.h b/rtengine/gauss.h index b8ec0008f..61e5e2fe4 100644 --- a/rtengine/gauss.h +++ b/rtengine/gauss.h @@ -22,15 +22,11 @@ #include #include #include -#include "alignedbuffer.h" -#ifdef _OPENMP -#include -#endif #include "opthelper.h" // classical filtering if the support window is small: -template void gaussHorizontal3 (T** src, T** dst, AlignedBufferMP &buffer, int W, int H, const float c0, const float c1) +template void gaussHorizontal3 (T** src, T** dst, int W, int H, const float c0, const float c1) { #ifdef _OPENMP @@ -38,8 +34,7 @@ template void gaussHorizontal3 (T** src, T** dst, AlignedBufferMP* pBuf = buffer.acquire(); - T* temp = (T*)pBuf->data; + T temp[W] ALIGNED16; for (int j = 1; j < W - 1; j++) { temp[j] = (T)(c1 * (src[i][j - 1] + src[i][j + 1]) + c0 * src[i][j]); @@ -48,13 +43,11 @@ template void gaussHorizontal3 (T** src, T** dst, AlignedBufferMP void gaussVertical3 (T** src, T** dst, AlignedBufferMP &buffer, int W, int H, const float c0, const float c1) +template void gaussVertical3 (T** src, T** dst, int W, int H, const float c0, const float c1) { #ifdef _OPENMP @@ -62,8 +55,7 @@ template void gaussVertical3 (T** src, T** dst, AlignedBufferMP #endif for (int i = 0; i < W; i++) { - AlignedBuffer* pBuf = buffer.acquire(); - T* temp = (T*)pBuf->data; + T temp[H] ALIGNED16; for (int j = 1; j < H - 1; j++) { temp[j] = (T)(c1 * (src[j - 1][i] + src[j + 1][i]) + c0 * src[j][i]); @@ -75,39 +67,37 @@ template void gaussVertical3 (T** src, T** dst, AlignedBufferMP dst[j][i] = temp[j]; } - buffer.release(pBuf); - dst[H - 1][i] = src[H - 1][i]; } } -#ifdef __SSE__ +#ifdef __SSE2__ template SSEFUNCTION void gaussVertical3Sse (T** src, T** dst, int W, int H, const float c0, const float c1) { __m128 Tv, Tm1v, Tp1v; __m128 c0v, c1v; - c0v = _mm_set1_ps(c0); - c1v = _mm_set1_ps(c1); + c0v = F2V(c0); + c1v = F2V(c1); #ifdef _OPENMP #pragma omp for #endif for (int i = 0; i < W - 3; i += 4) { - Tm1v = _mm_loadu_ps( &src[0][i] ); - _mm_storeu_ps( &dst[0][i], Tm1v); + Tm1v = LVFU( src[0][i] ); + STVFU( dst[0][i], Tm1v); if (H > 1) { - Tv = _mm_loadu_ps( &src[1][i]); + Tv = LVFU( src[1][i]); } for (int j = 1; j < H - 1; j++) { - Tp1v = _mm_loadu_ps( &src[j + 1][i]); - _mm_storeu_ps( &dst[j][i], c1v * (Tp1v + Tm1v) + Tv * c0v); + Tp1v = LVFU( src[j + 1][i]); + STVFU( dst[j][i], c1v * (Tp1v + Tm1v) + Tv * c0v); Tm1v = Tv; Tv = Tp1v; } - _mm_storeu_ps( &dst[H - 1][i], _mm_loadu_ps( &src[H - 1][i])); + STVFU( dst[H - 1][i], LVFU( src[H - 1][i])); } // Borders are done without SSE @@ -129,12 +119,12 @@ template SSEFUNCTION void gaussVertical3Sse (T** src, T** dst, int W, i template SSEFUNCTION void gaussHorizontal3Sse (T** src, T** dst, int W, int H, const float c0, const float c1) { - float tmp[W][4] __attribute__ ((aligned (16))); + float tmp[W][4] ALIGNED16; __m128 Tv, Tm1v, Tp1v; __m128 c0v, c1v; - c0v = _mm_set1_ps(c0); - c1v = _mm_set1_ps(c1); + c0v = F2V(c0); + c1v = F2V(c1); #ifdef _OPENMP #pragma omp for #endif @@ -152,7 +142,7 @@ template SSEFUNCTION void gaussHorizontal3Sse (T** src, T** dst, int W, for (int j = 1; j < W - 1; j++) { Tp1v = _mm_set_ps( src[i][j + 1], src[i + 1][j + 1], src[i + 2][j + 1], src[i + 3][j + 1] ); - _mm_store_ps( &tmp[j][0], c1v * (Tp1v + Tm1v) + Tv * c0v); + STVF( tmp[j][0], c1v * (Tp1v + Tm1v) + Tv * c0v); Tm1v = Tv; Tv = Tp1v; } @@ -250,16 +240,16 @@ template SSEFUNCTION void gaussHorizontalSse (T** src, T** dst, int W, M[i][j] /= (1.0 + b1 - b2 + b3) * (1.0 - b1 - b2 - b3); } - float tmp[W][4] __attribute__ ((aligned (16))); - float tmpV[4] __attribute__ ((aligned (16))); + float tmp[W][4] ALIGNED16; + float tmpV[4] ALIGNED16; __m128 Rv; __m128 Tv, Tm2v, Tm3v; __m128 Bv, b1v, b2v, b3v; __m128 temp2W, temp2Wp1; - Bv = _mm_set1_ps(B); - b1v = _mm_set1_ps(b1); - b2v = _mm_set1_ps(b2); - b3v = _mm_set1_ps(b3); + Bv = F2V(B); + b1v = F2V(b1); + b2v = F2V(b2); + b3v = F2V(b3); #ifdef _OPENMP #pragma omp for @@ -270,47 +260,47 @@ template SSEFUNCTION void gaussHorizontalSse (T** src, T** dst, int W, tmpV[1] = src[i + 2][0]; tmpV[2] = src[i + 1][0]; tmpV[3] = src[i][0]; - Tv = _mm_load_ps(tmpV); + Tv = LVF(tmpV[0]); Rv = Tv * (Bv + b1v + b2v + b3v); Tm3v = Rv; - _mm_store_ps( &tmp[0][0], Rv ); + STVF( tmp[0][0], Rv ); tmpV[0] = src[i + 3][1]; tmpV[1] = src[i + 2][1]; tmpV[2] = src[i + 1][1]; tmpV[3] = src[i][1]; - Rv = _mm_load_ps(tmpV) * Bv + Rv * b1v + Tv * (b2v + b3v); + Rv = LVF(tmpV[0]) * Bv + Rv * b1v + Tv * (b2v + b3v); Tm2v = Rv; - _mm_store_ps( &tmp[1][0], Rv ); + STVF( tmp[1][0], Rv ); tmpV[0] = src[i + 3][2]; tmpV[1] = src[i + 2][2]; tmpV[2] = src[i + 1][2]; tmpV[3] = src[i][2]; - Rv = _mm_load_ps(tmpV) * Bv + Rv * b1v + Tm3v * b2v + Tv * b3v; - _mm_store_ps( &tmp[2][0], Rv ); + Rv = LVF(tmpV[0]) * Bv + Rv * b1v + Tm3v * b2v + Tv * b3v; + STVF( tmp[2][0], Rv ); for (int j = 3; j < W; j++) { Tv = Rv; Rv = _mm_set_ps(src[i][j], src[i + 1][j], src[i + 2][j], src[i + 3][j]) * Bv + Tv * b1v + Tm2v * b2v + Tm3v * b3v; - _mm_store_ps( &tmp[j][0], Rv ); + STVF( tmp[j][0], Rv ); Tm3v = Tm2v; Tm2v = Tv; } Tv = _mm_set_ps(src[i][W - 1], src[i + 1][W - 1], src[i + 2][W - 1], src[i + 3][W - 1]); - temp2Wp1 = Tv + _mm_set1_ps(M[2][0]) * (Rv - Tv) + _mm_set1_ps(M[2][1]) * ( Tm2v - Tv ) + _mm_set1_ps(M[2][2]) * (Tm3v - Tv); - temp2W = Tv + _mm_set1_ps(M[1][0]) * (Rv - Tv) + _mm_set1_ps(M[1][1]) * (Tm2v - Tv) + _mm_set1_ps(M[1][2]) * (Tm3v - Tv); + temp2Wp1 = Tv + F2V(M[2][0]) * (Rv - Tv) + F2V(M[2][1]) * ( Tm2v - Tv ) + F2V(M[2][2]) * (Tm3v - Tv); + temp2W = Tv + F2V(M[1][0]) * (Rv - Tv) + F2V(M[1][1]) * (Tm2v - Tv) + F2V(M[1][2]) * (Tm3v - Tv); - Rv = Tv + _mm_set1_ps(M[0][0]) * (Rv - Tv) + _mm_set1_ps(M[0][1]) * (Tm2v - Tv) + _mm_set1_ps(M[0][2]) * (Tm3v - Tv); - _mm_store_ps( &tmp[W - 1][0], Rv ); + Rv = Tv + F2V(M[0][0]) * (Rv - Tv) + F2V(M[0][1]) * (Tm2v - Tv) + F2V(M[0][2]) * (Tm3v - Tv); + STVF( tmp[W - 1][0], Rv ); Tm2v = Bv * Tm2v + b1v * Rv + b2v * temp2W + b3v * temp2Wp1; - _mm_store_ps( &tmp[W - 2][0], Tm2v ); + STVF( tmp[W - 2][0], Tm2v ); Tm3v = Bv * Tm3v + b1v * Tm2v + b2v * Rv + b3v * temp2W; - _mm_store_ps( &tmp[W - 3][0], Tm3v ); + STVF( tmp[W - 3][0], Tm3v ); Tv = Rv; Rv = Tm3v; @@ -318,8 +308,8 @@ template SSEFUNCTION void gaussHorizontalSse (T** src, T** dst, int W, for (int j = W - 4; j >= 0; j--) { Tv = Rv; - Rv = _mm_load_ps(&tmp[j][0]) * Bv + Tv * b1v + Tm2v * b2v + Tm3v * b3v; - _mm_store_ps( &tmp[j][0], Rv ); + Rv = LVF(tmp[j][0]) * Bv + Tv * b1v + Tm2v * b2v + Tm3v * b3v; + STVF( tmp[j][0], Rv ); Tm3v = Tm2v; Tm2v = Tv; } @@ -370,10 +360,10 @@ template SSEFUNCTION void gaussHorizontalSse (T** src, T** dst, int W, // fast gaussian approximation if the support window is large -template void gaussHorizontal (T** src, T** dst, AlignedBufferMP &buffer, int W, int H, double sigma) +template void gaussHorizontal (T** src, T** dst, int W, int H, double sigma) { -#ifdef __SSE__ +#ifdef __SSE2__ if (sigma < 70) { // bigger sigma only with double precision gaussHorizontalSse (src, dst, W, H, sigma); @@ -401,7 +391,7 @@ template void gaussHorizontal (T** src, T** dst, AlignedBufferMP (src, dst, buffer, W, H, c0, c1); + gaussHorizontal3 (src, dst, W, H, c0, c1); return; } @@ -439,13 +429,13 @@ template void gaussHorizontal (T** src, T** dst, AlignedBufferMP* pBuf = buffer.acquire(); - double* temp2 = pBuf->data; temp2[0] = B * src[i][0] + b1 * src[i][0] + b2 * src[i][0] + b3 * src[i][0]; temp2[1] = B * src[i][1] + b1 * temp2[0] + b2 * src[i][0] + b3 * src[i][0]; @@ -471,11 +461,10 @@ template void gaussHorizontal (T** src, T** dst, AlignedBufferMP SSEFUNCTION void gaussVerticalSse (T** src, T** dst, int W, int H, float sigma) { @@ -537,15 +526,15 @@ template SSEFUNCTION void gaussVerticalSse (T** src, T** dst, int W, in M[i][j] /= (1.0 + b1 - b2 + b3) * (1.0 - b1 - b2 - b3); } - float tmp[H][4] __attribute__ ((aligned (16))); + float tmp[H][4] ALIGNED16; __m128 Rv; __m128 Tv, Tm2v, Tm3v; __m128 Bv, b1v, b2v, b3v; __m128 temp2W, temp2Wp1; - Bv = _mm_set1_ps(B); - b1v = _mm_set1_ps(b1); - b2v = _mm_set1_ps(b2); - b3v = _mm_set1_ps(b3); + Bv = F2V(B); + b1v = F2V(b1); + b2v = F2V(b2); + b3v = F2V(b3); #ifdef _OPENMP @@ -553,39 +542,39 @@ template SSEFUNCTION void gaussVerticalSse (T** src, T** dst, int W, in #endif for (int i = 0; i < W - 3; i += 4) { - Tv = _mm_loadu_ps( &src[0][i]); + Tv = LVFU( src[0][i]); Rv = Tv * (Bv + b1v + b2v + b3v); Tm3v = Rv; - _mm_store_ps( &tmp[0][0], Rv ); + STVF( tmp[0][0], Rv ); - Rv = _mm_loadu_ps(&src[1][i]) * Bv + Rv * b1v + Tv * (b2v + b3v); + Rv = LVFU(src[1][i]) * Bv + Rv * b1v + Tv * (b2v + b3v); Tm2v = Rv; - _mm_store_ps( &tmp[1][0], Rv ); + STVF( tmp[1][0], Rv ); - Rv = _mm_loadu_ps(&src[2][i]) * Bv + Rv * b1v + Tm3v * b2v + Tv * b3v; - _mm_store_ps( &tmp[2][0], Rv ); + Rv = LVFU(src[2][i]) * Bv + Rv * b1v + Tm3v * b2v + Tv * b3v; + STVF( tmp[2][0], Rv ); for (int j = 3; j < H; j++) { Tv = Rv; - Rv = _mm_loadu_ps(&src[j][i]) * Bv + Tv * b1v + Tm2v * b2v + Tm3v * b3v; - _mm_store_ps( &tmp[j][0], Rv ); + Rv = LVFU(src[j][i]) * Bv + Tv * b1v + Tm2v * b2v + Tm3v * b3v; + STVF( tmp[j][0], Rv ); Tm3v = Tm2v; Tm2v = Tv; } - Tv = _mm_loadu_ps(&src[H - 1][i]); + Tv = LVFU(src[H - 1][i]); - temp2Wp1 = Tv + _mm_set1_ps(M[2][0]) * (Rv - Tv) + _mm_set1_ps(M[2][1]) * (Tm2v - Tv) + _mm_set1_ps(M[2][2]) * (Tm3v - Tv); - temp2W = Tv + _mm_set1_ps(M[1][0]) * (Rv - Tv) + _mm_set1_ps(M[1][1]) * (Tm2v - Tv) + _mm_set1_ps(M[1][2]) * (Tm3v - Tv); + temp2Wp1 = Tv + F2V(M[2][0]) * (Rv - Tv) + F2V(M[2][1]) * (Tm2v - Tv) + F2V(M[2][2]) * (Tm3v - Tv); + temp2W = Tv + F2V(M[1][0]) * (Rv - Tv) + F2V(M[1][1]) * (Tm2v - Tv) + F2V(M[1][2]) * (Tm3v - Tv); - Rv = Tv + _mm_set1_ps(M[0][0]) * (Rv - Tv) + _mm_set1_ps(M[0][1]) * (Tm2v - Tv) + _mm_set1_ps(M[0][2]) * (Tm3v - Tv); - _mm_storeu_ps( &dst[H - 1][i], Rv ); + Rv = Tv + F2V(M[0][0]) * (Rv - Tv) + F2V(M[0][1]) * (Tm2v - Tv) + F2V(M[0][2]) * (Tm3v - Tv); + STVFU( dst[H - 1][i], Rv ); Tm2v = Bv * Tm2v + b1v * Rv + b2v * temp2W + b3v * temp2Wp1; - _mm_storeu_ps( &dst[H - 2][i], Tm2v ); + STVFU( dst[H - 2][i], Tm2v ); Tm3v = Bv * Tm3v + b1v * Tm2v + b2v * Rv + b3v * temp2W; - _mm_storeu_ps( &dst[H - 3][i], Tm3v ); + STVFU( dst[H - 3][i], Tm3v ); Tv = Rv; Rv = Tm3v; @@ -593,8 +582,8 @@ template SSEFUNCTION void gaussVerticalSse (T** src, T** dst, int W, in for (int j = H - 4; j >= 0; j--) { Tv = Rv; - Rv = _mm_load_ps(&tmp[j][0]) * Bv + Tv * b1v + Tm2v * b2v + Tm3v * b3v; - _mm_storeu_ps( &dst[j][i], Rv ); + Rv = LVF(tmp[j][0]) * Bv + Tv * b1v + Tm2v * b2v + Tm3v * b3v; + STVFU( dst[j][i], Rv ); Tm3v = Tm2v; Tm2v = Tv; } @@ -635,10 +624,10 @@ template SSEFUNCTION void gaussVerticalSse (T** src, T** dst, int W, in #endif -template void gaussVertical (T** src, T** dst, AlignedBufferMP &buffer, int W, int H, double sigma) +template void gaussVertical (T** src, T** dst, int W, int H, double sigma) { -#ifdef __SSE__ +#ifdef __SSE2__ if (sigma < 70) { // bigger sigma only with double precision gaussVerticalSse (src, dst, W, H, sigma); @@ -666,7 +655,7 @@ template void gaussVertical (T** src, T** dst, AlignedBufferMP double csum = 2.0 * c1 + 1.0; c1 /= csum; double c0 = 1.0 / csum; - gaussVertical3 (src, dst, buffer, W, H, c0, c1); + gaussVertical3 (src, dst, W, H, c0, c1); return; } @@ -705,7 +694,7 @@ template void gaussVertical (T** src, T** dst, AlignedBufferMP } // process 'numcols' columns for better usage of L1 cpu cache (especially faster for large values of H) - static const int numcols = 4; + static const int numcols = 8; double temp2[H][numcols] ALIGNED16; double temp2Hm1[numcols], temp2H[numcols], temp2Hp1[numcols]; #ifdef _OPENMP @@ -732,20 +721,14 @@ template void gaussVertical (T** src, T** dst, AlignedBufferMP } for (int k = 0; k < numcols; k++) { - temp2[H - 1][k] = temp2Hm1[k]; - temp2[H - 2][k] = B * temp2[H - 2][k] + b1 * temp2[H - 1][k] + b2 * temp2H[k] + b3 * temp2Hp1[k]; - temp2[H - 3][k] = B * temp2[H - 3][k] + b1 * temp2[H - 2][k] + b2 * temp2[H - 1][k] + b3 * temp2H[k]; + dst[H - 1][i + k] = temp2[H - 1][k] = temp2Hm1[k]; + dst[H - 2][i + k] = temp2[H - 2][k] = B * temp2[H - 2][k] + b1 * temp2[H - 1][k] + b2 * temp2H[k] + b3 * temp2Hp1[k]; + dst[H - 3][i + k] = temp2[H - 3][k] = B * temp2[H - 3][k] + b1 * temp2[H - 2][k] + b2 * temp2[H - 1][k] + b3 * temp2H[k]; } for (int j = H - 4; j >= 0; j--) { for (int k = 0; k < numcols; k++) { - temp2[j][k] = B * temp2[j][k] + b1 * temp2[j + 1][k] + b2 * temp2[j + 2][k] + b3 * temp2[j + 3][k]; - } - } - - for (int j = 0; j < H; j++) { - for (int k = 0; k < numcols; k++) { - dst[j][i + k] = (T)temp2[j][k]; + dst[j][i + k] = temp2[j][k] = B * temp2[j][k] + b1 * temp2[j + 1][k] + b2 * temp2[j + 2][k] + b3 * temp2[j + 3][k]; } } } @@ -768,241 +751,35 @@ template void gaussVertical (T** src, T** dst, AlignedBufferMP double temp2H = src[H - 1][i] + M[1][0] * (temp2[H - 1][0] - src[H - 1][i]) + M[1][1] * (temp2[H - 2][0] - src[H - 1][i]) + M[1][2] * (temp2[H - 3][0] - src[H - 1][i]); double temp2Hp1 = src[H - 1][i] + M[2][0] * (temp2[H - 1][0] - src[H - 1][i]) + M[2][1] * (temp2[H - 2][0] - src[H - 1][i]) + M[2][2] * (temp2[H - 3][0] - src[H - 1][i]); - temp2[H - 1][0] = temp2Hm1; - temp2[H - 2][0] = B * temp2[H - 2][0] + b1 * temp2[H - 1][0] + b2 * temp2H + b3 * temp2Hp1; - temp2[H - 3][0] = B * temp2[H - 3][0] + b1 * temp2[H - 2][0] + b2 * temp2[H - 1][0] + b3 * temp2H; + dst[H - 1][i] = temp2[H - 1][0] = temp2Hm1; + dst[H - 2][i] = temp2[H - 2][0] = B * temp2[H - 2][0] + b1 * temp2[H - 1][0] + b2 * temp2H + b3 * temp2Hp1; + dst[H - 3][i] = temp2[H - 3][0] = B * temp2[H - 3][0] + b1 * temp2[H - 2][0] + b2 * temp2[H - 1][0] + b3 * temp2H; for (int j = H - 4; j >= 0; j--) { - temp2[j][0] = B * temp2[j][0] + b1 * temp2[j + 1][0] + b2 * temp2[j + 2][0] + b3 * temp2[j + 3][0]; - } - - for (int j = 0; j < H; j++) { - dst[j][i] = (T)temp2[j][0]; + dst[j][i] = temp2[j][0] = B * temp2[j][0] + b1 * temp2[j + 1][0] + b2 * temp2[j + 2][0] + b3 * temp2[j + 3][0]; } } } - - -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -template void gaussDerivH (T** src, T** dst, AlignedBufferMP &buffer, int W, int H, double sigma) +template void gaussianBlur(T** src, T** dst, const int W, const int H, const double sigma, bool forceLowSigma = false) { + double newSigma = sigma; + if(forceLowSigma) { + newSigma /= sqrt(2.0); - if (sigma < 0.6) { - // apply symmetric derivative -#ifdef _OPENMP - #pragma omp for -#endif - - for (int i = 0; i < H; i++) { - AlignedBuffer* pBuf = buffer.acquire(); - T* temp = (T*)pBuf->data; - - // double* temp = buffer->data;// replaced by 2 lines above - for (int j = 1; j < W - 1; j++) { - temp[j] = (0.5 * (src[i][j + 1] - src[i][j - 1]) ); - } - - dst[i][0] = (src[i][1] - src[i][0]); - - //memcpy (dst[i]+1, temp+1, (W-2)*sizeof(T)); - for (int j = 1; j < W - 1; j++) { - dst[i][j] = temp[j]; - } - - buffer.release(pBuf); - dst[i][W - 1] = (src[i][W - 1] - src[i][W - 2]); + if(newSigma < 0.6) { // barrier to avoid using simple gauss version for higher radius + newSigma = sigma; + forceLowSigma = false; } - - return; } - // coefficient calculation - double q = 0.98711 * sigma - 0.96330; + gaussHorizontal (src, dst, W, H, newSigma); + gaussVertical (dst, dst, W, H, newSigma); - if (sigma < 2.5) { - q = 3.97156 - 4.14554 * sqrt (1.0 - 0.26891 * sigma); - } - - double b0 = 1.57825 + 2.44413 * q + 1.4281 * q * q + 0.422205 * q * q * q; - double b1 = 2.44413 * q + 2.85619 * q * q + 1.26661 * q * q * q; - double b2 = -1.4281 * q * q - 1.26661 * q * q * q; - double b3 = 0.422205 * q * q * q; - double B = 1.0 - (b1 + b2 + b3) / b0; - - b1 /= b0; - b2 /= b0; - b3 /= b0; - - // From: Bill Triggs, Michael Sdika: Boundary Conditions for Young-van Vliet Recursive Filtering - double M[3][3]; - M[0][0] = -b3 * b1 + 1.0 - b3 * b3 - b2; - M[0][1] = (b3 + b1) * (b2 + b3 * b1); - M[0][2] = b3 * (b1 + b3 * b2); - M[1][0] = b1 + b3 * b2; - M[1][1] = -(b2 - 1.0) * (b2 + b3 * b1); - M[1][2] = -(b3 * b1 + b3 * b3 + b2 - 1.0) * b3; - M[2][0] = b3 * b1 + b2 + b1 * b1 - b2 * b2; - M[2][1] = b1 * b2 + b3 * b2 * b2 - b1 * b3 * b3 - b3 * b3 * b3 - b3 * b2 + b3; - M[2][2] = b3 * (b1 + b3 * b2); - - for (int i = 0; i < 3; i++) - for (int j = 0; j < 3; j++) { - M[i][j] /= (1.0 + b1 - b2 + b3) * (1.0 + b2 + (b1 - b3) * b3); - } - - #pragma omp for - - for (int i = 0; i < H; i++) { - AlignedBuffer* pBuf = buffer.acquire(); - T* temp2 = (T*)pBuf->data; - // double* temp2 = buffer->data;// replaced by 2 lines above - - double src0 = (src[i][1] - src[i][0]); - - temp2[0] = B * src0 + b1 * src0 + b2 * src0 + b3 * src0; - temp2[1] = B * 0.5 * (src[i][2] - src[i][0]) + b1 * temp2[0] + b2 * src0 + b3 * src0; - temp2[2] = B * 0.5 * (src[i][3] - src[i][1]) + b1 * temp2[1] + b2 * temp2[0] + b3 * src0; - - for (int j = 3; j < W - 1; j++) { - temp2[j] = B * 0.5 * (src[i][j + 1] - src[i][j - 1]) + b1 * temp2[j - 1] + b2 * temp2[j - 2] + b3 * temp2[j - 3]; - } - - double srcWm1 = (src[i][W - 1] - src[i][W - 2]); - - temp2[W - 1] = B * srcWm1 + b1 * temp2[W - 2] + b2 * temp2[W - 3] + b3 * temp2[W - 4]; - - double temp2Wm1 = srcWm1 + M[0][0] * (temp2[W - 1] - srcWm1) + M[0][1] * (temp2[W - 2] - srcWm1) + M[0][2] * (temp2[W - 3] - srcWm1); - double temp2W = srcWm1 + M[1][0] * (temp2[W - 1] - srcWm1) + M[1][1] * (temp2[W - 2] - srcWm1) + M[1][2] * (temp2[W - 3] - srcWm1); - double temp2Wp1 = srcWm1 + M[2][0] * (temp2[W - 1] - srcWm1) + M[2][1] * (temp2[W - 2] - srcWm1) + M[2][2] * (temp2[W - 3] - srcWm1); - - temp2[W - 1] = temp2Wm1; - temp2[W - 2] = B * temp2[W - 2] + b1 * temp2[W - 1] + b2 * temp2W + b3 * temp2Wp1; - temp2[W - 3] = B * temp2[W - 3] + b1 * temp2[W - 2] + b2 * temp2[W - 1] + b3 * temp2W; - - for (int j = W - 4; j >= 0; j--) { - temp2[j] = B * temp2[j] + b1 * temp2[j + 1] + b2 * temp2[j + 2] + b3 * temp2[j + 3]; - } - - for (int j = 0; j < W; j++) { - dst[i][j] = (T)temp2[j]; - } - - buffer.release(pBuf); - } -} - -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -template void gaussDerivV (T** src, T** dst, AlignedBufferMP &buffer, int W, int H, double sigma) -{ - - if (sigma < 0.6) { - // apply symmetric derivative -#ifdef _OPENMP - #pragma omp for -#endif - - for (int j = 0; j < W; j++) { - AlignedBuffer* pBuf = buffer.acquire(); - T* temp = (T*)pBuf->data; - - // double* temp = buffer->data;// replaced by 2 lines above - for (int i = 1; i < H - 1; i++) { - temp[i] = (0.5 * (src[i + 1][j] - src[i - 1][j]) ); - } - - dst[0][j] = (src[1][j] - src[0][j]); - - for (int i = 1; i < H - 1; i++) { - dst[i][j] = temp[i]; - } - - buffer.release(pBuf); - - dst[H - 1][j] = (src[H - 1][j] - src[H - 2][j]); - } - - return; - } - - // coefficient calculation - double q = 0.98711 * sigma - 0.96330; - - if (sigma < 2.5) { - q = 3.97156 - 4.14554 * sqrt (1.0 - 0.26891 * sigma); - } - - double b0 = 1.57825 + 2.44413 * q + 1.4281 * q * q + 0.422205 * q * q * q; - double b1 = 2.44413 * q + 2.85619 * q * q + 1.26661 * q * q * q; - double b2 = -1.4281 * q * q - 1.26661 * q * q * q; - double b3 = 0.422205 * q * q * q; - double B = 1.0 - (b1 + b2 + b3) / b0; - - b1 /= b0; - b2 /= b0; - b3 /= b0; - - // From: Bill Triggs, Michael Sdika: Boundary Conditions for Young-van Vliet Recursive Filtering - double M[3][3]; - M[0][0] = -b3 * b1 + 1.0 - b3 * b3 - b2; - M[0][1] = (b3 + b1) * (b2 + b3 * b1); - M[0][2] = b3 * (b1 + b3 * b2); - M[1][0] = b1 + b3 * b2; - M[1][1] = -(b2 - 1.0) * (b2 + b3 * b1); - M[1][2] = -(b3 * b1 + b3 * b3 + b2 - 1.0) * b3; - M[2][0] = b3 * b1 + b2 + b1 * b1 - b2 * b2; - M[2][1] = b1 * b2 + b3 * b2 * b2 - b1 * b3 * b3 - b3 * b3 * b3 - b3 * b2 + b3; - M[2][2] = b3 * (b1 + b3 * b2); - - for (int i = 0; i < 3; i++) - for (int j = 0; j < 3; j++) { - M[i][j] /= (1.0 + b1 - b2 + b3) * (1.0 + b2 + (b1 - b3) * b3); - } - -#ifdef _OPENMP - #pragma omp for -#endif - - for (int i = 0; i < W; i++) { - AlignedBuffer* pBuf = buffer.acquire(); - T* temp2 = (T*)pBuf->data; - // double* temp2 = buffer->data;// replaced by 2 lines above - - double src0 = 0.5 * (src[1][i] - src[0][i]); - - temp2[0] = B * src0 + b1 * src0 + b2 * src0 + b3 * src0; - temp2[1] = B * 0.5 * (src[2][i] - src[0][i]) + b1 * temp2[0] + b2 * src0 + b3 * src0; - temp2[2] = B * 0.5 * (src[3][i] - src[1][i]) + b1 * temp2[1] + b2 * temp2[0] + b3 * src0; - - for (int j = 3; j < H - 1; j++) { - temp2[j] = B * 0.5 * (src[j + 1][i] - src[j - 1][i]) + b1 * temp2[j - 1] + b2 * temp2[j - 2] + b3 * temp2[j - 3]; - } - - double srcHm1 = 0.5 * (src[H - 1][i] - src[H - 2][i]); - - temp2[H - 1] = B * srcHm1 + b1 * temp2[H - 2] + b2 * temp2[H - 3] + b3 * temp2[H - 4]; - - double temp2Hm1 = srcHm1 + M[0][0] * (temp2[H - 1] - srcHm1) + M[0][1] * (temp2[H - 2] - srcHm1) + M[0][2] * (temp2[H - 3] - srcHm1); - double temp2H = srcHm1 + M[1][0] * (temp2[H - 1] - srcHm1) + M[1][1] * (temp2[H - 2] - srcHm1) + M[1][2] * (temp2[H - 3] - srcHm1); - double temp2Hp1 = srcHm1 + M[2][0] * (temp2[H - 1] - srcHm1) + M[2][1] * (temp2[H - 2] - srcHm1) + M[2][2] * (temp2[H - 3] - srcHm1); - - temp2[H - 1] = temp2Hm1; - temp2[H - 2] = B * temp2[H - 2] + b1 * temp2[H - 1] + b2 * temp2H + b3 * temp2Hp1; - temp2[H - 3] = B * temp2[H - 3] + b1 * temp2[H - 2] + b2 * temp2[H - 1] + b3 * temp2H; - - for (int j = H - 4; j >= 0; j--) { - temp2[j] = B * temp2[j] + b1 * temp2[j + 1] + b2 * temp2[j + 2] + b3 * temp2[j + 3]; - } - - for (int j = 0; j < H; j++) { - dst[j][i] = (T)temp2[j]; - } - - buffer.release(pBuf); + if(forceLowSigma) { + gaussHorizontal (dst, dst, W, H, newSigma); + gaussVertical (dst, dst, W, H, newSigma); } } diff --git a/rtengine/helpersse2.h b/rtengine/helpersse2.h index c7dce8806..9257ab81e 100644 --- a/rtengine/helpersse2.h +++ b/rtengine/helpersse2.h @@ -22,19 +22,22 @@ typedef __m128i vint2; // #ifdef __GNUC__ - #if (__GNUC__ == 4 && __GNUC_MINOR__ >= 9) || __GNUC__ > 4 - #define LVF(x) _mm_load_ps(&x) - #define LVFU(x) _mm_loadu_ps(&x) - #define STVF(x,y) _mm_store_ps(&x,y) - #else // there is a bug in gcc 4.7.x when using openmp and aligned memory and -O3 - #define LVF(x) _mm_loadu_ps(&x) - #define LVFU(x) _mm_loadu_ps(&x) - #define STVF(x,y) _mm_storeu_ps(&x,y) - #endif +#if (__GNUC__ == 4 && __GNUC_MINOR__ >= 9) || __GNUC__ > 4 +#define LVF(x) _mm_load_ps(&x) +#define LVFU(x) _mm_loadu_ps(&x) +#define STVF(x,y) _mm_store_ps(&x,y) +#define STVFU(x,y) _mm_storeu_ps(&x,y) +#else // there is a bug in gcc 4.7.x when using openmp and aligned memory and -O3 +#define LVF(x) _mm_loadu_ps(&x) +#define LVFU(x) _mm_loadu_ps(&x) +#define STVF(x,y) _mm_storeu_ps(&x,y) +#define STVFU(x,y) _mm_storeu_ps(&x,y) +#endif #else - #define LVF(x) _mm_load_ps(&x) - #define LVFU(x) _mm_loadu_ps(&x) - #define STVF(x,y) _mm_store_ps(&x,y) +#define LVF(x) _mm_load_ps(&x) +#define LVFU(x) _mm_loadu_ps(&x) +#define STVF(x,y) _mm_store_ps(&x,y) +#define STVFU(x,y) _mm_storeu_ps(&x,y) #endif // Load 8 floats from a and combine a[0],a[2],a[4] and a[6] into a vector of 4 floats diff --git a/rtengine/hilite_recon.cc b/rtengine/hilite_recon.cc index 411bb0823..9f618ace5 100644 --- a/rtengine/hilite_recon.cc +++ b/rtengine/hilite_recon.cc @@ -28,26 +28,15 @@ #include "rawimagesource.h" #include "rt_math.h" #include "opthelper.h" - -#ifdef _OPENMP -#include -#endif - - -#define FOREACHCOLOR for (int c=0; c < ColorCount; c++) - -//#include "RGBdefringe.cc" - namespace rtengine { +extern const Settings* settings; //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -SSEFUNCTION void RawImageSource::boxblur2(float** src, float** dst, int H, int W, int box ) +SSEFUNCTION void RawImageSource::boxblur2(float** src, float** dst, float** temp, int H, int W, int box ) { - array2D temp(W, H); - //box blur image channel; box size = 2*box+1 //horizontal blur #ifdef _OPENMP @@ -84,10 +73,10 @@ SSEFUNCTION void RawImageSource::boxblur2(float** src, float** dst, int H, int W #endif { float len = box + 1; - __m128 lenv = _mm_set1_ps( len ); - __m128 lenp1v = _mm_set1_ps( len + 1.0f ); - __m128 onev = _mm_set1_ps( 1.0f ); - __m128 tempv, temp2v; + vfloat lenv = F2V( len ); + vfloat lenp1v = F2V( len + 1.0f ); + vfloat onev = F2V( 1.0f ); + vfloat tempv, temp2v; #ifdef _OPENMP #pragma omp for nowait #endif @@ -130,7 +119,9 @@ SSEFUNCTION void RawImageSource::boxblur2(float** src, float** dst, int H, int W } } +#ifdef _OPENMP #pragma omp single +#endif { for (int col = W - (W % 8); col < W - 3; col += 4) { tempv = LVFU(temp[0][col]) / lenv; @@ -160,29 +151,29 @@ SSEFUNCTION void RawImageSource::boxblur2(float** src, float** dst, int H, int W _mm_storeu_ps( &dst[row][col], tempv ); } } - } - } - for (int col = W - (W % 4); col < W; col++) { - int len = box + 1; - dst[0][col] = temp[0][col] / len; + for (int col = W - (W % 4); col < W; col++) { + int len = box + 1; + dst[0][col] = temp[0][col] / len; - for (int i = 1; i <= box; i++) { - dst[0][col] += temp[i][col] / len; - } + for (int i = 1; i <= box; i++) { + dst[0][col] += temp[i][col] / len; + } - for (int row = 1; row <= box; row++) { - dst[row][col] = (dst[(row - 1)][col] * len + temp[(row + box)][col]) / (len + 1); - len ++; - } + for (int row = 1; row <= box; row++) { + dst[row][col] = (dst[(row - 1)][col] * len + temp[(row + box)][col]) / (len + 1); + len ++; + } - for (int row = box + 1; row < H - box; row++) { - dst[row][col] = dst[(row - 1)][col] + (temp[(row + box)][col] - temp[(row - box - 1)][col]) / len; - } + for (int row = box + 1; row < H - box; row++) { + dst[row][col] = dst[(row - 1)][col] + (temp[(row + box)][col] - temp[(row - box - 1)][col]) / len; + } - for (int row = H - box; row < H; row++) { - dst[row][col] = (dst[(row - 1)][col] * len - temp[(row - box - 1)][col]) / (len - 1); - len --; + for (int row = H - box; row < H; row++) { + dst[row][col] = (dst[(row - 1)][col] * len - temp[(row - box - 1)][col]) / (len - 1); + len --; + } + } } } @@ -219,11 +210,9 @@ SSEFUNCTION void RawImageSource::boxblur2(float** src, float** dst, int H, int W } -void RawImageSource::boxblur_resamp(float **src, float **dst, int H, int W, int box, int samp ) +void RawImageSource::boxblur_resamp(float **src, float **dst, float ** temp, int H, int W, int box, int samp ) { - array2D temp((W / samp) + ((W % samp) == 0 ? 0 : 1), H); - #ifdef _OPENMP #pragma omp parallel #endif @@ -235,7 +224,8 @@ void RawImageSource::boxblur_resamp(float **src, float **dst, int H, int W, int //box blur image channel; box size = 2*box+1 //horizontal blur - for (int row = 0; row < H; row++) { + for (int row = 0; row < H; row++) + { int len = box + 1; tempval = src[row][0] / len; @@ -255,8 +245,10 @@ void RawImageSource::boxblur_resamp(float **src, float **dst, int H, int W, int len ++; } + float oneByLen = 1.f / (float)len; + for (int col = box + 1; col < W - box; col++) { - tempval = tempval + (src[row][col + box] - src[row][col - box - 1]) / len; + tempval = tempval + (src[row][col + box] - src[row][col - box - 1]) * oneByLen; if(col % samp == 0) { temp[row][col / samp] = tempval; @@ -275,63 +267,125 @@ void RawImageSource::boxblur_resamp(float **src, float **dst, int H, int W, int } } + static const int numCols = 8; // process numCols columns at once for better L1 CPU cache usage #ifdef _OPENMP #pragma omp parallel #endif { - float tempval; + float tempvalN[numCols] ALIGNED16; #ifdef _OPENMP - #pragma omp for + #pragma omp for nowait #endif //vertical blur - for (int col = 0; col < W / samp; col++) { + for (int col = 0; col < (W / samp) - (numCols - 1); col += numCols) { int len = box + 1; - tempval = temp[0][col] / len; - for (int i = 1; i <= box; i++) { - tempval += temp[i][col] / len; + for(int n = 0; n < numCols; n++) { + tempvalN[n] = temp[0][col + n] / len; } - dst[0][col] = tempval; + for (int i = 1; i <= box; i++) { + for(int n = 0; n < numCols; n++) { + tempvalN[n] += temp[i][col + n] / len; + } + } + + for(int n = 0; n < numCols; n++) { + dst[0][col + n] = tempvalN[n]; + } for (int row = 1; row <= box; row++) { - tempval = (tempval * len + temp[(row + box)][col]) / (len + 1); + for(int n = 0; n < numCols; n++) { + tempvalN[n] = (tempvalN[n] * len + temp[(row + box)][col + n]) / (len + 1); + } if(row % samp == 0) { - dst[row / samp][col] = tempval; + for(int n = 0; n < numCols; n++) { + dst[row / samp][col + n] = tempvalN[n]; + } } len ++; } for (int row = box + 1; row < H - box; row++) { - tempval = tempval + (temp[(row + box)][col] - temp[(row - box - 1)][col]) / len; + for(int n = 0; n < numCols; n++) { + tempvalN[n] = tempvalN[n] + (temp[(row + box)][col + n] - temp[(row - box - 1)][col + n]) / len; + } if(row % samp == 0) { - dst[row / samp][col] = tempval; + for(int n = 0; n < numCols; n++) { + dst[row / samp][col + n] = tempvalN[n]; + } } } for (int row = H - box; row < H; row++) { - tempval = (tempval * len - temp[(row - box - 1)][col]) / (len - 1); + for(int n = 0; n < numCols; n++) { + tempvalN[n] = (tempvalN[n] * len - temp[(row - box - 1)][col + n]) / (len - 1); + } if(row % samp == 0) { - dst[row / samp][col] = tempval; + for(int n = 0; n < numCols; n++) { + dst[row / samp][col + n] = tempvalN[n]; + } } len --; } } + + // process remaining columns + #pragma omp single + { + float tempval; + + //vertical blur + for (int col = (W / samp) - ((W / samp) % numCols); col < W / samp; col++) { + int len = box + 1; + tempval = temp[0][col] / len; + + for (int i = 1; i <= box; i++) { + tempval += temp[i][col] / len; + } + + dst[0][col] = tempval; + + for (int row = 1; row <= box; row++) { + tempval = (tempval * len + temp[(row + box)][col]) / (len + 1); + + if(row % samp == 0) { + dst[row / samp][col] = tempval; + } + + len ++; + } + + for (int row = box + 1; row < H - box; row++) { + tempval = tempval + (temp[(row + box)][col] - temp[(row - box - 1)][col]) / len; + + if(row % samp == 0) { + dst[row / samp][col] = tempval; + } + } + + for (int row = H - box; row < H; row++) { + tempval = (tempval * len - temp[(row - box - 1)][col]) / (len - 1); + + if(row % samp == 0) { + dst[row / samp][col] = tempval; + } + + len --; + } + } + } } } -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - void RawImageSource :: HLRecovery_inpaint (float** red, float** green, float** blue) { double progress = 0.0; @@ -344,119 +398,143 @@ void RawImageSource :: HLRecovery_inpaint (float** red, float** green, float** b int height = H; int width = W; - const int range = 2; - const int pitch = 4; - - - int hfh = (height - (height % pitch)) / pitch; - int hfw = (width - (width % pitch)) / pitch; + static const int range = 2; + static const int pitch = 4; static const int numdirs = 4; - static const float threshpct = 0.25; - static const float fixthreshpct = 0.7; - static const float maxpct = 0.95; - + static const float threshpct = 0.25f; + static const float fixthreshpct = 0.7f; + static const float maxpct = 0.95f; + static const float epsilon = 0.00001f; //%%%%%%%%%%%%%%%%%%%% //for blend algorithm: static const float blendthresh = 1.0; - const int ColorCount = 3; + static const int ColorCount = 3; // Transform matrixes rgb>lab and back - static const float trans[2][ColorCount][ColorCount] = { - { { 1, 1, 1 }, { 1.7320508, -1.7320508, 0 }, { -1, -1, 2 } }, - { { 1, 1, 1 }, { 1, -1, 1 }, { 1, 1, -1 } } - }; - static const float itrans[2][ColorCount][ColorCount] = { - { { 1, 0.8660254, -0.5 }, { 1, -0.8660254, -0.5 }, { 1, 0, 1 } }, - { { 1, 1, 1 }, { 1, -1, 1 }, { 1, 1, -1 } } - }; - //%%%%%%%%%%%%%%%%%%%% + static const float trans[ColorCount][ColorCount] = + { { 1.f, 1.f, 1.f }, { 1.7320508f, -1.7320508f, 0.f }, { -1.f, -1.f, 2.f } }; + static const float itrans[ColorCount][ColorCount] = + { { 1.f, 0.8660254f, -0.5f }, { 1.f, -0.8660254f, -0.5f }, { 1.f, 0.f, 1.f } }; - - float max_f[3], thresh[3], fixthresh[3], norm[3]; - - //float red1, green1, blue1;//diagnostic -// float chmaxalt[4]={0,0,0,0};//diagnostic - - //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - //halfsize demosaic - - /* - multi_array2D hfsize (hfw+1,hfh+1,ARRAY2D_CLEAR_DATA); - - boxblur_resamp(red,hfsize[0],chmaxalt[0],height,width,range,pitch); - if(plistener){ - progress += 0.05; - plistener->setProgress(progress); - } - boxblur_resamp(green,hfsize[1],chmaxalt[1],height,width,range,pitch); - if(plistener){ - progress += 0.05; - plistener->setProgress(progress); - } - boxblur_resamp(blue,hfsize[2],chmaxalt[2],height,width,range,pitch); - if(plistener){ - progress += 0.05; - plistener->setProgress(progress); + if(settings->verbose) + for(int c = 0; c < 3; c++) { + printf("chmax[%d] : %f\tclmax[%d] : %f\tratio[%d] : %f\n", c, chmax[c], c, clmax[c], c, chmax[c] / clmax[c]); } - //blur image - //for (int m=0; m<3; m++) - // boxblur2(hfsize[m],hfsizeblur[m],hfh,hfw,3); + float factor[3]; - */ - //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + for(int c = 0; c < ColorCount; c++) { + factor[c] = chmax[c] / clmax[c]; + } - for (int c = 0; c < 3; c++) { - thresh[c] = chmax[c] * threshpct; - fixthresh[c] = chmax[c] * fixthreshpct; - max_f[c] = chmax[c] * maxpct; //min(chmax[0],chmax[1],chmax[2])*maxpct; - norm[c] = 1.0 / (max_f[c] - fixthresh[c]); + float minFactor = min(factor[0], factor[1], factor[2]); + + if(minFactor > 1.f) { // all 3 channels clipped + // calculate clip factor per channel + for (int c = 0; c < ColorCount; c++) { + factor[c] /= minFactor; + } + + // get max clip factor + int maxpos = 0; + float maxValNew = 0.f; + + for (int c = 0; c < ColorCount; c++) { + if(chmax[c] / factor[c] > maxValNew) { + maxValNew = chmax[c] / factor[c]; + maxpos = c; + } + } + + float clipFactor = clmax[maxpos] / maxValNew; + + if(clipFactor < maxpct) + + // if max clipFactor < maxpct (0.95) adjust per channel factors + for (int c = 0; c < ColorCount; c++) { + factor[c] *= (maxpct / clipFactor); + } + } else { + factor[0] = factor[1] = factor[2] = 1.f; + } + + if(settings->verbose) + for (int c = 0; c < ColorCount; c++) { + printf("correction factor[%d] : %f\n", c, factor[c]); + } + + float max_f[3], thresh[3]; + + for (int c = 0; c < ColorCount; c++) { + thresh[c] = chmax[c] * threshpct / factor[c]; + max_f[c] = chmax[c] * maxpct / factor[c]; } float whitept = max(max_f[0], max_f[1], max_f[2]); float clippt = min(max_f[0], max_f[1], max_f[2]); float medpt = max_f[0] + max_f[1] + max_f[2] - whitept - clippt; float blendpt = blendthresh * clippt; + float medFactor[3]; - float camwb[4]; - - for (int c = 0; c < 4; c++) { - camwb[c] = ri->get_cam_mul(c); + for (int c = 0; c < ColorCount; c++) { + medFactor[c] = max(1.0f, max_f[c] / medpt) / (-blendpt); } - multi_array2D channelblur(width, height, ARRAY2D_CLEAR_DATA); - multi_array2D hilite_full(width, height, ARRAY2D_CLEAR_DATA); - - if(plistener) { - progress += 0.05; - plistener->setProgress(progress); - } + multi_array2D channelblur(width, height, 0, 48); + array2D temp(width, height); // allocate temporary buffer // blur RGB channels - boxblur2(red , channelblur[0], height, width, 4); + + boxblur2(red, channelblur[0], temp, height, width, 4); if(plistener) { progress += 0.05; plistener->setProgress(progress); } - boxblur2(green, channelblur[1], height, width, 4); + boxblur2(green, channelblur[1], temp, height, width, 4); if(plistener) { progress += 0.05; plistener->setProgress(progress); } - boxblur2(blue , channelblur[2], height, width, 4); + boxblur2(blue, channelblur[2], temp, height, width, 4); if(plistener) { progress += 0.05; plistener->setProgress(progress); } - float hipass_sum = 0, hipass_norm = 0.00; + // reduce channel blur to one array +#ifdef _OPENMP + #pragma omp parallel for +#endif + + for(int i = 0; i < height; i++) + for(int j = 0; j < width; j++) { + channelblur[0][i][j] = fabsf(channelblur[0][i][j] - red[i][j]) + fabsf(channelblur[1][i][j] - green[i][j]) + fabsf(channelblur[2][i][j] - blue[i][j]); + } + + for (int c = 1; c < 3; c++) { + channelblur[c].free(); //free up some memory + } + + if(plistener) { + progress += 0.05; + plistener->setProgress(progress); + } + + multi_array2D hilite_full(width, height, ARRAY2D_CLEAR_DATA, 32); + + if(plistener) { + progress += 0.10; + plistener->setProgress(progress); + } + + double hipass_sum = 0.f; + int hipass_norm = 0; // set up which pixels are clipped or near clipping #ifdef _OPENMP @@ -465,40 +543,35 @@ void RawImageSource :: HLRecovery_inpaint (float** red, float** green, float** b for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { - //if one or more channels is highlight but none are blown, add to highlight accumulator - if ((red[i][j] > thresh[0] || green[i][j] > thresh[1] || blue[i][j] > thresh[2]) && (red[i][j] < max_f[0] && green[i][j] < max_f[1] && blue[i][j] < max_f[2])) { - hipass_sum += fabs(channelblur[0][i][j] - red[i][j]) + fabs(channelblur[1][i][j] - green[i][j]) + fabs(channelblur[2][i][j] - blue[i][j]); - hipass_norm++; + hipass_sum += channelblur[0][i][j]; + hipass_norm ++; hilite_full[0][i][j] = red[i][j]; hilite_full[1][i][j] = green[i][j]; hilite_full[2][i][j] = blue[i][j]; - hilite_full[3][i][j] = 1; - hilite_full[4][i][j] = 1; + hilite_full[3][i][j] = 1.f; } - - //if (i%100==0 && j%100==0) - // printf("row=%d col=%d r=%f g=%f b=%f hilite=%f \n",i,j,hilite_full[0][i][j],hilite_full[1][i][j],hilite_full[2][i][j],hilite_full[3][i][j]); } }//end of filling highlight array - hipass_norm += 0.01; - - float hipass_ave = (hipass_sum / hipass_norm); + float hipass_ave = 2.f * hipass_sum / (hipass_norm + epsilon); if(plistener) { progress += 0.05; plistener->setProgress(progress); } + array2D hilite_full4(width, height); //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% //blur highlight data - boxblur2(hilite_full[4], hilite_full[4], height, width, 1); + boxblur2(hilite_full[3], hilite_full4, temp, height, width, 1); + + temp.free(); // free temporary buffer if(plistener) { progress += 0.05; @@ -511,32 +584,34 @@ void RawImageSource :: HLRecovery_inpaint (float** red, float** green, float** b for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { - - float hipass = fabs(channelblur[0][i][j] - red[i][j]) + fabs(channelblur[1][i][j] - green[i][j]) + fabs(channelblur[2][i][j] - blue[i][j]); - - if (hipass > 2 * hipass_ave) { + if (channelblur[0][i][j] > hipass_ave) { //too much variation - hilite_full[0][i][j] = hilite_full[1][i][j] = hilite_full[2][i][j] = hilite_full[3][i][j] = 0; + hilite_full[0][i][j] = hilite_full[1][i][j] = hilite_full[2][i][j] = hilite_full[3][i][j] = 0.f; continue; } - if (hilite_full[4][i][j] > 0.00001 && hilite_full[4][i][j] < 0.95) { + if (hilite_full4[i][j] > epsilon && hilite_full4[i][j] < 0.95f) { //too near an edge, could risk using CA affected pixels, therefore omit - hilite_full[0][i][j] = hilite_full[1][i][j] = hilite_full[2][i][j] = hilite_full[3][i][j] = 0; + hilite_full[0][i][j] = hilite_full[1][i][j] = hilite_full[2][i][j] = hilite_full[3][i][j] = 0.f; } } } - for (int c = 0; c < 3; c++) { - channelblur[c](1, 1); //free up some memory - } + channelblur[0].free(); //free up some memory + hilite_full4.free(); //free up some memory - multi_array2D hilite(hfw + 1, hfh + 1, ARRAY2D_CLEAR_DATA); + int hfh = (height - (height % pitch)) / pitch; + int hfw = (width - (width % pitch)) / pitch; + + multi_array2D hilite(hfw + 1, hfh + 1, ARRAY2D_CLEAR_DATA, 48); //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% // blur and resample highlight data; range=size of blur, pitch=sample spacing + + array2D temp2((width / pitch) + ((width % pitch) == 0 ? 0 : 1), height); + for (int m = 0; m < 4; m++) { - boxblur_resamp(hilite_full[m], hilite[m], height, width, range, pitch); + boxblur_resamp(hilite_full[m], hilite[m], temp2, height, width, range, pitch); if(plistener) { progress += 0.05; @@ -544,101 +619,228 @@ void RawImageSource :: HLRecovery_inpaint (float** red, float** green, float** b } } - for (int c = 0; c < 5; c++) { - hilite_full[c](1, 1); //free up some memory + temp2.free(); + + for (int c = 0; c < 4; c++) { + hilite_full[c].free(); //free up some memory } - multi_array2D hilite_dir(hfw, hfh, ARRAY2D_CLEAR_DATA); - - //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - //blur highlights - //for (int m=0; m<4; m++) - // boxblur2(hilite[m],hilite[m],hfh,hfw,4); - - //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + multi_array2D hilite_dir(hfw, hfh, ARRAY2D_CLEAR_DATA, 64); + // for faster processing we create two buffers using (height,width) instead of (width,height) + multi_array2D hilite_dir0(hfh, hfw, ARRAY2D_CLEAR_DATA, 64); + multi_array2D hilite_dir4(hfh, hfw, ARRAY2D_CLEAR_DATA, 64); if(plistener) { progress += 0.05; plistener->setProgress(progress); } - LUTf invfn(0x10000); - - for (int i = 0; i < 0x10000; i++) { - invfn[i] = 1.0 / (1.0 + i); - } - - - //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - //fill gaps in highlight map by directional extension //raster scan from four corners - for (int j = 1; j < hfw - 1; j++) + for (int j = 1; j < hfw - 1; j++) { for (int i = 2; i < hfh - 2; i++) { //from left - if (hilite[3][i][j] > 0.01) { - for (int c = 0; c < 4; c++) { - hilite_dir[c][i][j] = hilite[c][i][j] / hilite[3][i][j]; - } + if (hilite[3][i][j] > epsilon) { + hilite_dir0[3][j][i] = 1.f; } else { - for (int c = 0; c < 4; c++) { - hilite_dir[c][i][j] = 0.1 * ((hilite_dir[0 + c][i - 2][j - 1] + hilite_dir[0 + c][i - 1][j - 1] + hilite_dir[0 + c][i][j - 1] + hilite_dir[0 + c][i + 1][j - 1] + hilite_dir[0 + c][i + 2][j - 1]) / - (hilite_dir[0 + 3][i - 2][j - 1] + hilite_dir[0 + 3][i - 1][j - 1] + hilite_dir[0 + 3][i][j - 1] + hilite_dir[0 + 3][i + 1][j - 1] + hilite_dir[0 + 3][i + 2][j - 1] + 0.00001)); - hilite_dir[4 + c][i][j + 1] += hilite_dir[c][i][j]; - hilite_dir[8 + c][i - 2][j] += hilite_dir[c][i][j]; - hilite_dir[12 + c][i + 2][j] += hilite_dir[c][i][j]; - } + hilite_dir0[3][j][i] = (hilite_dir0[0 + 3][j - 1][i - 2] + hilite_dir0[0 + 3][j - 1][i - 1] + hilite_dir0[0 + 3][j - 1][i] + hilite_dir0[0 + 3][j - 1][i + 1] + hilite_dir0[0 + 3][j - 1][i + 2]) == 0.f ? 0.f : 0.1f; } } + if(hilite[3][2][j] <= epsilon) { + hilite_dir[0 + 3][0][j] = hilite_dir0[3][j][2]; + } + + if(hilite[3][3][j] <= epsilon) { + hilite_dir[0 + 3][1][j] = hilite_dir0[3][j][3]; + } + + if(hilite[3][hfh - 3][j] <= epsilon) { + hilite_dir[4 + 3][hfh - 1][j] = hilite_dir0[3][j][hfh - 3]; + } + + if(hilite[3][hfh - 4][j] <= epsilon) { + hilite_dir[4 + 3][hfh - 2][j] = hilite_dir0[3][j][hfh - 4]; + } + } + + for (int i = 2; i < hfh - 2; i++) { + if(hilite[3][i][hfw - 2] <= epsilon) { + hilite_dir4[3][hfw - 1][i] = hilite_dir0[3][hfw - 2][i]; + } + } + + +#ifdef _OPENMP + #pragma omp parallel for +#endif + + for (int c = 0; c < 3; c++) { + for (int j = 1; j < hfw - 1; j++) { + for (int i = 2; i < hfh - 2; i++) { + //from left + if (hilite[3][i][j] > epsilon) { + hilite_dir0[c][j][i] = hilite[c][i][j] / hilite[3][i][j]; + } else { + hilite_dir0[c][j][i] = 0.1f * ((hilite_dir0[0 + c][j - 1][i - 2] + hilite_dir0[0 + c][j - 1][i - 1] + hilite_dir0[0 + c][j - 1][i] + hilite_dir0[0 + c][j - 1][i + 1] + hilite_dir0[0 + c][j - 1][i + 2]) / + (hilite_dir0[0 + 3][j - 1][i - 2] + hilite_dir0[0 + 3][j - 1][i - 1] + hilite_dir0[0 + 3][j - 1][i] + hilite_dir0[0 + 3][j - 1][i + 1] + hilite_dir0[0 + 3][j - 1][i + 2] + epsilon)); + } + } + + if(hilite[3][2][j] <= epsilon) { + hilite_dir[0 + c][0][j] = hilite_dir0[c][j][2]; + } + + if(hilite[3][3][j] <= epsilon) { + hilite_dir[0 + c][1][j] = hilite_dir0[c][j][3]; + } + + if(hilite[3][hfh - 3][j] <= epsilon) { + hilite_dir[4 + c][hfh - 1][j] = hilite_dir0[c][j][hfh - 3]; + } + + if(hilite[3][hfh - 4][j] <= epsilon) { + hilite_dir[4 + c][hfh - 2][j] = hilite_dir0[c][j][hfh - 4]; + } + } + + for (int i = 2; i < hfh - 2; i++) { + if(hilite[3][i][hfw - 2] <= epsilon) { + hilite_dir4[c][hfw - 1][i] = hilite_dir0[c][hfw - 2][i]; + } + } + } + if(plistener) { progress += 0.05; plistener->setProgress(progress); } - for (int j = hfw - 2; j > 0; j--) + for (int j = hfw - 2; j > 0; j--) { for (int i = 2; i < hfh - 2; i++) { //from right - if (hilite[3][i][j] > 0.01) { - for (int c = 0; c < 4; c++) { - hilite_dir[4 + c][i][j] = hilite[c][i][j] / hilite[3][i][j]; - } + if (hilite[3][i][j] > epsilon) { + hilite_dir4[3][j][i] = 1.f; } else { - for (int c = 0; c < 4; c++) { - hilite_dir[4 + c][i][j] = 0.1 * ((hilite_dir[4 + c][(i - 2)][(j + 1)] + hilite_dir[4 + c][(i - 1)][(j + 1)] + hilite_dir[4 + c][(i)][(j + 1)] + hilite_dir[4 + c][(i + 1)][(j + 1)] + hilite_dir[4 + c][(i + 2)][(j + 1)]) / - (hilite_dir[4 + 3][(i - 2)][(j + 1)] + hilite_dir[4 + 3][(i - 1)][(j + 1)] + hilite_dir[4 + 3][(i)][(j + 1)] + hilite_dir[4 + 3][(i + 1)][(j + 1)] + hilite_dir[4 + 3][(i + 2)][(j + 1)] + 0.00001)); - hilite_dir[8 + c][i - 2][j] += hilite_dir[4 + c][i][j]; - hilite_dir[12 + c][i + 2][j] += hilite_dir[4 + c][i][j]; - } + hilite_dir4[3][j][i] = (hilite_dir4[3][(j + 1)][(i - 2)] + hilite_dir4[3][(j + 1)][(i - 1)] + hilite_dir4[3][(j + 1)][(i)] + hilite_dir4[3][(j + 1)][(i + 1)] + hilite_dir4[3][(j + 1)][(i + 2)]) == 0.f ? 0.f : 0.1f; } } + if(hilite[3][2][j] <= epsilon) { + hilite_dir[0 + 3][0][j] += hilite_dir4[3][j][2]; + } + + if(hilite[3][hfh - 3][j] <= epsilon) { + hilite_dir[4 + 3][hfh - 1][j] += hilite_dir4[3][j][hfh - 3]; + } + } + + for (int i = 2; i < hfh - 2; i++) { + if(hilite[3][i][0] <= epsilon) { + hilite_dir[0 + 3][i - 2][0] += hilite_dir4[3][0][i]; + hilite_dir[4 + 3][i + 2][0] += hilite_dir4[3][0][i]; + } + + if(hilite[3][i][1] <= epsilon) { + hilite_dir[0 + 3][i - 2][1] += hilite_dir4[3][1][i]; + hilite_dir[4 + 3][i + 2][1] += hilite_dir4[3][1][i]; + } + + if(hilite[3][i][hfw - 2] <= epsilon) { + hilite_dir[0 + 3][i - 2][hfw - 2] += hilite_dir4[3][hfw - 2][i]; + hilite_dir[4 + 3][i + 2][hfw - 2] += hilite_dir4[3][hfw - 2][i]; + } + } + +#ifdef _OPENMP + #pragma omp parallel for +#endif + + for (int c = 0; c < 3; c++) { + for (int j = hfw - 2; j > 0; j--) { + for (int i = 2; i < hfh - 2; i++) { + //from right + if (hilite[3][i][j] > epsilon) { + hilite_dir4[c][j][i] = hilite[c][i][j] / hilite[3][i][j]; + } else { + hilite_dir4[c][j][i] = 0.1 * ((hilite_dir4[c][(j + 1)][(i - 2)] + hilite_dir4[c][(j + 1)][(i - 1)] + hilite_dir4[c][(j + 1)][(i)] + hilite_dir4[c][(j + 1)][(i + 1)] + hilite_dir4[c][(j + 1)][(i + 2)]) / + (hilite_dir4[3][(j + 1)][(i - 2)] + hilite_dir4[3][(j + 1)][(i - 1)] + hilite_dir4[3][(j + 1)][(i)] + hilite_dir4[3][(j + 1)][(i + 1)] + hilite_dir4[3][(j + 1)][(i + 2)] + epsilon)); + } + } + + if(hilite[3][2][j] <= epsilon) { + hilite_dir[0 + c][0][j] += hilite_dir4[c][j][2]; + } + + if(hilite[3][hfh - 3][j] <= epsilon) { + hilite_dir[4 + c][hfh - 1][j] += hilite_dir4[c][j][hfh - 3]; + } + } + + for (int i = 2; i < hfh - 2; i++) { + if(hilite[3][i][0] <= epsilon) { + hilite_dir[0 + c][i - 2][0] += hilite_dir4[c][0][i]; + hilite_dir[4 + c][i + 2][0] += hilite_dir4[c][0][i]; + } + + if(hilite[3][i][1] <= epsilon) { + hilite_dir[0 + c][i - 2][1] += hilite_dir4[c][1][i]; + hilite_dir[4 + c][i + 2][1] += hilite_dir4[c][1][i]; + } + + if(hilite[3][i][hfw - 2] <= epsilon) { + hilite_dir[0 + c][i - 2][hfw - 2] += hilite_dir4[c][hfw - 2][i]; + hilite_dir[4 + c][i + 2][hfw - 2] += hilite_dir4[c][hfw - 2][i]; + } + } + } + if(plistener) { progress += 0.05; plistener->setProgress(progress); } + for (int i = 1; i < hfh - 1; i++) for (int j = 2; j < hfw - 2; j++) { - //if (i%100==0 && j%100==0) - // printf("row=%d col=%d r=%f g=%f b=%f hilite=%f \n",i,j,hilite[0][i][j],hilite[1][i][j],hilite[2][i][j],hilite[3][i][j]); - //from top - if (hilite[3][i][j] > 0.01) { - for (int c = 0; c < 4; c++) { - hilite_dir[8 + c][i][j] = hilite[c][i][j] / hilite[3][i][j]; - } + if (hilite[3][i][j] > epsilon) { + hilite_dir[0 + 3][i][j] = 1.f; } else { - for (int c = 0; c < 4; c++) { - hilite_dir[8 + c][i][j] = 0.1 * ((hilite_dir[8 + c][i - 1][j - 2] + hilite_dir[8 + c][i - 1][j - 1] + hilite_dir[8 + c][i - 1][j] + hilite_dir[8 + c][i - 1][j + 1] + hilite_dir[8 + c][i - 1][j + 2]) / - (hilite_dir[8 + 3][i - 1][j - 2] + hilite_dir[8 + 3][i - 1][j - 1] + hilite_dir[8 + 3][i - 1][j] + hilite_dir[8 + 3][i - 1][j + 1] + hilite_dir[8 + 3][i - 1][j + 2] + 0.00001)); - hilite_dir[12 + c][i + 1][j] += hilite_dir[8 + c][i][j]; + hilite_dir[0 + 3][i][j] = (hilite_dir[0 + 3][i - 1][j - 2] + hilite_dir[0 + 3][i - 1][j - 1] + hilite_dir[0 + 3][i - 1][j] + hilite_dir[0 + 3][i - 1][j + 1] + hilite_dir[0 + 3][i - 1][j + 2]) == 0.f ? 0.f : 0.1f; + } + } + + for (int j = 2; j < hfw - 2; j++) { + if(hilite[3][hfh - 2][j] <= epsilon) { + hilite_dir[4 + 3][hfh - 1][j] += hilite_dir[0 + 3][hfh - 2][j]; + } + } + +#ifdef _OPENMP + #pragma omp parallel for +#endif + + for (int c = 0; c < 3; c++) { + for (int i = 1; i < hfh - 1; i++) { + for (int j = 2; j < hfw - 2; j++) { + //from top + if (hilite[3][i][j] > epsilon) { + hilite_dir[0 + c][i][j] = hilite[c][i][j] / hilite[3][i][j]; + } else { + hilite_dir[0 + c][i][j] = 0.1 * ((hilite_dir[0 + c][i - 1][j - 2] + hilite_dir[0 + c][i - 1][j - 1] + hilite_dir[0 + c][i - 1][j] + hilite_dir[0 + c][i - 1][j + 1] + hilite_dir[0 + c][i - 1][j + 2]) / + (hilite_dir[0 + 3][i - 1][j - 2] + hilite_dir[0 + 3][i - 1][j - 1] + hilite_dir[0 + 3][i - 1][j] + hilite_dir[0 + 3][i - 1][j + 1] + hilite_dir[0 + 3][i - 1][j + 2] + epsilon)); } } } + for (int j = 2; j < hfw - 2; j++) { + if(hilite[3][hfh - 2][j] <= epsilon) { + hilite_dir[4 + c][hfh - 1][j] += hilite_dir[0 + c][hfh - 2][j]; + } + } + } + if(plistener) { progress += 0.05; plistener->setProgress(progress); @@ -647,18 +849,30 @@ void RawImageSource :: HLRecovery_inpaint (float** red, float** green, float** b for (int i = hfh - 2; i > 0; i--) for (int j = 2; j < hfw - 2; j++) { //from bottom - if (hilite[3][i][j] > 0.01) { - for (int c = 0; c < 4; c++) { - hilite_dir[12 + c][i][j] = hilite[c][i][j] / hilite[3][i][j]; - } + if (hilite[3][i][j] > epsilon) { + hilite_dir[4 + 3][i][j] = 1.f; } else { - for (int c = 0; c < 4; c++) { - hilite_dir[12 + c][i][j] = 0.1 * ((hilite_dir[12 + c][(i + 1)][(j - 2)] + hilite_dir[12 + c][(i + 1)][(j - 1)] + hilite_dir[12 + c][(i + 1)][(j)] + hilite_dir[12 + c][(i + 1)][(j + 1)] + hilite_dir[12 + c][(i + 1)][(j + 2)]) / - (hilite_dir[12 + 3][(i + 1)][(j - 2)] + hilite_dir[12 + 3][(i + 1)][(j - 1)] + hilite_dir[12 + 3][(i + 1)][(j)] + hilite_dir[12 + 3][(i + 1)][(j + 1)] + hilite_dir[12 + 3][(i + 1)][(j + 2)] + 0.00001)); + hilite_dir[4 + 3][i][j] = (hilite_dir[4 + 3][(i + 1)][(j - 2)] + hilite_dir[4 + 3][(i + 1)][(j - 1)] + hilite_dir[4 + 3][(i + 1)][(j)] + hilite_dir[4 + 3][(i + 1)][(j + 1)] + hilite_dir[4 + 3][(i + 1)][(j + 2)]) == 0.f ? 0.f : 0.1f; + } + } + +#ifdef _OPENMP + #pragma omp parallel for +#endif + + for (int c = 0; c < 4; c++) { + for (int i = hfh - 2; i > 0; i--) { + for (int j = 2; j < hfw - 2; j++) { + //from bottom + if (hilite[3][i][j] > epsilon) { + hilite_dir[4 + c][i][j] = hilite[c][i][j] / hilite[3][i][j]; + } else { + hilite_dir[4 + c][i][j] = 0.1 * ((hilite_dir[4 + c][(i + 1)][(j - 2)] + hilite_dir[4 + c][(i + 1)][(j - 1)] + hilite_dir[4 + c][(i + 1)][(j)] + hilite_dir[4 + c][(i + 1)][(j + 1)] + hilite_dir[4 + c][(i + 1)][(j + 2)]) / + (hilite_dir[4 + 3][(i + 1)][(j - 2)] + hilite_dir[4 + 3][(i + 1)][(j - 1)] + hilite_dir[4 + 3][(i + 1)][(j)] + hilite_dir[4 + 3][(i + 1)][(j + 1)] + hilite_dir[4 + 3][(i + 1)][(j + 2)] + epsilon)); } } - } + } if(plistener) { progress += 0.05; @@ -666,7 +880,7 @@ void RawImageSource :: HLRecovery_inpaint (float** red, float** green, float** b } //fill in edges - for (int dir = 0; dir < numdirs; dir++) { + for (int dir = 0; dir < 2; dir++) { for (int i = 1; i < hfh - 1; i++) for (int c = 0; c < 4; c++) { hilite_dir[dir * 4 + c][i][0] = hilite_dir[dir * 4 + c][i][1]; @@ -687,28 +901,57 @@ void RawImageSource :: HLRecovery_inpaint (float** red, float** green, float** b } } + for (int i = 1; i < hfh - 1; i++) + for (int c = 0; c < 4; c++) { + hilite_dir0[c][0][i] = hilite_dir0[c][1][i]; + hilite_dir0[c][hfw - 1][i] = hilite_dir0[c][hfw - 2][i]; + } + + for (int j = 1; j < hfw - 1; j++) + for (int c = 0; c < 4; c++) { + hilite_dir0[c][j][0] = hilite_dir0[c][j][1]; + hilite_dir0[c][j][hfh - 1] = hilite_dir0[c][j][hfh - 2]; + } + + for (int c = 0; c < 4; c++) { + hilite_dir0[c][0][0] = hilite_dir0[c][0][1] = hilite_dir0[c][1][0] = hilite_dir0[c][1][1] = hilite_dir0[c][2][2]; + hilite_dir0[c][hfw - 1][0] = hilite_dir0[c][hfw - 1][1] = hilite_dir0[c][hfw - 2][0] = hilite_dir0[c][hfw - 2][1] = hilite_dir0[c][hfw - 3][2]; + hilite_dir0[c][0][hfh - 1] = hilite_dir0[c][0][hfh - 2] = hilite_dir0[c][1][hfh - 1] = hilite_dir0[c][1][hfh - 2] = hilite_dir0[c][2][hfh - 3]; + hilite_dir0[c][hfw - 1][hfh - 1] = hilite_dir0[c][hfw - 1][hfh - 2] = hilite_dir0[c][hfw - 2][hfh - 1] = hilite_dir0[c][hfw - 2][hfh - 2] = hilite_dir0[c][hfw - 3][hfh - 3]; + } + + for (int i = 1; i < hfh - 1; i++) + for (int c = 0; c < 4; c++) { + hilite_dir4[c][0][i] = hilite_dir4[c][1][i]; + hilite_dir4[c][hfw - 1][i] = hilite_dir4[c][hfw - 2][i]; + } + + for (int j = 1; j < hfw - 1; j++) + for (int c = 0; c < 4; c++) { + hilite_dir4[c][j][0] = hilite_dir4[c][j][1]; + hilite_dir4[c][j][hfh - 1] = hilite_dir4[c][j][hfh - 2]; + } + + for (int c = 0; c < 4; c++) { + hilite_dir4[c][0][0] = hilite_dir4[c][0][1] = hilite_dir4[c][1][0] = hilite_dir4[c][1][1] = hilite_dir4[c][2][2]; + hilite_dir4[c][hfw - 1][0] = hilite_dir4[c][hfw - 1][1] = hilite_dir4[c][hfw - 2][0] = hilite_dir4[c][hfw - 2][1] = hilite_dir4[c][hfw - 3][2]; + hilite_dir4[c][0][hfh - 1] = hilite_dir4[c][0][hfh - 2] = hilite_dir4[c][1][hfh - 1] = hilite_dir4[c][1][hfh - 2] = hilite_dir4[c][2][hfh - 3]; + hilite_dir4[c][hfw - 1][hfh - 1] = hilite_dir4[c][hfw - 1][hfh - 2] = hilite_dir4[c][hfw - 2][hfh - 1] = hilite_dir4[c][hfw - 2][hfh - 2] = hilite_dir4[c][hfw - 3][hfh - 3]; + } + if(plistener) { progress += 0.05; plistener->setProgress(progress); } - //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - /*for (int m=0; m<4*numdirs; m++) { - boxblur2(hilite_dir[m],hilite_dir[m],hfh,hfw,4); - }*/ - - //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - //now we have highlight data extended in various directions - //next step is to build back local data by averaging - + //free up some memory + for(int c = 0; c < 4; c++) { + hilite[c].free(); + } //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% // now reconstruct clipped channels using color ratios - //const float Yclip = 0.3333*(max[0] + max[1] + max[2]); - //float sumwt=0, counts=0; - #ifdef _OPENMP #pragma omp parallel for schedule(dynamic,16) #endif @@ -717,7 +960,6 @@ void RawImageSource :: HLRecovery_inpaint (float** red, float** green, float** b int i1 = min((i - (i % pitch)) / pitch, hfh - 1); for (int j = 0; j < width; j++) { - int j1 = min((j - (j % pitch)) / pitch, hfw - 1); float pixel[3] = {red[i][j], green[i][j], blue[i][j]}; @@ -725,11 +967,9 @@ void RawImageSource :: HLRecovery_inpaint (float** red, float** green, float** b continue; //pixel not clipped } - //if (pixel[0] blendpt) { - rgb_blend[0] = rfrac * rgb[0] + (1 - rfrac) * pixel[0]; + rgb_blend[0] = rfrac * rgb[0] + (1.f - rfrac) * pixel[0]; } if (pixel[1] > blendpt) { - rgb_blend[1] = gfrac * rgb[1] + (1 - gfrac) * pixel[1]; + rgb_blend[1] = gfrac * rgb[1] + (1.f - gfrac) * pixel[1]; } if (pixel[2] > blendpt) { - rgb_blend[2] = bfrac * rgb[2] + (1 - bfrac) * pixel[2]; + rgb_blend[2] = bfrac * rgb[2] + (1.f - bfrac) * pixel[2]; } //end of HLRecovery_blend estimation //%%%%%%%%%%%%%%%%%%%%%%% - //float pixref[3]={min(Yclip,hfsize[0][i1][j1]),min(Yclip,hfsize[1][i1][j1]),min(Yclip,hfsize[2][i1][j1])}; - //there are clipped highlights //first, determine weighted average of unclipped extensions (weighting is by 'hue' proximity) - float dirwt, factor, Y; - float totwt = 0; //0.0003; - float clipfix[3] = {0, 0, 0}; //={totwt*rgb_blend[0],totwt*rgb_blend[1],totwt*rgb_blend[2]}; + float totwt = 0.f; + float clipfix[3] = {0.f, 0.f, 0.f}; - for (int dir = 0; dir < numdirs; dir++) { - float Yhi = 0.001 + (hilite_dir[dir * 4 + 0][i1][j1] + hilite_dir[dir * 4 + 1][i1][j1] + hilite_dir[dir * 4 + 2][i1][j1]); - float Y = 0.001 + (rgb_blend[0] + rgb_blend[1] + rgb_blend[2]); + float Y = epsilon + rgb_blend[0] + rgb_blend[1] + rgb_blend[2]; - if (hilite_dir[dir * 4 + 0][i1][j1] + hilite_dir[dir * 4 + 1][i1][j1] + hilite_dir[dir * 4 + 2][i1][j1] > 0.5) { - dirwt = invfn[65535 * (SQR(rgb_blend[0] / Y - hilite_dir[dir * 4 + 0][i1][j1] / Yhi) + - SQR(rgb_blend[1] / Y - hilite_dir[dir * 4 + 1][i1][j1] / Yhi) + - SQR(rgb_blend[2] / Y - hilite_dir[dir * 4 + 2][i1][j1] / Yhi))]; + for (int c = 0; c < ColorCount; c++) { + rgb_blend[c] /= Y; + } + + float Yhi = 1.f / (hilite_dir0[0][j1][i1] + hilite_dir0[1][j1][i1] + hilite_dir0[2][j1][i1]); + + if (Yhi < 2.f) { + float dirwt = 1.f / (1.f + 65535.f * (SQR(rgb_blend[0] - hilite_dir0[0][j1][i1] * Yhi) + + SQR(rgb_blend[1] - hilite_dir0[1][j1][i1] * Yhi) + + SQR(rgb_blend[2] - hilite_dir0[2][j1][i1] * Yhi))); + totwt = dirwt; + dirwt /= (hilite_dir0[3][j1][i1] + epsilon); + clipfix[0] = dirwt * hilite_dir0[0][j1][i1]; + clipfix[1] = dirwt * hilite_dir0[1][j1][i1]; + clipfix[2] = dirwt * hilite_dir0[2][j1][i1]; + } + + for (int dir = 0; dir < 2; dir++) { + float Yhi = 1.f / ( hilite_dir[dir * 4 + 0][i1][j1] + hilite_dir[dir * 4 + 1][i1][j1] + hilite_dir[dir * 4 + 2][i1][j1]); + + if (Yhi < 2.f) { + float dirwt = 1.f / (1.f + 65535.f * (SQR(rgb_blend[0] - hilite_dir[dir * 4 + 0][i1][j1] * Yhi) + + SQR(rgb_blend[1] - hilite_dir[dir * 4 + 1][i1][j1] * Yhi) + + SQR(rgb_blend[2] - hilite_dir[dir * 4 + 2][i1][j1] * Yhi))); totwt += dirwt; - clipfix[0] += dirwt * hilite_dir[dir * 4 + 0][i1][j1] / (hilite_dir[dir * 4 + 3][i1][j1] + 0.00001); - clipfix[1] += dirwt * hilite_dir[dir * 4 + 1][i1][j1] / (hilite_dir[dir * 4 + 3][i1][j1] + 0.00001); - clipfix[2] += dirwt * hilite_dir[dir * 4 + 2][i1][j1] / (hilite_dir[dir * 4 + 3][i1][j1] + 0.00001); + dirwt /= (hilite_dir[dir * 4 + 3][i1][j1] + epsilon); + clipfix[0] += dirwt * hilite_dir[dir * 4 + 0][i1][j1]; + clipfix[1] += dirwt * hilite_dir[dir * 4 + 1][i1][j1]; + clipfix[2] += dirwt * hilite_dir[dir * 4 + 2][i1][j1]; } } + + Yhi = 1.f / (hilite_dir4[0][j1][i1] + hilite_dir4[1][j1][i1] + hilite_dir4[2][j1][i1]); + + if (Yhi < 2.f) { + float dirwt = 1.f / (1.f + 65535.f * (SQR(rgb_blend[0] - hilite_dir4[0][j1][i1] * Yhi) + + SQR(rgb_blend[1] - hilite_dir4[1][j1][i1] * Yhi) + + SQR(rgb_blend[2] - hilite_dir4[2][j1][i1] * Yhi))); + totwt += dirwt; + dirwt /= (hilite_dir4[3][j1][i1] + epsilon); + clipfix[0] += dirwt * hilite_dir4[0][j1][i1]; + clipfix[1] += dirwt * hilite_dir4[1][j1][i1]; + clipfix[2] += dirwt * hilite_dir4[2][j1][i1]; + } + if(totwt == 0.f) { continue; } @@ -834,58 +1105,39 @@ void RawImageSource :: HLRecovery_inpaint (float** red, float** green, float** b clipfix[0] /= totwt; clipfix[1] /= totwt; clipfix[2] /= totwt; - //sumwt += totwt; - //counts ++; //now correct clipped channels if (pixel[0] > max_f[0] && pixel[1] > max_f[1] && pixel[2] > max_f[2]) { //all channels clipped float Y = (0.299 * clipfix[0] + 0.587 * clipfix[1] + 0.114 * clipfix[2]); - //float Y = (clipfix[0] + clipfix[1] + clipfix[2]); - factor = whitept / Y; + + float factor = whitept / Y; red[i][j] = clipfix[0] * factor; green[i][j] = clipfix[1] * factor; blue[i][j] = clipfix[2] * factor; } else {//some channels clipped - int notclipped[3] = {pixel[0] < max_f[0] ? 1 : 0, pixel[1] < max_f[1] ? 1 : 0, pixel[2] < max_f[2] ? 1 : 0}; + float notclipped[3] = {pixel[0] <= max_f[0] ? 1.f : 0.f, pixel[1] <= max_f[1] ? 1.f : 0.f, pixel[2] <= max_f[2] ? 1.f : 0.f}; - if (notclipped[0] == 0) { //red clipped + if (notclipped[0] == 0.f) { //red clipped red[i][j] = max(red[i][j], (clipfix[0] * ((notclipped[1] * pixel[1] + notclipped[2] * pixel[2]) / - (notclipped[1] * clipfix[1] + notclipped[2] * clipfix[2])))); + (notclipped[1] * clipfix[1] + notclipped[2] * clipfix[2] + epsilon)))); } - if (notclipped[1] == 0) { //green clipped + if (notclipped[1] == 0.f) { //green clipped green[i][j] = max(green[i][j], (clipfix[1] * ((notclipped[2] * pixel[2] + notclipped[0] * pixel[0]) / - (notclipped[2] * clipfix[2] + notclipped[0] * clipfix[0])))); + (notclipped[2] * clipfix[2] + notclipped[0] * clipfix[0] + epsilon)))); } - if (notclipped[2] == 0) { //blue clipped + if (notclipped[2] == 0.f) { //blue clipped blue[i][j] = max(blue[i][j], (clipfix[2] * ((notclipped[0] * pixel[0] + notclipped[1] * pixel[1]) / - (notclipped[0] * clipfix[0] + notclipped[1] * clipfix[1])))); + (notclipped[0] * clipfix[0] + notclipped[1] * clipfix[1] + epsilon)))); } } - /*if (hilite[3][i1][j1]>0.01) { - red[i][j] = (red[i][j] + hilite[0][i1][j1])/(1+hilite[3][i1][j1]); - green[i][j] = (green[i][j]+ hilite[1][i1][j1])/(1+hilite[3][i1][j1]); - blue[i][j] = (blue[i][j] + hilite[2][i1][j1])/(1+hilite[3][i1][j1]); - }*/ - Y = (0.299 * red[i][j] + 0.587 * green[i][j] + 0.114 * blue[i][j]); if (Y > whitept) { - factor = whitept / Y; - - /*I = (0.596 * red[i][j] - 0.275 * green[i][j] - 0.321 * blue[i][j]); - Q = (0.212 * red[i][j] - 0.523 * green[i][j] + 0.311 * blue[i][j]); - - Y *= factor; - I *= factor;//max(0,min(1,(whitept-Y)/(whitept-clippt))); - Q *= factor;//max(0,min(1,(whitept-Y)/(whitept-clippt))); - - red[i][j] = Y + 0.956*I + 0.621*Q; - green[i][j] = Y - 0.272*I - 0.647*Q; - blue[i][j] = Y - 1.105*I + 1.702*Q;*/ + float factor = whitept / Y; red[i][j] *= factor; green[i][j] *= factor; @@ -898,76 +1150,8 @@ void RawImageSource :: HLRecovery_inpaint (float** red, float** green, float** b plistener->setProgress(1.00); } - //printf("ave wt=%f\n",sumwt/counts); - - - // diagnostic output - /*for (int i=0; i &conversionBuffer, bool dehacontlutili, bool useHsl, float &minCD, float &maxCD, float &mini, float &maxi, float &Tmean, float &Tsigma, float &Tmin, float &Tmax, LUTu &histLRETI) {}; + virtual void retinexPrepareCurves (RetinexParams retinexParams, LUTf &cdcurve, RetinextransmissionCurve &retinextransmissionCurve, bool &retinexcontlutili, bool &useHsl, LUTu & lhist16RETI, LUTu & histLRETI) {}; + virtual void retinexPrepareBuffers (ColorManagementParams cmp, RetinexParams retinexParams, multi_array2D &conversionBuffer, LUTu &lhist16RETI) {}; virtual void flushRawData () {}; virtual void flushRGB () {}; virtual void HLRecovery_Global (ToneCurveParams hrp) {}; virtual void HLRecovery_inpaint (float** red, float** green, float** blue) {}; + virtual void MSR(LabImage* lab, int width, int height, int skip, RetinexParams deh, const RetinextransmissionCurve & dehatransmissionCurve, float &minCD, float &maxCD, float &mini, float &maxi, float &Tmean, float &Tsigma, float &Tmin, float &Tmax) {}; virtual bool IsrgbSourceModified() = 0; // tracks whether cached rgb output of demosaic has been modified diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index fa1fae502..23904ba1b 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -55,6 +55,7 @@ ImProcCoordinator::ImProcCoordinator () lhist16(65536), lhist16Cropped(65536), lhist16CAM(65536), lhist16CroppedCAM(65536), lhist16CCAM(65536), + lhist16RETI(65536), histCropped(65536), lhist16Clad(65536), lhist16CLlad(65536), lhist16LClad(65536), lhist16LLClad(65536), @@ -75,6 +76,8 @@ ImProcCoordinator::ImProcCoordinator () bcabhist(256), histChroma(256), + histLRETI(256), + CAMBrightCurveJ(), CAMBrightCurveQ(), rCurve(), @@ -85,9 +88,9 @@ ImProcCoordinator::ImProcCoordinator () bcurvehist(256), bcurvehistCropped(256), bbeforehist(256), fullw(1), fullh(1), pW(-1), pH(-1), - plistener(NULL), imageListener(NULL), aeListener(NULL), acListener(NULL), abwListener(NULL), actListener(NULL), adnListener(NULL), awavListener(NULL), hListener(NULL), + plistener(NULL), imageListener(NULL), aeListener(NULL), acListener(NULL), abwListener(NULL), actListener(NULL), adnListener(NULL), awavListener(NULL), dehaListener(NULL), hListener(NULL), resultValid(false), changeSinceLast(0), updaterRunning(false), destroying(false), utili(false), autili(false), wavcontlutili(false), - butili(false), ccutili(false), cclutili(false), clcutili(false), opautili(false) + butili(false), ccutili(false), cclutili(false), clcutili(false), opautili(false), conversionBuffer(1, 1) {} @@ -163,6 +166,8 @@ void ImProcCoordinator::updatePreviewImage (int todo, Crop* cropCall) } RAWParams rp = params.raw; + ColorManagementParams cmp = params.icm; + LCurveParams lcur = params.labCurve; if( !highDetailNeeded ) { // if below 100% magnification, take a fast path @@ -206,6 +211,7 @@ void ImProcCoordinator::updatePreviewImage (int todo, Crop* cropCall) OR HLR gets disabled when Color method was selected */ // If high detail (=100%) is newly selected, do a demosaic update, since the last was just with FAST + if ( (todo & M_RAW) || (!highDetailRawComputed && highDetailNeeded) || ( params.toneCurve.hrenabled && params.toneCurve.method != "Color" && imgsrc->IsrgbSourceModified()) @@ -219,19 +225,38 @@ void ImProcCoordinator::updatePreviewImage (int todo, Crop* cropCall) } } - imgsrc->demosaic( rp ); + imgsrc->demosaic( rp);//enabled demosaic + // if a demosaic happened we should also call getimage later, so we need to set the M_INIT flag + todo |= M_INIT; if (highDetailNeeded) { highDetailRawComputed = true; - - if (params.toneCurve.hrenabled && params.toneCurve.method == "Color") { - todo |= M_INIT; - } } else { highDetailRawComputed = false; } + + if (params.retinex.enabled) { + lhist16RETI.clear(); + + imgsrc->retinexPrepareBuffers(params.icm, params.retinex, conversionBuffer, lhist16RETI); + } } + if (params.retinex.enabled) { + bool dehacontlutili = false; + bool useHsl = false; + LUTf cdcurve (65536, 0); + + imgsrc->retinexPrepareCurves(params.retinex, cdcurve, dehatransmissionCurve, dehacontlutili, useHsl, lhist16RETI, histLRETI); + float minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax; + imgsrc->retinex( params.icm, params.retinex, params.toneCurve, cdcurve, dehatransmissionCurve, conversionBuffer, dehacontlutili, useHsl, minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax, histLRETI);//enabled Retinex + + if(dehaListener) { + dehaListener->minmaxChanged(maxCD, minCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax); + } + } + + // Updating toneCurve.hrenabled if necessary // It has to be done there, because the next 'if' statement will use the value computed here if (todo & M_AUTOEXP) { @@ -249,7 +274,8 @@ void ImProcCoordinator::updatePreviewImage (int todo, Crop* cropCall) if (todo & (M_INIT | M_LINDENOISE)) { MyMutex::MyLock initLock(minit); // Also used in crop window - imgsrc->HLRecovery_Global( params.toneCurve ); // this handles Color HLRecovery + imgsrc->HLRecovery_Global( params.toneCurve); // this handles Color HLRecovery + if (settings->verbose) { printf ("Applying white balance, color correction & sRBG conversion...\n"); @@ -294,7 +320,7 @@ void ImProcCoordinator::updatePreviewImage (int todo, Crop* cropCall) imgsrc->getImage (currWB, tr, orig_prev, pp, params.toneCurve, params.icm, params.raw); //ColorTemp::CAT02 (orig_prev, ¶ms) ; - + // printf("orig_prevW=%d\n scale=%d",orig_prev->width, scale); /* Issue 2785, disabled some 1:1 tools if (todo & M_LINDENOISE) { DirPyrDenoiseParams denoiseParams = params.dirpyrDenoise; @@ -576,6 +602,7 @@ void ImProcCoordinator::updatePreviewImage (int todo, Crop* cropCall) nprevl->CopyFrom(oprevl); progress ("Applying Color Boost...", 100 * readyphase / numofphases); + // ipf.MSR(nprevl, nprevl->W, nprevl->H, 1); ipf.chromiLuminanceCurve (NULL, pW, nprevl, nprevl, chroma_acurve, chroma_bcurve, satcurve, lhskcurve, clcurve, lumacurve, utili, autili, butili, ccutili, cclutili, clcutili, histCCurve, histCLurve, histLLCurve, histLCurve); ipf.vibrance(nprevl); @@ -809,7 +836,7 @@ void ImProcCoordinator::updatePreviewImage (int todo, Crop* cropCall) if (hListener) { updateLRGBHistograms (); - hListener->histogramChanged (histRed, histGreen, histBlue, histLuma, histToneCurve, histLCurve, histCCurve, /*histCLurve, histLLCurve,*/ histLCAM, histCCAM, histRedRaw, histGreenRaw, histBlueRaw, histChroma); + hListener->histogramChanged (histRed, histGreen, histBlue, histLuma, histToneCurve, histLCurve, histCCurve, /*histCLurve, histLLCurve,*/ histLCAM, histCCAM, histRedRaw, histGreenRaw, histBlueRaw, histChroma, histLRETI); } } diff --git a/rtengine/improccoordinator.h b/rtengine/improccoordinator.h index e0588d5df..ef981fe6a 100644 --- a/rtengine/improccoordinator.h +++ b/rtengine/improccoordinator.h @@ -94,6 +94,8 @@ protected: LUTf satcurve; LUTf lhskcurve; LUTf clcurve; +// multi_array2D conversionBuffer; + multi_array2D conversionBuffer; LUTf wavclCurve; LUTf clToningcurve; LUTf cl2Toningcurve; @@ -104,13 +106,14 @@ protected: LUTu lhist16, lhist16Cropped; LUTu lhist16CAM, lhist16CroppedCAM; LUTu lhist16CCAM; + LUTu lhist16RETI; LUTu histCropped; LUTu lhist16Clad, lhist16CLlad, lhist16LClad, lhist16LLClad; LUTu histRed, histRedRaw; LUTu histGreen, histGreenRaw; LUTu histBlue, histBlueRaw; LUTu histLuma, histToneCurve, histToneCurveBW, histLCurve, histCCurve, histCLurve; - LUTu histLLCurve, histLCAM, histCCAM, histClad, bcabhist, histChroma; + LUTu histLLCurve, histLCAM, histCCAM, histClad, bcabhist, histChroma, histLRETI; LUTf CAMBrightCurveJ, CAMBrightCurveQ; @@ -128,6 +131,7 @@ protected: WavOpacityCurveBY waOpacityCurveBY; WavOpacityCurveW waOpacityCurveW; WavOpacityCurveWL waOpacityCurveWL; + RetinextransmissionCurve dehatransmissionCurve; ColorAppearance customColCurve1; ColorAppearance customColCurve2; @@ -152,6 +156,7 @@ protected: AutoColorTonListener* actListener; AutoChromaListener* adnListener; WaveletListener* awavListener; + RetinexListener* dehaListener; HistogramListener* hListener; std::vector sizeListeners; @@ -297,6 +302,10 @@ public: { adnListener = adn; } + void setRetinexListener (RetinexListener* adh) + { + dehaListener = adh; + } void setWaveletListener (WaveletListener* awa) { awavListener = awa; diff --git a/rtengine/improcfun.h b/rtengine/improcfun.h index 351cadac8..cfabbba64 100644 --- a/rtengine/improcfun.h +++ b/rtengine/improcfun.h @@ -305,6 +305,9 @@ public: //void RGB_InputTransf(Imagefloat * src, LabImage * dst, const procparams::DirPyrDenoiseParams & dnparams, const procparams::DefringeParams & defringe); //void RGB_OutputTransf(LabImage * src, Imagefloat * dst, const procparams::DirPyrDenoiseParams & dnparams); //void output_tile_row (float *Lbloxrow, float ** Lhipassdn, float ** tilemask, int height, int width, int top, int blkrad ); + +// void MSR(LabImage* lab, int width, int height, int skip); + void Tile_calc (int tilesize, int overlap, int kall, int imwidth, int imheight, int &numtiles_W, int &numtiles_H, int &tilewidth, int &tileheight, int &tileWskip, int &tileHskip); void ip_wavelet(LabImage * lab, LabImage * dst, int kall, const procparams::WaveletParams & waparams, const WavCurve & wavCLVCcurve, const WavOpacityCurveRG & waOpacityCurveRG, const WavOpacityCurveBY & waOpacityCurveBY, const WavOpacityCurveW & waOpacityCurveW, const WavOpacityCurveWL & waOpacityCurveWL, LUTf &wavclCurve, bool wavcontlutili, int skip); diff --git a/rtengine/impulse_denoise.h b/rtengine/impulse_denoise.h index 1c89021e7..0e3fefd97 100644 --- a/rtengine/impulse_denoise.h +++ b/rtengine/impulse_denoise.h @@ -65,10 +65,7 @@ SSEFUNCTION void ImProcFunctions::impulse_nr (LabImage* lab, double thresh) #pragma omp parallel #endif { - AlignedBufferMP buffer(max(width, height)); - - gaussHorizontal (lab->L, lpf, buffer, width, height, max(2.0, thresh - 1.0)); - gaussVertical (lpf, lpf, buffer, width, height, max(2.0, thresh - 1.0)); + gaussianBlur (lab->L, lpf, width, height, max(2.0, thresh - 1.0)); } //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -320,9 +317,7 @@ SSEFUNCTION void ImProcFunctions::impulse_nrcam (CieImage* ncie, double thresh, #pragma omp parallel #endif { - AlignedBufferMP buffer(max(width, height)); - gaussHorizontal (ncie->sh_p, lpf, buffer, width, height, max(2.0, thresh - 1.0)); - gaussVertical (lpf, lpf, buffer, width, height, max(2.0, thresh - 1.0)); + gaussianBlur (ncie->sh_p, lpf, width, height, max(2.0, thresh - 1.0)); } //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/rtengine/ipretinex.cc b/rtengine/ipretinex.cc new file mode 100644 index 000000000..54d6888ea --- /dev/null +++ b/rtengine/ipretinex.cc @@ -0,0 +1,547 @@ +/* +* This file is part of RawTherapee. +* +* Copyright (c) 2004-2010 Gabor Horvath +* +* RawTherapee is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* RawTherapee is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with RawTherapee. If not, see . + + * adaptation to RawTherapee + * 2015 Jacques Desmis + * 2015 Ingo Weyrich + + * D. J. Jobson, Z. Rahman, and G. A. Woodell. A multi-scale + * Retinex for bridging the gap between color images and the + * human observation of scenes. IEEE Transactions on Image Processing, + * 1997, 6(7): 965-976 + + * Fan Guo Zixing Cai Bin Xie Jin Tang + * School of Information Science and Engineering, Central South University Changsha, China + + * Weixing Wang and Lian Xu + * College of Physics and Information Engineering, Fuzhou University, Fuzhou, China + + * inspired from 2003 Fabien Pelisson + +*/ + +#include +#include +#include +#include +#include "rtengine.h" +#include "gauss.h" +#include "rawimagesource.h" +#include "improcfun.h" +#include "opthelper.h" +#define MAX_RETINEX_SCALES 8 +#define clipretinex( val, minv, maxv ) (( val = (val < minv ? minv : val ) ) > maxv ? maxv : val ) + +#define med3(a0,a1,a2,a3,a4,a5,a6,a7,a8,median) { \ +pp[0]=a0; pp[1]=a1; pp[2]=a2; pp[3]=a3; pp[4]=a4; pp[5]=a5; pp[6]=a6; pp[7]=a7; pp[8]=a8; \ +PIX_SORT(pp[1],pp[2]); PIX_SORT(pp[4],pp[5]); PIX_SORT(pp[7],pp[8]); \ +PIX_SORT(pp[0],pp[1]); PIX_SORT(pp[3],pp[4]); PIX_SORT(pp[6],pp[7]); \ +PIX_SORT(pp[1],pp[2]); PIX_SORT(pp[4],pp[5]); PIX_SORT(pp[7],pp[8]); \ +PIX_SORT(pp[0],pp[3]); PIX_SORT(pp[5],pp[8]); PIX_SORT(pp[4],pp[7]); \ +PIX_SORT(pp[3],pp[6]); PIX_SORT(pp[1],pp[4]); PIX_SORT(pp[2],pp[5]); \ +PIX_SORT(pp[4],pp[7]); PIX_SORT(pp[4],pp[2]); PIX_SORT(pp[6],pp[4]); \ +PIX_SORT(pp[4],pp[2]); median=pp[4];} //pp4 = median + +namespace rtengine +{ + +extern const Settings* settings; + +static float RetinexScales[MAX_RETINEX_SCALES]; + +void retinex_scales( float* scales, int nscales, int mode, int s, float high) +{ + if ( nscales == 1 ) { + scales[0] = (float)s / 2.f; + } else if (nscales == 2) { + scales[1] = (float) s / 2.f; + scales[0] = (float) s; + } else { + float size_step = (float) s / (float) nscales; + + if (mode == 0) { + for (int i = 0; i < nscales; ++i ) { + scales[nscales - i - 1] = 2.0f + (float)i * size_step; + } + } else if (mode == 1) { + size_step = (float)log(s - 2.0f) / (float) nscales; + + for (int i = 0; i < nscales; ++i ) { + scales[nscales - i - 1] = 2.0f + (float)pow (10.f, (i * size_step) / log (10.f)); + } + } else if (mode == 2) { + size_step = (float) log(s - 2.0f) / (float) nscales; + + for ( int i = 0; i < nscales; ++i ) { + scales[i] = s - (float)pow (10.f, (i * size_step) / log (10.f)); + } + } else if (mode == 3) { + size_step = (float) log(s - 2.0f) / (float) nscales; + + for ( int i = 0; i < nscales; ++i ) { + scales[i] = high * s - (float)pow (10.f, (i * size_step) / log (10.f)); + } + } + } +} +void mean_stddv2( float **dst, float &mean, float &stddv, int W_L, int H_L, float &maxtr, float &mintr) +{ + // summation using double precision to avoid too large summation error for large pictures + double vsquared = 0.f; + double sum = 0.f; + maxtr = -999999.f; + mintr = 999999.f; +#ifdef _OPENMP + #pragma omp parallel +#endif + { + float lmax = -999999.f, lmin = 999999.f; +#ifdef _OPENMP + #pragma omp for reduction(+:sum,vsquared) nowait // this leads to differences, but parallel summation is more accurate +#endif + + for (int i = 0; i < H_L; i++ ) + for (int j = 0; j < W_L; j++) { + sum += dst[i][j]; + vsquared += (dst[i][j] * dst[i][j]); + + if ( dst[i][j] > lmax) { + lmax = dst[i][j] ; + } + + if ( dst[i][j] < lmin) { + lmin = dst[i][j] ; + } + + } + +#ifdef _OPENMP + #pragma omp critical +#endif + { + maxtr = maxtr > lmax ? maxtr : lmax; + mintr = mintr < lmin ? mintr : lmin; + } + + } + mean = sum / (double) (W_L * H_L); + vsquared /= (double) W_L * H_L; + stddv = ( vsquared - (mean * mean) ); + stddv = (float)sqrt(stddv); +} + + + + + + +void mean_stddv( float **dst, float &mean, float &stddv, int W_L, int H_L, const float factor, float &maxtr, float &mintr) + +{ + // summation using double precision to avoid too large summation error for large pictures + double vsquared = 0.f; + double sum = 0.f; + maxtr = 0.f; + mintr = 0.f; +#ifdef _OPENMP + #pragma omp parallel +#endif + { + float lmax = 0.f, lmin = 0.f; + +#ifdef _OPENMP + #pragma omp for reduction(+:sum,vsquared) // this can lead to differences, but parallel summation is more accurate +#endif + + for (int i = 0; i < H_L; i++ ) + for (int j = 0; j < W_L; j++) { + sum += dst[i][j]; + vsquared += (dst[i][j] * dst[i][j]); + + if ( dst[i][j] > lmax) { + lmax = dst[i][j] ; + } + + if ( dst[i][j] < lmin) { + lmin = dst[i][j] ; + } + + } + +#ifdef _OPENMP + #pragma omp critical +#endif + { + maxtr = maxtr > lmax ? maxtr : lmax; + mintr = mintr < lmin ? mintr : lmin; + } + + } + + sum *= factor; + maxtr *= factor; + mintr *= factor; + vsquared *= (factor * factor); + mean = sum / (float) (W_L * H_L); + vsquared /= (float) W_L * H_L; + stddv = ( vsquared - (mean * mean) ); + stddv = (float)sqrt(stddv); +} + +void RawImageSource::MSR(float** luminance, float** originalLuminance, float **exLuminance, int width, int height, RetinexParams deh, const RetinextransmissionCurve & dehatransmissionCurve, float &minCD, float &maxCD, float &mini, float &maxi, float &Tmean, float &Tsigma, float &Tmin, float &Tmax) +{ + if (deh.enabled) {//enabled + float mean, stddv, maxtr, mintr; + // float mini, delta, maxi; + float delta; + float eps = 2.f; + bool useHsl = deh.retinexcolorspace == "HSLLOG"; + bool useHslLin = deh.retinexcolorspace == "HSLLIN"; + float gain2 = (float) deh.gain / 100.f; //def =1 not use + gain2 = useHslLin ? gain2 * 0.5f : gain2; + float offse = (float) deh.offs; //def = 0 not use + int scal = deh.scal; //def=3 + scal = 3;//disabled scal + int nei = (int) 2.8f * deh.neigh; //def = 220 + float vart = (float)deh.vart / 100.f;//variance + float strength = (float) deh.str / 100.f; // Blend with original L channel data + float limD = (float) deh.limd; + limD = pow(limD, 1.7f);//about 2500 enough + limD *= useHslLin ? 10.f : 1.f; + float ilimD = 1.f / limD; + int moderetinex = 2; // default to 2 ( deh.retinexMethod == "high" ) + float hig = ((float) deh.highl) / 100.f; + bool higplus = false ; + float elogt; + float hl = deh.baselog; + + if(hl >= 2.71828f) { + elogt = 2.71828f + SQR(SQR(hl - 2.71828f)); + } else { + elogt = hl; + } + + elogt = 2.71828f;//disabled baselog + FlatCurve* shcurve = NULL;//curve L=f(H) + bool lhutili = false; + + if (deh.enabled) { + shcurve = new FlatCurve(deh.lhcurve); + + if (!shcurve || shcurve->isIdentity()) { + if (shcurve) { + delete shcurve; + shcurve = NULL; + } + } else { + lhutili = true; + } + } + + + if(deh.retinexMethod == "highliplus") { + higplus = true; + } + + if (deh.retinexMethod == "uni") { + moderetinex = 0; + } + + if (deh.retinexMethod == "low") { + moderetinex = 1; + } + + if (deh.retinexMethod == "highli" || deh.retinexMethod == "highliplus") { + moderetinex = 3; + } + + float aahi = 49.f / 99.f; ////reduce sensibility 50% + float bbhi = 1.f - aahi; + float high; + high = bbhi + aahi * (float) deh.highl; + retinex_scales( RetinexScales, scal, moderetinex, nei, high ); + + int H_L = height; + int W_L = width; + + float *src[H_L] ALIGNED16; + float *srcBuffer = new float[H_L * W_L]; + + for (int i = 0; i < H_L; i++) { + src[i] = &srcBuffer[i * W_L]; + } + +#ifdef _OPENMP + #pragma omp parallel for +#endif + + for (int i = 0; i < H_L; i++) + for (int j = 0; j < W_L; j++) { + src[i][j] = luminance[i][j] + eps; + luminance[i][j] = 0.f; + } + + float *out[H_L] ALIGNED16; + float *outBuffer = new float[H_L * W_L]; + + for (int i = 0; i < H_L; i++) { + out[i] = &outBuffer[i * W_L]; + } + + const float logBetaGain = xlogf(16384.f); + const float pond = logBetaGain / (float) scal; + +#ifdef _OPENMP + #pragma omp parallel +#endif + { + for ( int scale = scal - 1; scale >= 0; scale-- ) { + if(scale == scal - 1) { // probably large sigma. Use double gauss with sigma divided by sqrt(2.0) + gaussianBlur (src, out, W_L, H_L, RetinexScales[scale], true); + } else { // reuse result of last iteration + gaussianBlur (out, out, W_L, H_L, sqrtf(SQR(RetinexScales[scale]) - SQR(RetinexScales[scale + 1]))); + } + +#ifdef __SSE2__ + vfloat pondv = F2V(pond); + vfloat limMinv = F2V(ilimD); + vfloat limMaxv = F2V(limD); + vfloat elogtv = F2V(elogt); + +#endif +#ifdef _OPENMP + #pragma omp for +#endif + + for (int i = 0; i < H_L; i++) { + int j = 0; + +#ifdef __SSE2__ + + if(useHslLin) { + for (; j < W_L - 3; j += 4) { + _mm_storeu_ps(&luminance[i][j], LVFU(luminance[i][j]) + pondv * (LIMV(LVFU(src[i][j]) / LVFU(out[i][j]), limMinv, limMaxv) )); + } + } else { + for (; j < W_L - 3; j += 4) { + _mm_storeu_ps(&luminance[i][j], LVFU(luminance[i][j]) + pondv * xlogf(LIMV(LVFU(src[i][j]) / LVFU(out[i][j]), limMinv, limMaxv) ) / xlogf(elogtv)); + } + } + +#endif + + if(useHslLin) { + for (; j < W_L; j++) { + luminance[i][j] += pond * (LIM(src[i][j] / out[i][j], ilimD, limD)); + } + } else { + for (; j < W_L; j++) { + luminance[i][j] += pond * xlogf(LIM(src[i][j] / out[i][j], ilimD, limD)) / log(elogt); // /logt ? + } + } + } + } + } + + delete [] outBuffer; + delete [] srcBuffer; + + mean = 0.f; + stddv = 0.f; + // I call mean_stddv2 instead of mean_stddv ==> logBetaGain + + mean_stddv2( luminance, mean, stddv, W_L, H_L, maxtr, mintr); +// printf("mean=%f std=%f delta=%f maxtr=%f mintr=%f\n", mean, stddv, delta, maxtr, mintr); + + // mean_stddv( luminance, mean, stddv, W_L, H_L, logBetaGain, maxtr, mintr); + if (dehatransmissionCurve && mean != 0.f && stddv != 0.f) { //if curve + float asig = 0.166666f / stddv; + float bsig = 0.5f - asig * mean; + float amax = 0.333333f / (maxtr - mean - stddv); + float bmax = 1.f - amax * maxtr; + float amin = 0.333333f / (mean - stddv - mintr); + float bmin = -amin * mintr; + + asig *= 500.f; + bsig *= 500.f; + amax *= 500.f; + bmax *= 500.f; + amin *= 500.f; + bmin *= 500.f; +#ifdef _OPENMP + #pragma omp parallel +#endif + { + float absciss; +#ifdef _OPENMP + #pragma omp for schedule(dynamic,16) +#endif + + for (int i = 0; i < H_L; i++ ) + for (int j = 0; j < W_L; j++) { //for mintr to maxtr evalate absciss in function of original transmission + if (LIKELY(fabsf(luminance[i][j] - mean) < stddv)) { + absciss = asig * luminance[i][j] + bsig; + } else if (luminance[i][j] >= mean) { + absciss = amax * luminance[i][j] + bmax; + } else { /*if(luminance[i][j] <= mean - stddv)*/ + absciss = amin * luminance[i][j] + bmin; + } + + luminance[i][j] *= (-1.f + 4.f * dehatransmissionCurve[absciss]); //new transmission + } + } + + // median filter on transmission ==> reduce artifacts + if (deh.medianmap) { + int wid = W_L; + int hei = H_L; + float *tmL[hei] ALIGNED16; + float *tmLBuffer = new float[wid * hei]; + int borderL = 1; + + for (int i = 0; i < hei; i++) { + tmL[i] = &tmLBuffer[i * wid]; + } + +#ifdef _OPENMP + #pragma omp parallel for +#endif + + for (int i = borderL; i < hei - borderL; i++) { + float pp[9], temp; + + for (int j = borderL; j < wid - borderL; j++) { + med3(luminance[i][j], luminance[i - 1][j], luminance[i + 1][j], luminance[i][j + 1], luminance[i][j - 1], luminance[i - 1][j - 1], luminance[i - 1][j + 1], luminance[i + 1][j - 1], luminance[i + 1][j + 1], tmL[i][j]); //3x3 + } + } + +#ifdef _OPENMP + #pragma omp parallel for +#endif + + for (int i = borderL; i < hei - borderL; i++ ) { + for (int j = borderL; j < wid - borderL; j++) { + luminance[i][j] = tmL[i][j]; + } + } + + delete [] tmLBuffer; + + } + + // I call mean_stddv2 instead of mean_stddv ==> logBetaGain + // mean_stddv( luminance, mean, stddv, W_L, H_L, 1.f, maxtr, mintr); + mean_stddv2( luminance, mean, stddv, W_L, H_L, maxtr, mintr); + + } + + float epsil = 0.1f; + + mini = mean - vart * stddv; + + if (mini < mintr) { + mini = mintr + epsil; + } + + maxi = mean + vart * stddv; + + if (maxi > maxtr) { + maxi = maxtr - epsil; + } + + delta = maxi - mini; + // printf("maxi=%f mini=%f mean=%f std=%f delta=%f maxtr=%f mintr=%f\n", maxi, mini, mean, stddv, delta, maxtr, mintr); + + if ( !delta ) { + delta = 1.0f; + } + + float cdfactor = gain2 * 32768.f / delta; + maxCD = -9999999.f; + minCD = 9999999.f; + + + + +#ifdef _OPENMP + #pragma omp parallel +#endif + { + float cdmax = -999999.f, cdmin = 999999.f; + +#ifdef _OPENMP + #pragma omp for +#endif + + for ( int i = 0; i < H_L; i ++ ) + for (int j = 0; j < W_L; j++) { + // float cd = cdfactor * ( luminance[i][j] * logBetaGain - mini ) + offse; + float cd = cdfactor * ( luminance[i][j] - mini ) + offse; + + if(cd > cdmax) { + cdmax = cd; + } + + if(cd < cdmin) { + cdmin = cd; + } + + float str = strength; + + if(lhutili) { // S=f(H) + { + float HH = exLuminance[i][j]; + float valparam; + + if(useHsl || useHslLin) { + valparam = float((shcurve->getVal(HH) - 0.5f)); + } else { + valparam = float((shcurve->getVal(Color::huelab_to_huehsv2(HH)) - 0.5f)); + } + + str *= (1.f + 2.f * valparam); + } + } + + // if(exLuminance[i][j] > 65535.f*hig && higplus) str *= hig; + luminance[i][j] = clipretinex( cd, 0.f, 32768.f ) * str + (1.f - str) * originalLuminance[i][j]; + } + +#ifdef _OPENMP + #pragma omp critical +#endif + { + maxCD = maxCD > cdmax ? maxCD : cdmax; + minCD = minCD < cdmin ? minCD : cdmin; + } + + } + // printf("cdmin=%f cdmax=%f\n",minCD, maxCD); + Tmean = mean; + Tsigma = stddv; + Tmin = mintr; + Tmax = maxtr; + + if (shcurve) { + delete shcurve; + } + + } +} + +} diff --git a/rtengine/ipsharpen.cc b/rtengine/ipsharpen.cc index 302c07655..928ffe5bd 100644 --- a/rtengine/ipsharpen.cc +++ b/rtengine/ipsharpen.cc @@ -140,16 +140,13 @@ void ImProcFunctions::deconvsharpening (LabImage* lab, float** b2, SharpeningPar #pragma omp parallel #endif { - AlignedBufferMP buffer(max(W, H)); - float damping = sharpenParam.deconvdamping / 5.0; bool needdamp = sharpenParam.deconvdamping > 0; for (int k = 0; k < sharpenParam.deconviter; k++) { // apply blur function (gaussian blur) - gaussHorizontal (tmpI, tmp, buffer, W, H, sharpenParam.deconvradius / scale); - gaussVertical (tmp, tmp, buffer, W, H, sharpenParam.deconvradius / scale); + gaussianBlur (tmpI, tmp, W, H, sharpenParam.deconvradius / scale); if (!needdamp) { #ifdef _OPENMP @@ -165,8 +162,7 @@ void ImProcFunctions::deconvsharpening (LabImage* lab, float** b2, SharpeningPar dcdamping (tmp, lab->L, damping, W, H); } - gaussHorizontal (tmp, tmp, buffer, W, H, sharpenParam.deconvradius / scale); - gaussVertical (tmp, tmp, buffer, W, H, sharpenParam.deconvradius / scale); + gaussianBlur (tmp, tmp, W, H, sharpenParam.deconvradius / scale); #ifdef _OPENMP #pragma omp for @@ -238,17 +234,11 @@ void ImProcFunctions::sharpening (LabImage* lab, float** b2, SharpeningParams &s #endif { - - AlignedBufferMP buffer(max(W, H)); - if (sharpenParam.edgesonly == false) { - - gaussHorizontal (lab->L, b2, buffer, W, H, sharpenParam.radius / scale); - gaussVertical (b2, b2, buffer, W, H, sharpenParam.radius / scale); + gaussianBlur (lab->L, b2, W, H, sharpenParam.radius / scale); } else { bilateral (lab->L, (float**)b3, b2, W, H, sharpenParam.edges_radius / scale, sharpenParam.edges_tolerance, multiThread); - gaussHorizontal (b3, b2, buffer, W, H, sharpenParam.radius / scale); - gaussVertical (b2, b2, buffer, W, H, sharpenParam.radius / scale); + gaussianBlur (b3, b2, W, H, sharpenParam.radius / scale); } float** base = lab->L; @@ -1390,17 +1380,13 @@ void ImProcFunctions::deconvsharpeningcam (CieImage* ncie, float** b2) #pragma omp parallel #endif { - AlignedBufferMP buffer(max(W, H)); - - float damping = params->sharpening.deconvdamping / 5.0; bool needdamp = params->sharpening.deconvdamping > 0; for (int k = 0; k < params->sharpening.deconviter; k++) { // apply blur function (gaussian blur) - gaussHorizontal (tmpI, tmp, buffer, W, H, params->sharpening.deconvradius / scale); - gaussVertical (tmp, tmp, buffer, W, H, params->sharpening.deconvradius / scale); + gaussianBlur (tmpI, tmp, W, H, params->sharpening.deconvradius / scale); if (!needdamp) { #ifdef _OPENMP @@ -1416,8 +1402,7 @@ void ImProcFunctions::deconvsharpeningcam (CieImage* ncie, float** b2) dcdamping (tmp, ncie->sh_p, damping, W, H); } - gaussHorizontal (tmp, tmp, buffer, W, H, params->sharpening.deconvradius / scale); - gaussVertical (tmp, tmp, buffer, W, H, params->sharpening.deconvradius / scale); + gaussianBlur (tmp, tmp, W, H, params->sharpening.deconvradius / scale); #ifdef _OPENMP @@ -1493,17 +1478,11 @@ void ImProcFunctions::sharpeningcam (CieImage* ncie, float** b2) #endif { - - AlignedBufferMP buffer(max(W, H)); - if (params->sharpening.edgesonly == false) { - - gaussHorizontal (ncie->sh_p, b2, buffer, W, H, params->sharpening.radius / scale); - gaussVertical (b2, b2, buffer, W, H, params->sharpening.radius / scale); + gaussianBlur (ncie->sh_p, b2, W, H, params->sharpening.radius / scale); } else { bilateral (ncie->sh_p, (float**)b3, b2, W, H, params->sharpening.edges_radius / scale, params->sharpening.edges_tolerance, multiThread); - gaussHorizontal (b3, b2, buffer, W, H, params->sharpening.radius / scale); - gaussVertical (b2, b2, buffer, W, H, params->sharpening.radius / scale); + gaussianBlur (b3, b2, W, H, params->sharpening.radius / scale); } float** base = ncie->sh_p; diff --git a/rtengine/previewimage.cc b/rtengine/previewimage.cc index b2f76a9ad..86333bc3e 100644 --- a/rtengine/previewimage.cc +++ b/rtengine/previewimage.cc @@ -112,6 +112,9 @@ PreviewImage::PreviewImage (const Glib::ustring &fname, const Glib::ustring &ext rtengine::Image8 *output = NULL; const unsigned char *data = NULL; int fw, fh; + LUTf cdcurve; + bool dehacontlutili = false; + procparams::ProcParams params; /*rtengine::RAWParams raw; rtengine::LensProfParams lensProf; diff --git a/rtengine/procevents.h b/rtengine/procevents.h index cb2868dd6..4dbbad07c 100644 --- a/rtengine/procevents.h +++ b/rtengine/procevents.h @@ -22,6 +22,10 @@ namespace rtengine { + + + +// Aligned so the first entry starts on line 30 enum ProcEvent { EvPhotoLoaded = 0, EvProfileLoaded = 1, @@ -226,7 +230,6 @@ enum ProcEvent { EvDPDNredchro = 200, EvDPDNbluechro = 201, EvDPDNmet = 202, -// EvDPDNperform=201, EvDemosaicLMMSEIter = 203, EvCATbadpix = 204, EvCATAutoAdap = 205, @@ -278,15 +281,13 @@ enum ProcEvent { EvDirPyrEqualizerSkin = 251, EvDirPyrEqlgamutlab = 252, EvDirPyrEqualizerHueskin = 253, -// EvDirPyrEqualizeralg=254, - EvDPDNmedian = 254, + EvDPDNmedian = 254, // EvDirPyrEqualizeralg=254, EvDPDNmedmet = 255, EvColorToningEnabled = 256, EvColorToningColor = 257, EvColorToningOpacity = 258, - EvColorToningCLCurve = 259, + EvColorToningCLCurve = 259, // EvColorToningTwocolor=259, EvColorToningMethod = 260, -// EvColorToningTwocolor=259, EvColorToningLLCurve = 261, EvColorToningredlow = 262, EvColorToninggreenlow = 263, @@ -432,9 +433,29 @@ enum ProcEvent { EvWavedgeampli = 403, EvWavlev3nois = 404, EvWavNPmet = 405, + EvretinexMethod = 406, + EvLneigh = 407, + EvLgain = 408, + EvLoffs = 409, + EvLstr = 410, + EvLscal = 411, + EvLvart = 412, + EvLCDCurve = 413, + EvRetinextransmission = 414, + EvRetinexEnabled = 415, + EvRetinexmedianmap = 416, + EvLlimd = 417, + EvretinexColorSpace = 418, // 418 if we want a separate history entry "Retinex - Color space", 406 if we don't + EvLCDHCurve = 419, + Evretinexgamma = 420, + EvLgam = 421, + EvLslope = 422, + EvLhighl = 423, + EvLbaselog = 424, +// EvLgrbl = 425, + EvRetinexlhcurve = 425, NUMOFEVENTS }; } #endif - diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index 32506cb0c..eaf90d5c2 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -116,6 +116,62 @@ void CropParams::mapToResized(int resizedWidth, int resizedHeight, int scale, in } } +RetinexParams::RetinexParams () +{ + setDefaults (); +} + +void RetinexParams::getDefaulttransmissionCurve(std::vector &curve) +{ + double v[12] = { 0.00, 0.34, 0.35, 0.35, + 0.60, 0.75, 0.35, 0.35, + 1.00, 0.50, 0.35, 0.35, + }; + + + curve.resize(13); + curve.at(0 ) = double(FCT_MinMaxCPoints); + + for (size_t i = 1; i < curve.size(); ++i) { + curve.at(i) = v[i - 1]; + } +} + +void RetinexParams::setDefaults() +{ + enabled = false; + str = 20; + scal = 3; + gam = 1.30; + slope = 3.; + neigh = 80; + gain = 50; + offs = 0; + vart = 200; + limd = 8; + highl = 10; + baselog = 2.71828; +// grbl = 50; + retinexMethod = "high"; + retinexcolorspace = "Lab"; + gammaretinex = "none"; + medianmap = false; + cdcurve.clear(); + cdcurve.push_back(DCT_Linear); + cdHcurve.clear(); + cdHcurve.push_back(DCT_Linear); + lhcurve.clear(); + lhcurve.push_back(DCT_Linear); + + getDefaulttransmissionCurve(transmissionCurve); +} + +void RetinexParams::getCurves(RetinextransmissionCurve &transmissionCurveLUT) const +{ + transmissionCurveLUT.Set(this->transmissionCurve); +} + + ColorToningParams::ColorToningParams () : hlColSat(60, 80, false), shadowsColSat(80, 208, false) { setDefaults(); @@ -1378,6 +1434,98 @@ int ProcParams::save (Glib::ustring fname, Glib::ustring fname2, bool fnameAbsol keyFile.set_double_list("Exposure", "Curve2", tcurve); } + //save retinex + + if (!pedited || pedited->retinex.str) { + keyFile.set_integer ("Retinex", "Str", retinex.str); + } + + if (!pedited || pedited->retinex.scal) { + keyFile.set_integer ("Retinex", "Scal", retinex.scal); + } + + if (!pedited || pedited->retinex.gam) { + keyFile.set_double ("Retinex", "Gam", retinex.gam); + } + + if (!pedited || pedited->retinex.slope) { + keyFile.set_double ("Retinex", "Slope", retinex.slope); + } + + if (!pedited || pedited->retinex.enabled) { + keyFile.set_boolean ("Retinex", "Enabled", retinex.enabled); + } + + if (!pedited || pedited->retinex.medianmap) { + keyFile.set_boolean ("Retinex", "Median", retinex.medianmap); + } + + + + if (!pedited || pedited->retinex.neigh) { + keyFile.set_integer ("Retinex", "Neigh", retinex.neigh); + } + + if (!pedited || pedited->retinex.gain) { + keyFile.set_integer ("Retinex", "Gain", retinex.gain); + } + + if (!pedited || pedited->retinex.offs) { + keyFile.set_integer ("Retinex", "Offs", retinex.offs); + } + + if (!pedited || pedited->retinex.vart) { + keyFile.set_integer ("Retinex", "Vart", retinex.vart); + } + + if (!pedited || pedited->retinex.limd) { + keyFile.set_integer ("Retinex", "Limd", retinex.limd); + } + + if (!pedited || pedited->retinex.highl) { + keyFile.set_integer ("Retinex", "highl", retinex.highl); + } + + if (!pedited || pedited->retinex.baselog) { + keyFile.set_double ("Retinex", "baselog", retinex.baselog); + } + +// if (!pedited || pedited->retinex.grbl) { +// keyFile.set_integer ("Retinex", "grbl", retinex.grbl); +// } + + if (!pedited || pedited->retinex.retinexMethod) { + keyFile.set_string ("Retinex", "RetinexMethod", retinex.retinexMethod); + } + + if (!pedited || pedited->retinex.retinexcolorspace) { + keyFile.set_string ("Retinex", "Retinexcolorspace", retinex.retinexcolorspace); + } + + if (!pedited || pedited->retinex.gammaretinex) { + keyFile.set_string ("Retinex", "Gammaretinex", retinex.gammaretinex); + } + + if (!pedited || pedited->retinex.cdcurve) { + Glib::ArrayHandle cdcurve = retinex.cdcurve; + keyFile.set_double_list("Retinex", "CDCurve", cdcurve); + } + + if (!pedited || pedited->retinex.cdHcurve) { + Glib::ArrayHandle cdHcurve = retinex.cdHcurve; + keyFile.set_double_list("Retinex", "CDHCurve", cdHcurve); + } + + if (!pedited || pedited->retinex.lhcurve) { + Glib::ArrayHandle lhcurve = retinex.lhcurve; + keyFile.set_double_list("Retinex", "LHCurve", lhcurve); + } + + if (!pedited || pedited->retinex.transmissionCurve) { + Glib::ArrayHandle transmissionCurve = retinex.transmissionCurve; + keyFile.set_double_list("Retinex", "TransmissionCurve", transmissionCurve); + } + // save channel mixer if (!pedited || pedited->chmixer.red[0] || pedited->chmixer.red[1] || pedited->chmixer.red[2]) { Glib::ArrayHandle rmix (chmixer.red, 3, Glib::OWNERSHIP_NONE); @@ -3636,6 +3784,179 @@ int ProcParams::load (Glib::ustring fname, ParamsEdited* pedited) } } + //load retinex + if (keyFile.has_group ("Retinex")) { + + if (keyFile.has_key ("Retinex", "Median")) { + retinex.medianmap = keyFile.get_boolean ("Retinex", "Median"); + + if (pedited) { + pedited->retinex.medianmap = true; + } + } + + if (keyFile.has_key ("Retinex", "Retinexmet")) { + retinex.retinexMethod = keyFile.get_string ("Retinex", "Retinexmet"); + + if (pedited) { + pedited->retinex.retinexMethod = true; + } + } + + if (keyFile.has_key ("Retinex", "Retinexcolorspace")) { + retinex.retinexcolorspace = keyFile.get_string ("Retinex", "Retinexcolorspace"); + + if (pedited) { + pedited->retinex.retinexcolorspace = true; + } + } + + if (keyFile.has_key ("Retinex", "Gammaretinex")) { + retinex.gammaretinex = keyFile.get_string ("Retinex", "Gammaretinex"); + + if (pedited) { + pedited->retinex.gammaretinex = true; + } + } + + if (keyFile.has_key ("Retinex", "Enabled")) { + retinex.enabled = keyFile.get_boolean ("Retinex", "Enabled"); + + if (pedited) { + pedited->retinex.enabled = true; + } + } + + if (keyFile.has_key ("Retinex", "Neigh")) { + retinex.neigh = keyFile.get_integer ("Retinex", "Neigh"); + + if (pedited) { + pedited->retinex.neigh = true; + } + } + + if (keyFile.has_key ("Retinex", "Str")) { + retinex.str = keyFile.get_integer ("Retinex", "Str"); + + if (pedited) { + pedited->retinex.str = true; + } + } + + if (keyFile.has_key ("Retinex", "Scal")) { + retinex.scal = keyFile.get_integer ("Retinex", "Scal"); + + if (pedited) { + pedited->retinex.scal = true; + } + } + + if (keyFile.has_key ("Retinex", "Gam")) { + retinex.gam = keyFile.get_double ("Retinex", "Gam"); + + if (pedited) { + pedited->retinex.gam = true; + } + } + + if (keyFile.has_key ("Retinex", "Slope")) { + retinex.slope = keyFile.get_double ("Retinex", "Slope"); + + if (pedited) { + pedited->retinex.slope = true; + } + } + + if (keyFile.has_key ("Retinex", "Gain")) { + retinex.gain = keyFile.get_integer ("Retinex", "Gain"); + + if (pedited) { + pedited->retinex.gain = true; + } + } + + if (keyFile.has_key ("Retinex", "Offs")) { + retinex.offs = keyFile.get_integer ("Retinex", "Offs"); + + if (pedited) { + pedited->retinex.offs = true; + } + } + + if (keyFile.has_key ("Retinex", "Vart")) { + retinex.vart = keyFile.get_integer ("Retinex", "Vart"); + + if (pedited) { + pedited->retinex.vart = true; + } + } + + if (keyFile.has_key ("Retinex", "Limd")) { + retinex.limd = keyFile.get_integer ("Retinex", "Limd"); + + if (pedited) { + pedited->retinex.limd = true; + } + } + + if (keyFile.has_key ("Retinex", "highl")) { + retinex.highl = keyFile.get_integer ("Retinex", "highl"); + + if (pedited) { + pedited->retinex.highl = true; + } + } + + if (keyFile.has_key ("Retinex", "baselog")) { + retinex.baselog = keyFile.get_double ("Retinex", "baselog"); + + if (pedited) { + pedited->retinex.baselog = true; + } + } + + /* if (keyFile.has_key ("Retinex", "grbl")) { + retinex.grbl = keyFile.get_integer ("Retinex", "grbl"); + + if (pedited) { + pedited->retinex.grbl = true; + } + } + */ + if (keyFile.has_key ("Retinex", "CDCurve")) { + retinex.cdcurve = keyFile.get_double_list ("Retinex", "CDCurve"); + + if (pedited) { + pedited->retinex.cdcurve = true; + } + } + + if (keyFile.has_key ("Retinex", "CDHCurve")) { + retinex.cdHcurve = keyFile.get_double_list ("Retinex", "CDHCurve"); + + if (pedited) { + pedited->retinex.cdHcurve = true; + } + } + + if (keyFile.has_key ("Retinex", "LHCurve")) { + retinex.lhcurve = keyFile.get_double_list ("Retinex", "LHCurve"); + + if (pedited) { + pedited->retinex.lhcurve = true; + } + } + + if (keyFile.has_key ("Retinex", "TransmissionCurve")) { + retinex.transmissionCurve = keyFile.get_double_list ("Retinex", "TransmissionCurve"); + + if (pedited) { + pedited->retinex.transmissionCurve = true; + } + } + } + + // load luma curve if (keyFile.has_group ("Luminance Curve")) { if (keyFile.has_key ("Luminance Curve", "Brightness")) { @@ -6995,6 +7316,27 @@ bool ProcParams::operator== (const ProcParams& other) && toneCurve.curveMode2 == other.toneCurve.curveMode2 && toneCurve.hrenabled == other.toneCurve.hrenabled && toneCurve.method == other.toneCurve.method + && retinex.cdcurve == other.retinex.cdcurve + && retinex.cdHcurve == other.retinex.cdHcurve + && retinex.lhcurve == other.retinex.lhcurve + && retinex.transmissionCurve == other.retinex.transmissionCurve + && retinex.str == other.retinex.str + && retinex.scal == other.retinex.scal + && retinex.gam == other.retinex.gam + && retinex.slope == other.retinex.slope + && retinex.neigh == other.retinex.neigh + && retinex.gain == other.retinex.gain + && retinex.limd == other.retinex.limd + && retinex.highl == other.retinex.highl + && retinex.baselog == other.retinex.baselog +// && retinex.grbl == other.retinex.grbl + && retinex.offs == other.retinex.offs + && retinex.retinexMethod == other.retinex.retinexMethod + && retinex.retinexcolorspace == other.retinex.retinexcolorspace + && retinex.gammaretinex == other.retinex.gammaretinex + && retinex.vart == other.retinex.vart + && retinex.medianmap == other.retinex.medianmap + && retinex.enabled == other.retinex.enabled && labCurve.lcurve == other.labCurve.lcurve && labCurve.acurve == other.labCurve.acurve && labCurve.bcurve == other.labCurve.bcurve diff --git a/rtengine/procparams.h b/rtengine/procparams.h index ad8c963e8..d46fd4181 100644 --- a/rtengine/procparams.h +++ b/rtengine/procparams.h @@ -39,6 +39,7 @@ class WavOpacityCurveRG; class WavOpacityCurveBY; class WavOpacityCurveW; class WavOpacityCurveWL; +class RetinextransmissionCurve; namespace procparams { @@ -260,6 +261,40 @@ public: void setDefaults(); static bool HLReconstructionNecessary(LUTu &histRedRaw, LUTu &histGreenRaw, LUTu &histBlueRaw); }; +/** + * Parameters of Retinex + */ +class RetinexParams +{ + +public: + bool enabled; + std::vector cdcurve; + std::vector cdHcurve; + std::vector lhcurve; + std::vector transmissionCurve; + int str; + int scal; + double gam; + double slope; + int neigh; + int gain; + int offs; + Glib::ustring retinexMethod; + Glib::ustring retinexcolorspace; + Glib::ustring gammaretinex; + int vart; + int limd; + int highl; + double baselog; +// int grbl; + bool medianmap; + RetinexParams (); + void setDefaults(); + void getCurves(RetinextransmissionCurve &transmissionCurveLUT) const; + + static void getDefaulttransmissionCurve(std::vector &curve); +}; /** @@ -1188,6 +1223,7 @@ class ProcParams public: ToneCurveParams toneCurve; ///< Tone curve parameters LCurveParams labCurve; ///< CIELAB luminance curve parameters + RetinexParams retinex; ///< Retinex parameters RGBCurvesParams rgbCurves; ///< RGB curves parameters ColorToningParams colorToning; ///< Color Toning parameters SharpeningParams sharpening; ///< Sharpening parameters diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index b425a9f88..2c0d8ad2f 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -31,7 +31,6 @@ #include "curves.h" #include "dfmanager.h" #include "ffmanager.h" -#include "slicer.h" #include "../rtgui/options.h" #include "dcp.h" #include "rt_math.h" @@ -40,6 +39,10 @@ #include #endif #include "opthelper.h" +#include "StopWatch.h" +#define clipretinex( val, minv, maxv ) (( val = (val < minv ? minv : val ) ) > maxv ? maxv : val ) +#undef CLIPD +#define CLIPD(a) ((a)>0.0f?((a)<1.0f?(a):1.0f):0.0f) namespace rtengine { @@ -550,7 +553,9 @@ int RawImageSource::interpolateBadPixelsBayer( PixelsMap &bitmapBads ) { static const float eps = 1.f; int counter = 0; +#ifdef _OPENMP #pragma omp parallel for reduction(+:counter) schedule(dynamic,16) +#endif for( int row = 2; row < H - 2; row++ ) { for(int col = 2; col < W - 2; col++ ) { @@ -665,7 +670,9 @@ int RawImageSource::interpolateBadPixelsNColours( PixelsMap &bitmapBads, const i { static const float eps = 1.f; int counter = 0; +#ifdef _OPENMP #pragma omp parallel for reduction(+:counter) schedule(dynamic,16) +#endif for( int row = 2; row < H - 2; row++ ) { for(int col = 2; col < W - 2; col++ ) { @@ -717,7 +724,7 @@ int RawImageSource::interpolateBadPixelsNColours( PixelsMap &bitmapBads, const i } } - if (LIKELY(norm[0] > 0.f)) { // This means, we found at least one pair of valid pixels in the steps above, likelyhood of this case is about 99.999% + if (LIKELY(norm[0] > 0.f)) { // This means, we found at least one pair of valid pixels in the steps above, likelihood of this case is about 99.999% for(int c = 0; c < colours; c++) { rawData[row][col * colours + c] = wtdsum[c] / (2.f * norm[c]); //gradient weighted average, Factor of 2.f is an optimization to avoid multiplications in former steps } @@ -759,13 +766,15 @@ int RawImageSource::interpolateBadPixelsNColours( PixelsMap &bitmapBads, const i return counter; // Number of interpolated pixels. } /* interpolateBadPixelsXtrans: correct raw pixels looking at the bitmap - * takes into consideration if there are multiple bad pixels in the neighborhood + * takes into consideration if there are multiple bad pixels in the neighbourhood */ int RawImageSource::interpolateBadPixelsXtrans( PixelsMap &bitmapBads ) { static const float eps = 1.f; int counter = 0; +#ifdef _OPENMP #pragma omp parallel for reduction(+:counter) schedule(dynamic,16) +#endif for( int row = 2; row < H - 2; row++ ) { for(int col = 2; col < W - 2; col++ ) { @@ -787,10 +796,10 @@ int RawImageSource::interpolateBadPixelsXtrans( PixelsMap &bitmapBads ) if(pixelColor == 1) { // green channel. A green pixel can either be a solitary green pixel or a member of a 2x2 square of green pixels if(ri->XTRANSFC(row, col - 1) == ri->XTRANSFC(row, col + 1)) { - // If left and right neighbour have same color, then this is a solitary green pixel - // For these the following pixels will be used for interpolation. Pixel to be interpolated is in center and marked with a P. + // If left and right neighbour have same colour, then this is a solitary green pixel + // For these the following pixels will be used for interpolation. Pixel to be interpolated is in centre and marked with a P. // Pairs of pixels used in this step are numbered. A pair will be used if none of the pixels of the pair is marked bad - // 0 means, the pixel has a different color and will not be used + // 0 means, the pixel has a different colour and will not be used // 0 1 0 2 0 // 3 5 0 6 4 // 0 0 P 0 0 @@ -829,12 +838,14 @@ int RawImageSource::interpolateBadPixelsXtrans( PixelsMap &bitmapBads ) // this is a member of a 2x2 square of green pixels // For these the following pixels will be used for interpolation. Pixel to be interpolated is at position P in the example. // Pairs of pixels used in this step are numbered. A pair will be used if none of the pixels of the pair is marked bad - // 0 means, the pixel has a different color and will not be used + // 0 means, the pixel has a different colour and will not be used // 1 0 0 3 // 0 P 2 0 // 0 2 1 0 // 3 0 0 0 - int offset1 = ri->XTRANSFC(row - 1, col - 1) == ri->XTRANSFC(row + 1, col + 1) ? 1 : -1; // pixels marked 1 in above example. Distance to P is sqrt(2) => weighting is 0.70710678f + + // pixels marked 1 in above example. Distance to P is sqrt(2) => weighting is 0.70710678f + int offset1 = ri->XTRANSFC(row - 1, col - 1) == ri->XTRANSFC(row + 1, col + 1) ? 1 : -1; if( !(bitmapBads.get(col - offset1, row - 1) || bitmapBads.get(col + offset1, row + 1))) { float dirwt = 0.70710678f / ( fabsf( rawData[row - 1][col - offset1] - rawData[row + 1][col + offset1]) + eps); @@ -842,6 +853,7 @@ int RawImageSource::interpolateBadPixelsXtrans( PixelsMap &bitmapBads ) norm += dirwt; } + // pixels marked 2 in above example. Distance to P is 1 => weighting is 1.f int offsety = (ri->XTRANSFC(row - 1, col) != 1 ? 1 : -1); int offsetx = offset1 * offsety; @@ -865,9 +877,9 @@ int RawImageSource::interpolateBadPixelsXtrans( PixelsMap &bitmapBads ) } } else { // red and blue channel. - // Each red or blue pixel has exactly one neigbour of same color in distance 2 and four neighbours of same color which can be reached by a move of a knight in chess. + // Each red or blue pixel has exactly one neighbour of same colour in distance 2 and four neighbours of same colour which can be reached by a move of a knight in chess. // For the distance 2 pixel (marked with an X) we generate a virtual counterpart (marked with a V) - // For red and blue channel following pixels will be used for interpolation. Pixel to be interpolated is in center and marked with a P. + // For red and blue channel following pixels will be used for interpolation. Pixel to be interpolated is in centre and marked with a P. // Pairs of pixels used in this step are numbered except for distance 2 pixels which are marked X and V. A pair will be used if none of the pixels of the pair is marked bad // 0 1 0 0 0 0 0 X 0 0 remaining cases are symmetric // 0 0 0 0 2 1 0 0 0 2 @@ -875,12 +887,12 @@ int RawImageSource::interpolateBadPixelsXtrans( PixelsMap &bitmapBads ) // 0 0 0 0 1 0 0 0 0 0 // 0 2 0 0 0 0 2 V 1 0 - // Find two knight moves landing on a pixel of same color as the pixel to be interpolated. + // Find two knight moves landing on a pixel of same colour as the pixel to be interpolated. // If we look at first and last row of 5x5 square, we will find exactly two knight pixels. - // Additionally we know that the column of this pixel has 1 or -1 horizontal distance to the center pixel + // Additionally we know that the column of this pixel has 1 or -1 horizontal distance to the centre pixel // When we find a knight pixel, we get its counterpart, which has distance (+-3,+-3), where the signs of distance depend on the corner of the found knight pixel. // These pixels are marked 1 or 2 in above examples. Distance to P is sqrt(5) => weighting is 0.44721359f - // The following loop simply scans the four possible places. To keep things simple, it doesn't stop after finding two knight pixels, because it will not find more than two + // The following loop simply scans the four possible places. To keep things simple, it does not stop after finding two knight pixels, because it will not find more than two for(int d1 = -2, offsety = 3; d1 <= 2; d1 += 4, offsety -= 6) { for(int d2 = -1, offsetx = 3; d2 < 1; d2 += 2, offsetx -= 6) { if(ri->XTRANSFC(row + d1, col + d2) == pixelColor) { @@ -926,10 +938,8 @@ int RawImageSource::interpolateBadPixelsXtrans( PixelsMap &bitmapBads ) norm += dirwt; } - if (LIKELY(norm > 0.f)) { // This means, we found at least one pair of valid pixels in the steps above, likelyhood of this case is about 99.999% + if (LIKELY(norm > 0.f)) { // This means, we found at least one pair of valid pixels in the steps above, likelihood of this case is about 99.999% rawData[row][col] = wtdsum / (2.f * norm); //gradient weighted average, Factor of 2.f is an optimization to avoid multiplications in former steps -//#pragma omp critical -// printf("%s Pixel at (col/row) : (%4d/%4d) : Original : %f, interpolated: %f\n",pixelColor == 0 ? "Red " : pixelColor==1 ? "Green" : "Blue ", col-7,row-7,oldval, rawData[row][col]); counter++; } } @@ -940,95 +950,122 @@ int RawImageSource::interpolateBadPixelsXtrans( PixelsMap &bitmapBads ) //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% /* Search for hot or dead pixels in the image and update the map - * For each pixel compare its value to the average of similar color surrounding + * For each pixel compare its value to the average of similar colour surrounding * (Taken from Emil Martinec idea) - * (Optimized by Ingo Weyrich 2013) + * (Optimized by Ingo Weyrich 2013 and 2015) */ -int RawImageSource::findHotDeadPixels( PixelsMap &bpMap, float thresh, bool findHotPixels, bool findDeadPixels ) +SSEFUNCTION int RawImageSource::findHotDeadPixels( PixelsMap &bpMap, float thresh, bool findHotPixels, bool findDeadPixels ) { - float varthresh = (20.0 * (thresh / 100.0) + 1.0 ); - - // counter for dead or hot pixels - int counter = 0; + float varthresh = (20.0 * (thresh / 100.0) + 1.0 ) / 24.f; // allocate temporary buffer float (*cfablur); cfablur = (float (*)) malloc (H * W * sizeof * cfablur); + // counter for dead or hot pixels + int counter = 0; + +#ifdef _OPENMP #pragma omp parallel +#endif { - #pragma omp for +#ifdef _OPENMP + #pragma omp for schedule(dynamic,16) nowait +#endif - for (int i = 0; i < H; i++) { - int iprev, inext, jprev, jnext; - float p[9], temp; + for (int i = 2; i < H - 2; i++) { + float p[9], temp; // we need this for med3x3 macro - if (i < 2) { - iprev = i + 2; - } else { - iprev = i - 2; - } - - if (i > H - 3) { - inext = i - 2; - } else { - inext = i + 2; - } - - for (int j = 0; j < W; j++) { - if (j < 2) { - jprev = j + 2; - } else { - jprev = j - 2; - } - - if (j > W - 3) { - jnext = j - 2; - } else { - jnext = j + 2; - } - - med3x3(rawData[iprev][jprev], rawData[iprev][j], rawData[iprev][jnext], - rawData[i][jprev], rawData[i][j], rawData[i][jnext], - rawData[inext][jprev], rawData[inext][j], rawData[inext][jnext], temp); + for (int j = 2; j < W - 2; j++) { + med3x3(rawData[i - 2][j - 2], rawData[i - 2][j], rawData[i - 2][j + 2], + rawData[i][j - 2], rawData[i][j], rawData[i][j + 2], + rawData[i + 2][j - 2], rawData[i + 2][j], rawData[i + 2][j + 2], temp); cfablur[i * W + j] = rawData[i][j] - temp; } } - #pragma omp for reduction(+:counter) schedule (dynamic,16) + // process borders. Former version calculated the median using mirrored border which does not make sense because the original pixel loses weight + // Setting the difference between pixel and median for border pixels to zero should do the job not worse then former version +#ifdef _OPENMP + #pragma omp single +#endif + { + for(int i = 0; i < 2; i++) { + for(int j = 0; j < W; j++) { + cfablur[i * W + j] = 0.f; + } + } + + for(int i = 2; i < H - 2; i++) { + for(int j = 0; j < 2; j++) { + cfablur[i * W + j] = 0.f; + } + + for(int j = W - 2; j < W; j++) { + cfablur[i * W + j] = 0.f; + } + } + + for(int i = H - 2; i < H; i++) { + for(int j = 0; j < W; j++) { + cfablur[i * W + j] = 0.f; + } + } + } +#ifdef _OPENMP + #pragma omp barrier // barrier because of nowait clause above + + #pragma omp for reduction(+:counter) schedule(dynamic,16) +#endif //cfa pixel heat/death evaluation - for (int rr = 0; rr < H; rr++) { - int top = max(0, rr - 2); - int bottom = min(H - 1, rr + 2); - int rrmWpcc = rr * W; + for (int rr = 2; rr < H - 2; rr++) { + int rrmWpcc = rr * W + 2; - for (int cc = 0; cc < W; cc++, rrmWpcc++) { + for (int cc = 2; cc < W - 2; cc++, rrmWpcc++) { //evaluate pixel for heat/death float pixdev = cfablur[rrmWpcc]; - if((!findDeadPixels) && pixdev <= 0) { + if(pixdev == 0.f) { continue; } - if((!findHotPixels) && pixdev >= 0) { + if((!findDeadPixels) && pixdev < 0) { + continue; + } + + if((!findHotPixels) && pixdev > 0) { continue; } pixdev = fabsf(pixdev); float hfnbrave = -pixdev; - int left = max(0, cc - 2); - int right = min(W - 1, cc + 2); - for (int mm = top; mm <= bottom; mm++) { - int mmmWpnn = mm * W + left; +#ifdef __SSE2__ + // sum up 5*4 = 20 values using SSE + vfloat sum = vabsf(LVFU(cfablur[(rr - 2) * W + cc - 2])) + vabsf(LVFU(cfablur[(rr - 1) * W + cc - 2])); + sum += vabsf(LVFU(cfablur[(rr) * W + cc - 2])); + sum += vabsf(LVFU(cfablur[(rr + 1) * W + cc - 2])); + sum += vabsf(LVFU(cfablur[(rr + 2) * W + cc - 2])); + // horizontally add the values and add the result to hfnbrave + hfnbrave += vhadd(sum); - for (int nn = left; nn <= right; nn++, mmmWpnn++) { - hfnbrave += fabsf(cfablur[mmmWpnn]); + // add remaining 5 values of last column + for (int mm = rr - 2; mm <= rr + 2; mm++) { + hfnbrave += fabsf(cfablur[mm * W + cc + 2]); + } + +#else + + for (int mm = rr - 2; mm <= rr + 2; mm++) { + for (int nn = cc - 2; nn <= cc + 2; nn++) { + hfnbrave += fabsf(cfablur[mm * W + nn]); } } - if (pixdev * ((bottom - top + 1) * (right - left + 1) - 1) > varthresh * hfnbrave) { +#endif + + if (pixdev > varthresh * hfnbrave) { // mark the pixel as "bad" bpMap.set(cc, rr); counter++; @@ -1539,7 +1576,10 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le int totBP = 0; // Hold count of bad pixels to correct if(ri->zeroIsBad()) { // mark all pixels with value zero as bad, has to be called before FF and DF. dcraw sets this flag only for some cameras (mainly Panasonic and Leica) +#ifdef _OPENMP #pragma omp parallel for reduction(+:totBP) +#endif + for(int i = 0; i < H; i++) for(int j = 0; j < W; j++) { if(ri->data[i][j] == 0.f) { @@ -1614,7 +1654,9 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le if (pLCPProf && idata->getFocalLen() > 0.f) { LCPMapper map(pLCPProf, idata->getFocalLen(), idata->getFocalLen35mm(), idata->getFocusDist(), idata->getFNumber(), true, false, W, H, coarse, -1); +#ifdef _OPENMP #pragma omp parallel for +#endif for (int y = 0; y < H; y++) { for (int x = 0; x < W; x++) { @@ -1648,7 +1690,9 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le int ng1 = 0, ng2 = 0, i = 0; double avgg1 = 0., avgg2 = 0.; +#ifdef _OPENMP #pragma omp parallel for default(shared) private(i) reduction(+: ng1, ng2, avgg1, avgg2) +#endif for (i = border; i < H - border; i++) for (int j = border; j < W - border; j++) @@ -1665,7 +1709,9 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le double corrg1 = ((double)avgg1 / ng1 + (double)avgg2 / ng2) / 2.0 / ((double)avgg1 / ng1); double corrg2 = ((double)avgg1 / ng1 + (double)avgg2 / ng2) / 2.0 / ((double)avgg2 / ng2); +#ifdef _OPENMP #pragma omp parallel for default(shared) +#endif for (int i = border; i < H - border; i++) for (int j = border; j < W - border; j++) @@ -1734,7 +1780,6 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le return; } - //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% void RawImageSource::demosaic(const RAWParams &raw) @@ -1788,8 +1833,10 @@ void RawImageSource::demosaic(const RAWParams &raw) t2.set(); + rgbSourceModified = false; + if( settings->verbose ) { if (getSensorType() == ST_BAYER) { printf("Demosaicing Bayer data: %s - %d usec\n", raw.bayersensor.method.c_str(), t2.etime(t1)); @@ -1797,6 +1844,609 @@ void RawImageSource::demosaic(const RAWParams &raw) printf("Demosaicing X-Trans data: %s - %d usec\n", raw.xtranssensor.method.c_str(), t2.etime(t1)); } } +} + + +//void RawImageSource::retinexPrepareBuffers(ColorManagementParams cmp, RetinexParams retinexParams, multi_array2D &conversionBuffer, LUTu &lhist16RETI) +void RawImageSource::retinexPrepareBuffers(ColorManagementParams cmp, RetinexParams retinexParams, multi_array2D &conversionBuffer, LUTu &lhist16RETI) +{ + bool useHsl = (retinexParams.retinexcolorspace == "HSLLOG" || retinexParams.retinexcolorspace == "HSLLIN"); + conversionBuffer[0] (W - 2 * border, H - 2 * border); + conversionBuffer[1] (W - 2 * border, H - 2 * border); + conversionBuffer[2] (W - 2 * border, H - 2 * border); + conversionBuffer[3] (W - 2 * border, H - 2 * border); + + LUTf *retinexgamtab;//gamma before and after Retinex to restore tones + LUTf lutTonereti; + lutTonereti(65536); + + if(retinexParams.gammaretinex == "low") { + retinexgamtab = &(Color::gammatab_115_2); + } else if(retinexParams.gammaretinex == "mid") { + retinexgamtab = &(Color::gammatab_13_2); + } else if(retinexParams.gammaretinex == "hig") { + retinexgamtab = &(Color::gammatab_145_3); + } else if(retinexParams.gammaretinex == "fre") { + double g_a0, g_a1, g_a2, g_a3, g_a4, g_a5; + double pwr = 1.0 / retinexParams.gam; + double gamm = retinexParams.gam; + double ts = retinexParams.slope; + double gamm2 = retinexParams.gam; + + if(gamm2 < 1.) { + pwr = 1. / pwr; + gamm = 1. / gamm; + } + + int mode = 0, imax = 0; + Color::calcGamma(pwr, ts, mode, imax, g_a0, g_a1, g_a2, g_a3, g_a4, g_a5); // call to calcGamma with selected gamma and slope + + // printf("g_a0=%f g_a1=%f g_a2=%f g_a3=%f g_a4=%f\n", g_a0,g_a1,g_a2,g_a3,g_a4); + for (int i = 0; i < 65536; i++) { + double val = (i) / 65535.; + double start = g_a3; + double add = g_a4; + double mul = 1. + g_a4; + double x; + + if(gamm2 < 1.) { + start = g_a2; + add = g_a4; + x = Color::igammareti (val, gamm, start, ts, mul , add); + } else { + x = Color::gammareti (val, gamm, start, ts, mul , add); + } + + lutTonereti[i] = CLIP(x * 65535.);// CLIP avoid in some case extra values + } + + retinexgamtab = &lutTonereti; + } + + /* + //test with amsterdam.pef and other files + float rr,gg,bb; + rr=red[50][2300]; + gg=green[50][2300]; + bb=blue[50][2300]; + printf("rr=%f gg=%f bb=%f \n",rr,gg,bb); + rr=red[1630][370]; + gg=green[1630][370]; + bb=blue[1630][370]; + printf("rr1=%f gg1=%f bb1=%f \n",rr,gg,bb); + rr=red[380][1630]; + gg=green[380][1630]; + bb=blue[380][1630]; + printf("rr2=%f gg2=%f bb2=%f \n",rr,gg,bb); + */ + /* + if(retinexParams.highlig < 100 && retinexParams.retinexMethod == "highliplus") {//try to recover magenta...very difficult ! + float hig = ((float)retinexParams.highlig)/100.f; + float higgb = ((float)retinexParams.grbl)/100.f; + + #ifdef _OPENMP + #pragma omp parallel for + #endif + for (int i = border; i < H - border; i++ ) { + for (int j = border; j < W - border; j++ ) { + float R_,G_,B_; + R_=red[i][j]; + G_=green[i][j]; + B_=blue[i][j]; + + //empirical method to find highlight magenta with no conversion RGB and no white balance + //red = master Gr and Bl default higgb=0.5 + // if(R_>65535.f*hig && G_ > 65535.f*higgb && B_ > 65535.f*higgb) conversionBuffer[3][i - border][j - border] = R_; + // else conversionBuffer[3][i - border][j - border] = 0.f; + } + } + } + */ + if(retinexParams.gammaretinex != "none" && retinexParams.str != 0) {//gamma +#ifdef _OPENMP + #pragma omp parallel for +#endif + + for (int i = border; i < H - border; i++ ) { + for (int j = border; j < W - border; j++ ) { + float R_, G_, B_; + R_ = red[i][j]; + G_ = green[i][j]; + B_ = blue[i][j]; + + red[i][j] = (*retinexgamtab)[R_]; + green[i][j] = (*retinexgamtab)[G_]; + blue[i][j] = (*retinexgamtab)[B_]; + } + } + } + + if(useHsl) { +#ifdef _OPENMP + #pragma omp parallel +#endif + { + // one LUT per thread + LUTu lhist16RETIThr; + + if(lhist16RETI) + { + lhist16RETIThr(32769, 0); + lhist16RETIThr.clear(); + } + +#ifdef __SSE2__ + vfloat c32768 = F2V(32768.f); +#endif +#ifdef _OPENMP + #pragma omp for +#endif + + for (int i = border; i < H - border; i++ ) + { + int j = border; +#ifdef __SSE2__ + + for (; j < W - border - 3; j += 4) { + vfloat H, S, L; + int pos; + Color::rgb2hsl(LVFU(red[i][j]), LVFU(green[i][j]), LVFU(blue[i][j]), H, S, L); + _mm_storeu_ps(&conversionBuffer[0][i - border][j - border], H); + _mm_storeu_ps(&conversionBuffer[1][i - border][j - border], S); + L *= c32768; + _mm_storeu_ps(&conversionBuffer[2][i - border][j - border], L); + _mm_storeu_ps(&conversionBuffer[3][i - border][j - border], H); + + if(lhist16RETI) { + for(int p = 0; p < 4; p++) { + pos = (int) clipretinex( conversionBuffer[2][i - border][j - border + p], 0.f, 32768.f);//histogram in curve HSL + lhist16RETIThr[pos]++; + } + } + } + +#endif + + for (; j < W - border; j++) { + float H, S, L; + int pos; + //rgb=>lab + Color::rgb2hslfloat(red[i][j], green[i][j], blue[i][j], conversionBuffer[0][i - border][j - border], conversionBuffer[1][i - border][j - border], L); + L *= 32768.f; + conversionBuffer[2][i - border][j - border] = L; + + if(lhist16RETI) { + pos = (int) clipretinex(L, 0, 32768); + lhist16RETIThr[pos]++; + } + } + } + +#ifdef _OPENMP + #pragma omp critical + { + if(lhist16RETI) + { + // Add per Thread LUT to global LUT + for(int i = 0; i < 32769; i++) { + lhist16RETI[i] += lhist16RETIThr[i]; + } + } + } +#endif + + } + } else { + TMatrix wprof = iccStore->workingSpaceMatrix (cmp.working); + double wp[3][3] = { + {wprof[0][0], wprof[0][1], wprof[0][2]}, + {wprof[1][0], wprof[1][1], wprof[1][2]}, + {wprof[2][0], wprof[2][1], wprof[2][2]} + }; + + // Conversion rgb -> lab is hard to vectorize because it uses a lut (that's not the main problem) + // and it uses a condition inside XYZ2Lab which is almost impossible to vectorize without making it slower... +#ifdef _OPENMP + #pragma omp parallel +#endif + { + // one LUT per thread + LUTu lhist16RETIThr; + + if(lhist16RETI) { + lhist16RETIThr(32769, 0); + lhist16RETIThr.clear(); + } + +#ifdef _OPENMP + #pragma omp for +#endif + + for (int i = border; i < H - border; i++ ) + for (int j = border; j < W - border; j++) { + float X, Y, Z, L, aa, bb; + int pos; + float R_, G_, B_; + R_ = red[i][j]; + G_ = green[i][j]; + B_ = blue[i][j]; + float k; + //rgb=>lab + Color::rgbxyz(R_, G_, B_, X, Y, Z, wp); + //convert Lab + Color::XYZ2Lab(X, Y, Z, L, aa, bb); + conversionBuffer[0][i - border][j - border] = aa; + conversionBuffer[1][i - border][j - border] = bb; + conversionBuffer[2][i - border][j - border] = L; + conversionBuffer[3][i - border][j - border] = xatan2f(bb, aa); + +// if(R_>40000.f && G_ > 30000.f && B_ > 30000.f) conversionBuffer[3][i - border][j - border] = R_; +// else conversionBuffer[3][i - border][j - border] = 0.f; + if(lhist16RETI) { + pos = (int) clipretinex(L, 0, 32768); + lhist16RETIThr[pos]++;//histogram in Curve Lab + } + } + +#ifdef _OPENMP + #pragma omp critical + { + if(lhist16RETI) { + // Add per Thread LUT to global LUT + for(int i = 0; i < 32769; i++) { + lhist16RETI[i] += lhist16RETIThr[i]; + } + } + } +#endif + + } + } + + + +} + +void RawImageSource::retinexPrepareCurves(RetinexParams retinexParams, LUTf &cdcurve, RetinextransmissionCurve &retinextransmissionCurve, bool &retinexcontlutili, bool &useHsl, LUTu & lhist16RETI, LUTu & histLRETI) +{ + useHsl = (retinexParams.retinexcolorspace == "HSLLOG" || retinexParams.retinexcolorspace == "HSLLIN"); + + if(useHsl) { + CurveFactory::curveDehaContL (retinexcontlutili, retinexParams.cdHcurve, cdcurve, 1, lhist16RETI, histLRETI); + } else { + CurveFactory::curveDehaContL (retinexcontlutili, retinexParams.cdcurve, cdcurve, 1, lhist16RETI, histLRETI); + } + + retinexParams.getCurves(retinextransmissionCurve); +} + +//void RawImageSource::retinex(ColorManagementParams cmp, RetinexParams deh, ToneCurveParams Tc, LUTf & cdcurve, const RetinextransmissionCurve & dehatransmissionCurve, multi_array2D &conversionBuffer, bool dehacontlutili, bool useHsl, float &minCD, float &maxCD, float &mini, float &maxi, float &Tmean, float &Tsigma, float &Tmin, float &Tmax, LUTu &histLRETI) +void RawImageSource::retinex(ColorManagementParams cmp, RetinexParams deh, ToneCurveParams Tc, LUTf & cdcurve, const RetinextransmissionCurve & dehatransmissionCurve, multi_array2D &conversionBuffer, bool dehacontlutili, bool useHsl, float &minCD, float &maxCD, float &mini, float &maxi, float &Tmean, float &Tsigma, float &Tmin, float &Tmax, LUTu &histLRETI) +{ + + MyTime t4, t5; + t4.set(); + + if (settings->verbose) { + printf ("Applying Retinex\n"); + } + + LUTf lutToneireti; + lutToneireti(65536); + + LUTf *retinexigamtab;//gamma before and after Retinex to restore tones + + if(deh.gammaretinex == "low") { + retinexigamtab = &(Color::igammatab_115_2); + } else if(deh.gammaretinex == "mid") { + retinexigamtab = &(Color::igammatab_13_2); + } else if(deh.gammaretinex == "hig") { + retinexigamtab = &(Color::igammatab_145_3); + } else if(deh.gammaretinex == "fre") { + double g_a0, g_a1, g_a2, g_a3, g_a4, g_a5; + double pwr = 1.0 / deh.gam; + double gamm = deh.gam; + double gamm2 = gamm; + double ts = deh.slope; + int mode = 0, imax = 0; + + if(gamm2 < 1.) { + pwr = 1. / pwr; + gamm = 1. / gamm; + } + + Color::calcGamma(pwr, ts, mode, imax, g_a0, g_a1, g_a2, g_a3, g_a4, g_a5); // call to calcGamma with selected gamma and slope + + // printf("g_a0=%f g_a1=%f g_a2=%f g_a3=%f g_a4=%f\n", g_a0,g_a1,g_a2,g_a3,g_a4); + for (int i = 0; i < 65536; i++) { + double val = (i) / 65535.; + double x; + double mul = 1. + g_a4; + double add = g_a4; + double start = g_a2; + + if(gamm2 < 1.) { + start = g_a3; + add = g_a3; + x = Color::gammareti (val, gamm, start, ts, mul , add); + } else { + x = Color::igammareti (val, gamm, start, ts, mul , add); + } + + lutToneireti[i] = CLIP(x * 65535.); + } + + retinexigamtab = &lutToneireti; + } + + // We need a buffer with original L data to allow correct blending + // red, green and blue still have original size of raw, but we can't use the borders + const int HNew = H - 2 * border; + const int WNew = W - 2 * border; + + array2D LBuffer (WNew, HNew); + float **temp = conversionBuffer[2]; // one less dereference + LUTf dLcurve; + LUTu hist16RET; + float val; + + if(dehacontlutili && histLRETI) { + hist16RET(32769, 0); + hist16RET.clear(); + histLRETI.clear(); + dLcurve(32769, 0); + dLcurve.clear(); + } + + FlatCurve* chcurve = NULL;//curve c=f(H) + bool chutili = false; + + if (deh.enabled && deh.retinexMethod == "highli") { + chcurve = new FlatCurve(deh.lhcurve); + + if (!chcurve || chcurve->isIdentity()) { + if (chcurve) { + delete chcurve; + chcurve = NULL; + } + } else { + chutili = true; + } + } + + + +#ifdef _OPENMP + #pragma omp parallel +#endif + { + // one LUT per thread + LUTu hist16RETThr; + + if(dehacontlutili && histLRETI) { + hist16RETThr(32769, 0); + hist16RETThr.clear(); + } + +#ifdef _OPENMP + #pragma omp for +#endif + + for (int i = 0; i < H - 2 * border; i++ ) + if(dehacontlutili) + for (int j = 0; j < W - 2 * border; j++) { + LBuffer[i][j] = cdcurve[2.f * temp[i][j]] / 2.f; + + if(histLRETI) { + int pos = (int) clipretinex(LBuffer[i][j], 0.f, 32768.f); + hist16RETThr[pos]++; //histogram in Curve + } + } + else + for (int j = 0; j < W - 2 * border; j++) { + LBuffer[i][j] = temp[i][j]; + } + +#ifdef _OPENMP + #pragma omp critical +#endif + { + if(dehacontlutili && histLRETI) { + // Add per Thread LUT to global LUT + for(int i = 0; i < 32769; i++) { + hist16RET[i] += hist16RETThr[i]; + } + } + } + } + + if(dehacontlutili && histLRETI) {//update histogram + for (int i = 0; i < 32768; i++) { + val = (double)i / 32767.0; + dLcurve[i] = CLIPD(val); + } + + for (int i = 0; i < 32768; i++) { + float hval = dLcurve[i]; + int hi = (int)(255.0f * CLIPD(hval)); + histLRETI[hi] += hist16RET[i]; + } + } + + MSR(LBuffer, conversionBuffer[2], conversionBuffer[3], WNew, HNew, deh, dehatransmissionCurve, minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax); + + if(useHsl) { + if(chutili) { +#ifdef _OPENMP + #pragma omp parallel for +#endif + + for (int i = border; i < H - border; i++ ) { + int j = border; + + for (; j < W - border; j++) { + + float valp; + float chr; + // if(chutili) { // c=f(H) + { + valp = float((chcurve->getVal(conversionBuffer[3][i - border][j - border]) - 0.5f)); + + conversionBuffer[1][i - border][j - border] *= (1.f + 2.f * valp); + } + // } + + } + } + } + +#ifdef _OPENMP + #pragma omp parallel for +#endif + + for (int i = border; i < H - border; i++ ) { + int j = border; +#ifdef __SSE2__ + vfloat c32768 = F2V(32768.f); + + for (; j < W - border - 3; j += 4) { + vfloat R, G, B; + Color::hsl2rgb(LVFU(conversionBuffer[0][i - border][j - border]), LVFU(conversionBuffer[1][i - border][j - border]), LVFU(LBuffer[i - border][j - border]) / c32768, R, G, B); + + _mm_storeu_ps(&red[i][j], R); + _mm_storeu_ps(&green[i][j], G); + _mm_storeu_ps(&blue[i][j], B); + } + +#endif + + for (; j < W - border; j++) { + Color::hsl2rgbfloat(conversionBuffer[0][i - border][j - border], conversionBuffer[1][i - border][j - border], LBuffer[i - border][j - border] / 32768.f, red[i][j], green[i][j], blue[i][j]); + } + } + + } else { + TMatrix wiprof = iccStore->workingSpaceInverseMatrix (cmp.working); + + double wip[3][3] = { + {wiprof[0][0], wiprof[0][1], wiprof[0][2]}, + {wiprof[1][0], wiprof[1][1], wiprof[1][2]}, + {wiprof[2][0], wiprof[2][1], wiprof[2][2]} + }; + // gamut control only in Lab mode + const bool highlight = Tc.hrenabled; +#ifdef _OPENMP + #pragma omp parallel for +#endif + + for (int i = border; i < H - border; i++ ) { + for (int j = border; j < W - border; j++) { + + float Lprov1 = (LBuffer[i - border][j - border]) / 327.68f; + float Chprov1 = sqrt(SQR(conversionBuffer[0][i - border][j - border]) + SQR(conversionBuffer[1][i - border][j - border])) / 327.68f; + float HH = xatan2f(conversionBuffer[1][i - border][j - border], conversionBuffer[0][i - border][j - border]); + float2 sincosval; + float valp; + float chr; + + if(chutili) { // c=f(H) + { + valp = float((chcurve->getVal(Color::huelab_to_huehsv2(HH)) - 0.5f)); + Chprov1 *= (1.f + 2.f * valp); + } + } + + sincosval = xsincosf(HH); + float R, G, B; +#ifdef _DEBUG + bool neg = false; + bool more_rgb = false; + //gamut control : Lab values are in gamut + Color::gamutLchonly(HH, sincosval, Lprov1, Chprov1, R, G, B, wip, highlight, 0.15f, 0.96f, neg, more_rgb); +#else + //gamut control : Lab values are in gamut + Color::gamutLchonly(HH, sincosval, Lprov1, Chprov1, R, G, B, wip, highlight, 0.15f, 0.96f); +#endif + + + + conversionBuffer[0][i - border][j - border] = 327.68f * Chprov1 * sincosval.y; + conversionBuffer[1][i - border][j - border] = 327.68f * Chprov1 * sincosval.x; + LBuffer[i - border][j - border] = Lprov1 * 327.68f; + } + } + + //end gamut control +#ifdef __SSE2__ + vfloat wipv[3][3]; + + for(int i = 0; i < 3; i++) + for(int j = 0; j < 3; j++) { + wipv[i][j] = F2V(wiprof[i][j]); + } + +#endif // __SSE2__ +#ifdef _OPENMP + #pragma omp parallel for +#endif + + for (int i = border; i < H - border; i++ ) { + int j = border; +#ifdef __SSE2__ + + for (; j < W - border - 3; j += 4) { + vfloat x_, y_, z_; + vfloat R, G, B; + Color::Lab2XYZ(LVFU(LBuffer[i - border][j - border]), LVFU(conversionBuffer[0][i - border][j - border]), LVFU(conversionBuffer[1][i - border][j - border]), x_, y_, z_) ; + Color::xyz2rgb(x_, y_, z_, R, G, B, wipv); + + _mm_storeu_ps(&red[i][j], R); + _mm_storeu_ps(&green[i][j], G); + _mm_storeu_ps(&blue[i][j], B); + + } + +#endif + + for (; j < W - border; j++) { + float x_, y_, z_; + float R, G, B; + Color::Lab2XYZ(LBuffer[i - border][j - border], conversionBuffer[0][i - border][j - border], conversionBuffer[1][i - border][j - border], x_, y_, z_) ; + Color::xyz2rgb(x_, y_, z_, R, G, B, wip); + red[i][j] = R; + green[i][j] = G; + blue[i][j] = B; + } + } + } + + if (chcurve) { + delete chcurve; + } + + if(deh.gammaretinex != "none" && deh.str != 0) { //inverse gamma +#ifdef _OPENMP + #pragma omp parallel for +#endif + + for (int i = border; i < H - border; i++ ) { + for (int j = border; j < W - border; j++ ) { + float R_, G_, B_; + R_ = red[i][j]; + G_ = green[i][j]; + B_ = blue[i][j]; + red[i][j] = (*retinexigamtab)[R_]; + green[i][j] = (*retinexigamtab)[G_]; + blue[i][j] = (*retinexigamtab)[B_]; + } + } + } + + t5.set(); + + if( settings->verbose ) { + printf("Retinex=%d usec\n", t5.etime(t4)); + } } @@ -1827,7 +2477,7 @@ void RawImageSource::flushRGB() } } -void RawImageSource::HLRecovery_Global(ToneCurveParams hrp ) +void RawImageSource::HLRecovery_Global(ToneCurveParams hrp) { if (hrp.hrenabled && hrp.method == "Color") { if(!rgbSourceModified) { @@ -1839,6 +2489,7 @@ void RawImageSource::HLRecovery_Global(ToneCurveParams hrp ) rgbSourceModified = true; } } + } @@ -1885,10 +2536,14 @@ void RawImageSource::processFlatField(const RAWParams &raw, RawImage *riFlatFile float maxval = 0.f; int c = FC(m, n); int c4 = ( c == 1 && !(m & 1) ) ? 3 : c; +#ifdef _OPENMP #pragma omp parallel +#endif { float maxvalthr = 0.f; +#ifdef _OPENMP #pragma omp for +#endif for (int row = 0; row < H - m; row += 2) { for (int col = 0; col < W - n; col += 2) { @@ -1900,7 +2555,9 @@ void RawImageSource::processFlatField(const RAWParams &raw, RawImage *riFlatFile } } +#ifdef _OPENMP #pragma omp critical +#endif { if(maxvalthr > maxval) { @@ -1930,11 +2587,15 @@ void RawImageSource::processFlatField(const RAWParams &raw, RawImage *riFlatFile for (int m = 0; m < 2; m++) for (int n = 0; n < 2; n++) { +#ifdef _OPENMP #pragma omp parallel +#endif { int c = FC(m, n); int c4 = ( c == 1 && !(m & 1) ) ? 3 : c; +#ifdef _OPENMP #pragma omp for +#endif for (int row = 0; row < H - m; row += 2) { @@ -1970,10 +2631,14 @@ void RawImageSource::processFlatField(const RAWParams &raw, RawImage *riFlatFile int clipControlGui = 0; float maxval = 0.f; // xtrans files have only one black level actually, so we can simplify the code a bit +#ifdef _OPENMP #pragma omp parallel +#endif { float maxvalthr = 0.f; +#ifdef _OPENMP #pragma omp for schedule(dynamic,16) nowait +#endif for (int row = 0; row < H; row++) { for (int col = 0; col < W; col++) { @@ -1985,7 +2650,9 @@ void RawImageSource::processFlatField(const RAWParams &raw, RawImage *riFlatFile } } +#ifdef _OPENMP #pragma omp critical +#endif { if(maxvalthr > maxval) { maxval = maxvalthr; @@ -2007,7 +2674,9 @@ void RawImageSource::processFlatField(const RAWParams &raw, RawImage *riFlatFile refcolor[c] *= limitFactor; } +#ifdef _OPENMP #pragma omp parallel for +#endif for (int row = 0; row < H; row++) { for (int col = 0; col < W; col++) { @@ -2030,7 +2699,9 @@ void RawImageSource::processFlatField(const RAWParams &raw, RawImage *riFlatFile if(ri->getSensorType() == ST_BAYER) { for (int m = 0; m < 2; m++) for (int n = 0; n < 2; n++) { +#ifdef _OPENMP #pragma omp parallel for +#endif for (int row = 0; row < H - m; row += 2) { int c = FC(row, 0); @@ -2044,7 +2715,9 @@ void RawImageSource::processFlatField(const RAWParams &raw, RawImage *riFlatFile } } } else if(ri->getSensorType() == ST_FUJI_XTRANS) { +#ifdef _OPENMP #pragma omp parallel for +#endif for (int row = 0; row < H; row++) { for (int col = 0; col < W; col++) { @@ -2153,9 +2826,13 @@ SSEFUNCTION void RawImageSource::cfaboxblur(RawImage *riFlatFile, float* cfablur cfatmp = (float (*)) calloc (H * W, sizeof * cfatmp); // const float hotdeadthresh = 0.5; +#ifdef _OPENMP #pragma omp parallel +#endif { +#ifdef _OPENMP #pragma omp for +#endif for (int i = 0; i < H; i++) { int iprev, inext, jprev, jnext; @@ -2204,7 +2881,9 @@ SSEFUNCTION void RawImageSource::cfaboxblur(RawImage *riFlatFile, float* cfablur //box blur cfa image; box size = BS //horizontal blur +#ifdef _OPENMP #pragma omp for +#endif for (int row = 0; row < H; row++) { int len = boxW / 2 + 1; @@ -2243,7 +2922,9 @@ SSEFUNCTION void RawImageSource::cfaboxblur(RawImage *riFlatFile, float* cfablur __m128 onev = _mm_set1_ps( 1.0f ); __m128 temp1v, temp2v, lenv, lenp1v, lenm1v; int row; +#ifdef _OPENMP #pragma omp for +#endif for (int col = 0; col < W - 3; col += 4) { lenv = leninitv; @@ -2332,7 +3013,9 @@ SSEFUNCTION void RawImageSource::cfaboxblur(RawImage *riFlatFile, float* cfablur } #else +#ifdef _OPENMP #pragma omp for +#endif for (int col = 0; col < W; col++) { int len = boxH / 2 + 1; @@ -2414,12 +3097,15 @@ void RawImageSource::scaleColors(int winx, int winy, int winw, int winh, const R // scale image colors if( ri->getSensorType() == ST_BAYER) { +#ifdef _OPENMP #pragma omp parallel +#endif { float tmpchmax[3]; tmpchmax[0] = tmpchmax[1] = tmpchmax[2] = 0.0f; - +#ifdef _OPENMP #pragma omp for nowait +#endif for (int row = winy; row < winy + winh; row ++) { @@ -2434,7 +3120,9 @@ void RawImageSource::scaleColors(int winx, int winy, int winw, int winh, const R } } +#ifdef _OPENMP #pragma omp critical +#endif { chmax[0] = max(tmpchmax[0], chmax[0]); chmax[1] = max(tmpchmax[1], chmax[1]); @@ -2442,11 +3130,14 @@ void RawImageSource::scaleColors(int winx, int winy, int winw, int winh, const R } } } else if ( ri->get_colors() == 1 ) { +#ifdef _OPENMP #pragma omp parallel +#endif { float tmpchmax = 0.0f; - +#ifdef _OPENMP #pragma omp for nowait +#endif for (int row = winy; row < winy + winh; row ++) { @@ -2459,18 +3150,23 @@ void RawImageSource::scaleColors(int winx, int winy, int winw, int winh, const R } } +#ifdef _OPENMP #pragma omp critical +#endif { chmax[0] = chmax[1] = chmax[2] = chmax[3] = max(tmpchmax, chmax[0]); } } } else if(ri->getSensorType() == ST_FUJI_XTRANS) { +#ifdef _OPENMP #pragma omp parallel +#endif { float tmpchmax[3]; tmpchmax[0] = tmpchmax[1] = tmpchmax[2] = 0.0f; - +#ifdef _OPENMP #pragma omp for nowait +#endif for (int row = winy; row < winy + winh; row ++) { @@ -2485,7 +3181,9 @@ void RawImageSource::scaleColors(int winx, int winy, int winw, int winh, const R } } +#ifdef _OPENMP #pragma omp critical +#endif { chmax[0] = max(tmpchmax[0], chmax[0]); chmax[1] = max(tmpchmax[1], chmax[1]); @@ -2493,12 +3191,15 @@ void RawImageSource::scaleColors(int winx, int winy, int winw, int winh, const R } } } else { +#ifdef _OPENMP #pragma omp parallel +#endif { float tmpchmax[3]; tmpchmax[0] = tmpchmax[1] = tmpchmax[2] = 0.0f; - +#ifdef _OPENMP #pragma omp for nowait +#endif for (int row = winy; row < winy + winh; row ++) { @@ -2513,7 +3214,9 @@ void RawImageSource::scaleColors(int winx, int winy, int winw, int winh, const R } } +#ifdef _OPENMP #pragma omp critical +#endif { chmax[0] = max(tmpchmax[0], chmax[0]); chmax[1] = max(tmpchmax[1], chmax[1]); @@ -2826,8 +3529,9 @@ void RawImageSource::colorSpaceConversion_ (Imagefloat* im, ColorManagementParam mat[i][j] += work[i][k] * camMatrix[k][j]; // rgb_xyz * imatrices.xyz_cam } - +#ifdef _OPENMP #pragma omp parallel for +#endif for (int i = 0; i < im->height; i++) for (int j = 0; j < im->width; j++) { @@ -3150,91 +3854,6 @@ void RawImageSource::colorSpaceConversion_ (Imagefloat* im, ColorManagementParam // printf ("ICM TIME: %d usec\n", t3.etime(t1)); } -//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -// Converts raw image including ICC input profile to working space - 16bit int version -/*void RawImageSource::colorSpaceConversion16 (Image16* im, ColorManagementParams cmp, cmsHPROFILE embedded, cmsHPROFILE camprofile, double camMatrix[3][3], std::string camName) { - cmsHPROFILE in; - DCPProfile *dcpProf; - - if (!findInputProfile(cmp.input, embedded, camName, &dcpProf, in)) return; - - if (dcpProf!=NULL) { - dcpProf->Apply(im, (DCPLightType)cmp.preferredProfile, cmp.working, cmp.toneCurve); - } else { - if (in==NULL) { - // Take camprofile from DCRAW - // in this case we avoid using the slllllooooooowwww lcms - TMatrix work = iccStore->workingSpaceInverseMatrix (cmp.working); - double mat[3][3] = {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}}; - for (int i=0; i<3; i++) - for (int j=0; j<3; j++) - for (int k=0; k<3; k++) - mat[i][j] += work[i][k] * camMatrix[k][j]; // rgb_xyz * imatrices.xyz_cam - -#pragma omp parallel for - for (int i=0; iheight; i++) - for (int j=0; jwidth; j++) { - - float newr = mat[0][0]*im->r(i,j) + mat[0][1]*im->g(i,j) + mat[0][2]*im->b(i,j); - float newg = mat[1][0]*im->r(i,j) + mat[1][1]*im->g(i,j) + mat[1][2]*im->b(i,j); - float newb = mat[2][0]*im->r(i,j) + mat[2][1]*im->g(i,j) + mat[2][2]*im->b(i,j); - - im->r(i,j) = CLIP((int)newr); - im->g(i,j) = CLIP((int)newg); - im->b(i,j) = CLIP((int)newb); - } - } else { - // Gamma preprocessing - float gammaFac, lineFac, lineSum; - getProfilePreprocParams(in, gammaFac, lineFac, lineSum); - - if (gammaFac>0) { -#pragma omp parallel for - for ( int h = 0; h < im->height; ++h ) - for ( int w = 0; w < im->width; ++w ) { - im->r(h,w)= (int) (pow ((double)(im->r(h,w) / 65535.0), (double)gammaFac) * 65535.0); - im->g(h,w)= (int) (pow ((double)(im->g(h,w) / 65535.0), (double)gammaFac) * 65535.0); - im->b(h,w)= (int) (pow ((double)(im->b(h,w) / 65535.0), (double)gammaFac) * 65535.0); - } - } - - cmsHPROFILE out = iccStore->workingSpace (cmp.working); - //out = iccStore->workingSpaceGamma (wProfile); - lcmsMutex->lock (); - cmsHTRANSFORM hTransform = cmsCreateTransform (in, TYPE_RGB_16, out, TYPE_RGB_16, settings->colorimetricIntent, - cmsFLAGS_NOCACHE); // NOCACHE is important for thread safety - lcmsMutex->unlock (); - - if (hTransform) { - im->ExecCMSTransform(hTransform); - - // There might be Nikon postprocessings - if (lineSum>0) { -#pragma omp parallel for - for ( int h = 0; h < im->height; ++h ) - for ( int w = 0; w < im->width; ++w ) { - im->r(h,w) *= im->r(h,w) * lineFac / 65535.0 + lineSum; - im->g(h,w) *= im->g(h,w) * lineFac / 65535.0 + lineSum; - im->b(h,w) *= im->b(h,w) * lineFac / 65535.0 + lineSum; - } - } - } - else { - lcmsMutex->lock (); - hTransform = cmsCreateTransform (camprofile, TYPE_RGB_16, out, TYPE_RGB_16, - settings->colorimetricIntent, cmsFLAGS_NOCACHE); - lcmsMutex->unlock (); - - im->ExecCMSTransform(hTransform); - } - - cmsDeleteTransform(hTransform); - } - } - //t3.set (); - //printf ("ICM TIME: %d\n", t3.etime(t1)); -}*/ // Determine RAW input and output profiles. Returns TRUE on success bool RawImageSource::findInputProfile(Glib::ustring inProfile, cmsHPROFILE embedded, std::string camName, DCPProfile **dcpProf, cmsHPROFILE& in) @@ -3533,11 +4152,15 @@ void RawImageSource::getAutoExpHistogram (LUTu & histogram, int& histcompr) histogram(65536 >> histcompr); histogram.clear(); +#ifdef _OPENMP #pragma omp parallel +#endif { LUTu tmphistogram(65536 >> histcompr); tmphistogram.clear(); +#ifdef _OPENMP #pragma omp for nowait +#endif for (int i = border; i < H - border; i++) { int start, end; @@ -3576,7 +4199,9 @@ void RawImageSource::getAutoExpHistogram (LUTu & histogram, int& histcompr) } } +#ifdef _OPENMP #pragma omp critical +#endif { for(int i = 0; i < (65536 >> histcompr); i++) { histogram[i] += tmphistogram[i]; diff --git a/rtengine/rawimagesource.h b/rtengine/rawimagesource.h index d4ebf9928..ee89dd079 100644 --- a/rtengine/rawimagesource.h +++ b/rtengine/rawimagesource.h @@ -151,6 +151,10 @@ public: int load (Glib::ustring fname, bool batch = false); void preprocess (const RAWParams &raw, const LensProfParams &lensProf, const CoarseTransformParams& coarse); void demosaic (const RAWParams &raw); +// void retinex (RAWParams raw, ColorManagementParams cmp, RetinexParams lcur, LUTf & cdcurve, bool dehacontlutili); + void retinex (ColorManagementParams cmp, RetinexParams deh, ToneCurveParams Tc, LUTf & cdcurve, const RetinextransmissionCurve & dehatransmissionCurve, multi_array2D &conversionBuffer, bool dehacontlutili, bool useHsl, float &minCD, float &maxCD, float &mini, float &maxi, float &Tmean, float &Tsigma, float &Tmin, float &Tmax, LUTu &histLRETI); + void retinexPrepareCurves (RetinexParams retinexParams, LUTf &cdcurve, RetinextransmissionCurve &retinextransmissionCurve, bool &retinexcontlutili, bool &useHsl, LUTu & lhist16RETI, LUTu & histLRETI); + void retinexPrepareBuffers (ColorManagementParams cmp, RetinexParams retinexParams, multi_array2D &conversionBuffer, LUTu &lhist16RETI); void flushRawData (); void flushRGB (); void HLRecovery_Global (ToneCurveParams hrp); @@ -224,8 +228,10 @@ public: } static void inverse33 (const double (*coeff)[3], double (*icoeff)[3]); - void boxblur2(float** src, float** dst, int H, int W, int box ); - void boxblur_resamp(float **src, float **dst, int H, int W, int box, int samp ); + void boxblur2(float** src, float** dst, float** temp, int H, int W, int box ); + void boxblur_resamp(float **src, float **dst, float** temp, int H, int W, int box, int samp ); + void MSR(float** luminance, float **originalLuminance, float **exLuminance, int width, int height, RetinexParams deh, const RetinextransmissionCurve & dehatransmissionCurve, float &minCD, float &maxCD, float &mini, float &maxi, float &Tmean, float &Tsigma, float &Tmin, float &Tmax); +// void MSR(LabImage* lab, int width, int height, int skip, RetinexParams deh, const RetinextransmissionCurve & dehatransmissionCurve); //void boxblur_resamp(float **red, float **green, float **blue, int H, int W, float thresh[3], float max[3], // multi_array2D & hfsize, multi_array2D & hilite, int box ); @@ -271,6 +277,7 @@ protected: void jdl_interpolate_omp(); void igv_interpolate(int winw, int winh); void lmmse_interpolate_omp(int winw, int winh, int iterations); +// void MSR(LabImage* lab, int width, int height, int skip, const LCurveParams &lcur); void amaze_demosaic_RT(int winx, int winy, int winw, int winh);//Emil's code for AMaZE void fast_demosaic(int winx, int winy, int winw, int winh );//Emil's code for fast demosaicing diff --git a/rtengine/refreshmap.cc b/rtengine/refreshmap.cc index c22cf25fa..4180fd67a 100644 --- a/rtengine/refreshmap.cc +++ b/rtengine/refreshmap.cc @@ -19,6 +19,13 @@ #include "refreshmap.h" #include "procevents.h" + + + + + + +// Aligned so the first entry starts on line 30 int refreshmap[rtengine::NUMOFEVENTS] = { ALL, // EvPhotoLoaded, ALL, // EvProfileLoaded, @@ -169,7 +176,7 @@ int refreshmap[rtengine::NUMOFEVENTS] = { SHARPENING, // EvSharpenEdgeThreechannels SHARPENING, // EvSharpenMicroEnabled SHARPENING, // EvSharpenMicroMatrix - DEMOSAIC, // EvDemosaicALLEnhanced // Disabled but not removed for now, may be reintroduced some day + DEMOSAIC, // EvDemosaicALLEnhanced Disabled but not removed for now, may be reintroduced some day RGBCURVE, // EvVibranceEnabled RGBCURVE, // EvVibrancePastels RGBCURVE, // EvVibranceSaturated @@ -255,7 +262,7 @@ int refreshmap[rtengine::NUMOFEVENTS] = { RGBCURVE, // EvBWAfterCurve RGBCURVE, // EvBWAfterCurveMode RGBCURVE, // EvAutoch - NONE, // --unused-- + 0, // --unused-- RGBCURVE, // EvNeutralBW TRANSFORM, // EvGradientFeather TRANSFORM, // EvGradientStrength @@ -275,14 +282,12 @@ int refreshmap[rtengine::NUMOFEVENTS] = { DIRPYREQUALIZER, // EvDirPyrEqlgamutlab DIRPYREQUALIZER, // EvDirPyrEqualizerHueskin ALLNORAW, // EvDPDNmedian - ALLNORAW, //EvDPDNmedmet -//DIRPYREQUALIZER // EvDirPyrEqualizeralg + ALLNORAW, // EvDPDNmedmet RGBCURVE, // EvColorToningEnabled RGBCURVE, // EvColorToningColor RGBCURVE, // EvColorToningOpacity RGBCURVE, // EvColorToningCLCurve RGBCURVE, // EvColorToningMethod -//RGBCURVE, // EvColorToningTwocolor RGBCURVE, // EvColorToningLLCurve RGBCURVE, // EvColorToningredlow RGBCURVE, // EvColorToninggreenlow @@ -304,27 +309,27 @@ int refreshmap[rtengine::NUMOFEVENTS] = { RGBCURVE, // EvColorToningHighights RGBCURVE, // EvColorToningSatProtection RGBCURVE, // EvColorToningSatThreshold - RGBCURVE, //EvColorToningStrength - RGBCURVE, //EvColorToningautosat - ALLNORAW, //EvDPDNmetmed - ALLNORAW, //EvDPDNrgbmet - ALLNORAW, //EvDPDNpasses + RGBCURVE, // EvColorToningStrength + RGBCURVE, // EvColorToningautosat + ALLNORAW, // EvDPDNmetmed + ALLNORAW, // EvDPDNrgbmet + ALLNORAW, // EvDPDNpasses FLATFIELD, // EvFlatFieldClipControl FLATFIELD, // EvFlatFieldAutoClipControl DARKFRAME, // EvPreProcessExpBlackRed DARKFRAME, // EvPreProcessExpBlackGreen DARKFRAME, // EvPreProcessExpBlackBlue - RGBCURVE, //EvFilmSimulationEnabled - RGBCURVE, //EvFilmSimulationStrength - RGBCURVE, //EvFilmSimulationFilename - ALLNORAW, // EvDPDNLCurve - ALLNORAW, // EvDPDNsmet + RGBCURVE, // EvFilmSimulationEnabled + RGBCURVE, // EvFilmSimulationStrength + RGBCURVE, // EvFilmSimulationFilename + ALLNORAW, // EvDPDNLCurve + ALLNORAW, // EvDPDNsmet DARKFRAME, // EvPreProcessDeadPixel - ALLNORAW, //EvDPDNCCCurve - ALLNORAW, //EvDPDNautochroma - ALLNORAW, // EvDPDNLmet - ALLNORAW, // EvDPDNCmet - ALLNORAW, // EvDPDNC2met + ALLNORAW, // EvDPDNCCCurve + ALLNORAW, // EvDPDNautochroma + ALLNORAW, // EvDPDNLmet + ALLNORAW, // EvDPDNCmet + ALLNORAW, // EvDPDNC2met DIRPYREQUALIZER, // EvWavelet DIRPYREQUALIZER, // EvEnabled DIRPYREQUALIZER, // EvWavLmethod @@ -365,69 +370,89 @@ int refreshmap[rtengine::NUMOFEVENTS] = { DIRPYREQUALIZER, // EvWavdaubcoeffmet DIRPYREQUALIZER, // EvWavedgreinf DIRPYREQUALIZER, // EvWaveletch - DIRPYREQUALIZER, //EvWavCHSLmet - DIRPYREQUALIZER, //EvWavedgcont - DIRPYREQUALIZER, //EvWavEDmet - DIRPYREQUALIZER, //EvWavlev0nois - DIRPYREQUALIZER, //EvWavlev1nois - DIRPYREQUALIZER, //EvWavlev2nois - DIRPYREQUALIZER, //EvWavmedianlev - DIRPYREQUALIZER, //EvWavHHCurve - DIRPYREQUALIZER, //EvWavBackmet - DIRPYREQUALIZER, //EvWavedgedetect - DIRPYREQUALIZER, //EvWavlipst - DIRPYREQUALIZER, //EvWavedgedetectthr - DIRPYREQUALIZER, //EvWavedgedetectthr2 - DIRPYREQUALIZER, //EvWavlinkedg - DIRPYREQUALIZER, //EvWavCHCurve - DARKFRAME, //EvPreProcessHotDeadThresh - SHARPENING, //EvEPDgamma - DIRPYREQUALIZER, //EvWavtmr - DIRPYREQUALIZER, //EvWavTMmet - DIRPYREQUALIZER, //EvWavtmrs - DIRPYREQUALIZER, //EvWavbalance - DIRPYREQUALIZER, //EvWaviter - DIRPYREQUALIZER, //EvWavgamma - DIRPYREQUALIZER, //EvWavCLCurve - DIRPYREQUALIZER, //EvWavopacity - DIRPYREQUALIZER, //EvWavBAmet - DIRPYREQUALIZER, //EvWavopacityWL - RESIZE, // EvPrShrEnabled - RESIZE, // EvPrShrRadius - RESIZE, // EvPrShrAmount - RESIZE, // EvPrShrThresh - RESIZE, // EvPrShrEdgeOnly - RESIZE, // EvPrShrEdgeRadius=375, - RESIZE, // EvPrShrEdgeTolerance=376, - RESIZE, // EvPrShrHaloControl=377, - RESIZE, // EvPrShrHaloAmount=378, - RESIZE, // EvPrShrMethod=379, - RESIZE, // EvPrShrDRadius=380, - RESIZE, // EvPrShrDAmount=381, - RESIZE, // EvPrShrDDamping=382, - RESIZE, // EvPrShrDIterations=383, - DIRPYREQUALIZER, // EvWavcbenab - DIRPYREQUALIZER, // EvWavgreenhigh - DIRPYREQUALIZER, // EvWavbluehigh - DIRPYREQUALIZER, // EvWavgreenmed - DIRPYREQUALIZER, // EvWavbluemed - DIRPYREQUALIZER, // EvWavgreenlow - DIRPYREQUALIZER, // EvWavbluelow - DIRPYREQUALIZER, // EvWavNeutral - RGBCURVE, // EvDCPApplyLookTable, - RGBCURVE, // EvDCPApplyBaselineExposureOffset, - INPUTPROFILE, // EvDCPApplyHueSatMap - DIRPYREQUALIZER, // EvWavenacont - DIRPYREQUALIZER, // EvWavenachrom - DIRPYREQUALIZER, // EvWavenaedge - DIRPYREQUALIZER, // EvWavenares - DIRPYREQUALIZER, // EvWavenafin - DIRPYREQUALIZER, // EvWavenatoning - DIRPYREQUALIZER, // EvWavenanoise - DIRPYREQUALIZER, // EvWavedgesensi - DIRPYREQUALIZER, // EvWavedgeampli - DIRPYREQUALIZER, //EvWavlev3nois - DIRPYREQUALIZER //EvWavNPmet - + DIRPYREQUALIZER, // EvWavCHSLmet + DIRPYREQUALIZER, // EvWavedgcont + DIRPYREQUALIZER, // EvWavEDmet + DIRPYREQUALIZER, // EvWavlev0nois + DIRPYREQUALIZER, // EvWavlev1nois + DIRPYREQUALIZER, // EvWavlev2nois + DIRPYREQUALIZER, // EvWavmedianlev + DIRPYREQUALIZER, // EvWavHHCurve + DIRPYREQUALIZER, // EvWavBackmet + DIRPYREQUALIZER, // EvWavedgedetect + DIRPYREQUALIZER, // EvWavlipst + DIRPYREQUALIZER, // EvWavedgedetectthr + DIRPYREQUALIZER, // EvWavedgedetectthr2 + DIRPYREQUALIZER, // EvWavlinkedg + DIRPYREQUALIZER, // EvWavCHCurve + DARKFRAME, // EvPreProcessHotDeadThresh + SHARPENING, // EvEPDgamma + DIRPYREQUALIZER, // EvWavtmr + DIRPYREQUALIZER, // EvWavTMmet + DIRPYREQUALIZER, // EvWavtmrs + DIRPYREQUALIZER, // EvWavbalance + DIRPYREQUALIZER, // EvWaviter + DIRPYREQUALIZER, // EvWavgamma + DIRPYREQUALIZER, // EvWavCLCurve + DIRPYREQUALIZER, // EvWavopacity + DIRPYREQUALIZER, // EvWavBAmet + DIRPYREQUALIZER, // EvWavopacityWL + RESIZE, // EvPrShrEnabled + RESIZE, // EvPrShrRadius + RESIZE, // EvPrShrAmount + RESIZE, // EvPrShrThresh + RESIZE, // EvPrShrEdgeOnly + RESIZE, // EvPrShrEdgeRadius=375, + RESIZE, // EvPrShrEdgeTolerance=376, + RESIZE, // EvPrShrHaloControl=377, + RESIZE, // EvPrShrHaloAmount=378, + RESIZE, // EvPrShrMethod=379, + RESIZE, // EvPrShrDRadius=380, + RESIZE, // EvPrShrDAmount=381, + RESIZE, // EvPrShrDDamping=382, + RESIZE, // EvPrShrDIterations=383, + DIRPYREQUALIZER, // EvWavcbenab + DIRPYREQUALIZER, // EvWavgreenhigh + DIRPYREQUALIZER, // EvWavbluehigh + DIRPYREQUALIZER, // EvWavgreenmed + DIRPYREQUALIZER, // EvWavbluemed + DIRPYREQUALIZER, // EvWavgreenlow + DIRPYREQUALIZER, // EvWavbluelow + DIRPYREQUALIZER, // EvWavNeutral + RGBCURVE, // EvDCPApplyLookTable, + RGBCURVE, // EvDCPApplyBaselineExposureOffset, + INPUTPROFILE, // EvDCPApplyHueSatMap + DIRPYREQUALIZER, // EvWavenacont + DIRPYREQUALIZER, // EvWavenachrom + DIRPYREQUALIZER, // EvWavenaedge + DIRPYREQUALIZER, // EvWavenares + DIRPYREQUALIZER, // EvWavenafin + DIRPYREQUALIZER, // EvWavenatoning + DIRPYREQUALIZER, // EvWavenanoise + DIRPYREQUALIZER, // EvWavedgesensi + DIRPYREQUALIZER, // EvWavedgeampli + DIRPYREQUALIZER, // EvWavlev3nois + DIRPYREQUALIZER, // EvWavNPmet + ALLNORAW, // EvretinexMethod + ALLNORAW, // EvLneigh + ALLNORAW, // EvLgain + ALLNORAW, // EvLoffs + ALLNORAW, // EvLstr + ALLNORAW, // EvLscal + ALLNORAW, // EvLvart + ALLNORAW, // EvLCDCurve + ALLNORAW, // EvRetinextransmission + DEMOSAIC, // EvRetinexEnabled + ALLNORAW, // EvRetinexmedianmap + ALLNORAW, // EvLlimd + DEMOSAIC, // Evretinexcolorspace + ALLNORAW, // EvLCDHCurve + DEMOSAIC, // Evretinexgamma + DEMOSAIC, // EvLgam + DEMOSAIC, // EvLslope + ALLNORAW, // EvLhighl + DEMOSAIC, // EvLbaselog +// DEMOSAIC, // EvLgrbl + DEMOSAIC // EvRetinexlhcurve }; diff --git a/rtengine/refreshmap.h b/rtengine/refreshmap.h index 7aefcbcc3..16c05654a 100644 --- a/rtengine/refreshmap.h +++ b/rtengine/refreshmap.h @@ -68,7 +68,6 @@ #define INPUTPROFILE WHITEBALANCE #define GAMMA (M_COLOR|M_LUMINANCE) #define MINUPDATE M_MINUPDATE -#define NONE 0 #define ALLNORAW (M_INIT|M_LINDENOISE|M_TRANSFORM|M_BLURMAP|M_AUTOEXP|M_RGBCURVE|M_LUMACURVE|M_LUMINANCE|M_COLOR) extern int refreshmap[]; diff --git a/rtengine/rtengine.h b/rtengine/rtengine.h index 6c727ac87..195911a3a 100644 --- a/rtengine/rtengine.h +++ b/rtengine/rtengine.h @@ -250,7 +250,7 @@ public: * @param histLuma is the array of size 256 containing the histogram of the luminance channel * other for curves backgrounds, histRAW is RAW without colors */ virtual void histogramChanged (LUTu & histRed, LUTu & histGreen, LUTu & histBlue, LUTu & histLuma, LUTu & histToneCurve, LUTu & histLCurve, LUTu & histCCurve,/* LUTu & histCLurve,LUTu & histLLCurve, */LUTu & histLCAM, LUTu & histCCAM, - LUTu & histRedRaw, LUTu & histGreenRaw, LUTu & histBlueRaw, LUTu & histChroma) {} + LUTu & histRedRaw, LUTu & histGreenRaw, LUTu & histBlueRaw, LUTu & histChroma, LUTu & histLRETI) {} }; /** This listener is used when the auto exposure has been recomputed (e.g. when the clipping ratio changed). */ @@ -287,6 +287,14 @@ public : }; +class RetinexListener +{ +public : + virtual ~RetinexListener() {} + virtual void minmaxChanged (double cdma, double cdmin, double mini, double maxi, double Tmean, double Tsigma, double Tmin, double Tmax) {} + +}; + class AutoColorTonListener { public : @@ -405,6 +413,7 @@ public: virtual void setAutoBWListener (AutoBWListener* l) = 0; virtual void setAutoColorTonListener (AutoColorTonListener* l) = 0; virtual void setAutoChromaListener (AutoChromaListener* l) = 0; + virtual void setRetinexListener (RetinexListener* l) = 0; virtual void setWaveletListener (WaveletListener* l) = 0; virtual ~StagedImageProcessor () {} diff --git a/rtengine/shmap.cc b/rtengine/shmap.cc index cb2a2a332..34fadd5e7 100644 --- a/rtengine/shmap.cc +++ b/rtengine/shmap.cc @@ -74,10 +74,7 @@ void SHMap::update (Imagefloat* img, double radius, double lumi[3], bool hq, int #pragma omp parallel #endif { - AlignedBufferMP* pBuffer = new AlignedBufferMP (max(W, H)); - gaussHorizontal (map, map, *pBuffer, W, H, radius); - gaussVertical (map, map, *pBuffer, W, H, radius); - delete pBuffer; + gaussianBlur (map, map, W, H, radius); } } diff --git a/rtengine/simpleprocess.cc b/rtengine/simpleprocess.cc index 048fca0c2..91b7df178 100644 --- a/rtengine/simpleprocess.cc +++ b/rtengine/simpleprocess.cc @@ -116,12 +116,31 @@ IImage16* processImage (ProcessingJob* pjob, int& errorCode, ProgressListener* p pl->setProgress (0.30); } - imgsrc->HLRecovery_Global( params.toneCurve ); + if(params.retinex.enabled) { //enabled Retinex + LUTf cdcurve (65536, 0); + LUTu dummy; + RetinextransmissionCurve dehatransmissionCurve; + bool dehacontlutili = false; + bool useHsl = false; +// multi_array2D conversionBuffer(1, 1); + multi_array2D conversionBuffer(1, 1); + imgsrc->retinexPrepareBuffers(params.icm, params.retinex, conversionBuffer, dummy); + imgsrc->retinexPrepareCurves(params.retinex, cdcurve, dehatransmissionCurve, dehacontlutili, useHsl, dummy, dummy ); + float minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax; + imgsrc->retinex( params.icm, params.retinex, params.toneCurve, cdcurve, dehatransmissionCurve, conversionBuffer, dehacontlutili, useHsl, minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax, dummy); + } if (pl) { pl->setProgress (0.40); } + imgsrc->HLRecovery_Global( params.toneCurve ); + + + if (pl) { + pl->setProgress (0.45); + } + // set the color temperature ColorTemp currWB = ColorTemp (params.wb.temperature, params.wb.green, params.wb.equal, params.wb.method); @@ -610,7 +629,7 @@ IImage16* processImage (ProcessingJob* pjob, int& errorCode, ProgressListener* p imgsrc->getImage (currWB, tr, baseImg, pp, params.toneCurve, params.icm, params.raw); if (pl) { - pl->setProgress (0.45); + pl->setProgress (0.50); } // LUTf Noisecurve (65536,0); @@ -797,7 +816,6 @@ IImage16* processImage (ProcessingJob* pjob, int& errorCode, ProgressListener* p float moyS = 0.f; float eqty = 0.f; ipf.moyeqt (baseImg, moyS, eqty);//return image : mean saturation and standard dev of saturation - //printf("moy=%f ET=%f\n", moyS,eqty); float satp = ((moyS + 1.5f * eqty) - 0.3f) / 0.7f; //1.5 sigma ==> 93% pixels with high saturation -0.3 / 0.7 convert to Hombre scale if(satp >= 0.92f) { @@ -847,7 +865,7 @@ IImage16* processImage (ProcessingJob* pjob, int& errorCode, ProgressListener* p shmap = NULL; if (pl) { - pl->setProgress (0.5); + pl->setProgress (0.55); } //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -901,6 +919,7 @@ IImage16* processImage (ProcessingJob* pjob, int& errorCode, ProgressListener* p params.labCurve.acurve, params.labCurve.bcurve, params.labCurve.cccurve, params.labCurve.lccurve, curve1, curve2, satcurve, lhskcurve, hist16C, hist16C, dummy, dummy, 1); +// ipf.MSR(labView, labView->W, labView->H, 1); ipf.chromiLuminanceCurve (NULL, 1, labView, labView, curve1, curve2, satcurve, lhskcurve, clcurve, lumacurve, utili, autili, butili, ccutili, cclutili, clcutili, dummy, dummy, dummy, dummy); diff --git a/rtengine/sleefsseavx.c b/rtengine/sleefsseavx.c index 6b83c859a..c2d1278f4 100644 --- a/rtengine/sleefsseavx.c +++ b/rtengine/sleefsseavx.c @@ -1322,5 +1322,11 @@ static inline void vswap( vmask condition, vfloat &a, vfloat &b) { b = temp; } +static inline float vhadd( vfloat a ) +{ + a += _mm_movehl_ps(a, a); + return _mm_cvtss_f32(_mm_add_ss(a, _mm_shuffle_ps(a, a, 1))); +} + #endif // __SSE2__ #endif // SLEEFSSEAVX diff --git a/rtengine/stdimagesource.h b/rtengine/stdimagesource.h index 3848fe5e9..6017fae74 100644 --- a/rtengine/stdimagesource.h +++ b/rtengine/stdimagesource.h @@ -92,7 +92,6 @@ public: void convertColorSpace(Imagefloat* image, ColorManagementParams cmp, ColorTemp &wb);// RAWParams raw will not be used for non-raw files (see imagesource.h) static void colorSpaceConversion (Imagefloat* im, ColorManagementParams cmp, cmsHPROFILE embedded, IIOSampleFormat sampleFormat); - //static void colorSpaceConversion16 (Image16* im, ColorManagementParams cmp, cmsHPROFILE embedded); static inline double intpow (double a, int b) { diff --git a/rtgui/CMakeLists.txt b/rtgui/CMakeLists.txt index c21dd6c55..5f5dbc1c1 100644 --- a/rtgui/CMakeLists.txt +++ b/rtgui/CMakeLists.txt @@ -17,7 +17,7 @@ set (BASESOURCEFILES previewloader.cc rtimage.cc inspector.cc histogrampanel.cc history.cc imagearea.cc imageareapanel.cc iptcpanel.cc labcurve.cc main.cc - multilangmgr.cc mycurve.cc myflatcurve.cc mydiagonalcurve.cc options.cc + multilangmgr.cc mycurve.cc myflatcurve.cc mydiagonalcurve.cc options.cc retinex.cc preferences.cc profilepanel.cc saveasdlg.cc saveformatpanel.cc soundman.cc splash.cc thumbnail.cc tonecurve.cc toolbar.cc diff --git a/rtgui/addsetids.h b/rtgui/addsetids.h index 8f6ef6685..5db492db3 100644 --- a/rtgui/addsetids.h +++ b/rtgui/addsetids.h @@ -107,8 +107,17 @@ #define ADDSET_WA_EDGEDETECTTHR2 99 #define ADDSET_WA_TMRS 100 #define ADDSET_WA_GAMMA 101 +#define ADDSET_RETI_STR 102 +#define ADDSET_RETI_SCAL 103 +#define ADDSET_RETI_NEIGH 104 +#define ADDSET_RETI_LIMD 105 +#define ADDSET_RETI_GAIN 106 +#define ADDSET_RETI_OFFS 107 +#define ADDSET_RETI_VART 108 +#define ADDSET_RETI_GAM 109 +#define ADDSET_RETI_SLO 110 // When adding items, make sure to update ADDSET_PARAM_NUM -#define ADDSET_PARAM_NUM 102 // THIS IS USED AS A DELIMITER!! +#define ADDSET_PARAM_NUM 111 // THIS IS USED AS A DELIMITER!! #endif diff --git a/rtgui/adjuster.cc b/rtgui/adjuster.cc index 5f093dc59..0a6e82241 100644 --- a/rtgui/adjuster.cc +++ b/rtgui/adjuster.cc @@ -17,14 +17,7 @@ * along with RawTherapee. If not, see . */ #include "adjuster.h" - -// class_slot is no longer part of the sigc++ source tree, but starting from which version ? -#if 1 #include -#else -#include -#endif - #include #include "multilangmgr.h" #include "../rtengine/rtengine.h" diff --git a/rtgui/batchtoolpanelcoord.cc b/rtgui/batchtoolpanelcoord.cc index 95f7f3ec7..e1d78a19f 100644 --- a/rtgui/batchtoolpanelcoord.cc +++ b/rtgui/batchtoolpanelcoord.cc @@ -167,6 +167,7 @@ void BatchToolPanelCoordinator::initSession () blackwhite->setAdjusterBehavior (false, false); colortoning->setAdjusterBehavior (false, false, false, false, false); filmSimulation->setAdjusterBehavior(false); + retinex->setAdjusterBehavior (false, false, false, false, false, false, false, false, false); shadowshighlights->setAdjusterBehavior (false, false, false); dirpyrequalizer->setAdjusterBehavior (false, false, false); @@ -203,6 +204,7 @@ void BatchToolPanelCoordinator::initSession () // colortoning->setAdjusterBehavior (options.baBehav[ADDSET_COLORTONING_SPLIT], options.baBehav[ADDSET_COLORTONING_SATTHRESHOLD], options.baBehav[ADDSET_COLORTONING_SATOPACITY], options.baBehav[ADDSET_COLORTONING_STRPROTECT], options.baBehav[ADDSET_COLORTONING_BALANCE]); colortoning->setAdjusterBehavior (options.baBehav[ADDSET_COLORTONING_SPLIT], options.baBehav[ADDSET_COLORTONING_SATTHRESHOLD], options.baBehav[ADDSET_COLORTONING_SATOPACITY], options.baBehav[ADDSET_COLORTONING_STRENGTH], options.baBehav[ADDSET_COLORTONING_BALANCE]); filmSimulation->setAdjusterBehavior(options.baBehav[ADDSET_FILMSIMULATION_STRENGTH]); + retinex->setAdjusterBehavior (options.baBehav[ADDSET_RETI_STR], options.baBehav[ADDSET_RETI_SCAL], options.baBehav[ADDSET_RETI_NEIGH], options.baBehav[ADDSET_RETI_LIMD], options.baBehav[ADDSET_RETI_GAIN], options.baBehav[ADDSET_RETI_OFFS], options.baBehav[ADDSET_RETI_VART], options.baBehav[ADDSET_RETI_GAM], options.baBehav[ADDSET_RETI_SLO]); chmixer->setAdjusterBehavior (options.baBehav[ADDSET_CHMIXER] ); blackwhite->setAdjusterBehavior (options.baBehav[ADDSET_BLACKWHITE_HUES], options.baBehav[ADDSET_BLACKWHITE_GAMMA]); @@ -576,6 +578,41 @@ void BatchToolPanelCoordinator::initSession () pparams.wavelet.gamma = 0; } + if (options.baBehav[ADDSET_RETI_STR]) { + pparams.retinex.str = 0; + } + + if (options.baBehav[ADDSET_RETI_SCAL]) { + pparams.retinex.scal = 0; + } + + if (options.baBehav[ADDSET_RETI_NEIGH]) { + pparams.retinex.neigh = 0; + } + + if (options.baBehav[ADDSET_RETI_LIMD]) { + pparams.retinex.limd = 0; + } + + if (options.baBehav[ADDSET_RETI_GAIN]) { + pparams.retinex.gain = 0; + } + + if (options.baBehav[ADDSET_RETI_OFFS]) { + pparams.retinex.offs = 0; + } + + if (options.baBehav[ADDSET_RETI_VART]) { + pparams.retinex.vart = 0; + } + + if (options.baBehav[ADDSET_RETI_GAM]) { + pparams.retinex.gam = 0; + } + + if (options.baBehav[ADDSET_RETI_SLO]) { + pparams.retinex.slope = 0; + } if (options.baBehav[ADDSET_DIRPYRDN_LUMA]) { pparams.dirpyrDenoise.luma = 0; diff --git a/rtgui/colorappearance.cc b/rtgui/colorappearance.cc index f3575e414..083755f79 100644 --- a/rtgui/colorappearance.cc +++ b/rtgui/colorappearance.cc @@ -1297,7 +1297,7 @@ void ColorAppearance::setBatchMode (bool batchMode) curveEditorG3->setBatchMode (batchMode); } -void ColorAppearance::updateCurveBackgroundHistogram (LUTu & histToneCurve, LUTu & histLCurve, LUTu & histCCurve,/* LUTu & histCLurve, LUTu & histLLCurve,*/ LUTu & histLCAM, LUTu & histCCAM, LUTu & histRed, LUTu & histGreen, LUTu & histBlue, LUTu & histLuma) +void ColorAppearance::updateCurveBackgroundHistogram (LUTu & histToneCurve, LUTu & histLCurve, LUTu & histCCurve,/* LUTu & histCLurve, LUTu & histLLCurve,*/ LUTu & histLCAM, LUTu & histCCAM, LUTu & histRed, LUTu & histGreen, LUTu & histBlue, LUTu & histLuma, LUTu & histLRETI) { shape->updateBackgroundHistogram (histLCAM); diff --git a/rtgui/colorappearance.h b/rtgui/colorappearance.h index 977b89ed7..04fe2a3bb 100644 --- a/rtgui/colorappearance.h +++ b/rtgui/colorappearance.h @@ -131,7 +131,7 @@ public: void setAdjusterBehavior (bool degreeadd, bool adapscenadd, bool adaplumadd, bool badpixsladd, bool jlightadd, bool chromaadd, bool contrastadd, bool rstprotectionadd, bool qbrightadd, bool qcontrastadd, bool schromaadd, bool mchromaadd, bool colorhadd); void trimValues (rtengine::procparams::ProcParams* pp); - void updateCurveBackgroundHistogram (LUTu & histToneCurve, LUTu & histLCurve, LUTu & histCCurve,/* LUTu & histCLurve, LUTu & histLLCurve,*/ LUTu & histLCAM, LUTu & histCCAM, LUTu & histRed, LUTu & histGreen, LUTu & histBlue, LUTu & histLuma); + void updateCurveBackgroundHistogram (LUTu & histToneCurve, LUTu & histLCurve, LUTu & histCCurve,/* LUTu & histCLurve, LUTu & histLLCurve,*/ LUTu & histLCAM, LUTu & histCCAM, LUTu & histRed, LUTu & histGreen, LUTu & histBlue, LUTu & histLuma, LUTu & histLRETI); virtual void colorForValue (double valX, double valY, enum ColorCaller::ElemType elemType, int callerId, ColorCaller *caller); }; diff --git a/rtgui/editorpanel.cc b/rtgui/editorpanel.cc index b04028266..5bc3b81b0 100644 --- a/rtgui/editorpanel.cc +++ b/rtgui/editorpanel.cc @@ -572,6 +572,7 @@ void EditorPanel::open (Thumbnail* tmb, rtengine::InitialImage* isrc) Gtk::Allocation alloc; iareapanel->imageArea->on_resized(alloc); } + history->resetSnapShotNumber(); } @@ -1776,14 +1777,14 @@ void EditorPanel::tbBeforeLock_toggled () } void EditorPanel::histogramChanged (LUTu & histRed, LUTu & histGreen, LUTu & histBlue, LUTu & histLuma, LUTu & histToneCurve, LUTu & histLCurve, LUTu & histCCurve, /*LUTu & histCLurve, LUTu & histLLCurve,*/ LUTu & histLCAM, LUTu & histCCAM, - LUTu & histRedRaw, LUTu & histGreenRaw, LUTu & histBlueRaw , LUTu & histChroma) + LUTu & histRedRaw, LUTu & histGreenRaw, LUTu & histBlueRaw , LUTu & histChroma, LUTu & histLRETI) { if (histogramPanel) { histogramPanel->histogramChanged (histRed, histGreen, histBlue, histLuma, histRedRaw, histGreenRaw, histBlueRaw, histChroma); } - tpc->updateCurveBackgroundHistogram (histToneCurve, histLCurve, histCCurve,/*histCLurve, histLLCurve,*/ histLCAM, histCCAM, histRed, histGreen, histBlue, histLuma); + tpc->updateCurveBackgroundHistogram (histToneCurve, histLCurve, histCCurve,/*histCLurve, histLLCurve,*/ histLCAM, histCCAM, histRed, histGreen, histBlue, histLuma, histLRETI); } bool EditorPanel::CheckSidePanelsVisibility() diff --git a/rtgui/editorpanel.h b/rtgui/editorpanel.h index db5b75aac..78b919806 100644 --- a/rtgui/editorpanel.h +++ b/rtgui/editorpanel.h @@ -176,7 +176,7 @@ public: // HistogramListener void histogramChanged (LUTu & histRed, LUTu & histGreen, LUTu & histBlue, LUTu & histLuma, LUTu & histToneCurve, LUTu & histLCurve, LUTu & histCCurve,/* LUTu & histCLurve, LUTu & histLLCurve,*/ LUTu & histLCAM, LUTu & histCCAM, - LUTu & histRedRaw, LUTu & histGreenRaw, LUTu & histBlueRaw, LUTu & histChroma); + LUTu & histRedRaw, LUTu & histGreenRaw, LUTu & histBlueRaw, LUTu & histChroma, LUTu & histLRETI); // event handlers void info_toggled (); diff --git a/rtgui/history.h b/rtgui/history.h index ad4e94ec0..c1d03c25f 100644 --- a/rtgui/history.h +++ b/rtgui/history.h @@ -127,7 +127,10 @@ public: void redo (); bool blistenerLock; - void resetSnapShotNumber() {bmnum = 1;}; + void resetSnapShotNumber() + { + bmnum = 1; + }; }; #endif diff --git a/rtgui/labcurve.cc b/rtgui/labcurve.cc index f5b11f0e9..7e5bf7b53 100644 --- a/rtgui/labcurve.cc +++ b/rtgui/labcurve.cc @@ -206,12 +206,16 @@ LCurve::LCurve () : FoldableToolPanel(this, "labcurves", M("TP_LABCURVE_LABEL")) curveEditorG->curveListComplete(); pack_start (*curveEditorG, Gtk::PACK_SHRINK, 4); + Gtk::HSeparator *hsepdh = Gtk::manage (new Gtk::HSeparator()); + hsepdh->show (); + pack_start (*hsepdh, Gtk::PACK_EXPAND_WIDGET, 4); } LCurve::~LCurve () { delete curveEditorG; + } void LCurve::read (const ProcParams* pp, const ParamsEdited* pedited) @@ -246,7 +250,6 @@ void LCurve::read (const ProcParams* pp, const ParamsEdited* pedited) contrast->setValue (pp->labCurve.contrast); chromaticity->setValue (pp->labCurve.chromaticity); adjusterChanged(chromaticity, pp->labCurve.chromaticity); // To update the GUI sensitiveness - //%%%%%%%%%%%%%%%%%%%%%% rstprotection->setValue (pp->labCurve.rstprotection); @@ -315,6 +318,7 @@ void LCurve::autoOpenCurve () if (!active) { clshape->openIfNonlinear(); } + } void LCurve::setEditProvider (EditDataProvider *provider) @@ -338,7 +342,6 @@ void LCurve::write (ProcParams* pp, ParamsEdited* pedited) pp->labCurve.brightness = brightness->getValue (); pp->labCurve.contrast = (int)contrast->getValue (); pp->labCurve.chromaticity = (int)chromaticity->getValue (); - //%%%%%%%%%%%%%%%%%%%%%% pp->labCurve.avoidcolorshift = avoidcolorshift->get_active (); pp->labCurve.lcredsk = lcredsk->get_active (); @@ -366,7 +369,6 @@ void LCurve::write (ProcParams* pp, ParamsEdited* pedited) pedited->labCurve.lcredsk = !lcredsk->get_inconsistent(); pedited->labCurve.rstprotection = rstprotection->getEditedState (); - //%%%%%%%%%%%%%%%%%%%%%% pedited->labCurve.lcurve = !lshape->isUnChanged (); pedited->labCurve.acurve = !ashape->isUnChanged (); @@ -377,7 +379,10 @@ void LCurve::write (ProcParams* pp, ParamsEdited* pedited) pedited->labCurve.hhcurve = !hhshape->isUnChanged (); pedited->labCurve.lccurve = !lcshape->isUnChanged (); pedited->labCurve.clcurve = !clshape->isUnChanged (); + + } + } void LCurve::setDefaults (const ProcParams* defParams, const ParamsEdited* pedited) @@ -393,7 +398,6 @@ void LCurve::setDefaults (const ProcParams* defParams, const ParamsEdited* pedit contrast->setDefaultEditedState (pedited->labCurve.contrast ? Edited : UnEdited); chromaticity->setDefaultEditedState (pedited->labCurve.chromaticity ? Edited : UnEdited); rstprotection->setDefaultEditedState (pedited->labCurve.rstprotection ? Edited : UnEdited); - } else { brightness->setDefaultEditedState (Irrelevant); contrast->setDefaultEditedState (Irrelevant); @@ -503,6 +507,8 @@ void LCurve::curveChanged (CurveEditor* ce) if (ce == clshape) { listener->panelChanged (EvLCLCurve, M("HISTORY_CUSTOMCURVE")); } + + } } @@ -616,14 +622,13 @@ void LCurve::setBatchMode (bool batchMode) contrast->showEditedCB (); chromaticity->showEditedCB (); rstprotection->showEditedCB (); - curveEditorG->setBatchMode (batchMode); lcshape->setBottomBarColorProvider(NULL, -1); lcshape->setLeftBarColorProvider(NULL, -1); } -void LCurve::updateCurveBackgroundHistogram (LUTu & histToneCurve, LUTu & histLCurve, LUTu & histCCurve,/* LUTu & histCLurve, LUTu & histLLCurve,*/ LUTu & histLCAM, LUTu & histCCAM, LUTu & histRed, LUTu & histGreen, LUTu & histBlue, LUTu & histLuma) +void LCurve::updateCurveBackgroundHistogram (LUTu & histToneCurve, LUTu & histLCurve, LUTu & histCCurve,/* LUTu & histCLurve, LUTu & histLLCurve,*/ LUTu & histLCAM, LUTu & histCCAM, LUTu & histRed, LUTu & histGreen, LUTu & histBlue, LUTu & histLuma, LUTu & histLRETI) { lshape->updateBackgroundHistogram (histLCurve); diff --git a/rtgui/labcurve.h b/rtgui/labcurve.h index f679fc020..6caba6b8a 100644 --- a/rtgui/labcurve.h +++ b/rtgui/labcurve.h @@ -31,6 +31,7 @@ class LCurve : public ToolParamBlock, public AdjusterListener, public FoldableTo protected: CurveEditorGroup* curveEditorG; +// CurveEditorGroup* curveEditorGD; Adjuster* brightness; Adjuster* contrast; Adjuster* chromaticity; @@ -42,8 +43,11 @@ protected: FlatCurveEditor* chshape; FlatCurveEditor* lhshape; FlatCurveEditor* hhshape; + Gtk::Label* labmdh; + Gtk::HBox* dhbox; DiagonalCurveEditor* clshape; + DiagonalCurveEditor* cdshape; //%%%%%%%%%%%%%%%% Gtk::CheckButton* avoidcolorshift; @@ -74,9 +78,14 @@ public: void avoidcolorshift_toggled (); void lcredsk_toggled(); - void updateCurveBackgroundHistogram (LUTu & histToneCurve, LUTu & histLCurve, LUTu & histCCurve,/* LUTu & histCLurve, LUTu & histLLCurve,*/ LUTu & histLCAM, LUTu & histCCAM, LUTu & histRed, LUTu & histGreen, LUTu & histBlue, LUTu & histLuma); + void updateCurveBackgroundHistogram (LUTu & histToneCurve, LUTu & histLCurve, LUTu & histCCurve,/* LUTu & histCLurve, LUTu & histLLCurve,*/ LUTu & histLCAM, LUTu & histCCAM, LUTu & histRed, LUTu & histGreen, LUTu & histBlue, LUTu & histLuma, LUTu & histLRETI); virtual void colorForValue (double valX, double valY, enum ColorCaller::ElemType elemType, int callerId, ColorCaller* caller); + +private: + + + }; #endif diff --git a/rtgui/main.cc b/rtgui/main.cc index 25c4e9bdb..ba5cf2bb4 100644 --- a/rtgui/main.cc +++ b/rtgui/main.cc @@ -283,6 +283,10 @@ int main(int argc, char **argv) simpleEditor = true; } + if (options.theme.empty()) { + options.theme = "21-Gray-Gray"; + } + Gtk::Main m(&argc, &argv); Glib::ustring icon_path = Glib::build_filename(argv0, "images"); diff --git a/rtgui/options.cc b/rtgui/options.cc index 3fb8e0c1a..84f860123 100644 --- a/rtgui/options.cc +++ b/rtgui/options.cc @@ -178,6 +178,10 @@ void Options::updatePaths() lastLabCurvesDir = preferredPath; } + if (lastRetinexDir.empty() || !safe_file_test (lastRetinexDir, Glib::FILE_TEST_EXISTS) || !safe_file_test (lastLabCurvesDir, Glib::FILE_TEST_IS_DIR)) { + lastRetinexDir = preferredPath; + } + if (lastDenoiseCurvesDir.empty() || !safe_file_test (lastDenoiseCurvesDir, Glib::FILE_TEST_EXISTS) || !safe_file_test (lastDenoiseCurvesDir, Glib::FILE_TEST_IS_DIR)) { lastDenoiseCurvesDir = preferredPath; } @@ -594,6 +598,15 @@ void Options::setDefaults () 0, //ADDSET_WA_EDGEDETECTTHR2 0, //ADDSET_WA_TMRS 0, //ADDSET_WA_GAMMA + 0, //ADDSET_RETI_STR + 0, //ADDSET_RETI_SCAL + 0, //ADDSET_RETI_NEIGH + 0, //ADDSET_RETI_LIMD + 0, //ADDSET_RETI_GAIN + 0, //ADDSET_RETI_OFFS + 0, //ADDSET_RETI_VART + 0, //ADDSET_RETI_GAM + 0, //ADDSET_RETI_SLO }; baBehav = std::vector (babehav, babehav + ADDSET_PARAM_NUM); @@ -683,6 +696,7 @@ void Options::setDefaults () // at the end of the "updatePaths" method. lastRgbCurvesDir = ""; lastLabCurvesDir = ""; + lastRetinexDir = ""; lastDenoiseCurvesDir = ""; lastWaveletCurvesDir = ""; lastPFCurvesDir = ""; @@ -1738,6 +1752,7 @@ int Options::readFromFile (Glib::ustring fname) safeDirGet(keyFile, "Dialogs", "LastFlatfieldDir", lastFlatfieldDir); safeDirGet(keyFile, "Dialogs", "LastRgbCurvesDir", lastRgbCurvesDir); safeDirGet(keyFile, "Dialogs", "LastLabCurvesDir", lastLabCurvesDir); + safeDirGet(keyFile, "Dialogs", "LastRetinexDir", lastRetinexDir); safeDirGet(keyFile, "Dialogs", "LastDenoiseCurvesDir", lastDenoiseCurvesDir); safeDirGet(keyFile, "Dialogs", "LastWaveletCurvesDir", lastWaveletCurvesDir); safeDirGet(keyFile, "Dialogs", "LastPFCurvesDir", lastPFCurvesDir); @@ -2075,6 +2090,7 @@ int Options::saveToFile (Glib::ustring fname) keyFile.set_string ("Dialogs", "LastFlatfieldDir", lastFlatfieldDir); keyFile.set_string ("Dialogs", "LastRgbCurvesDir", lastRgbCurvesDir); keyFile.set_string ("Dialogs", "LastLabCurvesDir", lastLabCurvesDir); + keyFile.set_string ("Dialogs", "LastRetinexDir", lastRetinexDir); keyFile.set_string ("Dialogs", "LastDenoiseCurvesDir", lastDenoiseCurvesDir); keyFile.set_string ("Dialogs", "LastWaveletCurvesDir", lastWaveletCurvesDir); keyFile.set_string ("Dialogs", "LastPFCurvesDir", lastPFCurvesDir); diff --git a/rtgui/options.h b/rtgui/options.h index 73b22f4a7..614042fa2 100644 --- a/rtgui/options.h +++ b/rtgui/options.h @@ -279,6 +279,7 @@ public: Glib::ustring lastFlatfieldDir; Glib::ustring lastRgbCurvesDir; Glib::ustring lastLabCurvesDir; + Glib::ustring lastRetinexDir; Glib::ustring lastDenoiseCurvesDir; Glib::ustring lastWaveletCurvesDir; Glib::ustring lastPFCurvesDir; diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc index a597662b7..08433357c 100644 --- a/rtgui/paramsedited.cc +++ b/rtgui/paramsedited.cc @@ -49,6 +49,28 @@ void ParamsEdited::set (bool v) toneCurve.expcomp = v; toneCurve.hrenabled = v; toneCurve.method = v; + retinex.cdcurve = v; + retinex.cdHcurve = v; + retinex.lhcurve = v; + retinex.retinexMethod = v; + retinex.retinexcolorspace = v; + retinex.gammaretinex = v; + retinex.enabled = v; + retinex.str = v; + retinex.scal = v; + retinex.gam = v; + retinex.slope = v; + retinex.neigh = v; + retinex.gain = v; + retinex.offs = v; + retinex.vart = v; + retinex.limd = v; + retinex.highl = v; + retinex.baselog = v; +// retinex.grbl = v; + retinex.medianmap = v; + retinex.transmissionCurve = v; + retinex.retinex = v; labCurve.lcurve = v; labCurve.acurve = v; labCurve.bcurve = v; @@ -504,6 +526,27 @@ void ParamsEdited::initFrom (const std::vector toneCurve.expcomp = toneCurve.expcomp && p.toneCurve.expcomp == other.toneCurve.expcomp; toneCurve.hrenabled = toneCurve.hrenabled && p.toneCurve.hrenabled == other.toneCurve.hrenabled; toneCurve.method = toneCurve.method && p.toneCurve.method == other.toneCurve.method; + retinex.cdcurve = retinex.cdcurve && p.retinex.cdcurve == other.retinex.cdcurve; + retinex.cdHcurve = retinex.cdHcurve && p.retinex.cdHcurve == other.retinex.cdHcurve; + retinex.lhcurve = retinex.lhcurve && p.retinex.lhcurve == other.retinex.lhcurve; + retinex.transmissionCurve = retinex.transmissionCurve && p.retinex.transmissionCurve == other.retinex.transmissionCurve; + retinex.retinexMethod = retinex.retinexMethod && p.retinex.retinexMethod == other.retinex.retinexMethod; + retinex.retinexcolorspace = retinex.retinexcolorspace && p.retinex.retinexcolorspace == other.retinex.retinexcolorspace; + retinex.gammaretinex = retinex.gammaretinex && p.retinex.gammaretinex == other.retinex.gammaretinex; + retinex.str = retinex.str && p.retinex.str == other.retinex.str; + retinex.scal = retinex.scal && p.retinex.scal == other.retinex.scal; + retinex.gam = retinex.gam && p.retinex.gam == other.retinex.gam; + retinex.slope = retinex.slope && p.retinex.slope == other.retinex.slope; + retinex.neigh = retinex.neigh && p.retinex.neigh == other.retinex.neigh; + retinex.gain = retinex.gain && p.retinex.gain == other.retinex.gain; + retinex.offs = retinex.offs && p.retinex.offs == other.retinex.offs; + retinex.vart = retinex.vart && p.retinex.vart == other.retinex.vart; + retinex.limd = retinex.limd && p.retinex.limd == other.retinex.limd; + retinex.highl = retinex.highl && p.retinex.highl == other.retinex.highl; + retinex.baselog = retinex.baselog && p.retinex.baselog == other.retinex.baselog; +// retinex.grbl = retinex.grbl && p.retinex.grbl == other.retinex.grbl; + retinex.medianmap = retinex.medianmap && p.retinex.medianmap == other.retinex.medianmap; + retinex.enabled = retinex.enabled && p.retinex.enabled == other.retinex.enabled; labCurve.lcurve = labCurve.lcurve && p.labCurve.lcurve == other.labCurve.lcurve; labCurve.acurve = labCurve.acurve && p.labCurve.acurve == other.labCurve.acurve; labCurve.bcurve = labCurve.bcurve && p.labCurve.bcurve == other.labCurve.bcurve; @@ -995,6 +1038,90 @@ void ParamsEdited::combine (rtengine::procparams::ProcParams& toEdit, const rten toEdit.toneCurve.method = mods.toneCurve.method; } + if (retinex.enabled) { + toEdit.retinex.enabled = mods.retinex.enabled; + } + + if (retinex.cdcurve) { + toEdit.retinex.cdcurve = mods.retinex.cdcurve; + } + + if (retinex.cdHcurve) { + toEdit.retinex.cdHcurve = mods.retinex.cdHcurve; + } + + if (retinex.lhcurve) { + toEdit.retinex.lhcurve = mods.retinex.lhcurve; + } + + if (retinex.transmissionCurve) { + toEdit.retinex.transmissionCurve = mods.retinex.transmissionCurve; + } + + if (retinex.retinexMethod) { + toEdit.retinex.retinexMethod = mods.retinex.retinexMethod; + } + + if (retinex.retinexcolorspace) { + toEdit.retinex.retinexcolorspace = mods.retinex.retinexcolorspace; + } + + if (retinex.gammaretinex) { + toEdit.retinex.gammaretinex = mods.retinex.gammaretinex; + } + + if (retinex.gam) { + toEdit.retinex.gam = dontforceSet && options.baBehav[ADDSET_RETI_GAM] ? toEdit.retinex.gam + mods.retinex.gam : mods.retinex.gam; + } + + if (retinex.slope) { + toEdit.retinex.slope = dontforceSet && options.baBehav[ADDSET_RETI_SLO] ? toEdit.retinex.slope + mods.retinex.slope : mods.retinex.slope; + } + + if (retinex.str) { + toEdit.retinex.str = dontforceSet && options.baBehav[ADDSET_RETI_STR] ? toEdit.retinex.str + mods.retinex.str : mods.retinex.str; + } + + if (retinex.scal) { + toEdit.retinex.scal = dontforceSet && options.baBehav[ADDSET_RETI_SCAL] ? toEdit.retinex.scal + mods.retinex.scal : mods.retinex.scal; + } + + if (retinex.medianmap) { + toEdit.retinex.medianmap = mods.retinex.medianmap; + } + + if (retinex.neigh) { + toEdit.retinex.neigh = dontforceSet && options.baBehav[ADDSET_RETI_NEIGH] ? toEdit.retinex.neigh + mods.retinex.neigh : mods.retinex.neigh; + } + + if (retinex.limd) { + toEdit.retinex.limd = dontforceSet && options.baBehav[ADDSET_RETI_LIMD] ? toEdit.retinex.limd + mods.retinex.limd : mods.retinex.limd; + } + + if (retinex.highl) { + toEdit.retinex.highl = mods.retinex.highl; + } + + if (retinex.baselog) { + toEdit.retinex.baselog = mods.retinex.baselog; + } + +// if (retinex.grbl) { +// toEdit.retinex.grbl = mods.retinex.grbl; +// } + + if (retinex.gain) { + toEdit.retinex.gain = dontforceSet && options.baBehav[ADDSET_RETI_GAIN] ? toEdit.retinex.gain + mods.retinex.gain : mods.retinex.gain; + } + + if (retinex.offs) { + toEdit.retinex.offs = dontforceSet && options.baBehav[ADDSET_RETI_OFFS] ? toEdit.retinex.offs + mods.retinex.offs : mods.retinex.offs; + } + + if (retinex.vart) { + toEdit.retinex.vart = dontforceSet && options.baBehav[ADDSET_RETI_VART] ? toEdit.retinex.vart + mods.retinex.vart : mods.retinex.vart; + } + if (labCurve.lcurve) { toEdit.labCurve.lcurve = mods.labCurve.lcurve; } @@ -2571,3 +2698,8 @@ bool LensProfParamsEdited::isUnchanged() const { return lcpFile; } + +bool RetinexParamsEdited::isUnchanged() const +{ + return enabled && retinexcolorspace && gammaretinex && gam && slope; +} \ No newline at end of file diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h index a22956b58..36ed1e5ea 100644 --- a/rtgui/paramsedited.h +++ b/rtgui/paramsedited.h @@ -55,6 +55,36 @@ public: bool method; }; +class RetinexParamsEdited +{ +public: + bool enabled; + bool str; + bool scal; + bool gam; + bool slope; + bool neigh; + bool gain; + bool offs; + bool retinexMethod; + bool retinexcolorspace; + bool gammaretinex; + bool vart; + bool limd; + bool highl; + bool baselog; +// bool grbl; + bool method; + bool transmissionCurve; + bool cdcurve; + bool cdHcurve; + bool lhcurve; + bool retinex; + bool medianmap; + bool isUnchanged() const; +}; + + class LCurveParamsEdited { public: @@ -73,7 +103,6 @@ public: bool hhcurve; bool lccurve; bool clcurve; - bool enabled; bool method; }; @@ -698,6 +727,7 @@ public: LCurveParamsEdited labCurve; RGBCurvesParamsEdited rgbCurves; ColorToningEdited colorToning; + RetinexParamsEdited retinex; SharpeningParamsEdited sharpening; SharpeningParamsEdited prsharpening; SharpenEdgeParamsEdited sharpenEdge; diff --git a/rtgui/partialpastedlg.cc b/rtgui/partialpastedlg.cc index 55da5f1b0..8e0b98320 100644 --- a/rtgui/partialpastedlg.cc +++ b/rtgui/partialpastedlg.cc @@ -52,6 +52,7 @@ PartialPasteDlg::PartialPasteDlg (Glib::ustring title) exposure = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_EXPOSURE"))); sh = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_SHADOWSHIGHLIGHTS"))); epd = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_EPD"))); + retinex = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_RETINEX"))); pcvignette = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_PCVIGNETTE"))); gradient = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_GRADIENT"))); labcurve = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_LABCURVE"))); @@ -141,6 +142,7 @@ PartialPasteDlg::PartialPasteDlg (Glib::ustring title) vboxes[0]->pack_start (*exposure, Gtk::PACK_SHRINK, 2); vboxes[0]->pack_start (*sh, Gtk::PACK_SHRINK, 2); vboxes[0]->pack_start (*epd, Gtk::PACK_SHRINK, 2); + vboxes[0]->pack_start (*retinex, Gtk::PACK_SHRINK, 2); vboxes[0]->pack_start (*pcvignette, Gtk::PACK_SHRINK, 2); vboxes[0]->pack_start (*gradient, Gtk::PACK_SHRINK, 2); vboxes[0]->pack_start (*labcurve, Gtk::PACK_SHRINK, 2); @@ -294,6 +296,7 @@ PartialPasteDlg::PartialPasteDlg (Glib::ustring title) exposureConn = exposure->signal_toggled().connect (sigc::bind (sigc::mem_fun(*basic, &Gtk::CheckButton::set_inconsistent), true)); shConn = sh->signal_toggled().connect (sigc::bind (sigc::mem_fun(*basic, &Gtk::CheckButton::set_inconsistent), true)); epdConn = epd->signal_toggled().connect (sigc::bind (sigc::mem_fun(*basic, &Gtk::CheckButton::set_inconsistent), true)); + retinexConn = retinex->signal_toggled().connect (sigc::bind (sigc::mem_fun(*basic, &Gtk::CheckButton::set_inconsistent), true)); pcvignetteConn = pcvignette->signal_toggled().connect (sigc::bind (sigc::mem_fun(*basic, &Gtk::CheckButton::set_inconsistent), true)); gradientConn = gradient->signal_toggled().connect (sigc::bind (sigc::mem_fun(*basic, &Gtk::CheckButton::set_inconsistent), true)); labcurveConn = labcurve->signal_toggled().connect (sigc::bind (sigc::mem_fun(*basic, &Gtk::CheckButton::set_inconsistent), true)); @@ -695,6 +698,10 @@ void PartialPasteDlg::applyPaste (rtengine::procparams::ProcParams* dstPP, Param filterPE.epd = falsePE.epd; } + if (!retinex->get_active ()) { + filterPE.retinex = falsePE.retinex; + } + if (!pcvignette->get_active ()) { filterPE.pcvignette = falsePE.pcvignette; } diff --git a/rtgui/partialpastedlg.h b/rtgui/partialpastedlg.h index 697a9b830..57a235f35 100644 --- a/rtgui/partialpastedlg.h +++ b/rtgui/partialpastedlg.h @@ -46,6 +46,7 @@ public: Gtk::CheckButton* exposure; Gtk::CheckButton* sh; Gtk::CheckButton* epd; + Gtk::CheckButton* retinex; Gtk::CheckButton* pcvignette; Gtk::CheckButton* gradient; Gtk::CheckButton* labcurve; @@ -123,7 +124,7 @@ public: sigc::connection everythingConn, basicConn, detailConn, colorConn, lensConn, compositionConn, metaConn, rawConn, wavConn; sigc::connection wbConn, exposureConn, shConn, pcvignetteConn, gradientConn, labcurveConn, colorappearanceConn; - sigc::connection sharpenConn, gradsharpenConn, microcontrastConn, impdenConn, dirpyrdenConn, defringeConn, epdConn, dirpyreqConn, waveletConn; + sigc::connection sharpenConn, gradsharpenConn, microcontrastConn, impdenConn, dirpyrdenConn, defringeConn, epdConn, dirpyreqConn, waveletConn, retinexConn; sigc::connection vibranceConn, chmixerConn, hsveqConn, rgbcurvesConn, chmixerbwConn, colortoningConn, filmSimulationConn; sigc::connection distortionConn, cacorrConn, vignettingConn, lcpConn; sigc::connection coarserotConn, finerotConn, cropConn, resizeConn, perspectiveConn, commonTransConn; diff --git a/rtgui/preferences.cc b/rtgui/preferences.cc index 005358070..2dfc7d29f 100644 --- a/rtgui/preferences.cc +++ b/rtgui/preferences.cc @@ -16,14 +16,7 @@ * You should have received a copy of the GNU General Public License * along with RawTherapee. If not, see . */ - -// class_slot is no longer part of the sigc++ source tree, but starting from which version ? -#if 1 #include -#else -#include -#endif - #include "preferences.h" #include "multilangmgr.h" #include "splash.h" @@ -175,6 +168,18 @@ Gtk::Widget* Preferences::getBatchProcPanel () appendBehavList (mi, M("TP_EXPOSURE_CONTRAST"), ADDSET_TC_CONTRAST, false); appendBehavList (mi, M("TP_EXPOSURE_SATURATION"), ADDSET_TC_SATURATION, false); + mi = behModel->append (); + mi->set_value (behavColumns.label, M("TP_RETINEX_LABEL")); + appendBehavList (mi, M("TP_RETINEX_STRENGTH"), ADDSET_RETI_STR, false); + appendBehavList (mi, M("TP_RETINEX_NEIGHBOR"), ADDSET_RETI_NEIGH, false); + appendBehavList (mi, M("TP_RETINEX_GAMMA"), ADDSET_RETI_GAM, false); + appendBehavList (mi, M("TP_RETINEX_SLOPE"), ADDSET_RETI_SLO, false); + appendBehavList (mi, M("TP_RETINEX_SCALES"), ADDSET_RETI_SCAL, false); + appendBehavList (mi, M("TP_RETINEX_GAIN"), ADDSET_RETI_GAIN, false); + appendBehavList (mi, M("TP_RETINEX_OFFSET"), ADDSET_RETI_OFFS, false); + appendBehavList (mi, M("TP_RETINEX_THRESHOLD"), ADDSET_RETI_LIMD, false); + appendBehavList (mi, M("TP_RETINEX_VARIANCE"), ADDSET_RETI_VART, false); + mi = behModel->append (); mi->set_value (behavColumns.label, M("TP_SHADOWSHLIGHTS_LABEL")); appendBehavList (mi, M("TP_SHADOWSHLIGHTS_HIGHLIGHTS"), ADDSET_SH_HIGHLIGHTS, false); diff --git a/rtgui/retinex.cc b/rtgui/retinex.cc new file mode 100644 index 000000000..2613cf8da --- /dev/null +++ b/rtgui/retinex.cc @@ -0,0 +1,992 @@ +/* + * This file is part of RawTherapee. + */ +#include "retinex.h" +#include "mycurve.h" + +using namespace rtengine; +using namespace rtengine::procparams; + +Retinex::Retinex () : FoldableToolPanel(this, "retinex", M("TP_RETINEX_LABEL"), false, true) +{ + CurveListener::setMulti(true); + std::vector milestones; + nextmin = 0.; + nextmax = 0.; + nextminiT = 0.; + nextmaxiT = 0.; + nextmeanT = 0.; + nextsigma = 0.; + nextminT = 0.; + nextmaxT = 0.; + + Gtk::VBox * retinexVBox = Gtk::manage ( new Gtk::VBox()); + retinexVBox->set_border_width(4); + retinexVBox->set_spacing(2); + + Gtk::VBox * settingsVBox = Gtk::manage ( new Gtk::VBox()); + settingsVBox->set_border_width(4); + settingsVBox->set_spacing(2); + + dhbox = Gtk::manage (new Gtk::HBox ()); + labmdh = Gtk::manage (new Gtk::Label (M("TP_RETINEX_METHOD") + ":")); + dhbox->pack_start (*labmdh, Gtk::PACK_SHRINK, 1); + + retinexMethod = Gtk::manage (new MyComboBoxText ()); + retinexMethod->append_text (M("TP_RETINEX_LOW")); + retinexMethod->append_text (M("TP_RETINEX_UNIFORM")); + retinexMethod->append_text (M("TP_RETINEX_HIGH")); + retinexMethod->append_text (M("TP_RETINEX_HIGHLIG")); +// retinexMethod->append_text (M("TP_RETINEX_HIGHLIGPLUS")); + retinexMethod->set_active(0); + retinexMethodConn = retinexMethod->signal_changed().connect ( sigc::mem_fun(*this, &Retinex::retinexMethodChanged) ); + retinexMethod->set_tooltip_markup (M("TP_RETINEX_METHOD_TOOLTIP")); + + retinexcolorspace = Gtk::manage (new MyComboBoxText ()); + retinexcolorspace->append_text (M("TP_RETINEX_LABSPACE")); + retinexcolorspace->append_text (M("TP_RETINEX_HSLSPACE_LOG")); + retinexcolorspace->append_text (M("TP_RETINEX_HSLSPACE_LIN")); + retinexcolorspace->set_active(0); + retinexColorSpaceConn = retinexcolorspace->signal_changed().connect ( sigc::mem_fun(*this, &Retinex::retinexColorSpaceChanged) ); + + dhbox->pack_start(*retinexMethod); + dhbox->pack_start(*retinexcolorspace); + retinexVBox->pack_start(*dhbox); + + + // Histogram equalizer Lab curve + curveEditorGD = new CurveEditorGroup (options.lastRetinexDir, M("TP_RETINEX_CONTEDIT_LAB")); + curveEditorGD->setCurveListener (this); + cdshape = static_cast(curveEditorGD->addCurve(CT_Diagonal, M("TP_RETINEX_CURVEEDITOR_CD"))); + cdshape->setTooltip(M("TP_RETINEX_CURVEEDITOR_CD_TOOLTIP")); + std::vector milestones22; + + milestones22.push_back( GradientMilestone(0., 0., 0., 0.) ); + milestones22.push_back( GradientMilestone(1., 1., 1., 1.) ); + cdshape->setBottomBarBgGradient(milestones22); + cdshape->setLeftBarBgGradient(milestones22); + + curveEditorGD->curveListComplete(); + + + // Histogram equalizer HSL curve + curveEditorGDH = new CurveEditorGroup (options.lastRetinexDir, M("TP_RETINEX_CONTEDIT_HSL")); + curveEditorGDH->setCurveListener (this); + cdshapeH = static_cast(curveEditorGDH->addCurve(CT_Diagonal, M("TP_RETINEX_CURVEEDITOR_CD"))); + cdshapeH->setTooltip(M("TP_RETINEX_CURVEEDITOR_CD_TOOLTIP")); + std::vector milestones22H; + + milestones22H.push_back( GradientMilestone(0., 0., 0., 0.) ); + milestones22H.push_back( GradientMilestone(1., 1., 1., 1.) ); + cdshapeH->setBottomBarBgGradient(milestones22H); + cdshapeH->setLeftBarBgGradient(milestones22H); + + curveEditorGDH->curveListComplete(); + + + // Transmission map curve + transmissionCurveEditorG = new CurveEditorGroup (options.lastRetinexDir, M("TP_RETINEX_TRANSMISSION")); + transmissionCurveEditorG->setCurveListener (this); + + std::vector defaultCurve; + rtengine::RetinexParams::getDefaulttransmissionCurve(defaultCurve); + transmissionShape = static_cast(transmissionCurveEditorG->addCurve(CT_Flat, "", NULL, false)); + transmissionShape->setIdentityValue(0.); + transmissionShape->setResetCurve(FlatCurveType(defaultCurve.at(0)), defaultCurve); + transmissionShape->setBottomBarBgGradient(milestones); + transmissionCurveEditorG->set_tooltip_markup (M("TP_RETINEX_TRANSMISSION_TOOLTIP")); + + transmissionCurveEditorG->curveListComplete(); + + gambox = Gtk::manage (new Gtk::HBox ()); + labgam = Gtk::manage (new Gtk::Label (M("TP_RETINEX_GAMMA") + ":")); + gambox->pack_start (*labgam, Gtk::PACK_SHRINK, 1); + + gammaretinex = Gtk::manage (new MyComboBoxText ()); + gammaretinex->append_text (M("TP_RETINEX_GAMMA_NONE")); + gammaretinex->append_text (M("TP_RETINEX_GAMMA_LOW")); + gammaretinex->append_text (M("TP_RETINEX_GAMMA_MID")); + gammaretinex->append_text (M("TP_RETINEX_GAMMA_HIGH")); + gammaretinex->append_text (M("TP_RETINEX_GAMMA_FREE")); + gammaretinex->set_active(0); + gammaretinexConn = gammaretinex->signal_changed().connect ( sigc::mem_fun(*this, &Retinex::gammaretinexChanged) ); + gammaretinex->set_tooltip_markup (M("TP_RETINEX_GAMMA_TOOLTIP")); + + gam = Gtk::manage (new Adjuster (M("TP_RETINEX_GAMMA"), 0.6, 3.0, 0.01, 1.30)); + slope = Gtk::manage (new Adjuster (M("TP_RETINEX_SLOPE"), 1., 20., 0.1, 3.)); + + str = Gtk::manage (new Adjuster (M("TP_RETINEX_STRENGTH"), 0, 100., 1., 20.)); + neigh = Gtk::manage (new Adjuster (M("TP_RETINEX_NEIGHBOR"), 6, 100., 1., 80.)); + highl = Gtk::manage (new Adjuster (M("TP_RETINEX_HIGHLIGHT"), 1, 100, 1, 10)); + highl->set_tooltip_markup (M("TP_RETINEX_HIGHLIGHT_TOOLTIP")); + vart = Gtk::manage (new Adjuster (M("TP_RETINEX_VARIANCE"), 50, 500, 1, 200)); + vart->set_tooltip_markup (M("TP_RETINEX_VARIANCE_TOOLTIP")); + + expsettings = new MyExpander (false, M("TP_RETINEX_SETTINGS")); + expsettings->signal_button_release_event().connect_notify( sigc::bind( sigc::mem_fun(this, &Retinex::foldAllButMe), expsettings) ); + + retinexVBox->pack_start (*str); + str->show (); + + retinexVBox->pack_start (*neigh); + neigh->show (); + + retinexVBox->pack_start (*vart); + vart->show (); + + retinexVBox->pack_start (*highl); + highl->show (); + + mMLabels = Gtk::manage(new Gtk::Label("---", Gtk::ALIGN_CENTER)); + mMLabels->set_tooltip_markup (M("TP_RETINEX_MLABEL_TOOLTIP")); + + transLabels = Gtk::manage(new Gtk::Label("---", Gtk::ALIGN_CENTER)); + transLabels->set_tooltip_markup (M("TP_RETINEX_TLABEL_TOOLTIP")); + transLabels2 = Gtk::manage(new Gtk::Label("---", Gtk::ALIGN_CENTER)); + + scal = Gtk::manage (new Adjuster (M("TP_RETINEX_SCALES"), 1, 8., 1., 3.)); + gain = Gtk::manage (new Adjuster (M("TP_RETINEX_GAIN"), 20, 200, 1, 50)); + offs = Gtk::manage (new Adjuster (M("TP_RETINEX_OFFSET"), -10000, 10000, 1, 0)); +// vart = Gtk::manage (new Adjuster (M("TP_RETINEX_VARIANCE"), 50, 500, 1, 125)); + limd = Gtk::manage (new Adjuster (M("TP_RETINEX_THRESHOLD"), 2, 100, 1, 8)); + baselog = Gtk::manage (new Adjuster (M("TP_RETINEX_BASELOG"), 1.1, 100., 0.001, 2.718)); +// grbl = Gtk::manage (new Adjuster (M("TP_RETINEX_HIGHLIGHT3"), 1, 100, 1, 50)); + gain->set_tooltip_markup (M("TP_RETINEX_GAIN_TOOLTIP")); + scal->set_tooltip_markup (M("TP_RETINEX_SCALES_TOOLTIP")); +// vart->set_tooltip_markup (M("TP_RETINEX_VARIANCE_TOOLTIP")); + limd->set_tooltip_markup (M("TP_RETINEX_THRESHOLD_TOOLTIP")); + baselog->set_tooltip_markup (M("TP_RETINEX_BASELOG_TOOLTIP")); + + curveEditorGH = new CurveEditorGroup (options.lastRetinexDir, M("TP_RETINEX_CONTEDIT_LH")); + curveEditorGH->setCurveListener (this); + + lhshape = static_cast(curveEditorGH->addCurve(CT_Flat, M("TP_RETINEX_CURVEEDITOR_LH"))); + lhshape->setTooltip(M("TP_RETINEX_CURVEEDITOR_LH_TOOLTIP")); + lhshape->setCurveColorProvider(this, 4); + + milestones.clear(); + + for (int i = 0; i < 7; i++) { + float R, G, B; + float x = float(i) * (1.0f / 6.0); + Color::hsv2rgb01(x, 0.5f, 0.5f, R, G, B); + milestones.push_back( GradientMilestone(double(x), double(R), double(G), double(B)) ); + } + + lhshape->setBottomBarBgGradient(milestones); + + curveEditorGH->curveListComplete(); + + medianmap = Gtk::manage (new Gtk::CheckButton (M("TP_RETINEX_MEDIAN"))); + medianmap->set_active (true); + medianmapConn = medianmap->signal_toggled().connect( sigc::mem_fun(*this, &Retinex::medianmapChanged) ); + + settingsVBox->pack_start (*mMLabels); + mMLabels->show (); + + settingsVBox->pack_start (*transLabels); + transLabels->show (); + + settingsVBox->pack_start (*transLabels2); + transLabels2->show (); + + settingsVBox->pack_start (*curveEditorGD, Gtk::PACK_SHRINK, 4); + curveEditorGD->show(); + + settingsVBox->pack_start (*curveEditorGDH, Gtk::PACK_SHRINK, 4); + curveEditorGDH->show(); + + settingsVBox->pack_start (*curveEditorGH, Gtk::PACK_SHRINK, 4); + curveEditorGH->show(); + + gambox->pack_start(*gammaretinex); + + settingsVBox->pack_start(*gambox); + gammaretinex->show(); + + settingsVBox->pack_start (*gam); + gam->show (); + + settingsVBox->pack_start (*slope); + slope->show (); + + +// settingsVBox->pack_start (*scal); +// scal->show (); + + settingsVBox->pack_start (*gain); + gain->show (); + + settingsVBox->pack_start (*offs); + offs->show (); + +// settingsVBox->pack_start (*vart); +// vart->show (); + + settingsVBox->pack_start (*limd); + limd->show (); + +// settingsVBox->pack_start (*highl); +// highl->show (); + +// settingsVBox->pack_start (*baselog); +// baselog->show (); + +// settingsVBox->pack_start (*grbl); +// grbl->show (); + + settingsVBox->pack_start( *transmissionCurveEditorG, Gtk::PACK_SHRINK, 2); + transmissionCurveEditorG->show(); + + settingsVBox->pack_start (*medianmap); + medianmap->show (); + expsettings->add(*settingsVBox); + + neutrHBox = Gtk::manage (new Gtk::HBox ()); + neutrHBox->set_border_width (2); + + neutral = Gtk::manage (new Gtk::Button (M("TP_RETINEX_NEUTRAL"))); + RTImage *resetImg = Gtk::manage (new RTImage ("gtk-undo-ltr-small.png", "gtk-undo-rtl-small.png")); + neutral->set_image(*resetImg); + neutral->set_tooltip_text (M("TP_RETINEX_NEUTRAL_TIP")); + neutralconn = neutral->signal_pressed().connect( sigc::mem_fun(*this, &Retinex::neutral_pressed) ); + neutral->show(); + neutrHBox->pack_start (*neutral); + + + + str->setAdjusterListener (this); + + if (str->delay < 200) { + str->delay = 200; + } + + scal->setAdjusterListener (this); + + if (scal->delay < 200) { + scal->delay = 200; + } + + gam->setAdjusterListener (this); + + if (gam->delay < 500) { + gam->delay = 500; + } + + slope->setAdjusterListener (this); + + if (slope->delay < 500) { + slope->delay = 500; + } + + neigh->setAdjusterListener (this); + + if (neigh->delay < 200) { + neigh->delay = 200; + } + + gain->setAdjusterListener (this); + + if (gain->delay < 200) { + gain->delay = 200; + } + + offs->setAdjusterListener (this); + + if (offs->delay < 200) { + offs->delay = 200; + } + + vart->setAdjusterListener (this); + + if (vart->delay < 200) { + vart->delay = 200; + } + + limd->setAdjusterListener (this); + + if (limd->delay < 200) { + limd->delay = 200; + } + + highl->setAdjusterListener (this); + + if (highl->delay < 200) { + highl->delay = 200; + } + + baselog->setAdjusterListener (this); + + if (baselog->delay < 200) { + baselog->delay = 200; + } + + /* grbl->setAdjusterListener (this); + + if (grbl->delay < 200) { + grbl->delay = 200; + } + */ + pack_start (*retinexVBox); + pack_start (*expsettings); + pack_start (*neutrHBox); + + disableListener(); + retinexColorSpaceChanged(); + gammaretinexChanged(); + medianmapChanged(); + enableListener(); + +} + +Retinex::~Retinex() +{ + delete curveEditorGD; + delete curveEditorGDH; + delete transmissionCurveEditorG; + delete curveEditorGH; + +} +void Retinex::neutral_pressed () +{ + neigh->resetValue(false); + gain->resetValue(false); + offs->resetValue(false); + str->resetValue(false); + scal->resetValue(false); + vart->resetValue(false); + limd->resetValue(false); + highl->resetValue(false); + baselog->resetValue(false); + gam->resetValue(false); + slope->resetValue(false); + transmissionShape->reset(); + cdshape->reset(); + cdshapeH->reset(); + lhshape->reset(); +} + +void Retinex::foldAllButMe (GdkEventButton* event, MyExpander *expander) +{ + if (event->button == 3) { + expsettings->set_expanded(expsettings == expander); + } +} + +void Retinex::writeOptions(std::vector &tpOpen) +{ + tpOpen.push_back (expsettings->get_expanded ()); +} + +void Retinex::updateToolState(std::vector &tpOpen) +{ + if(tpOpen.size() == 10) { + expsettings->set_expanded(tpOpen.at(9)); + } +} + + + + + +int minmaxChangedUI (void* data) +{ + GThreadLock lock; // All GUI access from idle_add callbacks or separate thread HAVE to be protected + (static_cast(data))->minmaxComputed_ (); + return 0; +} + +void Retinex::minmaxChanged (double cdma, double cdmin, double mini, double maxi, double Tmean, double Tsigma, double Tmin, double Tmax) +{ + nextmin = cdmin; + nextmax = cdma; + nextminiT = mini; + nextmaxiT = maxi; + nextmeanT = Tmean; + nextsigma = Tsigma; + nextminT = Tmin; + nextmaxT = Tmax; + g_idle_add (minmaxChangedUI, this); + +} + +bool Retinex::minmaxComputed_ () +{ + + disableListener (); + enableListener (); + updateLabel (); + updateTrans (); + return false; + +} +void Retinex::updateLabel () +{ + if (!batchMode) { + float nX, nY; + nX = nextmin; + nY = nextmax; + { + mMLabels->set_text( + Glib::ustring::compose(M("TP_RETINEX_MLABEL"), + Glib::ustring::format(std::fixed, std::setprecision(0), nX), + Glib::ustring::format(std::fixed, std::setprecision(0), nY)) + ); + } + } +} + +void Retinex::updateTrans () +{ + if (!batchMode) { + float nm, nM, nZ, nA, nB, nS; + nm = nextminiT; + nM = nextmaxiT; + nZ = nextmeanT; + nA = nextminT; + nB = nextmaxT; + nS = nextsigma; + { + transLabels->set_text( + Glib::ustring::compose(M("TP_RETINEX_TLABEL"), + Glib::ustring::format(std::fixed, std::setprecision(1), nm), + Glib::ustring::format(std::fixed, std::setprecision(1), nM), + Glib::ustring::format(std::fixed, std::setprecision(1), nZ), + Glib::ustring::format(std::fixed, std::setprecision(1), nS)) + ); + transLabels2->set_text( + Glib::ustring::compose(M("TP_RETINEX_TLABEL2"), + Glib::ustring::format(std::fixed, std::setprecision(1), nA), + Glib::ustring::format(std::fixed, std::setprecision(1), nB)) + ); + + + } + } +} + + + +void Retinex::read (const ProcParams* pp, const ParamsEdited* pedited) +{ + disableListener (); + retinexMethodConn.block(true); + retinexColorSpaceConn.block(true); + gammaretinexConn.block(true); + + + if (pedited) { + scal->setEditedState (pedited->retinex.scal ? Edited : UnEdited); + neigh->setEditedState (pedited->retinex.neigh ? Edited : UnEdited); + gam->setEditedState (pedited->retinex.gam ? Edited : UnEdited); + slope->setEditedState (pedited->retinex.slope ? Edited : UnEdited); + gain->setEditedState (pedited->retinex.gain ? Edited : UnEdited); + offs->setEditedState (pedited->retinex.offs ? Edited : UnEdited); + vart->setEditedState (pedited->retinex.vart ? Edited : UnEdited); + limd->setEditedState (pedited->retinex.limd ? Edited : UnEdited); + highl->setEditedState (pedited->retinex.highl ? Edited : UnEdited); + baselog->setEditedState (pedited->retinex.baselog ? Edited : UnEdited); +// grbl->setEditedState (pedited->retinex.grbl ? Edited : UnEdited); + set_inconsistent (multiImage && !pedited->retinex.enabled); + medianmap->set_inconsistent (!pedited->retinex.medianmap); + + + if (!pedited->retinex.retinexMethod) { + retinexMethod->set_active_text(M("GENERAL_UNCHANGED")); + } + + if (!pedited->retinex.retinexcolorspace) { + retinexcolorspace->set_active_text(M("GENERAL_UNCHANGED")); + } + + if (!pedited->retinex.gammaretinex) { + gammaretinex->set_active_text(M("GENERAL_UNCHANGED")); + } + + cdshape->setUnChanged (!pedited->retinex.cdcurve); + cdshapeH->setUnChanged (!pedited->retinex.cdHcurve); + transmissionShape->setUnChanged (!pedited->retinex.transmissionCurve); + lhshape->setUnChanged (!pedited->retinex.lhcurve); + + } + + neigh->setValue (pp->retinex.neigh); + gain->setValue (pp->retinex.gain); + offs->setValue (pp->retinex.offs); + str->setValue (pp->retinex.str); + scal->setValue (pp->retinex.scal); + vart->setValue (pp->retinex.vart); + limd->setValue (pp->retinex.limd); + gam->setValue (pp->retinex.gam); + slope->setValue (pp->retinex.slope); + highl->setValue (pp->retinex.highl); + baselog->setValue (pp->retinex.baselog); +// grbl->setValue (pp->retinex.grbl); + + setEnabled (pp->retinex.enabled); + + medianmapConn.block (true); + medianmap->set_active (pp->retinex.medianmap); + medianmapConn.block (false); + lastmedianmap = pp->retinex.medianmap; + + if (pp->retinex.retinexMethod == "low") { + retinexMethod->set_active (0); + } else if (pp->retinex.retinexMethod == "uni") { + retinexMethod->set_active (1); + } else if (pp->retinex.retinexMethod == "high") { + retinexMethod->set_active (2); + } else if (pp->retinex.retinexMethod == "highli") { + retinexMethod->set_active (3); +// } else if (pp->retinex.retinexMethod == "highliplus") { +// retinexMethod->set_active (4); + } + + if (pp->retinex.retinexcolorspace == "Lab") { + retinexcolorspace->set_active (0); + } else if (pp->retinex.retinexcolorspace == "HSLLOG") { + retinexcolorspace->set_active (1); + } else if (pp->retinex.retinexcolorspace == "HSLLIN") { + retinexcolorspace->set_active (2); + } + + if (pp->retinex.gammaretinex == "none") { + gammaretinex->set_active (0); + } else if (pp->retinex.gammaretinex == "low") { + gammaretinex->set_active (1); + } else if (pp->retinex.gammaretinex == "mid") { + gammaretinex->set_active (2); + } else if (pp->retinex.gammaretinex == "hig") { + gammaretinex->set_active (3); + } else if (pp->retinex.gammaretinex == "fre") { + gammaretinex->set_active (4); + } + + retinexMethodChanged (); + retinexColorSpaceChanged(); + gammaretinexChanged(); + + medianmapConn.block(true); + medianmapChanged (); + medianmapConn.block(false); + + cdshape->setCurve (pp->retinex.cdcurve); + cdshapeH->setCurve (pp->retinex.cdHcurve); + lhshape->setCurve (pp->retinex.lhcurve); + + retinexMethodConn.block(false); + retinexColorSpaceConn.block(false); + gammaretinexConn.block(false); + transmissionShape->setCurve (pp->retinex.transmissionCurve); + + + enableListener (); +} + + + +void Retinex::write (ProcParams* pp, ParamsEdited* pedited) +{ + + pp->retinex.str = str->getValue (); + pp->retinex.scal = (int)scal->getValue (); + pp->retinex.gam = gam->getValue (); + pp->retinex.slope = slope->getValue (); + pp->retinex.neigh = neigh->getValue (); + pp->retinex.gain = (int)gain->getValue (); + pp->retinex.offs = (int)offs->getValue (); + pp->retinex.vart = (int)vart->getValue (); + pp->retinex.limd = (int)limd->getValue (); + pp->retinex.highl = (int)highl->getValue (); + pp->retinex.baselog = baselog->getValue (); +// pp->retinex.grbl = (int)grbl->getValue (); + pp->retinex.cdcurve = cdshape->getCurve (); + pp->retinex.lhcurve = lhshape->getCurve (); + pp->retinex.cdHcurve = cdshapeH->getCurve (); + pp->retinex.transmissionCurve = transmissionShape->getCurve (); + pp->retinex.enabled = getEnabled(); + pp->retinex.medianmap = medianmap->get_active(); + + if (pedited) { + pedited->retinex.retinexMethod = retinexMethod->get_active_text() != M("GENERAL_UNCHANGED"); + pedited->retinex.retinexcolorspace = retinexcolorspace->get_active_text() != M("GENERAL_UNCHANGED"); + pedited->retinex.gammaretinex = gammaretinex->get_active_text() != M("GENERAL_UNCHANGED"); + + //%%%%%%%%%%%%%%%%%%%%%% + pedited->retinex.str = str->getEditedState (); + pedited->retinex.scal = scal->getEditedState (); + pedited->retinex.gam = gam->getEditedState (); + pedited->retinex.slope = slope->getEditedState (); + pedited->retinex.neigh = neigh->getEditedState (); + pedited->retinex.gain = gain->getEditedState (); + pedited->retinex.offs = offs->getEditedState (); + pedited->retinex.vart = vart->getEditedState (); + pedited->retinex.limd = limd->getEditedState (); + pedited->retinex.highl = highl->getEditedState (); + pedited->retinex.baselog = baselog->getEditedState (); +// pedited->retinex.grbl = grbl->getEditedState (); + pedited->retinex.cdcurve = !cdshape->isUnChanged (); + pedited->retinex.cdHcurve = !cdshapeH->isUnChanged (); + pedited->retinex.transmissionCurve = !transmissionShape->isUnChanged (); + pedited->retinex.enabled = !get_inconsistent(); + pedited->retinex.medianmap = !medianmap->get_inconsistent(); + pedited->retinex.lhcurve = !lhshape->isUnChanged (); + + } + + if (retinexMethod->get_active_row_number() == 0) { + pp->retinex.retinexMethod = "low"; + } else if (retinexMethod->get_active_row_number() == 1) { + pp->retinex.retinexMethod = "uni"; + } else if (retinexMethod->get_active_row_number() == 2) { + pp->retinex.retinexMethod = "high"; + } else if (retinexMethod->get_active_row_number() == 3) { + pp->retinex.retinexMethod = "highli"; +// } else if (retinexMethod->get_active_row_number() == 4) { +// pp->retinex.retinexMethod = "highliplus"; + } + + if (retinexcolorspace->get_active_row_number() == 0) { + pp->retinex.retinexcolorspace = "Lab"; + } else if (retinexcolorspace->get_active_row_number() == 1) { + pp->retinex.retinexcolorspace = "HSLLOG"; + } else if (retinexcolorspace->get_active_row_number() == 2) { + pp->retinex.retinexcolorspace = "HSLLIN"; + } + + if (gammaretinex->get_active_row_number() == 0) { + pp->retinex.gammaretinex = "none"; + } else if (gammaretinex->get_active_row_number() == 1) { + pp->retinex.gammaretinex = "low"; + } else if (gammaretinex->get_active_row_number() == 2) { + pp->retinex.gammaretinex = "mid"; + } else if (gammaretinex->get_active_row_number() == 3) { + pp->retinex.gammaretinex = "hig"; + } else if (gammaretinex->get_active_row_number() == 4) { + pp->retinex.gammaretinex = "fre"; + } + +} + +void Retinex::retinexMethodChanged() +{ + + if(retinexMethod->get_active_row_number() == 3) { + highl->show(); + } else { + highl->hide(); + } + + if (listener) { + listener->panelChanged (EvretinexMethod, retinexMethod->get_active_text ()); + } +} + +void Retinex::ColorSpaceUpdateUI () +{ + if (!batchMode) { + curveEditorGH->show(); + + if(retinexcolorspace->get_active_row_number() == 0) { + curveEditorGD->show(); + curveEditorGDH->hide(); + baselog->show(); + } else if(retinexcolorspace->get_active_row_number() == 1) { + curveEditorGD->hide(); + curveEditorGDH->show(); + baselog->show(); + } else if(retinexcolorspace->get_active_row_number() == 2) { + curveEditorGD->hide(); + curveEditorGDH->show(); + baselog->hide(); + } + } +} + + +void Retinex::retinexColorSpaceChanged() +{ + ColorSpaceUpdateUI(); + + if (listener) { + listener->panelChanged (EvretinexColorSpace, retinexcolorspace->get_active_text ()); + } +} + +void Retinex::gammaretinexChanged() +{ + if (!batchMode) { + if(gammaretinex->get_active_row_number() == 4) { + gam->show(); + slope->show(); + } else if(gammaretinex->get_active_row_number() != 4) { + gam->hide(); + slope->hide(); + } + } + + ColorSpaceUpdateUI(); + + if (listener) { + listener->panelChanged (Evretinexgamma, gammaretinex->get_active_text ()); + } +} + +void Retinex::medianmapChanged () +{ + if (batchMode) { + if (medianmap->get_inconsistent()) { + medianmap->set_inconsistent (false); + medianmapConn.block (true); + medianmap->set_active (false); + medianmapConn.block (false); + } else if (lastmedianmap) { + medianmap->set_inconsistent (true); + } + + lastmedianmap = medianmap->get_active (); + } + + if (listener) { + if (medianmap->get_active()) { + if (getEnabled()) { + listener->panelChanged (EvRetinexmedianmap, M("GENERAL_ENABLED")); + } + } else { + if (getEnabled()) { + listener->panelChanged (EvRetinexmedianmap, M("GENERAL_DISABLED")); + } + } + + } +} + + +void Retinex::setDefaults (const ProcParams* defParams, const ParamsEdited* pedited) +{ + + neigh->setDefault (defParams->retinex.neigh); + gain->setDefault (defParams->retinex.gain); + offs->setDefault (defParams->retinex.offs); + str->setDefault (defParams->retinex.str); + scal->setDefault (defParams->retinex.scal); + vart->setDefault (defParams->retinex.vart); + limd->setDefault (defParams->retinex.limd); + highl->setDefault (defParams->retinex.highl); + baselog->setDefault (defParams->retinex.baselog); +// grbl->setDefault (defParams->retinex.grbl); + gam->setDefault (defParams->retinex.gam); + slope->setDefault (defParams->retinex.slope); + + if (pedited) { + neigh->setDefaultEditedState (pedited->retinex.neigh ? Edited : UnEdited); + gain->setDefaultEditedState (pedited->retinex.gain ? Edited : UnEdited); + offs->setDefaultEditedState (pedited->retinex.offs ? Edited : UnEdited); + str->setDefaultEditedState (pedited->retinex.str ? Edited : UnEdited); + scal->setDefaultEditedState (pedited->retinex.scal ? Edited : UnEdited); + vart->setDefaultEditedState (pedited->retinex.vart ? Edited : UnEdited); + limd->setDefaultEditedState (pedited->retinex.limd ? Edited : UnEdited); + highl->setDefaultEditedState (pedited->retinex.highl ? Edited : UnEdited); + baselog->setDefaultEditedState (pedited->retinex.baselog ? Edited : UnEdited); +// grbl->setDefaultEditedState (pedited->retinex.grbl ? Edited : UnEdited); + gam->setDefaultEditedState (pedited->retinex.gam ? Edited : UnEdited); + slope->setDefaultEditedState (pedited->retinex.slope ? Edited : UnEdited); + + } else { + neigh->setDefaultEditedState (Irrelevant); + gain->setDefaultEditedState (Irrelevant); + offs->setDefaultEditedState (Irrelevant); + vart->setDefaultEditedState (Irrelevant); + limd->setDefaultEditedState (Irrelevant); + highl->setDefaultEditedState (Irrelevant); + baselog->setDefaultEditedState (Irrelevant); +// grbl->setDefaultEditedState (Irrelevant); + str->setDefaultEditedState (Irrelevant); + scal->setDefaultEditedState (Irrelevant); + gam->setDefaultEditedState (Irrelevant); + slope->setDefaultEditedState (Irrelevant); + } +} + +void Retinex::setAdjusterBehavior (bool strAdd, bool neighAdd, bool scalAdd, bool limdAdd, bool gainAdd, bool offsAdd, bool vartAdd, bool gamAdd, bool slopeAdd) +{ + str->setAddMode(strAdd); + neigh->setAddMode(neighAdd); + scal->setAddMode(scalAdd); + limd->setAddMode(limdAdd); + gain->setAddMode(gainAdd); + offs->setAddMode(offsAdd); + vart->setAddMode(vartAdd); + gam->setAddMode(gamAdd); + slope->setAddMode(slopeAdd); +} + + +void Retinex::adjusterChanged (Adjuster* a, double newval) +{ + + if (!listener || !getEnabled()) { + return; + } + + if (a == neigh) { + listener->panelChanged (EvLneigh, neigh->getTextValue()); + } else if (a == str) { + listener->panelChanged (EvLstr, str->getTextValue()); + } else if (a == scal) { + listener->panelChanged (EvLscal, scal->getTextValue()); + } else if (a == gain) { + listener->panelChanged (EvLgain, gain->getTextValue()); + } else if (a == offs) { + listener->panelChanged (EvLoffs, offs->getTextValue()); + } else if (a == vart) { + listener->panelChanged (EvLvart, vart->getTextValue()); + } else if (a == limd) { + listener->panelChanged (EvLlimd, limd->getTextValue()); + } else if (a == highl) { + listener->panelChanged (EvLhighl, highl->getTextValue()); + } else if (a == baselog) { + listener->panelChanged (EvLbaselog, baselog->getTextValue()); +// } else if (a == grbl) { +// listener->panelChanged (EvLgrbl, grbl->getTextValue()); + } else if (a == gam) { + listener->panelChanged (EvLgam, gam->getTextValue()); + } else if (a == slope) { + listener->panelChanged (EvLslope, slope->getTextValue()); + } + +} + + + +void Retinex::autoOpenCurve () +{ + cdshape->openIfNonlinear(); + cdshapeH->openIfNonlinear(); + transmissionShape->openIfNonlinear(); + lhshape->openIfNonlinear(); + +} + + +void Retinex::curveChanged (CurveEditor* ce) +{ + if (listener && getEnabled()) { + if (ce == cdshape) { + listener->panelChanged (EvLCDCurve, M("HISTORY_CUSTOMCURVE")); + } else if (ce == cdshapeH) { + listener->panelChanged (EvLCDHCurve, M("HISTORY_CUSTOMCURVE")); + } else if (ce == transmissionShape) { + listener->panelChanged (EvRetinextransmission, M("HISTORY_CUSTOMCURVE")); + } else if (ce == lhshape) { + listener->panelChanged (EvRetinexlhcurve, M("HISTORY_CUSTOMCURVE")); + } + } +} + +void Retinex::enabledChanged () +{ + + if (listener) { + if (get_inconsistent()) { + listener->panelChanged (EvRetinexEnabled, M("GENERAL_UNCHANGED")); + } else if (getEnabled()) { + listener->panelChanged (EvRetinexEnabled, M("GENERAL_ENABLED")); + } else { + listener->panelChanged (EvRetinexEnabled, M("GENERAL_DISABLED")); + } + } +} + + +void Retinex::trimValues (rtengine::procparams::ProcParams* pp) +{ + str->trimValue(pp->retinex.str); + scal->trimValue(pp->retinex.scal); + neigh->trimValue(pp->retinex.neigh); + gain->trimValue(pp->retinex.gain); + offs->trimValue(pp->retinex.offs); + vart->trimValue(pp->retinex.vart); + limd->trimValue(pp->retinex.limd); + highl->trimValue(pp->retinex.highl); + baselog->trimValue(pp->retinex.baselog); +// grbl->trimValue(pp->retinex.grbl); + gam->trimValue(pp->retinex.gam); + slope->trimValue(pp->retinex.slope); + +} +void Retinex::updateCurveBackgroundHistogram (LUTu & histToneCurve, LUTu & histLCurve, LUTu & histCCurve,/* LUTu & histCLurve, LUTu & histLLCurve,*/ LUTu & histLCAM, LUTu & histCCAM, LUTu & histRed, LUTu & histGreen, LUTu & histBlue, LUTu & histLuma, LUTu & histLRETI) +{ + + cdshape->updateBackgroundHistogram (histLRETI); + cdshapeH->updateBackgroundHistogram (histLRETI); +} + +void Retinex::colorForValue (double valX, double valY, enum ColorCaller::ElemType elemType, int callerId, ColorCaller *caller) +{ + + float R, G, B; + + if (elemType == ColorCaller::CCET_VERTICAL_BAR) { + valY = 0.5; + } + + if (callerId == 1) { // ch - main curve + + Color::hsv2rgb01(float(valX), float(valY), 0.5f, R, G, B); + } else if (callerId == 2) { // cc - bottom bar + + float value = (1.f - 0.7f) * float(valX) + 0.7f; + // whole hue range + // Y axis / from 0.15 up to 0.75 (arbitrary values; was 0.45 before) + Color::hsv2rgb01(float(valY), float(valX), value, R, G, B); + } else if (callerId == 3) { // lc - bottom bar + + float value = (1.f - 0.7f) * float(valX) + 0.7f; + + // whole hue range + // Y axis / from 0.15 up to 0.75 (arbitrary values; was 0.45 before) + Color::hsv2rgb01(float(valY), float(valX), value, R, G, B); + } else if (callerId == 4) { // LH - bottom bar + Color::hsv2rgb01(float(valX), 0.5f, float(valY), R, G, B); + } else if (callerId == 5) { // HH - bottom bar + float h = float((valY - 0.5) * 0.3 + valX); + + if (h > 1.0f) { + h -= 1.0f; + } else if (h < 0.0f) { + h += 1.0f; + } + + Color::hsv2rgb01(h, 0.5f, 0.5f, R, G, B); + } + + caller->ccRed = double(R); + caller->ccGreen = double(G); + caller->ccBlue = double(B); +} + + + +void Retinex::setBatchMode (bool batchMode) +{ + ToolPanel::setBatchMode (batchMode); + neigh->showEditedCB (); + gain->showEditedCB (); + offs->showEditedCB (); + str->showEditedCB (); + scal->showEditedCB (); + gam->showEditedCB (); + slope->showEditedCB (); + vart->showEditedCB (); + limd->showEditedCB (); + highl->showEditedCB (); + baselog->showEditedCB (); +// grbl->showEditedCB (); + curveEditorGD->setBatchMode (batchMode); + curveEditorGDH->setBatchMode (batchMode); + transmissionCurveEditorG->setBatchMode (batchMode); + curveEditorGH->setBatchMode (batchMode); + + +} diff --git a/rtgui/retinex.h b/rtgui/retinex.h new file mode 100644 index 000000000..a9b462808 --- /dev/null +++ b/rtgui/retinex.h @@ -0,0 +1,110 @@ +/* + * This file is part of RawTherapee. + */ +#ifndef _RETINEX_H_ +#define _RETINEX_H_ + +#include +#include "adjuster.h" +#include "toolpanel.h" +#include "guiutils.h" +#include "curveeditor.h" +#include "curveeditorgroup.h" +#include "thresholdadjuster.h" +#include "colorprovider.h" + +class Retinex : public ToolParamBlock, public FoldableToolPanel, public rtengine::RetinexListener, public CurveListener, + public AdjusterListener, public ColorProvider + +{ + +protected: + CurveEditorGroup* curveEditorGD; + CurveEditorGroup* curveEditorGDH; + CurveEditorGroup* curveEditorGH; + Adjuster* str; + Adjuster* scal; + Adjuster* neigh; + Adjuster* gain; + Adjuster* offs; + Adjuster* vart; + Adjuster* limd; + Adjuster* highl; + Adjuster* baselog; + Adjuster* grbl; + Adjuster* gam; + Adjuster* slope; + MyExpander* expsettings; + + Gtk::Label* labmdh; + Gtk::HBox* dhbox; + Gtk::Label* labgam; + Gtk::HBox* gambox; + Gtk::Button* neutral; + Gtk::HBox* neutrHBox; + + MyComboBoxText* retinexMethod; + MyComboBoxText* retinexcolorspace; + MyComboBoxText* gammaretinex; + Gtk::CheckButton* medianmap; + double nextmin; + double nextmax; + double nextminiT; + double nextmaxiT; + double nextmeanT; + double nextminT; + double nextmaxT; + double nextsigma; + + Gtk::Label* mMLabels; + Gtk::Label* transLabels; + Gtk::Label* transLabels2; + + DiagonalCurveEditor* cdshape; + DiagonalCurveEditor* cdshapeH; + CurveEditorGroup* transmissionCurveEditorG; + sigc::connection retinexMethodConn, neutralconn; + sigc::connection retinexColorSpaceConn; + sigc::connection gammaretinexConn; + FlatCurveEditor* transmissionShape; + FlatCurveEditor* lhshape; + bool lastmedianmap; + sigc::connection medianmapConn; + +public: + Retinex (); + ~Retinex (); + + void read (const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited = NULL); + void write (rtengine::procparams::ProcParams* pp, ParamsEdited* pedited = NULL); + void setBatchMode (bool batchMode); + void setDefaults (const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited = NULL); + void trimValues (rtengine::procparams::ProcParams* pp); + void adjusterChanged (Adjuster* a, double newval); + void autoOpenCurve (); + void medianmapChanged (); + void minmaxChanged (double cdma, double cdmin, double mini, double maxi, double Tmean, double Tsigma, double Tmin, double Tmax); + bool minmaxComputed_ (); + void updateLabel (); + void updateTrans (); + void neutral_pressed (); + + void enabledChanged (); + void curveChanged (CurveEditor* ce); + void retinexMethodChanged(); + void retinexColorSpaceChanged(); + void gammaretinexChanged(); + void ColorSpaceUpdateUI(); + void writeOptions (std::vector &tpOpen); + void updateToolState (std::vector &tpOpen); + void setAdjusterBehavior (bool strAdd, bool neighAdd, bool scalAdd, bool limdAdd, bool gainAdd, bool offsAdd, bool vartAdd, bool gamAdd, bool slopeAdd); + void updateCurveBackgroundHistogram (LUTu & histToneCurve, LUTu & histLCurve, LUTu & histCCurve,/* LUTu & histCLurve, LUTu & histLLCurve,*/ LUTu & histLCAM, LUTu & histCCAM, LUTu & histRed, LUTu & histGreen, LUTu & histBlue, LUTu & histLuma, LUTu & histLRETI); + + virtual void colorForValue (double valX, double valY, enum ColorCaller::ElemType elemType, int callerId, ColorCaller* caller); + +private: + void foldAllButMe (GdkEventButton* event, MyExpander *expander); + +}; + +#endif diff --git a/rtgui/rgbcurves.cc b/rtgui/rgbcurves.cc index 565ec0eb5..d9c970f7a 100644 --- a/rtgui/rgbcurves.cc +++ b/rtgui/rgbcurves.cc @@ -194,7 +194,7 @@ void RGBCurves::setBatchMode (bool batchMode) } -void RGBCurves::updateCurveBackgroundHistogram (LUTu & histToneCurve, LUTu & histLCurve, LUTu & histCCurve, /*LUTu & histCLurve, LUTu & histLLCurve,*/ LUTu & histLCAM, LUTu & histCCAM, LUTu & histRed, LUTu & histGreen, LUTu & histBlue, LUTu & histLuma) +void RGBCurves::updateCurveBackgroundHistogram (LUTu & histToneCurve, LUTu & histLCurve, LUTu & histCCurve, /*LUTu & histCLurve, LUTu & histLLCurve,*/ LUTu & histLCAM, LUTu & histCCAM, LUTu & histRed, LUTu & histGreen, LUTu & histBlue, LUTu & histLuma, LUTu & histLRETI) { // Rshape->updateBackgroundHistogram (histRed); diff --git a/rtgui/rgbcurves.h b/rtgui/rgbcurves.h index 47a7a1344..c471a2063 100644 --- a/rtgui/rgbcurves.h +++ b/rtgui/rgbcurves.h @@ -51,7 +51,7 @@ public: void autoOpenCurve (); void curveChanged (CurveEditor* ce); - void updateCurveBackgroundHistogram (LUTu & histToneCurve, LUTu & histLCurve, LUTu & histCCurve, /*LUTu & histCLurve, LUTu & histLLCurve,*/ LUTu & histLCAM, LUTu & histCCAM, LUTu & histRed, LUTu & histGreen, LUTu & histBlue, LUTu & histLuma); + void updateCurveBackgroundHistogram (LUTu & histToneCurve, LUTu & histLCurve, LUTu & histCCurve, /*LUTu & histCLurve, LUTu & histLLCurve,*/ LUTu & histLCAM, LUTu & histCCAM, LUTu & histRed, LUTu & histGreen, LUTu & histBlue, LUTu & histLuma, LUTu & histLRETI); void lumamodeChanged (); }; diff --git a/rtgui/threadutils.h b/rtgui/threadutils.h index aa899cb46..34351eeed 100644 --- a/rtgui/threadutils.h +++ b/rtgui/threadutils.h @@ -227,7 +227,7 @@ public: inline MyReaderLock(MyRWMutex& mutex, const char* name, const char* file, const int line) : rwMutex(mutex), locked(false), locknumber(0) #else public: - inline MyReaderLock(MyRWMutex& mutex) : rwMutex(mutex) + inline MyReaderLock(MyRWMutex & mutex) : rwMutex(mutex) #endif { @@ -463,7 +463,7 @@ public: inline MyWriterLock(MyRWMutex& mutex, const char* name, const char* file, const int line) : rwMutex(mutex), locked(false), locknumber(0) #else public: - inline MyWriterLock(MyRWMutex& mutex) : rwMutex(mutex) + inline MyWriterLock(MyRWMutex & mutex) : rwMutex(mutex) #endif { // to operate safely diff --git a/rtgui/thresholdadjuster.cc b/rtgui/thresholdadjuster.cc index 5584bf29a..3ea81a443 100644 --- a/rtgui/thresholdadjuster.cc +++ b/rtgui/thresholdadjuster.cc @@ -17,14 +17,7 @@ * along with RawTherapee. If not, see . */ #include "thresholdadjuster.h" - -// class_slot is no longer part of the sigc++ source tree, but starting from which version ? -#if 1 #include -#else -#include -#endif - #include #include "multilangmgr.h" #include "../rtengine/rtengine.h" diff --git a/rtgui/tonecurve.cc b/rtgui/tonecurve.cc index 7b1f8cb3f..b2d61dc57 100644 --- a/rtgui/tonecurve.cc +++ b/rtgui/tonecurve.cc @@ -18,14 +18,7 @@ */ #include "tonecurve.h" #include "adjuster.h" - -// class_slot is no longer part of the sigc++ source tree, but starting from which version ? -#if 1 #include -#else -#include -#endif - #include #include "ppversion.h" #include "edit.h" @@ -859,7 +852,7 @@ void ToneCurve::trimValues (rtengine::procparams::ProcParams* pp) saturation->trimValue(pp->toneCurve.saturation); } -void ToneCurve::updateCurveBackgroundHistogram (LUTu & histToneCurve, LUTu & histLCurve, LUTu & histCCurve, /*LUTu & histCLurve, LUTu & histLLCurve,*/ LUTu & histLCAM, LUTu & histCCAM, LUTu & histRed, LUTu & histGreen, LUTu & histBlue, LUTu & histLuma) +void ToneCurve::updateCurveBackgroundHistogram (LUTu & histToneCurve, LUTu & histLCurve, LUTu & histCCurve, /*LUTu & histCLurve, LUTu & histLLCurve,*/ LUTu & histLCAM, LUTu & histCCAM, LUTu & histRed, LUTu & histGreen, LUTu & histBlue, LUTu & histLuma, LUTu & histLRETI) { shape->updateBackgroundHistogram (histToneCurve); diff --git a/rtgui/tonecurve.h b/rtgui/tonecurve.h index dae1acea6..be94c073a 100644 --- a/rtgui/tonecurve.h +++ b/rtgui/tonecurve.h @@ -104,7 +104,7 @@ public: bool curveMode2Changed_ (); void expandCurve (bool isExpanded); bool isCurveExpanded (); - void updateCurveBackgroundHistogram (LUTu & histToneCurve, LUTu & histLCurve, LUTu & histCCurve,/* LUTu & histCLurve, LUTu & histLLCurve,*/ LUTu & histLCAM, LUTu & histCCAM, LUTu & histRed, LUTu & histGreen, LUTu & histBlue, LUTu & histLuma); + void updateCurveBackgroundHistogram (LUTu & histToneCurve, LUTu & histLCurve, LUTu & histCCurve,/* LUTu & histCLurve, LUTu & histLLCurve,*/ LUTu & histLCAM, LUTu & histCCAM, LUTu & histRed, LUTu & histGreen, LUTu & histBlue, LUTu & histLuma, LUTu & histLRETI); void setRaw (bool raw); diff --git a/rtgui/toolpanelcoord.cc b/rtgui/toolpanelcoord.cc index 8e7c0f96d..f225a4dfa 100644 --- a/rtgui/toolpanelcoord.cc +++ b/rtgui/toolpanelcoord.cc @@ -59,6 +59,7 @@ ToolPanelCoordinator::ToolPanelCoordinator () : ipc(NULL) colorappearance = Gtk::manage (new ColorAppearance ()); whitebalance = Gtk::manage (new WhiteBalance ()); vignetting = Gtk::manage (new Vignetting ()); + retinex = Gtk::manage (new Retinex ()); gradient = Gtk::manage (new Gradient ()); pcvignette = Gtk::manage (new PCVignette ()); perspective = Gtk::manage (new PerspCorrection ()); @@ -125,6 +126,8 @@ ToolPanelCoordinator::ToolPanelCoordinator () : ipc(NULL) toolPanels.push_back (colortoning); addPanel (exposurePanel, epd); toolPanels.push_back (epd); + addPanel (exposurePanel, retinex); + toolPanels.push_back (retinex); addPanel (exposurePanel, pcvignette); toolPanels.push_back (pcvignette); addPanel (exposurePanel, gradient); @@ -387,7 +390,7 @@ void ToolPanelCoordinator::profileChange (const PartialProfile *nparams, rtengi lParams[1] = *mergedParams; pe.initFrom (lParams); - filterRawRefresh = pe.raw.isUnchanged() && pe.lensProf.isUnchanged(); + filterRawRefresh = pe.raw.isUnchanged() && pe.lensProf.isUnchanged() && pe.retinex.isUnchanged(); } *params = *mergedParams; @@ -469,6 +472,7 @@ void ToolPanelCoordinator::initImage (rtengine::StagedImageProcessor* ipc_, bool ipc->setAutoColorTonListener (colortoning); ipc->setAutoChromaListener (dirpyrdenoise); ipc->setWaveletListener (wavelet); + ipc->setRetinexListener (retinex); ipc->setSizeListener (crop); ipc->setSizeListener (resize); @@ -549,6 +553,7 @@ void ToolPanelCoordinator::writeOptions () } wavelet->writeOptions(options.tpOpen); + retinex->writeOptions(options.tpOpen); } @@ -722,12 +727,14 @@ int ToolPanelCoordinator::getSpotWBRectSize () return whitebalance->getSize (); } -void ToolPanelCoordinator::updateCurveBackgroundHistogram (LUTu & histToneCurve, LUTu & histLCurve, LUTu & histCCurve, /*LUTu & histCLurve, LUTu & histLLCurve,*/ LUTu & histLCAM, LUTu & histCCAM, LUTu & histRed, LUTu & histGreen, LUTu & histBlue, LUTu & histLuma) +void ToolPanelCoordinator::updateCurveBackgroundHistogram (LUTu & histToneCurve, LUTu & histLCurve, LUTu & histCCurve, /*LUTu & histCLurve, LUTu & histLLCurve,*/ LUTu & histLCAM, LUTu & histCCAM, LUTu & histRed, LUTu & histGreen, LUTu & histBlue, LUTu & histLuma, LUTu & histLRETI) { - colorappearance->updateCurveBackgroundHistogram (histToneCurve, histLCurve, histCCurve, /*histCLurve, histLLCurve,*/ histLCAM, histCCAM, histRed, histGreen, histBlue, histLuma); - toneCurve->updateCurveBackgroundHistogram (histToneCurve, histLCurve, histCCurve,/* histCLurve, histLLCurve,*/ histLCAM, histCCAM, histRed, histGreen, histBlue, histLuma); - lcurve->updateCurveBackgroundHistogram (histToneCurve, histLCurve, histCCurve, /*histCLurve, histLLCurve,*/ histLCAM, histCCAM, histRed, histGreen, histBlue, histLuma); - rgbcurves->updateCurveBackgroundHistogram(histToneCurve, histLCurve, histCCurve,/* histCLurve, histLLCurve, */histLCAM, histCCAM, histRed, histGreen, histBlue, histLuma); + colorappearance->updateCurveBackgroundHistogram (histToneCurve, histLCurve, histCCurve, /*histCLurve, histLLCurve,*/ histLCAM, histCCAM, histRed, histGreen, histBlue, histLuma, histLRETI); + toneCurve->updateCurveBackgroundHistogram (histToneCurve, histLCurve, histCCurve,/* histCLurve, histLLCurve,*/ histLCAM, histCCAM, histRed, histGreen, histBlue, histLuma, histLRETI); + lcurve->updateCurveBackgroundHistogram (histToneCurve, histLCurve, histCCurve, /*histCLurve, histLLCurve,*/ histLCAM, histCCAM, histRed, histGreen, histBlue, histLuma, histLRETI); + rgbcurves->updateCurveBackgroundHistogram(histToneCurve, histLCurve, histCCurve,/* histCLurve, histLLCurve, */histLCAM, histCCAM, histRed, histGreen, histBlue, histLuma, histLRETI); + retinex->updateCurveBackgroundHistogram(histToneCurve, histLCurve, histCCurve,/* histCLurve, histLLCurve, */histLCAM, histCCAM, histRed, histGreen, histBlue, histLuma, histLRETI); + } void ToolPanelCoordinator::foldAllButOne (Gtk::Box* parent, FoldableToolPanel* openedSection) diff --git a/rtgui/toolpanelcoord.h b/rtgui/toolpanelcoord.h index 0649bf60e..162fcb2c5 100644 --- a/rtgui/toolpanelcoord.h +++ b/rtgui/toolpanelcoord.h @@ -51,6 +51,7 @@ #include "perspective.h" #include "rotate.h" #include "vignetting.h" +#include "retinex.h" #include "gradient.h" #include "pcvignette.h" #include "toolbar.h" @@ -101,6 +102,7 @@ protected: WhiteBalance* whitebalance; Vignetting* vignetting; Gradient* gradient; + Retinex* retinex; PCVignette* pcvignette; LensGeometry* lensgeom; LensProfilePanel* lensProf; @@ -217,7 +219,7 @@ public: { return hasChanged; } - void updateCurveBackgroundHistogram (LUTu & histToneCurve, LUTu & histLCurve, LUTu & histCCurve, /*LUTu & histCLurve, LUTu & histLLCurve,*/ LUTu & histLCAM, LUTu & histCCAM, LUTu & histRed, LUTu & histGreen, LUTu & histBlue, LUTu & histLuma); + void updateCurveBackgroundHistogram (LUTu & histToneCurve, LUTu & histLCurve, LUTu & histCCurve, /*LUTu & histCLurve, LUTu & histLLCurve,*/ LUTu & histLCAM, LUTu & histCCAM, LUTu & histRed, LUTu & histGreen, LUTu & histBlue, LUTu & histLuma, LUTu & histLRETI); void foldAllButOne (Gtk::Box* parent, FoldableToolPanel* openedSection); // multiple listeners can be added that are notified on changes (typical: profile panel and the history)