diff --git a/CMakeLists.txt b/CMakeLists.txt
index 6f5c168f8..7234c6efe 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -18,7 +18,7 @@ SET (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu11")
SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11")
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.9")
- message(WARNING "RawTherapee should be built using GCC version 4.9 or higher!")
+ message(FATAL_ERROR "Building RawTherapee requires using GCC version 4.9 or higher!")
endif()
# We might want to build using the old C++ ABI, even when using a new GCC version
diff --git a/rtdata/languages/Catala b/rtdata/languages/Catala
index ba8e339ad..f90611620 100644
--- a/rtdata/languages/Catala
+++ b/rtdata/languages/Catala
@@ -537,7 +537,6 @@ PREFERENCES_CACHEMAXENTRIES;Màxim nombre d'entrades a la mem. cau
PREFERENCES_CACHEOPTS;Opcions memòria cau
PREFERENCES_CACHETHUMBHEIGHT;Màxima alçada de minifoto
PREFERENCES_CLIPPINGIND;Indicador de pèrdues
-PREFERENCES_CMETRICINTENT;Intent colorimètric
PREFERENCES_CUSTPROFBUILD;Constructor de perfils de procés particulars
PREFERENCES_CUSTPROFBUILDHINT;Nom del fitxer executable (o script) per a usar un nou perfil de procés en una imatge.\nRep paràmetres en línia d'ordres per a la generació de perfils basats en regles:\n[raw/JPG path] [path per omissió del perfil de procés] [número f] [expos. en segons] [long. focal en mm] [ISO] [objectiu] [càmera]
PREFERENCES_CUSTPROFBUILDPATH;Executable path
@@ -587,7 +586,6 @@ PREFERENCES_MENUGROUPPROFILEOPERATIONS;Grup "Operacions de procés de perfils"
PREFERENCES_MENUGROUPRANK;Grup "Rang"
PREFERENCES_MENUOPTIONS;Opcions del menú
PREFERENCES_METADATA;Metadata
-PREFERENCES_MONITORICC;Perfil de color del monitor
PREFERENCES_MULTITAB;Mode multitreball
PREFERENCES_MULTITABDUALMON;Mode multitreball en segon monitor, si se'n té un
PREFERENCES_OUTDIR;Directori de sortida
@@ -1231,7 +1229,7 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: -
!HISTORY_MSG_364;W - Final - Contrast balance
!HISTORY_MSG_365;W - Final - Delta balance
!HISTORY_MSG_366;W - Residual - Compression gamma
-!HISTORY_MSG_367;W - ES - Local contrast curve
+!HISTORY_MSG_367;W - Final - 'After' contrast curve
!HISTORY_MSG_368;W - Final - Contrast balance
!HISTORY_MSG_369;W - Final - Balance method
!HISTORY_MSG_370;W - Final - Local contrast curve
@@ -1272,11 +1270,11 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: -
!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_408;Retinex - Radius
+!HISTORY_MSG_409;Retinex - Contrast
+!HISTORY_MSG_410;Retinex - Brightness
!HISTORY_MSG_411;Retinex - Strength
-!HISTORY_MSG_412;Retinex - Scales
+!HISTORY_MSG_412;Retinex - Gaussian Gradient
!HISTORY_MSG_413;Retinex - Variance
!HISTORY_MSG_414;Retinex - Histogram - Lab
!HISTORY_MSG_415;Retinex - Transmission
@@ -1291,6 +1289,19 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: -
!HISTORY_MSG_424;Retinex - HL threshold
!HISTORY_MSG_425;Retinex - Log base
!HISTORY_MSG_426;Retinex - Hue equalizer
+!HISTORY_MSG_427;Output rendering intent
+!HISTORY_MSG_428;Monitor rendering intent
+!HISTORY_MSG_429;Retinex - Iterations
+!HISTORY_MSG_430;Retinex - Transmission Gradient
+!HISTORY_MSG_431;Retinex - Strength Gradient
+!HISTORY_MSG_432;Retinex - M - Highlights
+!HISTORY_MSG_433;Retinex - M - Highlights TW
+!HISTORY_MSG_434;Retinex - M - Shadows
+!HISTORY_MSG_435;Retinex - M - Shadows TW
+!HISTORY_MSG_436;Retinex - M - Radius
+!HISTORY_MSG_437;Retinex - M - Method
+!HISTORY_MSG_438;Retinex - M - Equalizer
+!HISTORY_MSG_439;Retinex - Preview
!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
@@ -1303,6 +1314,8 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: -
!MAIN_TAB_INSPECT; Inspect
!MAIN_TAB_WAVELET;Wavelet
!MAIN_TAB_WAVELET_TOOLTIP;Shortcut: Alt-w
+!MONITOR_PROFILE_SYSTEM;System default
+!MONITOR_SOFTPROOF;Soft-proof
!NAVIGATOR_B;B:
!NAVIGATOR_G;G:
!NAVIGATOR_H;H:
@@ -1323,6 +1336,7 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: -
!PARTIALPASTE_PCVIGNETTE;Vignette filter
!PARTIALPASTE_PREPROCESS_DEADPIXFILT;Dead pixel filter
!PARTIALPASTE_PREPROCESS_HOTPIXFILT;Hot pixel filter
+!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
!PARTIALPASTE_RAW_LMMSEITERATIONS;LMMSE enhancement steps
!PARTIALPASTE_RETINEX;Retinex
!PARTIALPASTE_WAVELETGROUP;Wavelet Levels
@@ -1389,6 +1403,8 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: -
!PREFERENCES_MAXRECENTFOLDERS;Maximum number of recent folders
!PREFERENCES_MED;Medium (Tile/2)
!PREFERENCES_MIN;Mini (100x115)
+!PREFERENCES_MONINTENT;Default monitor intent
+!PREFERENCES_MONPROFILE;Default monitor profile
!PREFERENCES_NAVGUIDEBRUSH;Navigator guide color
!PREFERENCES_NAVIGATIONFRAME;Navigation
!PREFERENCES_NOISE;Noise Reduction
@@ -1399,6 +1415,7 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: -
!PREFERENCES_PREVDEMO_FAST;Fast
!PREFERENCES_PREVDEMO_LABEL;Demosaicing method used for the preview at <100% zoom:
!PREFERENCES_PREVDEMO_SIDECAR;As in PP3
+!PREFERENCES_PROFILE_NONE;None
!PREFERENCES_REMEMBERZOOMPAN;Remember zoom % and pan offset
!PREFERENCES_REMEMBERZOOMPAN_TOOLTIP;Remember the zoom % and pan offset of the current image when opening a new image.\n\nThis option only works in "Single Editor Tab Mode" and when "Demosaicing method used for the preview at <100% zoom" is set to "As in PP3".
!PREFERENCES_RGBDTL_LABEL;Max number of threads for Noise Reduction and Wavelet Levels
@@ -1702,6 +1719,7 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: -
!TP_ICM_DCPILLUMINANT;Illuminant
!TP_ICM_DCPILLUMINANT_INTERPOLATED;Interpolated
!TP_ICM_DCPILLUMINANT_TOOLTIP;Select which embedded DCP illuminant to employ. Default is "interpolated" which is a mix between the two based on white balance. The setting is only enabled if a Dual-Illuminant DCP with interpolation support is selected.
+!TP_ICM_PROFILEINTENT;Rendering Intent
!TP_ICM_SAVEREFERENCE_APPLYWB;Apply white balance
!TP_ICM_SAVEREFERENCE_APPLYWB_TOOLTIP;Generally, apply the white balance when saving images to create ICC profiles, and do not apply the white balance to create DCP profiles.
!TP_ICM_SAVEREFERENCE_TOOLTIP;Save the linear TIFF image before the input profile is applied. The result can be used for calibration purposes and generation of a camera profile.
@@ -1750,12 +1768,15 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: -
!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL
!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b*
!TP_RETINEX_CONTEDIT_LH;Hue equalizer
+!TP_RETINEX_CONTEDIT_MAP;Mask 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_CURVEEDITOR_MAP;L=f(L)
+!TP_RETINEX_CURVEEDITOR_MAP_TOOLTIP;This curve can be applied alone or with a Gaussian mask or wavelet mask.\nBeware of artifacts!
!TP_RETINEX_FREEGAMMA;Free gamma
-!TP_RETINEX_GAIN;Gain
+!TP_RETINEX_GAIN;Contrast
!TP_RETINEX_GAIN_TOOLTIP;Acts on the restored image.\n\nThis is very different from the others settings. Used for black or white pixels, and to help balance the histogram.
!TP_RETINEX_GAMMA;Gamma
!TP_RETINEX_GAMMA_FREE;Free
@@ -1764,24 +1785,39 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: -
!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_GRAD;Transmission gradient
+!TP_RETINEX_GRADS;Strength gradient
+!TP_RETINEX_GRADS_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Strength is reduced when iterations increase, and conversely.
+!TP_RETINEX_GRAD_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Variance and Threshold are reduced when iterations increase, and conversely.
!TP_RETINEX_HIGH;High
!TP_RETINEX_HIGHLIG;Highlight
!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_HSLSPACE_LIN;HSL-Linear
!TP_RETINEX_HSLSPACE_LOG;HSL-Logarithmic
+!TP_RETINEX_ITER;Iterations (Tone-mapping)
+!TP_RETINEX_ITER_TOOLTIP;Simulate a tone-mapping operator.\nHigh values increase the processing time.
!TP_RETINEX_LABEL;Retinex
!TP_RETINEX_LABSPACE;L*a*b*
!TP_RETINEX_LOW;Low
+!TP_RETINEX_MAP;Mask method
+!TP_RETINEX_MAP_CURV;Curve only
+!TP_RETINEX_MAP_GAUS;Gaussian mask
+!TP_RETINEX_MAP_MAPP;Sharp mask (wavelet partial)
+!TP_RETINEX_MAP_MAPT;Sharp mask (wavelet total)
+!TP_RETINEX_MAP_METHOD_TOOLTIP;Use the mask generated by the Gaussian function above to reduce halos and artifacts.\n\nCurve only: apply a diagonal contrast curve on the mask.\nBeware of artifacts!\n\nGaussian mask: generate and use a Gaussian blur of the original mask.\nQuick.\n\nSharp mask: generate and use a wavelet on the original mask.\nSlow.
+!TP_RETINEX_MAP_NONE;None
!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,\nHighlights = 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_NEIGHBOR;Radius
!TP_RETINEX_NEUTRAL;Reset
!TP_RETINEX_NEUTRAL_TIP;Reset all sliders and curves to their default values.
-!TP_RETINEX_OFFSET;Offset
+!TP_RETINEX_OFFSET;Brightness
+!TP_RETINEX_SCALES;Gaussian gradient
+!TP_RETINEX_SCALES_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Scale and Neighboring pixels are reduced when iterations increase, and conversely.
!TP_RETINEX_SETTINGS;Settings
!TP_RETINEX_SLOPE;Free gamma slope
!TP_RETINEX_STRENGTH;Strength
@@ -1793,8 +1829,15 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: -
!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;Contrast
!TP_RETINEX_VARIANCE_TOOLTIP;Low variance increase local contrast and saturation, but can lead to artifacts.
+!TP_RETINEX_VIEW;Process (Preview)
+!TP_RETINEX_VIEW_MASK;Mask
+!TP_RETINEX_VIEW_METHOD_TOOLTIP;Standard - Normal display.\nMask - Displays the mask.\nUnsharp mask - Displays the image with a high radius unsharp mask.\nTransmission - Auto/Fixed - Displays the file transmission-map, before any action on contrast and brightness.\n\nAttention: the mask does not correspond to reality, but is amplified to make it more visible.
+!TP_RETINEX_VIEW_NONE;Standard
+!TP_RETINEX_VIEW_TRAN;Transmission - Auto
+!TP_RETINEX_VIEW_TRAN2;Transmission - Fixed
+!TP_RETINEX_VIEW_UNSHARP;Unsharp mask
!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
diff --git a/rtdata/languages/Chinese (Simplified) b/rtdata/languages/Chinese (Simplified)
index de7c3afcb..ef7fd73e4 100644
--- a/rtdata/languages/Chinese (Simplified)
+++ b/rtdata/languages/Chinese (Simplified)
@@ -440,7 +440,6 @@ PREFERENCES_CACHEMAXENTRIES;最大缓存数量
PREFERENCES_CACHEOPTS;缓存选项
PREFERENCES_CACHETHUMBHEIGHT;最大缩略图高度
PREFERENCES_CLIPPINGIND;高光溢出提示
-PREFERENCES_CMETRICINTENT;色彩模式
PREFERENCES_D50;5000K
PREFERENCES_D55;5500K
PREFERENCES_D60;6000K
@@ -471,7 +470,6 @@ PREFERENCES_INTENT_PERCEPTUAL;感知模式
PREFERENCES_INTENT_RELATIVE;相对色彩模式
PREFERENCES_INTENT_SATURATION;饱和度
PREFERENCES_MENUGROUPRANK;组 "评价"
-PREFERENCES_MONITORICC;显示器配置
PREFERENCES_OUTDIR;输出路径
PREFERENCES_OUTDIRFOLDER;保存至文件夹
PREFERENCES_OUTDIRFOLDERHINT;将已寸图片放至所选文件夹
@@ -1148,7 +1146,7 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: -
!HISTORY_MSG_364;W - Final - Contrast balance
!HISTORY_MSG_365;W - Final - Delta balance
!HISTORY_MSG_366;W - Residual - Compression gamma
-!HISTORY_MSG_367;W - ES - Local contrast curve
+!HISTORY_MSG_367;W - Final - 'After' contrast curve
!HISTORY_MSG_368;W - Final - Contrast balance
!HISTORY_MSG_369;W - Final - Balance method
!HISTORY_MSG_370;W - Final - Local contrast curve
@@ -1189,11 +1187,11 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: -
!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_408;Retinex - Radius
+!HISTORY_MSG_409;Retinex - Contrast
+!HISTORY_MSG_410;Retinex - Brightness
!HISTORY_MSG_411;Retinex - Strength
-!HISTORY_MSG_412;Retinex - Scales
+!HISTORY_MSG_412;Retinex - Gaussian Gradient
!HISTORY_MSG_413;Retinex - Variance
!HISTORY_MSG_414;Retinex - Histogram - Lab
!HISTORY_MSG_415;Retinex - Transmission
@@ -1208,6 +1206,19 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: -
!HISTORY_MSG_424;Retinex - HL threshold
!HISTORY_MSG_425;Retinex - Log base
!HISTORY_MSG_426;Retinex - Hue equalizer
+!HISTORY_MSG_427;Output rendering intent
+!HISTORY_MSG_428;Monitor rendering intent
+!HISTORY_MSG_429;Retinex - Iterations
+!HISTORY_MSG_430;Retinex - Transmission Gradient
+!HISTORY_MSG_431;Retinex - Strength Gradient
+!HISTORY_MSG_432;Retinex - M - Highlights
+!HISTORY_MSG_433;Retinex - M - Highlights TW
+!HISTORY_MSG_434;Retinex - M - Shadows
+!HISTORY_MSG_435;Retinex - M - Shadows TW
+!HISTORY_MSG_436;Retinex - M - Radius
+!HISTORY_MSG_437;Retinex - M - Method
+!HISTORY_MSG_438;Retinex - M - Equalizer
+!HISTORY_MSG_439;Retinex - Preview
!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).
@@ -1231,6 +1242,8 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: -
!MAIN_TOOLTIP_PREVIEWFOCUSMASK;Preview the Focus Mask.\nShortcut: Shift-f\n\nMore accurate on images with shallow depth of field, low noise and at higher zoom levels.\n\nTo improve detection accuracy for noisy images evaluate at smaller zoom, about 10-30%.
!MAIN_TOOLTIP_PREVIEWG;Preview the Green channel.\nShortcut: g
!MAIN_TOOLTIP_PREVIEWL;Preview the Luminosity.\nShortcut: v\n\n0.299*R + 0.587*G + 0.114*B
+!MONITOR_PROFILE_SYSTEM;System default
+!MONITOR_SOFTPROOF;Soft-proof
!OPTIONS_DEFIMG_MISSING;The default profile for non-raw photos could not be found or is not set.\n\nPlease check your profiles' directory, it may be missing or damaged.\n\nDefault internal values will be used.
!OPTIONS_DEFRAW_MISSING;The default profile for raw photos could not be found or is not set.\n\nPlease check your profiles' directory, it may be missing or damaged.\n\nDefault internal values will be used.
!PARTIALPASTE_COLORTONING;Color toning
@@ -1246,6 +1259,7 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: -
!PARTIALPASTE_IMPULSEDENOISE;Impulse noise reduction
!PARTIALPASTE_PREPROCESS_DEADPIXFILT;Dead pixel filter
!PARTIALPASTE_PREPROCESS_HOTPIXFILT;Hot pixel filter
+!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
!PARTIALPASTE_RAWEXPOS_BLACK;Black levels
!PARTIALPASTE_RAWEXPOS_LINEAR;White point correction
!PARTIALPASTE_RAWEXPOS_PRESER;Highlight preservation
@@ -1336,6 +1350,8 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: -
!PREFERENCES_MENUOPTIONS;Context Menu Options
!PREFERENCES_METADATA;Metadata
!PREFERENCES_MIN;Mini (100x115)
+!PREFERENCES_MONINTENT;Default monitor intent
+!PREFERENCES_MONPROFILE;Default monitor profile
!PREFERENCES_MULTITAB;Multiple Editor Tabs Mode
!PREFERENCES_MULTITABDUALMON;Multiple Editor Tabs In Own Window Mode
!PREFERENCES_NAVGUIDEBRUSH;Navigator guide color
@@ -1351,6 +1367,7 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: -
!PREFERENCES_PREVDEMO_FAST;Fast
!PREFERENCES_PREVDEMO_LABEL;Demosaicing method used for the preview at <100% zoom:
!PREFERENCES_PREVDEMO_SIDECAR;As in PP3
+!PREFERENCES_PROFILE_NONE;None
!PREFERENCES_REMEMBERZOOMPAN;Remember zoom % and pan offset
!PREFERENCES_REMEMBERZOOMPAN_TOOLTIP;Remember the zoom % and pan offset of the current image when opening a new image.\n\nThis option only works in "Single Editor Tab Mode" and when "Demosaicing method used for the preview at <100% zoom" is set to "As in PP3".
!PREFERENCES_RGBDTL_LABEL;Max number of threads for Noise Reduction and Wavelet Levels
@@ -1642,6 +1659,7 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: -
!TP_ICM_INPUTCAMERAICC_TOOLTIP;Use RawTherapee's camera-specific DCP or ICC input color profiles. These profiles are more precise than simpler matrix ones. They are not available for all cameras. These profiles are stored in the /iccprofiles/input and /dcpprofiles folders and are automatically retrieved based on a file name matching to the exact model name of the camera.
!TP_ICM_INPUTCAMERA_TOOLTIP;Use a simple color matrix from dcraw, an enhanced RawTherapee version (whichever is available based on camera model) or one embedded in the DNG.
!TP_ICM_INPUTNONE_TOOLTIP;Use no input color profile at all.\nUse only in special cases.
+!TP_ICM_PROFILEINTENT;Rendering Intent
!TP_ICM_SAVEREFERENCE_APPLYWB;Apply white balance
!TP_ICM_SAVEREFERENCE_APPLYWB_TOOLTIP;Generally, apply the white balance when saving images to create ICC profiles, and do not apply the white balance to create DCP profiles.
!TP_ICM_SAVEREFERENCE_TOOLTIP;Save the linear TIFF image before the input profile is applied. The result can be used for calibration purposes and generation of a camera profile.
@@ -1720,12 +1738,15 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: -
!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL
!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b*
!TP_RETINEX_CONTEDIT_LH;Hue equalizer
+!TP_RETINEX_CONTEDIT_MAP;Mask 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_CURVEEDITOR_MAP;L=f(L)
+!TP_RETINEX_CURVEEDITOR_MAP_TOOLTIP;This curve can be applied alone or with a Gaussian mask or wavelet mask.\nBeware of artifacts!
!TP_RETINEX_FREEGAMMA;Free gamma
-!TP_RETINEX_GAIN;Gain
+!TP_RETINEX_GAIN;Contrast
!TP_RETINEX_GAIN_TOOLTIP;Acts on the restored image.\n\nThis is very different from the others settings. Used for black or white pixels, and to help balance the histogram.
!TP_RETINEX_GAMMA;Gamma
!TP_RETINEX_GAMMA_FREE;Free
@@ -1734,24 +1755,39 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: -
!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_GRAD;Transmission gradient
+!TP_RETINEX_GRADS;Strength gradient
+!TP_RETINEX_GRADS_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Strength is reduced when iterations increase, and conversely.
+!TP_RETINEX_GRAD_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Variance and Threshold are reduced when iterations increase, and conversely.
!TP_RETINEX_HIGH;High
!TP_RETINEX_HIGHLIG;Highlight
!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_HSLSPACE_LIN;HSL-Linear
!TP_RETINEX_HSLSPACE_LOG;HSL-Logarithmic
+!TP_RETINEX_ITER;Iterations (Tone-mapping)
+!TP_RETINEX_ITER_TOOLTIP;Simulate a tone-mapping operator.\nHigh values increase the processing time.
!TP_RETINEX_LABEL;Retinex
!TP_RETINEX_LABSPACE;L*a*b*
!TP_RETINEX_LOW;Low
+!TP_RETINEX_MAP;Mask method
+!TP_RETINEX_MAP_CURV;Curve only
+!TP_RETINEX_MAP_GAUS;Gaussian mask
+!TP_RETINEX_MAP_MAPP;Sharp mask (wavelet partial)
+!TP_RETINEX_MAP_MAPT;Sharp mask (wavelet total)
+!TP_RETINEX_MAP_METHOD_TOOLTIP;Use the mask generated by the Gaussian function above to reduce halos and artifacts.\n\nCurve only: apply a diagonal contrast curve on the mask.\nBeware of artifacts!\n\nGaussian mask: generate and use a Gaussian blur of the original mask.\nQuick.\n\nSharp mask: generate and use a wavelet on the original mask.\nSlow.
+!TP_RETINEX_MAP_NONE;None
!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,\nHighlights = 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_NEIGHBOR;Radius
!TP_RETINEX_NEUTRAL;Reset
!TP_RETINEX_NEUTRAL_TIP;Reset all sliders and curves to their default values.
-!TP_RETINEX_OFFSET;Offset
+!TP_RETINEX_OFFSET;Brightness
+!TP_RETINEX_SCALES;Gaussian gradient
+!TP_RETINEX_SCALES_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Scale and Neighboring pixels are reduced when iterations increase, and conversely.
!TP_RETINEX_SETTINGS;Settings
!TP_RETINEX_SLOPE;Free gamma slope
!TP_RETINEX_STRENGTH;Strength
@@ -1763,8 +1799,15 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: -
!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;Contrast
!TP_RETINEX_VARIANCE_TOOLTIP;Low variance increase local contrast and saturation, but can lead to artifacts.
+!TP_RETINEX_VIEW;Process (Preview)
+!TP_RETINEX_VIEW_MASK;Mask
+!TP_RETINEX_VIEW_METHOD_TOOLTIP;Standard - Normal display.\nMask - Displays the mask.\nUnsharp mask - Displays the image with a high radius unsharp mask.\nTransmission - Auto/Fixed - Displays the file transmission-map, before any action on contrast and brightness.\n\nAttention: the mask does not correspond to reality, but is amplified to make it more visible.
+!TP_RETINEX_VIEW_NONE;Standard
+!TP_RETINEX_VIEW_TRAN;Transmission - Auto
+!TP_RETINEX_VIEW_TRAN2;Transmission - Fixed
+!TP_RETINEX_VIEW_UNSHARP;Unsharp mask
!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
diff --git a/rtdata/languages/Chinese (Traditional) b/rtdata/languages/Chinese (Traditional)
index 885a79980..52e0ed9ba 100644
--- a/rtdata/languages/Chinese (Traditional)
+++ b/rtdata/languages/Chinese (Traditional)
@@ -277,7 +277,6 @@ PREFERENCES_CACHEMAXENTRIES;Maximal Number of Cache Entries
PREFERENCES_CACHEOPTS;Cache Options
PREFERENCES_CACHETHUMBHEIGHT;Maximal Thumbnail Height
PREFERENCES_CLIPPINGIND;高光提示
-PREFERENCES_CMETRICINTENT;色彩模式
PREFERENCES_DATEFORMAT;日期格式
PREFERENCES_DATEFORMATHINT;You can use the following formatting strings:\n%y : year\n%m : month\n%d : day\n\nFor example, the hungarian date format is:\n%y/%m/%d
PREFERENCES_DEFAULTLANG;預設語言
@@ -301,7 +300,6 @@ PREFERENCES_INTENT_ABSOLUTE;絕對色彩模式
PREFERENCES_INTENT_PERCEPTUAL;感知模式
PREFERENCES_INTENT_RELATIVE;相對色彩模式
PREFERENCES_INTENT_SATURATION;飽和度
-PREFERENCES_MONITORICC;顯示器配置
PREFERENCES_OUTDIR;輸出路徑
PREFERENCES_OUTDIRFOLDER;Save to folder
PREFERENCES_OUTDIRFOLDERHINT;Put the saved images to the seledted folder
@@ -883,7 +881,7 @@ TP_WBALANCE_TEMPERATURE;色溫
!HISTORY_MSG_364;W - Final - Contrast balance
!HISTORY_MSG_365;W - Final - Delta balance
!HISTORY_MSG_366;W - Residual - Compression gamma
-!HISTORY_MSG_367;W - ES - Local contrast curve
+!HISTORY_MSG_367;W - Final - 'After' contrast curve
!HISTORY_MSG_368;W - Final - Contrast balance
!HISTORY_MSG_369;W - Final - Balance method
!HISTORY_MSG_370;W - Final - Local contrast curve
@@ -924,11 +922,11 @@ TP_WBALANCE_TEMPERATURE;色溫
!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_408;Retinex - Radius
+!HISTORY_MSG_409;Retinex - Contrast
+!HISTORY_MSG_410;Retinex - Brightness
!HISTORY_MSG_411;Retinex - Strength
-!HISTORY_MSG_412;Retinex - Scales
+!HISTORY_MSG_412;Retinex - Gaussian Gradient
!HISTORY_MSG_413;Retinex - Variance
!HISTORY_MSG_414;Retinex - Histogram - Lab
!HISTORY_MSG_415;Retinex - Transmission
@@ -943,6 +941,19 @@ TP_WBALANCE_TEMPERATURE;色溫
!HISTORY_MSG_424;Retinex - HL threshold
!HISTORY_MSG_425;Retinex - Log base
!HISTORY_MSG_426;Retinex - Hue equalizer
+!HISTORY_MSG_427;Output rendering intent
+!HISTORY_MSG_428;Monitor rendering intent
+!HISTORY_MSG_429;Retinex - Iterations
+!HISTORY_MSG_430;Retinex - Transmission Gradient
+!HISTORY_MSG_431;Retinex - Strength Gradient
+!HISTORY_MSG_432;Retinex - M - Highlights
+!HISTORY_MSG_433;Retinex - M - Highlights TW
+!HISTORY_MSG_434;Retinex - M - Shadows
+!HISTORY_MSG_435;Retinex - M - Shadows TW
+!HISTORY_MSG_436;Retinex - M - Radius
+!HISTORY_MSG_437;Retinex - M - Method
+!HISTORY_MSG_438;Retinex - M - Equalizer
+!HISTORY_MSG_439;Retinex - Preview
!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
@@ -987,6 +998,8 @@ TP_WBALANCE_TEMPERATURE;色溫
!MAIN_TOOLTIP_SHOWHIDERP1;Show/Hide the right panel.\nShortcut: Alt-l
!MAIN_TOOLTIP_SHOWHIDETP1;Show/Hide the top panel.\nShortcut: Shift-l
!MAIN_TOOLTIP_THRESHOLD;Threshold
+!MONITOR_PROFILE_SYSTEM;System default
+!MONITOR_SOFTPROOF;Soft-proof
!NAVIGATOR_B;B:
!NAVIGATOR_G;G:
!NAVIGATOR_H;H:
@@ -1032,6 +1045,7 @@ TP_WBALANCE_TEMPERATURE;色溫
!PARTIALPASTE_PREPROCESS_GREENEQUIL;Green equilibration
!PARTIALPASTE_PREPROCESS_HOTPIXFILT;Hot pixel filter
!PARTIALPASTE_PREPROCESS_LINEDENOISE;Line noise filter
+!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
!PARTIALPASTE_RAWCACORR_AUTO;CA auto-correction
!PARTIALPASTE_RAWCACORR_CABLUE;CA blue
!PARTIALPASTE_RAWCACORR_CARED;CA red
@@ -1143,6 +1157,8 @@ TP_WBALANCE_TEMPERATURE;色溫
!PREFERENCES_MENUOPTIONS;Context Menu Options
!PREFERENCES_METADATA;Metadata
!PREFERENCES_MIN;Mini (100x115)
+!PREFERENCES_MONINTENT;Default monitor intent
+!PREFERENCES_MONPROFILE;Default monitor profile
!PREFERENCES_MULTITAB;Multiple Editor Tabs Mode
!PREFERENCES_MULTITABDUALMON;Multiple Editor Tabs In Own Window Mode
!PREFERENCES_NAVGUIDEBRUSH;Navigator guide color
@@ -1158,6 +1174,7 @@ TP_WBALANCE_TEMPERATURE;色溫
!PREFERENCES_PREVDEMO_FAST;Fast
!PREFERENCES_PREVDEMO_LABEL;Demosaicing method used for the preview at <100% zoom:
!PREFERENCES_PREVDEMO_SIDECAR;As in PP3
+!PREFERENCES_PROFILE_NONE;None
!PREFERENCES_PROPERTY;Property
!PREFERENCES_REMEMBERZOOMPAN;Remember zoom % and pan offset
!PREFERENCES_REMEMBERZOOMPAN_TOOLTIP;Remember the zoom % and pan offset of the current image when opening a new image.\n\nThis option only works in "Single Editor Tab Mode" and when "Demosaicing method used for the preview at <100% zoom" is set to "As in PP3".
@@ -1569,6 +1586,7 @@ TP_WBALANCE_TEMPERATURE;色溫
!TP_ICM_INPUTEMBEDDED_TOOLTIP;Use color profile embedded in non-raw files.
!TP_ICM_INPUTNONE;No profile
!TP_ICM_INPUTNONE_TOOLTIP;Use no input color profile at all.\nUse only in special cases.
+!TP_ICM_PROFILEINTENT;Rendering Intent
!TP_ICM_SAVEREFERENCE_APPLYWB;Apply white balance
!TP_ICM_SAVEREFERENCE_APPLYWB_TOOLTIP;Generally, apply the white balance when saving images to create ICC profiles, and do not apply the white balance to create DCP profiles.
!TP_ICM_SAVEREFERENCE_TOOLTIP;Save the linear TIFF image before the input profile is applied. The result can be used for calibration purposes and generation of a camera profile.
@@ -1682,12 +1700,15 @@ TP_WBALANCE_TEMPERATURE;色溫
!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL
!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b*
!TP_RETINEX_CONTEDIT_LH;Hue equalizer
+!TP_RETINEX_CONTEDIT_MAP;Mask 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_CURVEEDITOR_MAP;L=f(L)
+!TP_RETINEX_CURVEEDITOR_MAP_TOOLTIP;This curve can be applied alone or with a Gaussian mask or wavelet mask.\nBeware of artifacts!
!TP_RETINEX_FREEGAMMA;Free gamma
-!TP_RETINEX_GAIN;Gain
+!TP_RETINEX_GAIN;Contrast
!TP_RETINEX_GAIN_TOOLTIP;Acts on the restored image.\n\nThis is very different from the others settings. Used for black or white pixels, and to help balance the histogram.
!TP_RETINEX_GAMMA;Gamma
!TP_RETINEX_GAMMA_FREE;Free
@@ -1696,24 +1717,39 @@ TP_WBALANCE_TEMPERATURE;色溫
!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_GRAD;Transmission gradient
+!TP_RETINEX_GRADS;Strength gradient
+!TP_RETINEX_GRADS_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Strength is reduced when iterations increase, and conversely.
+!TP_RETINEX_GRAD_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Variance and Threshold are reduced when iterations increase, and conversely.
!TP_RETINEX_HIGH;High
!TP_RETINEX_HIGHLIG;Highlight
!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_HSLSPACE_LIN;HSL-Linear
!TP_RETINEX_HSLSPACE_LOG;HSL-Logarithmic
+!TP_RETINEX_ITER;Iterations (Tone-mapping)
+!TP_RETINEX_ITER_TOOLTIP;Simulate a tone-mapping operator.\nHigh values increase the processing time.
!TP_RETINEX_LABEL;Retinex
!TP_RETINEX_LABSPACE;L*a*b*
!TP_RETINEX_LOW;Low
+!TP_RETINEX_MAP;Mask method
+!TP_RETINEX_MAP_CURV;Curve only
+!TP_RETINEX_MAP_GAUS;Gaussian mask
+!TP_RETINEX_MAP_MAPP;Sharp mask (wavelet partial)
+!TP_RETINEX_MAP_MAPT;Sharp mask (wavelet total)
+!TP_RETINEX_MAP_METHOD_TOOLTIP;Use the mask generated by the Gaussian function above to reduce halos and artifacts.\n\nCurve only: apply a diagonal contrast curve on the mask.\nBeware of artifacts!\n\nGaussian mask: generate and use a Gaussian blur of the original mask.\nQuick.\n\nSharp mask: generate and use a wavelet on the original mask.\nSlow.
+!TP_RETINEX_MAP_NONE;None
!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,\nHighlights = 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_NEIGHBOR;Radius
!TP_RETINEX_NEUTRAL;Reset
!TP_RETINEX_NEUTRAL_TIP;Reset all sliders and curves to their default values.
-!TP_RETINEX_OFFSET;Offset
+!TP_RETINEX_OFFSET;Brightness
+!TP_RETINEX_SCALES;Gaussian gradient
+!TP_RETINEX_SCALES_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Scale and Neighboring pixels are reduced when iterations increase, and conversely.
!TP_RETINEX_SETTINGS;Settings
!TP_RETINEX_SLOPE;Free gamma slope
!TP_RETINEX_STRENGTH;Strength
@@ -1725,8 +1761,15 @@ TP_WBALANCE_TEMPERATURE;色溫
!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;Contrast
!TP_RETINEX_VARIANCE_TOOLTIP;Low variance increase local contrast and saturation, but can lead to artifacts.
+!TP_RETINEX_VIEW;Process (Preview)
+!TP_RETINEX_VIEW_MASK;Mask
+!TP_RETINEX_VIEW_METHOD_TOOLTIP;Standard - Normal display.\nMask - Displays the mask.\nUnsharp mask - Displays the image with a high radius unsharp mask.\nTransmission - Auto/Fixed - Displays the file transmission-map, before any action on contrast and brightness.\n\nAttention: the mask does not correspond to reality, but is amplified to make it more visible.
+!TP_RETINEX_VIEW_NONE;Standard
+!TP_RETINEX_VIEW_TRAN;Transmission - Auto
+!TP_RETINEX_VIEW_TRAN2;Transmission - Fixed
+!TP_RETINEX_VIEW_UNSHARP;Unsharp mask
!TP_RGBCURVES_BLUE;B
!TP_RGBCURVES_CHANNEL;Channel
!TP_RGBCURVES_GREEN;G
diff --git a/rtdata/languages/Czech b/rtdata/languages/Czech
index bac9323ff..da7898a80 100644
--- a/rtdata/languages/Czech
+++ b/rtdata/languages/Czech
@@ -917,7 +917,6 @@ PREFERENCES_CLIPPINGIND;Indikace oříznutí
PREFERENCES_CLUTSCACHE;Mezipaměť HaldCLUT
PREFERENCES_CLUTSCACHE_LABEL;Maximální počet přednačtených CLUTů
PREFERENCES_CLUTSDIR;Složka HaldCLUT
-PREFERENCES_CMETRICINTENT;Kolorimetrický záměr
PREFERENCES_CURVEBBOXPOS;Pozice tlačítek pro kopírování a vložení křivky
PREFERENCES_CURVEBBOXPOS_ABOVE;Nad
PREFERENCES_CURVEBBOXPOS_BELOW;Pod
@@ -1012,7 +1011,6 @@ PREFERENCES_MENUGROUPRANK;Skupina "Hodnocení"
PREFERENCES_MENUOPTIONS;Volby místní nabídky
PREFERENCES_METADATA;Metadata
PREFERENCES_MIN;Velmi malá (100x115)
-PREFERENCES_MONITORICC;Barevný profil monitoru
PREFERENCES_MULTITAB;Mód více karet editoru
PREFERENCES_MULTITABDUALMON;Mód více karet editoru ve vlastním okně
PREFERENCES_NAVGUIDEBRUSH;Barva vodítek navigátoru
@@ -2000,7 +1998,52 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: -
!FILEBROWSER_SHOWORIGINALHINT;Show only original images.\n\nWhen several images exist with the same filename but different extensions, the one considered original is the one whose extension is nearest the top of the parsed extensions list in Preferences > File Browser > Parsed Extensions.
!HISTORY_MSG_166;Exposure - Reset
+!HISTORY_MSG_427;Output rendering intent
+!HISTORY_MSG_428;Monitor rendering intent
+!HISTORY_MSG_429;Retinex - Iterations
+!HISTORY_MSG_430;Retinex - Transmission Gradient
+!HISTORY_MSG_431;Retinex - Strength Gradient
+!HISTORY_MSG_432;Retinex - M - Highlights
+!HISTORY_MSG_433;Retinex - M - Highlights TW
+!HISTORY_MSG_434;Retinex - M - Shadows
+!HISTORY_MSG_435;Retinex - M - Shadows TW
+!HISTORY_MSG_436;Retinex - M - Radius
+!HISTORY_MSG_437;Retinex - M - Method
+!HISTORY_MSG_438;Retinex - M - Equalizer
+!HISTORY_MSG_439;Retinex - Preview
!MAIN_BUTTON_SENDTOEDITOR;Edit image in external editor
+!MONITOR_PROFILE_SYSTEM;System default
+!MONITOR_SOFTPROOF;Soft-proof
+!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
+!PREFERENCES_MONINTENT;Default monitor intent
+!PREFERENCES_MONPROFILE;Default monitor profile
!PREFERENCES_PARSEDEXTDOWNHINT;Move selected extension down in the list.
!PREFERENCES_PARSEDEXTUPHINT;Move selected extension up in the list.
+!PREFERENCES_PROFILE_NONE;None
+!TP_ICM_PROFILEINTENT;Rendering Intent
!TP_NEUTRAL;Reset
+!TP_RETINEX_CONTEDIT_MAP;Mask equalizer
+!TP_RETINEX_CURVEEDITOR_MAP;L=f(L)
+!TP_RETINEX_CURVEEDITOR_MAP_TOOLTIP;This curve can be applied alone or with a Gaussian mask or wavelet mask.\nBeware of artifacts!
+!TP_RETINEX_GRAD;Transmission gradient
+!TP_RETINEX_GRADS;Strength gradient
+!TP_RETINEX_GRADS_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Strength is reduced when iterations increase, and conversely.
+!TP_RETINEX_GRAD_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Variance and Threshold are reduced when iterations increase, and conversely.
+!TP_RETINEX_ITER;Iterations (Tone-mapping)
+!TP_RETINEX_ITER_TOOLTIP;Simulate a tone-mapping operator.\nHigh values increase the processing time.
+!TP_RETINEX_MAP;Mask method
+!TP_RETINEX_MAP_CURV;Curve only
+!TP_RETINEX_MAP_GAUS;Gaussian mask
+!TP_RETINEX_MAP_MAPP;Sharp mask (wavelet partial)
+!TP_RETINEX_MAP_MAPT;Sharp mask (wavelet total)
+!TP_RETINEX_MAP_METHOD_TOOLTIP;Use the mask generated by the Gaussian function above to reduce halos and artifacts.\n\nCurve only: apply a diagonal contrast curve on the mask.\nBeware of artifacts!\n\nGaussian mask: generate and use a Gaussian blur of the original mask.\nQuick.\n\nSharp mask: generate and use a wavelet on the original mask.\nSlow.
+!TP_RETINEX_MAP_NONE;None
+!TP_RETINEX_SCALES;Gaussian gradient
+!TP_RETINEX_SCALES_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Scale and Neighboring pixels are reduced when iterations increase, and conversely.
+!TP_RETINEX_VIEW;Process (Preview)
+!TP_RETINEX_VIEW_MASK;Mask
+!TP_RETINEX_VIEW_METHOD_TOOLTIP;Standard - Normal display.\nMask - Displays the mask.\nUnsharp mask - Displays the image with a high radius unsharp mask.\nTransmission - Auto/Fixed - Displays the file transmission-map, before any action on contrast and brightness.\n\nAttention: the mask does not correspond to reality, but is amplified to make it more visible.
+!TP_RETINEX_VIEW_NONE;Standard
+!TP_RETINEX_VIEW_TRAN;Transmission - Auto
+!TP_RETINEX_VIEW_TRAN2;Transmission - Fixed
+!TP_RETINEX_VIEW_UNSHARP;Unsharp mask
diff --git a/rtdata/languages/Dansk b/rtdata/languages/Dansk
index 9cc3fc7d3..f9389a29a 100644
--- a/rtdata/languages/Dansk
+++ b/rtdata/languages/Dansk
@@ -268,7 +268,6 @@ PREFERENCES_CACHEMAXENTRIES;Maksimalt antal indskrivninger i cache
PREFERENCES_CACHEOPTS;Cache-indstillinger
PREFERENCES_CACHETHUMBHEIGHT;Maksimal miniaturehøjde
PREFERENCES_CLIPPINGIND;Indikator for udbrændte områder
-PREFERENCES_CMETRICINTENT;Colorimetrisk fortsæt
PREFERENCES_DATEFORMAT;Datoformat
PREFERENCES_DATEFORMATHINT;Du kan bruge følgende formatindstillinger:\n%y : år\n%m : måned\n%d : dag\n\nDet typiske datoformat i danmark er:\n%d/%m/%y
PREFERENCES_DEFAULTLANG;Sprog
@@ -292,7 +291,6 @@ PREFERENCES_INTENT_ABSOLUTE;Absolut Colorimetrisk
PREFERENCES_INTENT_PERCEPTUAL;Opfattelsesorienteret
PREFERENCES_INTENT_RELATIVE;Relativ Colorimetrisk
PREFERENCES_INTENT_SATURATION;Mætning
-PREFERENCES_MONITORICC;Skærmprofil
PREFERENCES_OUTDIR;Output-mappe
PREFERENCES_OUTDIRFOLDER;Gem i mappe
PREFERENCES_OUTDIRFOLDERHINT;Læg det gemte billede i den valgte mappe
@@ -879,7 +877,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!HISTORY_MSG_364;W - Final - Contrast balance
!HISTORY_MSG_365;W - Final - Delta balance
!HISTORY_MSG_366;W - Residual - Compression gamma
-!HISTORY_MSG_367;W - ES - Local contrast curve
+!HISTORY_MSG_367;W - Final - 'After' contrast curve
!HISTORY_MSG_368;W - Final - Contrast balance
!HISTORY_MSG_369;W - Final - Balance method
!HISTORY_MSG_370;W - Final - Local contrast curve
@@ -920,11 +918,11 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!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_408;Retinex - Radius
+!HISTORY_MSG_409;Retinex - Contrast
+!HISTORY_MSG_410;Retinex - Brightness
!HISTORY_MSG_411;Retinex - Strength
-!HISTORY_MSG_412;Retinex - Scales
+!HISTORY_MSG_412;Retinex - Gaussian Gradient
!HISTORY_MSG_413;Retinex - Variance
!HISTORY_MSG_414;Retinex - Histogram - Lab
!HISTORY_MSG_415;Retinex - Transmission
@@ -939,6 +937,19 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!HISTORY_MSG_424;Retinex - HL threshold
!HISTORY_MSG_425;Retinex - Log base
!HISTORY_MSG_426;Retinex - Hue equalizer
+!HISTORY_MSG_427;Output rendering intent
+!HISTORY_MSG_428;Monitor rendering intent
+!HISTORY_MSG_429;Retinex - Iterations
+!HISTORY_MSG_430;Retinex - Transmission Gradient
+!HISTORY_MSG_431;Retinex - Strength Gradient
+!HISTORY_MSG_432;Retinex - M - Highlights
+!HISTORY_MSG_433;Retinex - M - Highlights TW
+!HISTORY_MSG_434;Retinex - M - Shadows
+!HISTORY_MSG_435;Retinex - M - Shadows TW
+!HISTORY_MSG_436;Retinex - M - Radius
+!HISTORY_MSG_437;Retinex - M - Method
+!HISTORY_MSG_438;Retinex - M - Equalizer
+!HISTORY_MSG_439;Retinex - Preview
!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
@@ -985,6 +996,8 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!MAIN_TOOLTIP_SHOWHIDETP1;Show/Hide the top panel.\nShortcut: Shift-l
!MAIN_TOOLTIP_THRESHOLD;Threshold
!MAIN_TOOLTIP_TOGGLE;Toggle the Before/After view.\nShortcut: Shift-b
+!MONITOR_PROFILE_SYSTEM;System default
+!MONITOR_SOFTPROOF;Soft-proof
!NAVIGATOR_B;B:
!NAVIGATOR_G;G:
!NAVIGATOR_H;H:
@@ -1030,6 +1043,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!PARTIALPASTE_PREPROCESS_GREENEQUIL;Green equilibration
!PARTIALPASTE_PREPROCESS_HOTPIXFILT;Hot pixel filter
!PARTIALPASTE_PREPROCESS_LINEDENOISE;Line noise filter
+!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
!PARTIALPASTE_RAWCACORR_AUTO;CA auto-correction
!PARTIALPASTE_RAWCACORR_CABLUE;CA blue
!PARTIALPASTE_RAWCACORR_CARED;CA red
@@ -1141,6 +1155,8 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!PREFERENCES_MENUOPTIONS;Context Menu Options
!PREFERENCES_METADATA;Metadata
!PREFERENCES_MIN;Mini (100x115)
+!PREFERENCES_MONINTENT;Default monitor intent
+!PREFERENCES_MONPROFILE;Default monitor profile
!PREFERENCES_MULTITAB;Multiple Editor Tabs Mode
!PREFERENCES_MULTITABDUALMON;Multiple Editor Tabs In Own Window Mode
!PREFERENCES_NAVGUIDEBRUSH;Navigator guide color
@@ -1156,6 +1172,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!PREFERENCES_PREVDEMO_FAST;Fast
!PREFERENCES_PREVDEMO_LABEL;Demosaicing method used for the preview at <100% zoom:
!PREFERENCES_PREVDEMO_SIDECAR;As in PP3
+!PREFERENCES_PROFILE_NONE;None
!PREFERENCES_PROPERTY;Property
!PREFERENCES_REMEMBERZOOMPAN;Remember zoom % and pan offset
!PREFERENCES_REMEMBERZOOMPAN_TOOLTIP;Remember the zoom % and pan offset of the current image when opening a new image.\n\nThis option only works in "Single Editor Tab Mode" and when "Demosaicing method used for the preview at <100% zoom" is set to "As in PP3".
@@ -1567,6 +1584,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!TP_ICM_INPUTEMBEDDED_TOOLTIP;Use color profile embedded in non-raw files.
!TP_ICM_INPUTNONE;No profile
!TP_ICM_INPUTNONE_TOOLTIP;Use no input color profile at all.\nUse only in special cases.
+!TP_ICM_PROFILEINTENT;Rendering Intent
!TP_ICM_SAVEREFERENCE_APPLYWB;Apply white balance
!TP_ICM_SAVEREFERENCE_APPLYWB_TOOLTIP;Generally, apply the white balance when saving images to create ICC profiles, and do not apply the white balance to create DCP profiles.
!TP_ICM_SAVEREFERENCE_TOOLTIP;Save the linear TIFF image before the input profile is applied. The result can be used for calibration purposes and generation of a camera profile.
@@ -1681,12 +1699,15 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL
!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b*
!TP_RETINEX_CONTEDIT_LH;Hue equalizer
+!TP_RETINEX_CONTEDIT_MAP;Mask 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_CURVEEDITOR_MAP;L=f(L)
+!TP_RETINEX_CURVEEDITOR_MAP_TOOLTIP;This curve can be applied alone or with a Gaussian mask or wavelet mask.\nBeware of artifacts!
!TP_RETINEX_FREEGAMMA;Free gamma
-!TP_RETINEX_GAIN;Gain
+!TP_RETINEX_GAIN;Contrast
!TP_RETINEX_GAIN_TOOLTIP;Acts on the restored image.\n\nThis is very different from the others settings. Used for black or white pixels, and to help balance the histogram.
!TP_RETINEX_GAMMA;Gamma
!TP_RETINEX_GAMMA_FREE;Free
@@ -1695,24 +1716,39 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!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_GRAD;Transmission gradient
+!TP_RETINEX_GRADS;Strength gradient
+!TP_RETINEX_GRADS_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Strength is reduced when iterations increase, and conversely.
+!TP_RETINEX_GRAD_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Variance and Threshold are reduced when iterations increase, and conversely.
!TP_RETINEX_HIGH;High
!TP_RETINEX_HIGHLIG;Highlight
!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_HSLSPACE_LIN;HSL-Linear
!TP_RETINEX_HSLSPACE_LOG;HSL-Logarithmic
+!TP_RETINEX_ITER;Iterations (Tone-mapping)
+!TP_RETINEX_ITER_TOOLTIP;Simulate a tone-mapping operator.\nHigh values increase the processing time.
!TP_RETINEX_LABEL;Retinex
!TP_RETINEX_LABSPACE;L*a*b*
!TP_RETINEX_LOW;Low
+!TP_RETINEX_MAP;Mask method
+!TP_RETINEX_MAP_CURV;Curve only
+!TP_RETINEX_MAP_GAUS;Gaussian mask
+!TP_RETINEX_MAP_MAPP;Sharp mask (wavelet partial)
+!TP_RETINEX_MAP_MAPT;Sharp mask (wavelet total)
+!TP_RETINEX_MAP_METHOD_TOOLTIP;Use the mask generated by the Gaussian function above to reduce halos and artifacts.\n\nCurve only: apply a diagonal contrast curve on the mask.\nBeware of artifacts!\n\nGaussian mask: generate and use a Gaussian blur of the original mask.\nQuick.\n\nSharp mask: generate and use a wavelet on the original mask.\nSlow.
+!TP_RETINEX_MAP_NONE;None
!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,\nHighlights = 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_NEIGHBOR;Radius
!TP_RETINEX_NEUTRAL;Reset
!TP_RETINEX_NEUTRAL_TIP;Reset all sliders and curves to their default values.
-!TP_RETINEX_OFFSET;Offset
+!TP_RETINEX_OFFSET;Brightness
+!TP_RETINEX_SCALES;Gaussian gradient
+!TP_RETINEX_SCALES_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Scale and Neighboring pixels are reduced when iterations increase, and conversely.
!TP_RETINEX_SETTINGS;Settings
!TP_RETINEX_SLOPE;Free gamma slope
!TP_RETINEX_STRENGTH;Strength
@@ -1724,8 +1760,15 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!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;Contrast
!TP_RETINEX_VARIANCE_TOOLTIP;Low variance increase local contrast and saturation, but can lead to artifacts.
+!TP_RETINEX_VIEW;Process (Preview)
+!TP_RETINEX_VIEW_MASK;Mask
+!TP_RETINEX_VIEW_METHOD_TOOLTIP;Standard - Normal display.\nMask - Displays the mask.\nUnsharp mask - Displays the image with a high radius unsharp mask.\nTransmission - Auto/Fixed - Displays the file transmission-map, before any action on contrast and brightness.\n\nAttention: the mask does not correspond to reality, but is amplified to make it more visible.
+!TP_RETINEX_VIEW_NONE;Standard
+!TP_RETINEX_VIEW_TRAN;Transmission - Auto
+!TP_RETINEX_VIEW_TRAN2;Transmission - Fixed
+!TP_RETINEX_VIEW_UNSHARP;Unsharp mask
!TP_RGBCURVES_BLUE;B
!TP_RGBCURVES_CHANNEL;Channel
!TP_RGBCURVES_GREEN;G
diff --git a/rtdata/languages/Deutsch b/rtdata/languages/Deutsch
index 029718871..75b82ca17 100644
--- a/rtdata/languages/Deutsch
+++ b/rtdata/languages/Deutsch
@@ -911,7 +911,6 @@ PREFERENCES_CLIPPINGIND;Anzeige zu heller/dunkler Bereiche
PREFERENCES_CLUTSCACHE;HaldCLUT-Zwischenspeicher
PREFERENCES_CLUTSCACHE_LABEL;Maximale Anzahl CLUTs im Zwischenspeicher
PREFERENCES_CLUTSDIR;HaldCLUT-Verzeichnis
-PREFERENCES_CMETRICINTENT;Farbraumtransformation
PREFERENCES_CURVEBBOXPOS;Position der Kurven-Buttons
PREFERENCES_CURVEBBOXPOS_ABOVE;Oben
PREFERENCES_CURVEBBOXPOS_BELOW;Unten
@@ -1006,7 +1005,6 @@ PREFERENCES_MENUGROUPRANK;Untermenü Bewertung
PREFERENCES_MENUOPTIONS;Menüoptionen
PREFERENCES_METADATA;Metadaten
PREFERENCES_MIN;Mini (100x115)
-PREFERENCES_MONITORICC;Monitor-Profil
PREFERENCES_MULTITAB;Multi-Reitermodus
PREFERENCES_MULTITABDUALMON;Multi-Reitermodus (auf zweitem Monitor, wenn verfügbar)
PREFERENCES_NAVGUIDEBRUSH;Farbe der Navigationshilfe
@@ -1991,3 +1989,52 @@ ZOOMPANEL_ZOOMFITSCREEN;An Bildschirm anpassen\nTaste: f
ZOOMPANEL_ZOOMIN;Hineinzoomen\nTaste: +
ZOOMPANEL_ZOOMOUT;Herauszoomen\nTaste: -
+!!!!!!!!!!!!!!!!!!!!!!!!!
+! Untranslated keys follow; remove the ! prefix after an entry is translated.
+!!!!!!!!!!!!!!!!!!!!!!!!!
+
+!HISTORY_MSG_427;Output rendering intent
+!HISTORY_MSG_428;Monitor rendering intent
+!HISTORY_MSG_429;Retinex - Iterations
+!HISTORY_MSG_430;Retinex - Transmission Gradient
+!HISTORY_MSG_431;Retinex - Strength Gradient
+!HISTORY_MSG_432;Retinex - M - Highlights
+!HISTORY_MSG_433;Retinex - M - Highlights TW
+!HISTORY_MSG_434;Retinex - M - Shadows
+!HISTORY_MSG_435;Retinex - M - Shadows TW
+!HISTORY_MSG_436;Retinex - M - Radius
+!HISTORY_MSG_437;Retinex - M - Method
+!HISTORY_MSG_438;Retinex - M - Equalizer
+!HISTORY_MSG_439;Retinex - Preview
+!MONITOR_PROFILE_SYSTEM;System default
+!MONITOR_SOFTPROOF;Soft-proof
+!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
+!PREFERENCES_MONINTENT;Default monitor intent
+!PREFERENCES_MONPROFILE;Default monitor profile
+!PREFERENCES_PROFILE_NONE;None
+!TP_ICM_PROFILEINTENT;Rendering Intent
+!TP_RETINEX_CONTEDIT_MAP;Mask equalizer
+!TP_RETINEX_CURVEEDITOR_MAP;L=f(L)
+!TP_RETINEX_CURVEEDITOR_MAP_TOOLTIP;This curve can be applied alone or with a Gaussian mask or wavelet mask.\nBeware of artifacts!
+!TP_RETINEX_GRAD;Transmission gradient
+!TP_RETINEX_GRADS;Strength gradient
+!TP_RETINEX_GRADS_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Strength is reduced when iterations increase, and conversely.
+!TP_RETINEX_GRAD_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Variance and Threshold are reduced when iterations increase, and conversely.
+!TP_RETINEX_ITER;Iterations (Tone-mapping)
+!TP_RETINEX_ITER_TOOLTIP;Simulate a tone-mapping operator.\nHigh values increase the processing time.
+!TP_RETINEX_MAP;Mask method
+!TP_RETINEX_MAP_CURV;Curve only
+!TP_RETINEX_MAP_GAUS;Gaussian mask
+!TP_RETINEX_MAP_MAPP;Sharp mask (wavelet partial)
+!TP_RETINEX_MAP_MAPT;Sharp mask (wavelet total)
+!TP_RETINEX_MAP_METHOD_TOOLTIP;Use the mask generated by the Gaussian function above to reduce halos and artifacts.\n\nCurve only: apply a diagonal contrast curve on the mask.\nBeware of artifacts!\n\nGaussian mask: generate and use a Gaussian blur of the original mask.\nQuick.\n\nSharp mask: generate and use a wavelet on the original mask.\nSlow.
+!TP_RETINEX_MAP_NONE;None
+!TP_RETINEX_SCALES;Gaussian gradient
+!TP_RETINEX_SCALES_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Scale and Neighboring pixels are reduced when iterations increase, and conversely.
+!TP_RETINEX_VIEW;Process (Preview)
+!TP_RETINEX_VIEW_MASK;Mask
+!TP_RETINEX_VIEW_METHOD_TOOLTIP;Standard - Normal display.\nMask - Displays the mask.\nUnsharp mask - Displays the image with a high radius unsharp mask.\nTransmission - Auto/Fixed - Displays the file transmission-map, before any action on contrast and brightness.\n\nAttention: the mask does not correspond to reality, but is amplified to make it more visible.
+!TP_RETINEX_VIEW_NONE;Standard
+!TP_RETINEX_VIEW_TRAN;Transmission - Auto
+!TP_RETINEX_VIEW_TRAN2;Transmission - Fixed
+!TP_RETINEX_VIEW_UNSHARP;Unsharp mask
diff --git a/rtdata/languages/English (UK) b/rtdata/languages/English (UK)
index 7ad989e24..1abd6a5e5 100644
--- a/rtdata/languages/English (UK)
+++ b/rtdata/languages/English (UK)
@@ -31,13 +31,11 @@ PARTIALPASTE_ICMSETTINGS;Colour management settings
PARTIALPASTE_RAW_FALSECOLOR;False colour suppression
PREFERENCES_AUTOMONPROFILE;Use operating system's main monitor colour profile
PREFERENCES_BEHAVIOR;Behaviour
-PREFERENCES_CMETRICINTENT;Colourimetric intent
PREFERENCES_CUTOVERLAYBRUSH;Crop mask colour/transparency
PREFERENCES_ICCDIR;Directory containing colour profiles
PREFERENCES_INTENT_ABSOLUTE;Absolute Colourimetric
PREFERENCES_INTENT_RELATIVE;Relative Colourimetric
PREFERENCES_MENUGROUPLABEL;Group "Colour label"
-PREFERENCES_MONITORICC;Monitor colour profile
PREFERENCES_NAVGUIDEBRUSH;Navigator guide colour
PREFERENCES_TAB_COLORMGR;Colour Management
TOOLBAR_TOOLTIP_STRAIGHTEN;Straighten / fine rotation.\nShortcut: s\n\nIndicate the vertical or horizontal by drawing a guide line over the image preview. Angle of rotation will be shown next to the guide line. Centre of rotation is the geometrical centre of the image.
@@ -679,7 +677,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh
!HISTORY_MSG_364;W - Final - Contrast balance
!HISTORY_MSG_365;W - Final - Delta balance
!HISTORY_MSG_366;W - Residual - Compression gamma
-!HISTORY_MSG_367;W - ES - Local contrast curve
+!HISTORY_MSG_367;W - Final - 'After' contrast curve
!HISTORY_MSG_368;W - Final - Contrast balance
!HISTORY_MSG_369;W - Final - Balance method
!HISTORY_MSG_370;W - Final - Local contrast curve
@@ -719,11 +717,11 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh
!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_408;Retinex - Radius
+!HISTORY_MSG_409;Retinex - Contrast
+!HISTORY_MSG_410;Retinex - Brightness
!HISTORY_MSG_411;Retinex - Strength
-!HISTORY_MSG_412;Retinex - Scales
+!HISTORY_MSG_412;Retinex - Gaussian Gradient
!HISTORY_MSG_413;Retinex - Variance
!HISTORY_MSG_414;Retinex - Histogram - Lab
!HISTORY_MSG_415;Retinex - Transmission
@@ -737,6 +735,19 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh
!HISTORY_MSG_424;Retinex - HL threshold
!HISTORY_MSG_425;Retinex - Log base
!HISTORY_MSG_426;Retinex - Hue equalizer
+!HISTORY_MSG_427;Output rendering intent
+!HISTORY_MSG_428;Monitor rendering intent
+!HISTORY_MSG_429;Retinex - Iterations
+!HISTORY_MSG_430;Retinex - Transmission Gradient
+!HISTORY_MSG_431;Retinex - Strength Gradient
+!HISTORY_MSG_432;Retinex - M - Highlights
+!HISTORY_MSG_433;Retinex - M - Highlights TW
+!HISTORY_MSG_434;Retinex - M - Shadows
+!HISTORY_MSG_435;Retinex - M - Shadows TW
+!HISTORY_MSG_436;Retinex - M - Radius
+!HISTORY_MSG_437;Retinex - M - Method
+!HISTORY_MSG_438;Retinex - M - Equalizer
+!HISTORY_MSG_439;Retinex - Preview
!HISTORY_NEWSNAPSHOT;Add
!HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s
!HISTORY_SNAPSHOT;Snapshot
@@ -850,6 +861,8 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh
!MAIN_TOOLTIP_SHOWHIDETP1;Show/Hide the top panel.\nShortcut: Shift-l
!MAIN_TOOLTIP_THRESHOLD;Threshold
!MAIN_TOOLTIP_TOGGLE;Toggle the Before/After view.\nShortcut: Shift-b
+!MONITOR_PROFILE_SYSTEM;System default
+!MONITOR_SOFTPROOF;Soft-proof
!NAVIGATOR_B;B:
!NAVIGATOR_G;G:
!NAVIGATOR_H;H:
@@ -906,6 +919,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh
!PARTIALPASTE_PREPROCESS_GREENEQUIL;Green equilibration
!PARTIALPASTE_PREPROCESS_HOTPIXFILT;Hot pixel filter
!PARTIALPASTE_PREPROCESS_LINEDENOISE;Line noise filter
+!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
!PARTIALPASTE_RAWCACORR_AUTO;CA auto-correction
!PARTIALPASTE_RAWCACORR_CABLUE;CA blue
!PARTIALPASTE_RAWCACORR_CARED;CA red
@@ -1046,6 +1060,8 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh
!PREFERENCES_MENUOPTIONS;Context Menu Options
!PREFERENCES_METADATA;Metadata
!PREFERENCES_MIN;Mini (100x115)
+!PREFERENCES_MONINTENT;Default monitor intent
+!PREFERENCES_MONPROFILE;Default monitor profile
!PREFERENCES_MULTITAB;Multiple Editor Tabs Mode
!PREFERENCES_MULTITABDUALMON;Multiple Editor Tabs In Own Window Mode
!PREFERENCES_NAVIGATIONFRAME;Navigation
@@ -1075,6 +1091,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh
!PREFERENCES_PROFILEPRFILE;Profile next to the input file
!PREFERENCES_PROFILESAVECACHE;Save processing profile to the cache
!PREFERENCES_PROFILESAVEINPUT;Save processing profile next to the input file
+!PREFERENCES_PROFILE_NONE;None
!PREFERENCES_PROPERTY;Property
!PREFERENCES_PSPATH;Adobe Photoshop installation directory
!PREFERENCES_REMEMBERZOOMPAN;Remember zoom % and pan offset
@@ -1530,6 +1547,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh
!TP_ICM_INPUTPROFILE;Input Profile
!TP_ICM_NOICM;No ICM: sRGB Output
!TP_ICM_OUTPUTPROFILE;Output Profile
+!TP_ICM_PROFILEINTENT;Rendering Intent
!TP_ICM_SAVEREFERENCE;Save Reference Image for Profiling
!TP_ICM_SAVEREFERENCE_APPLYWB;Apply white balance
!TP_ICM_SAVEREFERENCE_APPLYWB_TOOLTIP;Generally, apply the white balance when saving images to create ICC profiles, and do not apply the white balance to create DCP profiles.
@@ -1649,12 +1667,15 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh
!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL
!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b*
!TP_RETINEX_CONTEDIT_LH;Hue equalizer
+!TP_RETINEX_CONTEDIT_MAP;Mask 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_CURVEEDITOR_MAP;L=f(L)
+!TP_RETINEX_CURVEEDITOR_MAP_TOOLTIP;This curve can be applied alone or with a Gaussian mask or wavelet mask.\nBeware of artifacts!
!TP_RETINEX_FREEGAMMA;Free gamma
-!TP_RETINEX_GAIN;Gain
+!TP_RETINEX_GAIN;Contrast
!TP_RETINEX_GAIN_TOOLTIP;Acts on the restored image.\n\nThis is very different from the others settings. Used for black or white pixels, and to help balance the histogram.
!TP_RETINEX_GAMMA;Gamma
!TP_RETINEX_GAMMA_FREE;Free
@@ -1663,24 +1684,39 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh
!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_GRAD;Transmission gradient
+!TP_RETINEX_GRADS;Strength gradient
+!TP_RETINEX_GRADS_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Strength is reduced when iterations increase, and conversely.
+!TP_RETINEX_GRAD_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Variance and Threshold are reduced when iterations increase, and conversely.
!TP_RETINEX_HIGH;High
!TP_RETINEX_HIGHLIG;Highlight
!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_HSLSPACE_LIN;HSL-Linear
!TP_RETINEX_HSLSPACE_LOG;HSL-Logarithmic
+!TP_RETINEX_ITER;Iterations (Tone-mapping)
+!TP_RETINEX_ITER_TOOLTIP;Simulate a tone-mapping operator.\nHigh values increase the processing time.
!TP_RETINEX_LABEL;Retinex
!TP_RETINEX_LABSPACE;L*a*b*
!TP_RETINEX_LOW;Low
+!TP_RETINEX_MAP;Mask method
+!TP_RETINEX_MAP_CURV;Curve only
+!TP_RETINEX_MAP_GAUS;Gaussian mask
+!TP_RETINEX_MAP_MAPP;Sharp mask (wavelet partial)
+!TP_RETINEX_MAP_MAPT;Sharp mask (wavelet total)
+!TP_RETINEX_MAP_METHOD_TOOLTIP;Use the mask generated by the Gaussian function above to reduce halos and artifacts.\n\nCurve only: apply a diagonal contrast curve on the mask.\nBeware of artifacts!\n\nGaussian mask: generate and use a Gaussian blur of the original mask.\nQuick.\n\nSharp mask: generate and use a wavelet on the original mask.\nSlow.
+!TP_RETINEX_MAP_NONE;None
!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,\nHighlights = 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_NEIGHBOR;Radius
!TP_RETINEX_NEUTRAL;Reset
!TP_RETINEX_NEUTRAL_TIP;Reset all sliders and curves to their default values.
-!TP_RETINEX_OFFSET;Offset
+!TP_RETINEX_OFFSET;Brightness
+!TP_RETINEX_SCALES;Gaussian gradient
+!TP_RETINEX_SCALES_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Scale and Neighboring pixels are reduced when iterations increase, and conversely.
!TP_RETINEX_SETTINGS;Settings
!TP_RETINEX_SLOPE;Free gamma slope
!TP_RETINEX_STRENGTH;Strength
@@ -1692,8 +1728,15 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh
!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;Contrast
!TP_RETINEX_VARIANCE_TOOLTIP;Low variance increase local contrast and saturation, but can lead to artifacts.
+!TP_RETINEX_VIEW;Process (Preview)
+!TP_RETINEX_VIEW_MASK;Mask
+!TP_RETINEX_VIEW_METHOD_TOOLTIP;Standard - Normal display.\nMask - Displays the mask.\nUnsharp mask - Displays the image with a high radius unsharp mask.\nTransmission - Auto/Fixed - Displays the file transmission-map, before any action on contrast and brightness.\n\nAttention: the mask does not correspond to reality, but is amplified to make it more visible.
+!TP_RETINEX_VIEW_NONE;Standard
+!TP_RETINEX_VIEW_TRAN;Transmission - Auto
+!TP_RETINEX_VIEW_TRAN2;Transmission - Fixed
+!TP_RETINEX_VIEW_UNSHARP;Unsharp mask
!TP_RGBCURVES_BLUE;B
!TP_RGBCURVES_CHANNEL;Channel
!TP_RGBCURVES_GREEN;G
diff --git a/rtdata/languages/English (US) b/rtdata/languages/English (US)
index 5933990ba..2850ac049 100644
--- a/rtdata/languages/English (US)
+++ b/rtdata/languages/English (US)
@@ -598,7 +598,7 @@
!HISTORY_MSG_364;W - Final - Contrast balance
!HISTORY_MSG_365;W - Final - Delta balance
!HISTORY_MSG_366;W - Residual - Compression gamma
-!HISTORY_MSG_367;W - ES - Local contrast curve
+!HISTORY_MSG_367;W - Final - 'After' contrast curve
!HISTORY_MSG_368;W - Final - Contrast balance
!HISTORY_MSG_369;W - Final - Balance method
!HISTORY_MSG_370;W - Final - Local contrast curve
@@ -639,11 +639,11 @@
!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_408;Retinex - Radius
+!HISTORY_MSG_409;Retinex - Contrast
+!HISTORY_MSG_410;Retinex - Brightness
!HISTORY_MSG_411;Retinex - Strength
-!HISTORY_MSG_412;Retinex - Scales
+!HISTORY_MSG_412;Retinex - Gaussian Gradient
!HISTORY_MSG_413;Retinex - Variance
!HISTORY_MSG_414;Retinex - Histogram - Lab
!HISTORY_MSG_415;Retinex - Transmission
@@ -658,6 +658,19 @@
!HISTORY_MSG_424;Retinex - HL threshold
!HISTORY_MSG_425;Retinex - Log base
!HISTORY_MSG_426;Retinex - Hue equalizer
+!HISTORY_MSG_427;Output rendering intent
+!HISTORY_MSG_428;Monitor rendering intent
+!HISTORY_MSG_429;Retinex - Iterations
+!HISTORY_MSG_430;Retinex - Transmission Gradient
+!HISTORY_MSG_431;Retinex - Strength Gradient
+!HISTORY_MSG_432;Retinex - M - Highlights
+!HISTORY_MSG_433;Retinex - M - Highlights TW
+!HISTORY_MSG_434;Retinex - M - Shadows
+!HISTORY_MSG_435;Retinex - M - Shadows TW
+!HISTORY_MSG_436;Retinex - M - Radius
+!HISTORY_MSG_437;Retinex - M - Method
+!HISTORY_MSG_438;Retinex - M - Equalizer
+!HISTORY_MSG_439;Retinex - Preview
!HISTORY_NEWSNAPSHOT;Add
!HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s
!HISTORY_SNAPSHOT;Snapshot
@@ -775,6 +788,8 @@
!MAIN_TOOLTIP_SHOWHIDETP1;Show/Hide the top panel.\nShortcut: Shift-l
!MAIN_TOOLTIP_THRESHOLD;Threshold
!MAIN_TOOLTIP_TOGGLE;Toggle the Before/After view.\nShortcut: Shift-b
+!MONITOR_PROFILE_SYSTEM;System default
+!MONITOR_SOFTPROOF;Soft-proof
!NAVIGATOR_B;B:
!NAVIGATOR_G;G:
!NAVIGATOR_H;H:
@@ -834,6 +849,7 @@
!PARTIALPASTE_PREPROCESS_GREENEQUIL;Green equilibration
!PARTIALPASTE_PREPROCESS_HOTPIXFILT;Hot pixel filter
!PARTIALPASTE_PREPROCESS_LINEDENOISE;Line noise filter
+!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
!PARTIALPASTE_RAWCACORR_AUTO;CA auto-correction
!PARTIALPASTE_RAWCACORR_CABLUE;CA blue
!PARTIALPASTE_RAWCACORR_CARED;CA red
@@ -888,7 +904,6 @@
!PREFERENCES_CLUTSCACHE;HaldCLUT Cache
!PREFERENCES_CLUTSCACHE_LABEL;Maximum number of cached CLUTs
!PREFERENCES_CLUTSDIR;HaldCLUT directory
-!PREFERENCES_CMETRICINTENT;Colorimetric intent
!PREFERENCES_CURVEBBOXPOS;Position of curve copypasta buttons
!PREFERENCES_CURVEBBOXPOS_ABOVE;Above
!PREFERENCES_CURVEBBOXPOS_BELOW;Below
@@ -983,7 +998,8 @@
!PREFERENCES_MENUOPTIONS;Context Menu Options
!PREFERENCES_METADATA;Metadata
!PREFERENCES_MIN;Mini (100x115)
-!PREFERENCES_MONITORICC;Monitor color profile
+!PREFERENCES_MONINTENT;Default monitor intent
+!PREFERENCES_MONPROFILE;Default monitor profile
!PREFERENCES_MULTITAB;Multiple Editor Tabs Mode
!PREFERENCES_MULTITABDUALMON;Multiple Editor Tabs In Own Window Mode
!PREFERENCES_NAVGUIDEBRUSH;Navigator guide color
@@ -1014,6 +1030,7 @@
!PREFERENCES_PROFILEPRFILE;Profile next to the input file
!PREFERENCES_PROFILESAVECACHE;Save processing profile to the cache
!PREFERENCES_PROFILESAVEINPUT;Save processing profile next to the input file
+!PREFERENCES_PROFILE_NONE;None
!PREFERENCES_PROPERTY;Property
!PREFERENCES_PSPATH;Adobe Photoshop installation directory
!PREFERENCES_REMEMBERZOOMPAN;Remember zoom % and pan offset
@@ -1515,6 +1532,7 @@
!TP_ICM_LABEL;Color Management
!TP_ICM_NOICM;No ICM: sRGB Output
!TP_ICM_OUTPUTPROFILE;Output Profile
+!TP_ICM_PROFILEINTENT;Rendering Intent
!TP_ICM_SAVEREFERENCE;Save Reference Image for Profiling
!TP_ICM_SAVEREFERENCE_APPLYWB;Apply white balance
!TP_ICM_SAVEREFERENCE_APPLYWB_TOOLTIP;Generally, apply the white balance when saving images to create ICC profiles, and do not apply the white balance to create DCP profiles.
@@ -1639,12 +1657,15 @@
!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL
!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b*
!TP_RETINEX_CONTEDIT_LH;Hue equalizer
+!TP_RETINEX_CONTEDIT_MAP;Mask 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_CURVEEDITOR_MAP;L=f(L)
+!TP_RETINEX_CURVEEDITOR_MAP_TOOLTIP;This curve can be applied alone or with a Gaussian mask or wavelet mask.\nBeware of artifacts!
!TP_RETINEX_FREEGAMMA;Free gamma
-!TP_RETINEX_GAIN;Gain
+!TP_RETINEX_GAIN;Contrast
!TP_RETINEX_GAIN_TOOLTIP;Acts on the restored image.\n\nThis is very different from the others settings. Used for black or white pixels, and to help balance the histogram.
!TP_RETINEX_GAMMA;Gamma
!TP_RETINEX_GAMMA_FREE;Free
@@ -1653,24 +1674,39 @@
!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_GRAD;Transmission gradient
+!TP_RETINEX_GRADS;Strength gradient
+!TP_RETINEX_GRADS_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Strength is reduced when iterations increase, and conversely.
+!TP_RETINEX_GRAD_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Variance and Threshold are reduced when iterations increase, and conversely.
!TP_RETINEX_HIGH;High
!TP_RETINEX_HIGHLIG;Highlight
!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_HSLSPACE_LIN;HSL-Linear
!TP_RETINEX_HSLSPACE_LOG;HSL-Logarithmic
+!TP_RETINEX_ITER;Iterations (Tone-mapping)
+!TP_RETINEX_ITER_TOOLTIP;Simulate a tone-mapping operator.\nHigh values increase the processing time.
!TP_RETINEX_LABEL;Retinex
!TP_RETINEX_LABSPACE;L*a*b*
!TP_RETINEX_LOW;Low
+!TP_RETINEX_MAP;Mask method
+!TP_RETINEX_MAP_CURV;Curve only
+!TP_RETINEX_MAP_GAUS;Gaussian mask
+!TP_RETINEX_MAP_MAPP;Sharp mask (wavelet partial)
+!TP_RETINEX_MAP_MAPT;Sharp mask (wavelet total)
+!TP_RETINEX_MAP_METHOD_TOOLTIP;Use the mask generated by the Gaussian function above to reduce halos and artifacts.\n\nCurve only: apply a diagonal contrast curve on the mask.\nBeware of artifacts!\n\nGaussian mask: generate and use a Gaussian blur of the original mask.\nQuick.\n\nSharp mask: generate and use a wavelet on the original mask.\nSlow.
+!TP_RETINEX_MAP_NONE;None
!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,\nHighlights = 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_NEIGHBOR;Radius
!TP_RETINEX_NEUTRAL;Reset
!TP_RETINEX_NEUTRAL_TIP;Reset all sliders and curves to their default values.
-!TP_RETINEX_OFFSET;Offset
+!TP_RETINEX_OFFSET;Brightness
+!TP_RETINEX_SCALES;Gaussian gradient
+!TP_RETINEX_SCALES_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Scale and Neighboring pixels are reduced when iterations increase, and conversely.
!TP_RETINEX_SETTINGS;Settings
!TP_RETINEX_SLOPE;Free gamma slope
!TP_RETINEX_STRENGTH;Strength
@@ -1682,8 +1718,15 @@
!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;Contrast
!TP_RETINEX_VARIANCE_TOOLTIP;Low variance increase local contrast and saturation, but can lead to artifacts.
+!TP_RETINEX_VIEW;Process (Preview)
+!TP_RETINEX_VIEW_MASK;Mask
+!TP_RETINEX_VIEW_METHOD_TOOLTIP;Standard - Normal display.\nMask - Displays the mask.\nUnsharp mask - Displays the image with a high radius unsharp mask.\nTransmission - Auto/Fixed - Displays the file transmission-map, before any action on contrast and brightness.\n\nAttention: the mask does not correspond to reality, but is amplified to make it more visible.
+!TP_RETINEX_VIEW_NONE;Standard
+!TP_RETINEX_VIEW_TRAN;Transmission - Auto
+!TP_RETINEX_VIEW_TRAN2;Transmission - Fixed
+!TP_RETINEX_VIEW_UNSHARP;Unsharp mask
!TP_RGBCURVES_BLUE;B
!TP_RGBCURVES_CHANNEL;Channel
!TP_RGBCURVES_GREEN;G
diff --git a/rtdata/languages/Espanol b/rtdata/languages/Espanol
index 1ed7ab26b..b22893452 100644
--- a/rtdata/languages/Espanol
+++ b/rtdata/languages/Espanol
@@ -777,7 +777,6 @@ PREFERENCES_CIEART_LABEL;Usar precisión flotante simple en lugar de doble.
PREFERENCES_CIEART_TOOLTIP;Si se habilita, los cálculos CIECAM02 se realizan con precisión flotante simple en lugar de doble. Esto provee un pequeño aumento en la velocidad de cálculo a expensas de una casi imperceptible pérdida de calidad
PREFERENCES_CLIPPINGIND;Indicación de recortes
PREFERENCES_CLUTSDIR;Directorio HaldCLUT
-PREFERENCES_CMETRICINTENT;Intento colorimétrico
PREFERENCES_CUSTPROFBUILD;Programa generador de perfiles de procesamiento de imagen del usuario
PREFERENCES_CUSTPROFBUILDHINT;Archivo ejecutable (o script) invocado un nuevo perfil de procesamiento inicial debe ser generado para una imagen.\n\nLa ruta del archivo de comunicación (estilo .ini) es agregado como parámetro de comando en línea. Éste contiene diversos parámetros requeridos y metadatos Exif de la imagen para permitir la generación de perfiles de procesamientos basados en reglas.\n\nADVERTENCIA:Usted es responsable de colocar comillas donde se requieren cuando se usan rutas conteniendo espacios en blanco.
PREFERENCES_CUSTPROFBUILDKEYFORMAT;Clave de formato
@@ -848,7 +847,6 @@ PREFERENCES_MENUGROUPPROFILEOPERATIONS;Grupo "Operaciones de Perfil de Procesami
PREFERENCES_MENUGROUPRANK;Grupo "Asignar Rango"
PREFERENCES_MENUOPTIONS;Opciones de menú de contexto
PREFERENCES_METADATA;Metadatos
-PREFERENCES_MONITORICC;Perfil de pantalla
PREFERENCES_MULTITAB;Modo Editor de varias pestañas
PREFERENCES_MULTITABDUALMON;Modo Editor de varias pestañas, si está disponible en segundo monitor
PREFERENCES_NAVGUIDEBRUSH;Color de la guía del navegador
@@ -1634,7 +1632,7 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nAtajo: -
!HISTORY_MSG_364;W - Final - Contrast balance
!HISTORY_MSG_365;W - Final - Delta balance
!HISTORY_MSG_366;W - Residual - Compression gamma
-!HISTORY_MSG_367;W - ES - Local contrast curve
+!HISTORY_MSG_367;W - Final - 'After' contrast curve
!HISTORY_MSG_368;W - Final - Contrast balance
!HISTORY_MSG_369;W - Final - Balance method
!HISTORY_MSG_370;W - Final - Local contrast curve
@@ -1675,11 +1673,11 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nAtajo: -
!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_408;Retinex - Radius
+!HISTORY_MSG_409;Retinex - Contrast
+!HISTORY_MSG_410;Retinex - Brightness
!HISTORY_MSG_411;Retinex - Strength
-!HISTORY_MSG_412;Retinex - Scales
+!HISTORY_MSG_412;Retinex - Gaussian Gradient
!HISTORY_MSG_413;Retinex - Variance
!HISTORY_MSG_414;Retinex - Histogram - Lab
!HISTORY_MSG_415;Retinex - Transmission
@@ -1694,9 +1692,24 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nAtajo: -
!HISTORY_MSG_424;Retinex - HL threshold
!HISTORY_MSG_425;Retinex - Log base
!HISTORY_MSG_426;Retinex - Hue equalizer
+!HISTORY_MSG_427;Output rendering intent
+!HISTORY_MSG_428;Monitor rendering intent
+!HISTORY_MSG_429;Retinex - Iterations
+!HISTORY_MSG_430;Retinex - Transmission Gradient
+!HISTORY_MSG_431;Retinex - Strength Gradient
+!HISTORY_MSG_432;Retinex - M - Highlights
+!HISTORY_MSG_433;Retinex - M - Highlights TW
+!HISTORY_MSG_434;Retinex - M - Shadows
+!HISTORY_MSG_435;Retinex - M - Shadows TW
+!HISTORY_MSG_436;Retinex - M - Radius
+!HISTORY_MSG_437;Retinex - M - Method
+!HISTORY_MSG_438;Retinex - M - Equalizer
+!HISTORY_MSG_439;Retinex - Preview
!MAIN_TAB_INSPECT; Inspect
!MAIN_TAB_WAVELET;Wavelet
!MAIN_TAB_WAVELET_TOOLTIP;Shortcut: Alt-w
+!MONITOR_PROFILE_SYSTEM;System default
+!MONITOR_SOFTPROOF;Soft-proof
!NAVIGATOR_B;B:
!NAVIGATOR_G;G:
!NAVIGATOR_H;H:
@@ -1708,6 +1721,7 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nAtajo: -
!NAVIGATOR_V;V:
!PARTIALPASTE_EQUALIZER;Wavelet levels
!PARTIALPASTE_GRADIENT;Graduated filter
+!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
!PARTIALPASTE_RETINEX;Retinex
!PARTIALPASTE_WAVELETGROUP;Wavelet Levels
!PREFERENCES_AUTLISLOW;Low
@@ -1743,6 +1757,8 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nAtajo: -
!PREFERENCES_MAXRECENTFOLDERS;Maximum number of recent folders
!PREFERENCES_MED;Medium (Tile/2)
!PREFERENCES_MIN;Mini (100x115)
+!PREFERENCES_MONINTENT;Default monitor intent
+!PREFERENCES_MONPROFILE;Default monitor profile
!PREFERENCES_NAVIGATIONFRAME;Navigation
!PREFERENCES_NOISE;Noise Reduction
!PREFERENCES_OVERLAY_FILENAMES_FILMSTRIP;Overlay filenames on thumbnails in the editor pannel
@@ -1752,6 +1768,7 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nAtajo: -
!PREFERENCES_PREVDEMO_FAST;Fast
!PREFERENCES_PREVDEMO_LABEL;Demosaicing method used for the preview at <100% zoom:
!PREFERENCES_PREVDEMO_SIDECAR;As in PP3
+!PREFERENCES_PROFILE_NONE;None
!PREFERENCES_REMEMBERZOOMPAN;Remember zoom % and pan offset
!PREFERENCES_REMEMBERZOOMPAN_TOOLTIP;Remember the zoom % and pan offset of the current image when opening a new image.\n\nThis option only works in "Single Editor Tab Mode" and when "Demosaicing method used for the preview at <100% zoom" is set to "As in PP3".
!PREFERENCES_SERIALIZE_TIFF_READ;Tiff Read Settings
@@ -1812,6 +1829,7 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nAtajo: -
!TP_ICM_APPLYHUESATMAP_TOOLTIP;Employ the embedded DCP base table (HueSatMap). The setting is only enabled if the selected DCP has one.
!TP_ICM_APPLYLOOKTABLE;Look table
!TP_ICM_APPLYLOOKTABLE_TOOLTIP;Employ the embedded DCP look table. The setting is only enabled if the selected DCP has one.
+!TP_ICM_PROFILEINTENT;Rendering Intent
!TP_ICM_SAVEREFERENCE_APPLYWB;Apply white balance
!TP_ICM_SAVEREFERENCE_APPLYWB_TOOLTIP;Generally, apply the white balance when saving images to create ICC profiles, and do not apply the white balance to create DCP profiles.
!TP_LABCURVE_CURVEEDITOR_CC;CC
@@ -1823,12 +1841,15 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nAtajo: -
!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL
!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b*
!TP_RETINEX_CONTEDIT_LH;Hue equalizer
+!TP_RETINEX_CONTEDIT_MAP;Mask 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_CURVEEDITOR_MAP;L=f(L)
+!TP_RETINEX_CURVEEDITOR_MAP_TOOLTIP;This curve can be applied alone or with a Gaussian mask or wavelet mask.\nBeware of artifacts!
!TP_RETINEX_FREEGAMMA;Free gamma
-!TP_RETINEX_GAIN;Gain
+!TP_RETINEX_GAIN;Contrast
!TP_RETINEX_GAIN_TOOLTIP;Acts on the restored image.\n\nThis is very different from the others settings. Used for black or white pixels, and to help balance the histogram.
!TP_RETINEX_GAMMA;Gamma
!TP_RETINEX_GAMMA_FREE;Free
@@ -1837,24 +1858,39 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nAtajo: -
!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_GRAD;Transmission gradient
+!TP_RETINEX_GRADS;Strength gradient
+!TP_RETINEX_GRADS_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Strength is reduced when iterations increase, and conversely.
+!TP_RETINEX_GRAD_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Variance and Threshold are reduced when iterations increase, and conversely.
!TP_RETINEX_HIGH;High
!TP_RETINEX_HIGHLIG;Highlight
!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_HSLSPACE_LIN;HSL-Linear
!TP_RETINEX_HSLSPACE_LOG;HSL-Logarithmic
+!TP_RETINEX_ITER;Iterations (Tone-mapping)
+!TP_RETINEX_ITER_TOOLTIP;Simulate a tone-mapping operator.\nHigh values increase the processing time.
!TP_RETINEX_LABEL;Retinex
!TP_RETINEX_LABSPACE;L*a*b*
!TP_RETINEX_LOW;Low
+!TP_RETINEX_MAP;Mask method
+!TP_RETINEX_MAP_CURV;Curve only
+!TP_RETINEX_MAP_GAUS;Gaussian mask
+!TP_RETINEX_MAP_MAPP;Sharp mask (wavelet partial)
+!TP_RETINEX_MAP_MAPT;Sharp mask (wavelet total)
+!TP_RETINEX_MAP_METHOD_TOOLTIP;Use the mask generated by the Gaussian function above to reduce halos and artifacts.\n\nCurve only: apply a diagonal contrast curve on the mask.\nBeware of artifacts!\n\nGaussian mask: generate and use a Gaussian blur of the original mask.\nQuick.\n\nSharp mask: generate and use a wavelet on the original mask.\nSlow.
+!TP_RETINEX_MAP_NONE;None
!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,\nHighlights = 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_NEIGHBOR;Radius
!TP_RETINEX_NEUTRAL;Reset
!TP_RETINEX_NEUTRAL_TIP;Reset all sliders and curves to their default values.
-!TP_RETINEX_OFFSET;Offset
+!TP_RETINEX_OFFSET;Brightness
+!TP_RETINEX_SCALES;Gaussian gradient
+!TP_RETINEX_SCALES_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Scale and Neighboring pixels are reduced when iterations increase, and conversely.
!TP_RETINEX_SETTINGS;Settings
!TP_RETINEX_SLOPE;Free gamma slope
!TP_RETINEX_STRENGTH;Strength
@@ -1866,8 +1902,15 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nAtajo: -
!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;Contrast
!TP_RETINEX_VARIANCE_TOOLTIP;Low variance increase local contrast and saturation, but can lead to artifacts.
+!TP_RETINEX_VIEW;Process (Preview)
+!TP_RETINEX_VIEW_MASK;Mask
+!TP_RETINEX_VIEW_METHOD_TOOLTIP;Standard - Normal display.\nMask - Displays the mask.\nUnsharp mask - Displays the image with a high radius unsharp mask.\nTransmission - Auto/Fixed - Displays the file transmission-map, before any action on contrast and brightness.\n\nAttention: the mask does not correspond to reality, but is amplified to make it more visible.
+!TP_RETINEX_VIEW_NONE;Standard
+!TP_RETINEX_VIEW_TRAN;Transmission - Auto
+!TP_RETINEX_VIEW_TRAN2;Transmission - Fixed
+!TP_RETINEX_VIEW_UNSHARP;Unsharp mask
!TP_WAVELET_1;Level 1
!TP_WAVELET_2;Level 2
!TP_WAVELET_3;Level 3
diff --git a/rtdata/languages/Euskara b/rtdata/languages/Euskara
index 68243898d..c1b93fb1e 100644
--- a/rtdata/languages/Euskara
+++ b/rtdata/languages/Euskara
@@ -268,7 +268,6 @@ PREFERENCES_CACHEMAXENTRIES;Maximal Number of Cache Entries
PREFERENCES_CACHEOPTS;Cache Options
PREFERENCES_CACHETHUMBHEIGHT;Maximal Thumbnail Height
PREFERENCES_CLIPPINGIND;Itzal/argi moztuen adierazlea
-PREFERENCES_CMETRICINTENT;Saiakera kolorimetrikoa
PREFERENCES_DATEFORMAT;Data formatua
PREFERENCES_DATEFORMATHINT;You can use the following formatting strings:\n%y : year\n%m : month\n%d : day\n\nFor example, the hungarian date format is:\n%y/%m/%d
PREFERENCES_DEFAULTLANG;Hizkuntza
@@ -292,7 +291,6 @@ PREFERENCES_INTENT_ABSOLUTE;Kolorimetriko absolutua
PREFERENCES_INTENT_PERCEPTUAL;Petzeptuala
PREFERENCES_INTENT_RELATIVE;Kolorimetriko erlatiboa
PREFERENCES_INTENT_SATURATION;Saturazioa
-PREFERENCES_MONITORICC;Pantaila profilak
PREFERENCES_OUTDIR;Irteera karpeta
PREFERENCES_OUTDIRFOLDER;Save to folder
PREFERENCES_OUTDIRFOLDERHINT;Put the saved images to the seledted folder
@@ -879,7 +877,7 @@ TP_WBALANCE_TEMPERATURE;Tenperatura
!HISTORY_MSG_364;W - Final - Contrast balance
!HISTORY_MSG_365;W - Final - Delta balance
!HISTORY_MSG_366;W - Residual - Compression gamma
-!HISTORY_MSG_367;W - ES - Local contrast curve
+!HISTORY_MSG_367;W - Final - 'After' contrast curve
!HISTORY_MSG_368;W - Final - Contrast balance
!HISTORY_MSG_369;W - Final - Balance method
!HISTORY_MSG_370;W - Final - Local contrast curve
@@ -920,11 +918,11 @@ TP_WBALANCE_TEMPERATURE;Tenperatura
!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_408;Retinex - Radius
+!HISTORY_MSG_409;Retinex - Contrast
+!HISTORY_MSG_410;Retinex - Brightness
!HISTORY_MSG_411;Retinex - Strength
-!HISTORY_MSG_412;Retinex - Scales
+!HISTORY_MSG_412;Retinex - Gaussian Gradient
!HISTORY_MSG_413;Retinex - Variance
!HISTORY_MSG_414;Retinex - Histogram - Lab
!HISTORY_MSG_415;Retinex - Transmission
@@ -939,6 +937,19 @@ TP_WBALANCE_TEMPERATURE;Tenperatura
!HISTORY_MSG_424;Retinex - HL threshold
!HISTORY_MSG_425;Retinex - Log base
!HISTORY_MSG_426;Retinex - Hue equalizer
+!HISTORY_MSG_427;Output rendering intent
+!HISTORY_MSG_428;Monitor rendering intent
+!HISTORY_MSG_429;Retinex - Iterations
+!HISTORY_MSG_430;Retinex - Transmission Gradient
+!HISTORY_MSG_431;Retinex - Strength Gradient
+!HISTORY_MSG_432;Retinex - M - Highlights
+!HISTORY_MSG_433;Retinex - M - Highlights TW
+!HISTORY_MSG_434;Retinex - M - Shadows
+!HISTORY_MSG_435;Retinex - M - Shadows TW
+!HISTORY_MSG_436;Retinex - M - Radius
+!HISTORY_MSG_437;Retinex - M - Method
+!HISTORY_MSG_438;Retinex - M - Equalizer
+!HISTORY_MSG_439;Retinex - Preview
!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
@@ -985,6 +996,8 @@ TP_WBALANCE_TEMPERATURE;Tenperatura
!MAIN_TOOLTIP_SHOWHIDETP1;Show/Hide the top panel.\nShortcut: Shift-l
!MAIN_TOOLTIP_THRESHOLD;Threshold
!MAIN_TOOLTIP_TOGGLE;Toggle the Before/After view.\nShortcut: Shift-b
+!MONITOR_PROFILE_SYSTEM;System default
+!MONITOR_SOFTPROOF;Soft-proof
!NAVIGATOR_B;B:
!NAVIGATOR_G;G:
!NAVIGATOR_H;H:
@@ -1030,6 +1043,7 @@ TP_WBALANCE_TEMPERATURE;Tenperatura
!PARTIALPASTE_PREPROCESS_GREENEQUIL;Green equilibration
!PARTIALPASTE_PREPROCESS_HOTPIXFILT;Hot pixel filter
!PARTIALPASTE_PREPROCESS_LINEDENOISE;Line noise filter
+!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
!PARTIALPASTE_RAWCACORR_AUTO;CA auto-correction
!PARTIALPASTE_RAWCACORR_CABLUE;CA blue
!PARTIALPASTE_RAWCACORR_CARED;CA red
@@ -1141,6 +1155,8 @@ TP_WBALANCE_TEMPERATURE;Tenperatura
!PREFERENCES_MENUOPTIONS;Context Menu Options
!PREFERENCES_METADATA;Metadata
!PREFERENCES_MIN;Mini (100x115)
+!PREFERENCES_MONINTENT;Default monitor intent
+!PREFERENCES_MONPROFILE;Default monitor profile
!PREFERENCES_MULTITAB;Multiple Editor Tabs Mode
!PREFERENCES_MULTITABDUALMON;Multiple Editor Tabs In Own Window Mode
!PREFERENCES_NAVGUIDEBRUSH;Navigator guide color
@@ -1156,6 +1172,7 @@ TP_WBALANCE_TEMPERATURE;Tenperatura
!PREFERENCES_PREVDEMO_FAST;Fast
!PREFERENCES_PREVDEMO_LABEL;Demosaicing method used for the preview at <100% zoom:
!PREFERENCES_PREVDEMO_SIDECAR;As in PP3
+!PREFERENCES_PROFILE_NONE;None
!PREFERENCES_PROPERTY;Property
!PREFERENCES_REMEMBERZOOMPAN;Remember zoom % and pan offset
!PREFERENCES_REMEMBERZOOMPAN_TOOLTIP;Remember the zoom % and pan offset of the current image when opening a new image.\n\nThis option only works in "Single Editor Tab Mode" and when "Demosaicing method used for the preview at <100% zoom" is set to "As in PP3".
@@ -1567,6 +1584,7 @@ TP_WBALANCE_TEMPERATURE;Tenperatura
!TP_ICM_INPUTEMBEDDED_TOOLTIP;Use color profile embedded in non-raw files.
!TP_ICM_INPUTNONE;No profile
!TP_ICM_INPUTNONE_TOOLTIP;Use no input color profile at all.\nUse only in special cases.
+!TP_ICM_PROFILEINTENT;Rendering Intent
!TP_ICM_SAVEREFERENCE_APPLYWB;Apply white balance
!TP_ICM_SAVEREFERENCE_APPLYWB_TOOLTIP;Generally, apply the white balance when saving images to create ICC profiles, and do not apply the white balance to create DCP profiles.
!TP_ICM_SAVEREFERENCE_TOOLTIP;Save the linear TIFF image before the input profile is applied. The result can be used for calibration purposes and generation of a camera profile.
@@ -1681,12 +1699,15 @@ TP_WBALANCE_TEMPERATURE;Tenperatura
!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL
!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b*
!TP_RETINEX_CONTEDIT_LH;Hue equalizer
+!TP_RETINEX_CONTEDIT_MAP;Mask 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_CURVEEDITOR_MAP;L=f(L)
+!TP_RETINEX_CURVEEDITOR_MAP_TOOLTIP;This curve can be applied alone or with a Gaussian mask or wavelet mask.\nBeware of artifacts!
!TP_RETINEX_FREEGAMMA;Free gamma
-!TP_RETINEX_GAIN;Gain
+!TP_RETINEX_GAIN;Contrast
!TP_RETINEX_GAIN_TOOLTIP;Acts on the restored image.\n\nThis is very different from the others settings. Used for black or white pixels, and to help balance the histogram.
!TP_RETINEX_GAMMA;Gamma
!TP_RETINEX_GAMMA_FREE;Free
@@ -1695,24 +1716,39 @@ TP_WBALANCE_TEMPERATURE;Tenperatura
!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_GRAD;Transmission gradient
+!TP_RETINEX_GRADS;Strength gradient
+!TP_RETINEX_GRADS_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Strength is reduced when iterations increase, and conversely.
+!TP_RETINEX_GRAD_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Variance and Threshold are reduced when iterations increase, and conversely.
!TP_RETINEX_HIGH;High
!TP_RETINEX_HIGHLIG;Highlight
!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_HSLSPACE_LIN;HSL-Linear
!TP_RETINEX_HSLSPACE_LOG;HSL-Logarithmic
+!TP_RETINEX_ITER;Iterations (Tone-mapping)
+!TP_RETINEX_ITER_TOOLTIP;Simulate a tone-mapping operator.\nHigh values increase the processing time.
!TP_RETINEX_LABEL;Retinex
!TP_RETINEX_LABSPACE;L*a*b*
!TP_RETINEX_LOW;Low
+!TP_RETINEX_MAP;Mask method
+!TP_RETINEX_MAP_CURV;Curve only
+!TP_RETINEX_MAP_GAUS;Gaussian mask
+!TP_RETINEX_MAP_MAPP;Sharp mask (wavelet partial)
+!TP_RETINEX_MAP_MAPT;Sharp mask (wavelet total)
+!TP_RETINEX_MAP_METHOD_TOOLTIP;Use the mask generated by the Gaussian function above to reduce halos and artifacts.\n\nCurve only: apply a diagonal contrast curve on the mask.\nBeware of artifacts!\n\nGaussian mask: generate and use a Gaussian blur of the original mask.\nQuick.\n\nSharp mask: generate and use a wavelet on the original mask.\nSlow.
+!TP_RETINEX_MAP_NONE;None
!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,\nHighlights = 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_NEIGHBOR;Radius
!TP_RETINEX_NEUTRAL;Reset
!TP_RETINEX_NEUTRAL_TIP;Reset all sliders and curves to their default values.
-!TP_RETINEX_OFFSET;Offset
+!TP_RETINEX_OFFSET;Brightness
+!TP_RETINEX_SCALES;Gaussian gradient
+!TP_RETINEX_SCALES_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Scale and Neighboring pixels are reduced when iterations increase, and conversely.
!TP_RETINEX_SETTINGS;Settings
!TP_RETINEX_SLOPE;Free gamma slope
!TP_RETINEX_STRENGTH;Strength
@@ -1724,8 +1760,15 @@ TP_WBALANCE_TEMPERATURE;Tenperatura
!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;Contrast
!TP_RETINEX_VARIANCE_TOOLTIP;Low variance increase local contrast and saturation, but can lead to artifacts.
+!TP_RETINEX_VIEW;Process (Preview)
+!TP_RETINEX_VIEW_MASK;Mask
+!TP_RETINEX_VIEW_METHOD_TOOLTIP;Standard - Normal display.\nMask - Displays the mask.\nUnsharp mask - Displays the image with a high radius unsharp mask.\nTransmission - Auto/Fixed - Displays the file transmission-map, before any action on contrast and brightness.\n\nAttention: the mask does not correspond to reality, but is amplified to make it more visible.
+!TP_RETINEX_VIEW_NONE;Standard
+!TP_RETINEX_VIEW_TRAN;Transmission - Auto
+!TP_RETINEX_VIEW_TRAN2;Transmission - Fixed
+!TP_RETINEX_VIEW_UNSHARP;Unsharp mask
!TP_RGBCURVES_BLUE;B
!TP_RGBCURVES_CHANNEL;Channel
!TP_RGBCURVES_GREEN;G
diff --git a/rtdata/languages/Francais b/rtdata/languages/Francais
index 7da48754f..d9ba0e029 100644
--- a/rtdata/languages/Francais
+++ b/rtdata/languages/Francais
@@ -861,7 +861,6 @@ PREFERENCES_CLIPPINGIND;Indication du dépassement de plage dynamique
PREFERENCES_CLUTSCACHE;Cache HaldCLUT
PREFERENCES_CLUTSCACHE_LABEL;Nombre maximum de chache CLUT
PREFERENCES_CLUTSDIR;Dossier HaldCLUT
-PREFERENCES_CMETRICINTENT;Intention Colorimétrique
PREFERENCES_CURVEBBOXPOS;Position des boutons copier/coller des courbes
PREFERENCES_CURVEBBOXPOS_ABOVE;Au-dessus
PREFERENCES_CURVEBBOXPOS_BELOW;En-dessous
@@ -956,7 +955,6 @@ PREFERENCES_MENUGROUPRANK;Classement
PREFERENCES_MENUOPTIONS;Options du menu
PREFERENCES_METADATA;Metadonnées
PREFERENCES_MIN;Mini (100x115)
-PREFERENCES_MONITORICC;Profil du moniteur
PREFERENCES_MULTITAB;Éditeurs multiple
PREFERENCES_MULTITABDUALMON;Éditeurs multiple, si possible sur un second moniteur
PREFERENCES_NAVGUIDEBRUSH;Couleur du cadre dans le Navigateur
@@ -1894,11 +1892,11 @@ ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: -
!FILEBROWSER_SHOWORIGINALHINT;Show only original images.\n\nWhen several images exist with the same filename but different extensions, the one considered original is the one whose extension is nearest the top of the parsed extensions list in Preferences > File Browser > Parsed Extensions.
!HISTORY_MSG_166;Exposure - Reset
!HISTORY_MSG_407;Retinex - Method
-!HISTORY_MSG_408;Retinex - Neighboring
-!HISTORY_MSG_409;Retinex - Gain
-!HISTORY_MSG_410;Retinex - Offset
+!HISTORY_MSG_408;Retinex - Radius
+!HISTORY_MSG_409;Retinex - Contrast
+!HISTORY_MSG_410;Retinex - Brightness
!HISTORY_MSG_411;Retinex - Strength
-!HISTORY_MSG_412;Retinex - Scales
+!HISTORY_MSG_412;Retinex - Gaussian Gradient
!HISTORY_MSG_413;Retinex - Variance
!HISTORY_MSG_414;Retinex - Histogram - Lab
!HISTORY_MSG_415;Retinex - Transmission
@@ -1913,24 +1911,47 @@ ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: -
!HISTORY_MSG_424;Retinex - HL threshold
!HISTORY_MSG_425;Retinex - Log base
!HISTORY_MSG_426;Retinex - Hue equalizer
+!HISTORY_MSG_427;Output rendering intent
+!HISTORY_MSG_428;Monitor rendering intent
+!HISTORY_MSG_429;Retinex - Iterations
+!HISTORY_MSG_430;Retinex - Transmission Gradient
+!HISTORY_MSG_431;Retinex - Strength Gradient
+!HISTORY_MSG_432;Retinex - M - Highlights
+!HISTORY_MSG_433;Retinex - M - Highlights TW
+!HISTORY_MSG_434;Retinex - M - Shadows
+!HISTORY_MSG_435;Retinex - M - Shadows TW
+!HISTORY_MSG_436;Retinex - M - Radius
+!HISTORY_MSG_437;Retinex - M - Method
+!HISTORY_MSG_438;Retinex - M - Equalizer
+!HISTORY_MSG_439;Retinex - Preview
!MAIN_BUTTON_SENDTOEDITOR;Edit image in external editor
+!MONITOR_PROFILE_SYSTEM;System default
+!MONITOR_SOFTPROOF;Soft-proof
+!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
!PARTIALPASTE_RETINEX;Retinex
+!PREFERENCES_MONINTENT;Default monitor intent
+!PREFERENCES_MONPROFILE;Default monitor profile
!PREFERENCES_PARSEDEXTDOWNHINT;Move selected extension down in the list.
!PREFERENCES_PARSEDEXTUPHINT;Move selected extension up in the list.
+!PREFERENCES_PROFILE_NONE;None
!PREFERENCES_TUNNELMETADATA;Copy Exif/IPTC/XMP unchanged to output file
!SAVEDLG_SUBSAMP_TOOLTIP;Best compression:\nJ:a:b 4:2:0\nh/v 2/2\nChroma halved horizontally and vertically.\n\nBalanced:\nJ:a:b 4:2:2\nh/v 2/1\nChroma halved horizontally.\n\nBest quality:\nJ:a:b 4:4:4\nh/v 1/1\nNo chroma subsampling.
!TP_COLORTONING_NEUTRAL;Reset sliders
!TP_DIRPYRDENOISE_PASSES;Median iterations
+!TP_ICM_PROFILEINTENT;Rendering Intent
!TP_NEUTRAL;Reset
!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL
!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b*
!TP_RETINEX_CONTEDIT_LH;Hue equalizer
+!TP_RETINEX_CONTEDIT_MAP;Mask 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_CURVEEDITOR_MAP;L=f(L)
+!TP_RETINEX_CURVEEDITOR_MAP_TOOLTIP;This curve can be applied alone or with a Gaussian mask or wavelet mask.\nBeware of artifacts!
!TP_RETINEX_FREEGAMMA;Free gamma
-!TP_RETINEX_GAIN;Gain
+!TP_RETINEX_GAIN;Contrast
!TP_RETINEX_GAIN_TOOLTIP;Acts on the restored image.\n\nThis is very different from the others settings. Used for black or white pixels, and to help balance the histogram.
!TP_RETINEX_GAMMA;Gamma
!TP_RETINEX_GAMMA_FREE;Free
@@ -1939,24 +1960,39 @@ ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: -
!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_GRAD;Transmission gradient
+!TP_RETINEX_GRADS;Strength gradient
+!TP_RETINEX_GRADS_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Strength is reduced when iterations increase, and conversely.
+!TP_RETINEX_GRAD_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Variance and Threshold are reduced when iterations increase, and conversely.
!TP_RETINEX_HIGH;High
!TP_RETINEX_HIGHLIG;Highlight
!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_HSLSPACE_LIN;HSL-Linear
!TP_RETINEX_HSLSPACE_LOG;HSL-Logarithmic
+!TP_RETINEX_ITER;Iterations (Tone-mapping)
+!TP_RETINEX_ITER_TOOLTIP;Simulate a tone-mapping operator.\nHigh values increase the processing time.
!TP_RETINEX_LABEL;Retinex
!TP_RETINEX_LABSPACE;L*a*b*
!TP_RETINEX_LOW;Low
+!TP_RETINEX_MAP;Mask method
+!TP_RETINEX_MAP_CURV;Curve only
+!TP_RETINEX_MAP_GAUS;Gaussian mask
+!TP_RETINEX_MAP_MAPP;Sharp mask (wavelet partial)
+!TP_RETINEX_MAP_MAPT;Sharp mask (wavelet total)
+!TP_RETINEX_MAP_METHOD_TOOLTIP;Use the mask generated by the Gaussian function above to reduce halos and artifacts.\n\nCurve only: apply a diagonal contrast curve on the mask.\nBeware of artifacts!\n\nGaussian mask: generate and use a Gaussian blur of the original mask.\nQuick.\n\nSharp mask: generate and use a wavelet on the original mask.\nSlow.
+!TP_RETINEX_MAP_NONE;None
!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,\nHighlights = 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_NEIGHBOR;Radius
!TP_RETINEX_NEUTRAL;Reset
!TP_RETINEX_NEUTRAL_TIP;Reset all sliders and curves to their default values.
-!TP_RETINEX_OFFSET;Offset
+!TP_RETINEX_OFFSET;Brightness
+!TP_RETINEX_SCALES;Gaussian gradient
+!TP_RETINEX_SCALES_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Scale and Neighboring pixels are reduced when iterations increase, and conversely.
!TP_RETINEX_SETTINGS;Settings
!TP_RETINEX_SLOPE;Free gamma slope
!TP_RETINEX_STRENGTH;Strength
@@ -1968,5 +2004,12 @@ ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: -
!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;Contrast
!TP_RETINEX_VARIANCE_TOOLTIP;Low variance increase local contrast and saturation, but can lead to artifacts.
+!TP_RETINEX_VIEW;Process (Preview)
+!TP_RETINEX_VIEW_MASK;Mask
+!TP_RETINEX_VIEW_METHOD_TOOLTIP;Standard - Normal display.\nMask - Displays the mask.\nUnsharp mask - Displays the image with a high radius unsharp mask.\nTransmission - Auto/Fixed - Displays the file transmission-map, before any action on contrast and brightness.\n\nAttention: the mask does not correspond to reality, but is amplified to make it more visible.
+!TP_RETINEX_VIEW_NONE;Standard
+!TP_RETINEX_VIEW_TRAN;Transmission - Auto
+!TP_RETINEX_VIEW_TRAN2;Transmission - Fixed
+!TP_RETINEX_VIEW_UNSHARP;Unsharp mask
diff --git a/rtdata/languages/Greek b/rtdata/languages/Greek
index 2ea0c9324..698b5a5ef 100644
--- a/rtdata/languages/Greek
+++ b/rtdata/languages/Greek
@@ -268,7 +268,6 @@ PREFERENCES_CACHEMAXENTRIES;Maximal Number of Cache Entries
PREFERENCES_CACHEOPTS;Cache Options
PREFERENCES_CACHETHUMBHEIGHT;Maximal Thumbnail Height
PREFERENCES_CLIPPINGIND;Ένδειξη ψαλιδίσματος
-PREFERENCES_CMETRICINTENT;Colorimetric Intent
PREFERENCES_DATEFORMAT;Διάταξη ημερομηνίας
PREFERENCES_DATEFORMATHINT;YΜπορείτε να χρησιμοποιήσετε τις εξής εντολές μορφοποίησης:\n%y : χρονολογία\n%m : μήνας\n%d : ημέρα\n\nΓια παράδειγμα, η μορφοποίηση ημερομηνίας στην Ελλάδα είναι:\n%y/%m/%d
PREFERENCES_DEFAULTLANG;Προεπιλεγμένη γλώσσα
@@ -292,7 +291,6 @@ PREFERENCES_INTENT_ABSOLUTE;Absolute Colorimetric
PREFERENCES_INTENT_PERCEPTUAL;Perceptual
PREFERENCES_INTENT_RELATIVE;Relative Colorimetric
PREFERENCES_INTENT_SATURATION;Saturation
-PREFERENCES_MONITORICC;Προφίλ οθόνης
PREFERENCES_OUTDIR;Τοποθεσία εξόδου
PREFERENCES_OUTDIRFOLDER;Save to folder
PREFERENCES_OUTDIRFOLDERHINT;Put the saved images to the seledted folder
@@ -878,7 +876,7 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία
!HISTORY_MSG_364;W - Final - Contrast balance
!HISTORY_MSG_365;W - Final - Delta balance
!HISTORY_MSG_366;W - Residual - Compression gamma
-!HISTORY_MSG_367;W - ES - Local contrast curve
+!HISTORY_MSG_367;W - Final - 'After' contrast curve
!HISTORY_MSG_368;W - Final - Contrast balance
!HISTORY_MSG_369;W - Final - Balance method
!HISTORY_MSG_370;W - Final - Local contrast curve
@@ -919,11 +917,11 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία
!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_408;Retinex - Radius
+!HISTORY_MSG_409;Retinex - Contrast
+!HISTORY_MSG_410;Retinex - Brightness
!HISTORY_MSG_411;Retinex - Strength
-!HISTORY_MSG_412;Retinex - Scales
+!HISTORY_MSG_412;Retinex - Gaussian Gradient
!HISTORY_MSG_413;Retinex - Variance
!HISTORY_MSG_414;Retinex - Histogram - Lab
!HISTORY_MSG_415;Retinex - Transmission
@@ -938,6 +936,19 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία
!HISTORY_MSG_424;Retinex - HL threshold
!HISTORY_MSG_425;Retinex - Log base
!HISTORY_MSG_426;Retinex - Hue equalizer
+!HISTORY_MSG_427;Output rendering intent
+!HISTORY_MSG_428;Monitor rendering intent
+!HISTORY_MSG_429;Retinex - Iterations
+!HISTORY_MSG_430;Retinex - Transmission Gradient
+!HISTORY_MSG_431;Retinex - Strength Gradient
+!HISTORY_MSG_432;Retinex - M - Highlights
+!HISTORY_MSG_433;Retinex - M - Highlights TW
+!HISTORY_MSG_434;Retinex - M - Shadows
+!HISTORY_MSG_435;Retinex - M - Shadows TW
+!HISTORY_MSG_436;Retinex - M - Radius
+!HISTORY_MSG_437;Retinex - M - Method
+!HISTORY_MSG_438;Retinex - M - Equalizer
+!HISTORY_MSG_439;Retinex - Preview
!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
@@ -984,6 +995,8 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία
!MAIN_TOOLTIP_SHOWHIDETP1;Show/Hide the top panel.\nShortcut: Shift-l
!MAIN_TOOLTIP_THRESHOLD;Threshold
!MAIN_TOOLTIP_TOGGLE;Toggle the Before/After view.\nShortcut: Shift-b
+!MONITOR_PROFILE_SYSTEM;System default
+!MONITOR_SOFTPROOF;Soft-proof
!NAVIGATOR_B;B:
!NAVIGATOR_G;G:
!NAVIGATOR_H;H:
@@ -1029,6 +1042,7 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία
!PARTIALPASTE_PREPROCESS_GREENEQUIL;Green equilibration
!PARTIALPASTE_PREPROCESS_HOTPIXFILT;Hot pixel filter
!PARTIALPASTE_PREPROCESS_LINEDENOISE;Line noise filter
+!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
!PARTIALPASTE_RAWCACORR_AUTO;CA auto-correction
!PARTIALPASTE_RAWCACORR_CABLUE;CA blue
!PARTIALPASTE_RAWCACORR_CARED;CA red
@@ -1140,6 +1154,8 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία
!PREFERENCES_MENUOPTIONS;Context Menu Options
!PREFERENCES_METADATA;Metadata
!PREFERENCES_MIN;Mini (100x115)
+!PREFERENCES_MONINTENT;Default monitor intent
+!PREFERENCES_MONPROFILE;Default monitor profile
!PREFERENCES_MULTITAB;Multiple Editor Tabs Mode
!PREFERENCES_MULTITABDUALMON;Multiple Editor Tabs In Own Window Mode
!PREFERENCES_NAVGUIDEBRUSH;Navigator guide color
@@ -1155,6 +1171,7 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία
!PREFERENCES_PREVDEMO_FAST;Fast
!PREFERENCES_PREVDEMO_LABEL;Demosaicing method used for the preview at <100% zoom:
!PREFERENCES_PREVDEMO_SIDECAR;As in PP3
+!PREFERENCES_PROFILE_NONE;None
!PREFERENCES_PROPERTY;Property
!PREFERENCES_REMEMBERZOOMPAN;Remember zoom % and pan offset
!PREFERENCES_REMEMBERZOOMPAN_TOOLTIP;Remember the zoom % and pan offset of the current image when opening a new image.\n\nThis option only works in "Single Editor Tab Mode" and when "Demosaicing method used for the preview at <100% zoom" is set to "As in PP3".
@@ -1566,6 +1583,7 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία
!TP_ICM_INPUTEMBEDDED_TOOLTIP;Use color profile embedded in non-raw files.
!TP_ICM_INPUTNONE;No profile
!TP_ICM_INPUTNONE_TOOLTIP;Use no input color profile at all.\nUse only in special cases.
+!TP_ICM_PROFILEINTENT;Rendering Intent
!TP_ICM_SAVEREFERENCE_APPLYWB;Apply white balance
!TP_ICM_SAVEREFERENCE_APPLYWB_TOOLTIP;Generally, apply the white balance when saving images to create ICC profiles, and do not apply the white balance to create DCP profiles.
!TP_ICM_SAVEREFERENCE_TOOLTIP;Save the linear TIFF image before the input profile is applied. The result can be used for calibration purposes and generation of a camera profile.
@@ -1680,12 +1698,15 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία
!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL
!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b*
!TP_RETINEX_CONTEDIT_LH;Hue equalizer
+!TP_RETINEX_CONTEDIT_MAP;Mask 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_CURVEEDITOR_MAP;L=f(L)
+!TP_RETINEX_CURVEEDITOR_MAP_TOOLTIP;This curve can be applied alone or with a Gaussian mask or wavelet mask.\nBeware of artifacts!
!TP_RETINEX_FREEGAMMA;Free gamma
-!TP_RETINEX_GAIN;Gain
+!TP_RETINEX_GAIN;Contrast
!TP_RETINEX_GAIN_TOOLTIP;Acts on the restored image.\n\nThis is very different from the others settings. Used for black or white pixels, and to help balance the histogram.
!TP_RETINEX_GAMMA;Gamma
!TP_RETINEX_GAMMA_FREE;Free
@@ -1694,24 +1715,39 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία
!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_GRAD;Transmission gradient
+!TP_RETINEX_GRADS;Strength gradient
+!TP_RETINEX_GRADS_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Strength is reduced when iterations increase, and conversely.
+!TP_RETINEX_GRAD_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Variance and Threshold are reduced when iterations increase, and conversely.
!TP_RETINEX_HIGH;High
!TP_RETINEX_HIGHLIG;Highlight
!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_HSLSPACE_LIN;HSL-Linear
!TP_RETINEX_HSLSPACE_LOG;HSL-Logarithmic
+!TP_RETINEX_ITER;Iterations (Tone-mapping)
+!TP_RETINEX_ITER_TOOLTIP;Simulate a tone-mapping operator.\nHigh values increase the processing time.
!TP_RETINEX_LABEL;Retinex
!TP_RETINEX_LABSPACE;L*a*b*
!TP_RETINEX_LOW;Low
+!TP_RETINEX_MAP;Mask method
+!TP_RETINEX_MAP_CURV;Curve only
+!TP_RETINEX_MAP_GAUS;Gaussian mask
+!TP_RETINEX_MAP_MAPP;Sharp mask (wavelet partial)
+!TP_RETINEX_MAP_MAPT;Sharp mask (wavelet total)
+!TP_RETINEX_MAP_METHOD_TOOLTIP;Use the mask generated by the Gaussian function above to reduce halos and artifacts.\n\nCurve only: apply a diagonal contrast curve on the mask.\nBeware of artifacts!\n\nGaussian mask: generate and use a Gaussian blur of the original mask.\nQuick.\n\nSharp mask: generate and use a wavelet on the original mask.\nSlow.
+!TP_RETINEX_MAP_NONE;None
!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,\nHighlights = 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_NEIGHBOR;Radius
!TP_RETINEX_NEUTRAL;Reset
!TP_RETINEX_NEUTRAL_TIP;Reset all sliders and curves to their default values.
-!TP_RETINEX_OFFSET;Offset
+!TP_RETINEX_OFFSET;Brightness
+!TP_RETINEX_SCALES;Gaussian gradient
+!TP_RETINEX_SCALES_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Scale and Neighboring pixels are reduced when iterations increase, and conversely.
!TP_RETINEX_SETTINGS;Settings
!TP_RETINEX_SLOPE;Free gamma slope
!TP_RETINEX_STRENGTH;Strength
@@ -1723,8 +1759,15 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία
!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;Contrast
!TP_RETINEX_VARIANCE_TOOLTIP;Low variance increase local contrast and saturation, but can lead to artifacts.
+!TP_RETINEX_VIEW;Process (Preview)
+!TP_RETINEX_VIEW_MASK;Mask
+!TP_RETINEX_VIEW_METHOD_TOOLTIP;Standard - Normal display.\nMask - Displays the mask.\nUnsharp mask - Displays the image with a high radius unsharp mask.\nTransmission - Auto/Fixed - Displays the file transmission-map, before any action on contrast and brightness.\n\nAttention: the mask does not correspond to reality, but is amplified to make it more visible.
+!TP_RETINEX_VIEW_NONE;Standard
+!TP_RETINEX_VIEW_TRAN;Transmission - Auto
+!TP_RETINEX_VIEW_TRAN2;Transmission - Fixed
+!TP_RETINEX_VIEW_UNSHARP;Unsharp mask
!TP_RGBCURVES_BLUE;B
!TP_RGBCURVES_CHANNEL;Channel
!TP_RGBCURVES_GREEN;G
diff --git a/rtdata/languages/Hebrew b/rtdata/languages/Hebrew
index 4c45e109d..eefde3ce4 100644
--- a/rtdata/languages/Hebrew
+++ b/rtdata/languages/Hebrew
@@ -268,7 +268,6 @@ PREFERENCES_CACHEMAXENTRIES;Maximal Number of Cache Entries
PREFERENCES_CACHEOPTS;Cache Options
PREFERENCES_CACHETHUMBHEIGHT;Maximal Thumbnail Height
PREFERENCES_CLIPPINGIND;סימון קיצוץ
-PREFERENCES_CMETRICINTENT;כוונה קולורמטרית
PREFERENCES_DATEFORMAT;צורת תאריך
PREFERENCES_DATEFORMATHINT;You can use the following formatting strings:\n%y : year\n%m : month\n%d : day\n\nFor example, the hungarian date format is:\n%y/%m/%d
PREFERENCES_DEFAULTLANG;שפה ברירת המחדל
@@ -292,7 +291,6 @@ PREFERENCES_INTENT_ABSOLUTE;קולורמטרית מוחלטת
PREFERENCES_INTENT_PERCEPTUAL;תפיסתית
PREFERENCES_INTENT_RELATIVE;קולורמטרית יחסית
PREFERENCES_INTENT_SATURATION;רויה
-PREFERENCES_MONITORICC;פרופיל מסך
PREFERENCES_OUTDIR;תיקיית ייצוא
PREFERENCES_OUTDIRFOLDER;Save to folder
PREFERENCES_OUTDIRFOLDERHINT;Put the saved images to the seledted folder
@@ -879,7 +877,7 @@ TP_WBALANCE_TEMPERATURE;מידת חום
!HISTORY_MSG_364;W - Final - Contrast balance
!HISTORY_MSG_365;W - Final - Delta balance
!HISTORY_MSG_366;W - Residual - Compression gamma
-!HISTORY_MSG_367;W - ES - Local contrast curve
+!HISTORY_MSG_367;W - Final - 'After' contrast curve
!HISTORY_MSG_368;W - Final - Contrast balance
!HISTORY_MSG_369;W - Final - Balance method
!HISTORY_MSG_370;W - Final - Local contrast curve
@@ -920,11 +918,11 @@ TP_WBALANCE_TEMPERATURE;מידת חום
!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_408;Retinex - Radius
+!HISTORY_MSG_409;Retinex - Contrast
+!HISTORY_MSG_410;Retinex - Brightness
!HISTORY_MSG_411;Retinex - Strength
-!HISTORY_MSG_412;Retinex - Scales
+!HISTORY_MSG_412;Retinex - Gaussian Gradient
!HISTORY_MSG_413;Retinex - Variance
!HISTORY_MSG_414;Retinex - Histogram - Lab
!HISTORY_MSG_415;Retinex - Transmission
@@ -939,6 +937,19 @@ TP_WBALANCE_TEMPERATURE;מידת חום
!HISTORY_MSG_424;Retinex - HL threshold
!HISTORY_MSG_425;Retinex - Log base
!HISTORY_MSG_426;Retinex - Hue equalizer
+!HISTORY_MSG_427;Output rendering intent
+!HISTORY_MSG_428;Monitor rendering intent
+!HISTORY_MSG_429;Retinex - Iterations
+!HISTORY_MSG_430;Retinex - Transmission Gradient
+!HISTORY_MSG_431;Retinex - Strength Gradient
+!HISTORY_MSG_432;Retinex - M - Highlights
+!HISTORY_MSG_433;Retinex - M - Highlights TW
+!HISTORY_MSG_434;Retinex - M - Shadows
+!HISTORY_MSG_435;Retinex - M - Shadows TW
+!HISTORY_MSG_436;Retinex - M - Radius
+!HISTORY_MSG_437;Retinex - M - Method
+!HISTORY_MSG_438;Retinex - M - Equalizer
+!HISTORY_MSG_439;Retinex - Preview
!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
@@ -985,6 +996,8 @@ TP_WBALANCE_TEMPERATURE;מידת חום
!MAIN_TOOLTIP_SHOWHIDETP1;Show/Hide the top panel.\nShortcut: Shift-l
!MAIN_TOOLTIP_THRESHOLD;Threshold
!MAIN_TOOLTIP_TOGGLE;Toggle the Before/After view.\nShortcut: Shift-b
+!MONITOR_PROFILE_SYSTEM;System default
+!MONITOR_SOFTPROOF;Soft-proof
!NAVIGATOR_B;B:
!NAVIGATOR_G;G:
!NAVIGATOR_H;H:
@@ -1030,6 +1043,7 @@ TP_WBALANCE_TEMPERATURE;מידת חום
!PARTIALPASTE_PREPROCESS_GREENEQUIL;Green equilibration
!PARTIALPASTE_PREPROCESS_HOTPIXFILT;Hot pixel filter
!PARTIALPASTE_PREPROCESS_LINEDENOISE;Line noise filter
+!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
!PARTIALPASTE_RAWCACORR_AUTO;CA auto-correction
!PARTIALPASTE_RAWCACORR_CABLUE;CA blue
!PARTIALPASTE_RAWCACORR_CARED;CA red
@@ -1141,6 +1155,8 @@ TP_WBALANCE_TEMPERATURE;מידת חום
!PREFERENCES_MENUOPTIONS;Context Menu Options
!PREFERENCES_METADATA;Metadata
!PREFERENCES_MIN;Mini (100x115)
+!PREFERENCES_MONINTENT;Default monitor intent
+!PREFERENCES_MONPROFILE;Default monitor profile
!PREFERENCES_MULTITAB;Multiple Editor Tabs Mode
!PREFERENCES_MULTITABDUALMON;Multiple Editor Tabs In Own Window Mode
!PREFERENCES_NAVGUIDEBRUSH;Navigator guide color
@@ -1156,6 +1172,7 @@ TP_WBALANCE_TEMPERATURE;מידת חום
!PREFERENCES_PREVDEMO_FAST;Fast
!PREFERENCES_PREVDEMO_LABEL;Demosaicing method used for the preview at <100% zoom:
!PREFERENCES_PREVDEMO_SIDECAR;As in PP3
+!PREFERENCES_PROFILE_NONE;None
!PREFERENCES_PROPERTY;Property
!PREFERENCES_REMEMBERZOOMPAN;Remember zoom % and pan offset
!PREFERENCES_REMEMBERZOOMPAN_TOOLTIP;Remember the zoom % and pan offset of the current image when opening a new image.\n\nThis option only works in "Single Editor Tab Mode" and when "Demosaicing method used for the preview at <100% zoom" is set to "As in PP3".
@@ -1567,6 +1584,7 @@ TP_WBALANCE_TEMPERATURE;מידת חום
!TP_ICM_INPUTEMBEDDED_TOOLTIP;Use color profile embedded in non-raw files.
!TP_ICM_INPUTNONE;No profile
!TP_ICM_INPUTNONE_TOOLTIP;Use no input color profile at all.\nUse only in special cases.
+!TP_ICM_PROFILEINTENT;Rendering Intent
!TP_ICM_SAVEREFERENCE_APPLYWB;Apply white balance
!TP_ICM_SAVEREFERENCE_APPLYWB_TOOLTIP;Generally, apply the white balance when saving images to create ICC profiles, and do not apply the white balance to create DCP profiles.
!TP_ICM_SAVEREFERENCE_TOOLTIP;Save the linear TIFF image before the input profile is applied. The result can be used for calibration purposes and generation of a camera profile.
@@ -1681,12 +1699,15 @@ TP_WBALANCE_TEMPERATURE;מידת חום
!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL
!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b*
!TP_RETINEX_CONTEDIT_LH;Hue equalizer
+!TP_RETINEX_CONTEDIT_MAP;Mask 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_CURVEEDITOR_MAP;L=f(L)
+!TP_RETINEX_CURVEEDITOR_MAP_TOOLTIP;This curve can be applied alone or with a Gaussian mask or wavelet mask.\nBeware of artifacts!
!TP_RETINEX_FREEGAMMA;Free gamma
-!TP_RETINEX_GAIN;Gain
+!TP_RETINEX_GAIN;Contrast
!TP_RETINEX_GAIN_TOOLTIP;Acts on the restored image.\n\nThis is very different from the others settings. Used for black or white pixels, and to help balance the histogram.
!TP_RETINEX_GAMMA;Gamma
!TP_RETINEX_GAMMA_FREE;Free
@@ -1695,24 +1716,39 @@ TP_WBALANCE_TEMPERATURE;מידת חום
!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_GRAD;Transmission gradient
+!TP_RETINEX_GRADS;Strength gradient
+!TP_RETINEX_GRADS_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Strength is reduced when iterations increase, and conversely.
+!TP_RETINEX_GRAD_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Variance and Threshold are reduced when iterations increase, and conversely.
!TP_RETINEX_HIGH;High
!TP_RETINEX_HIGHLIG;Highlight
!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_HSLSPACE_LIN;HSL-Linear
!TP_RETINEX_HSLSPACE_LOG;HSL-Logarithmic
+!TP_RETINEX_ITER;Iterations (Tone-mapping)
+!TP_RETINEX_ITER_TOOLTIP;Simulate a tone-mapping operator.\nHigh values increase the processing time.
!TP_RETINEX_LABEL;Retinex
!TP_RETINEX_LABSPACE;L*a*b*
!TP_RETINEX_LOW;Low
+!TP_RETINEX_MAP;Mask method
+!TP_RETINEX_MAP_CURV;Curve only
+!TP_RETINEX_MAP_GAUS;Gaussian mask
+!TP_RETINEX_MAP_MAPP;Sharp mask (wavelet partial)
+!TP_RETINEX_MAP_MAPT;Sharp mask (wavelet total)
+!TP_RETINEX_MAP_METHOD_TOOLTIP;Use the mask generated by the Gaussian function above to reduce halos and artifacts.\n\nCurve only: apply a diagonal contrast curve on the mask.\nBeware of artifacts!\n\nGaussian mask: generate and use a Gaussian blur of the original mask.\nQuick.\n\nSharp mask: generate and use a wavelet on the original mask.\nSlow.
+!TP_RETINEX_MAP_NONE;None
!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,\nHighlights = 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_NEIGHBOR;Radius
!TP_RETINEX_NEUTRAL;Reset
!TP_RETINEX_NEUTRAL_TIP;Reset all sliders and curves to their default values.
-!TP_RETINEX_OFFSET;Offset
+!TP_RETINEX_OFFSET;Brightness
+!TP_RETINEX_SCALES;Gaussian gradient
+!TP_RETINEX_SCALES_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Scale and Neighboring pixels are reduced when iterations increase, and conversely.
!TP_RETINEX_SETTINGS;Settings
!TP_RETINEX_SLOPE;Free gamma slope
!TP_RETINEX_STRENGTH;Strength
@@ -1724,8 +1760,15 @@ TP_WBALANCE_TEMPERATURE;מידת חום
!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;Contrast
!TP_RETINEX_VARIANCE_TOOLTIP;Low variance increase local contrast and saturation, but can lead to artifacts.
+!TP_RETINEX_VIEW;Process (Preview)
+!TP_RETINEX_VIEW_MASK;Mask
+!TP_RETINEX_VIEW_METHOD_TOOLTIP;Standard - Normal display.\nMask - Displays the mask.\nUnsharp mask - Displays the image with a high radius unsharp mask.\nTransmission - Auto/Fixed - Displays the file transmission-map, before any action on contrast and brightness.\n\nAttention: the mask does not correspond to reality, but is amplified to make it more visible.
+!TP_RETINEX_VIEW_NONE;Standard
+!TP_RETINEX_VIEW_TRAN;Transmission - Auto
+!TP_RETINEX_VIEW_TRAN2;Transmission - Fixed
+!TP_RETINEX_VIEW_UNSHARP;Unsharp mask
!TP_RGBCURVES_BLUE;B
!TP_RGBCURVES_CHANNEL;Channel
!TP_RGBCURVES_GREEN;G
diff --git a/rtdata/languages/Italiano b/rtdata/languages/Italiano
index 72a0c9d20..369a1a278 100644
--- a/rtdata/languages/Italiano
+++ b/rtdata/languages/Italiano
@@ -679,7 +679,6 @@ PREFERENCES_CIEART;Ottimizzazione CIECAM02
PREFERENCES_CIEART_LABEL;Utilizza precisione singola anziché doppia
PREFERENCES_CIEART_TOOLTIP;Se abilitata, i calcoli CIECAM02 sono effettuati in formato a virgola mobile a precisione singola anziché doppia. Questo permette un piccolo incremento di velocità al costo di una trascurabile perdita di qualità.
PREFERENCES_CLIPPINGIND;Indicazione di tosaggio
-PREFERENCES_CMETRICINTENT;Intento colorimetrico
PREFERENCES_CUSTPROFBUILD;Generatore profili personalizzati
PREFERENCES_CUSTPROFBUILDHINT;File eseguibile (o script) richiamato quando è necessario generare un nuovo profilo per un'immagine.\nIl percorso del file di comunicazione (del tipo *.ini, detto "Keyfile") è aggiunto come parametro da linea di comando. Contiene diversi paramentri necessari agli script e ai dati Exif per generare un profilo di elaborazione.\n\nATTENZIONE:: Devi utilizzare le virgolette doppie quando necessario se utilizzi percorsi contenenti spazi.
PREFERENCES_CUSTPROFBUILDKEYFORMAT;Formato tasti
@@ -749,7 +748,6 @@ PREFERENCES_MENUGROUPPROFILEOPERATIONS;Raggruppa "Operazioni sui profili"
PREFERENCES_MENUGROUPRANK;Raggruppa "Classificazioni"
PREFERENCES_MENUOPTIONS;Opzioni del menù a discesa
PREFERENCES_METADATA;Metadati
-PREFERENCES_MONITORICC;Profilo colore del monitor
PREFERENCES_MULTITAB;Modalità a Schede Multiple
PREFERENCES_MULTITABDUALMON;Modalità a Schede Multiple (se disponibile sul secondo schermo)
PREFERENCES_NAVGUIDEBRUSH;Colore delle guide del Navigatore
@@ -1499,7 +1497,7 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: -
!HISTORY_MSG_364;W - Final - Contrast balance
!HISTORY_MSG_365;W - Final - Delta balance
!HISTORY_MSG_366;W - Residual - Compression gamma
-!HISTORY_MSG_367;W - ES - Local contrast curve
+!HISTORY_MSG_367;W - Final - 'After' contrast curve
!HISTORY_MSG_368;W - Final - Contrast balance
!HISTORY_MSG_369;W - Final - Balance method
!HISTORY_MSG_370;W - Final - Local contrast curve
@@ -1540,11 +1538,11 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: -
!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_408;Retinex - Radius
+!HISTORY_MSG_409;Retinex - Contrast
+!HISTORY_MSG_410;Retinex - Brightness
!HISTORY_MSG_411;Retinex - Strength
-!HISTORY_MSG_412;Retinex - Scales
+!HISTORY_MSG_412;Retinex - Gaussian Gradient
!HISTORY_MSG_413;Retinex - Variance
!HISTORY_MSG_414;Retinex - Histogram - Lab
!HISTORY_MSG_415;Retinex - Transmission
@@ -1559,16 +1557,32 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: -
!HISTORY_MSG_424;Retinex - HL threshold
!HISTORY_MSG_425;Retinex - Log base
!HISTORY_MSG_426;Retinex - Hue equalizer
+!HISTORY_MSG_427;Output rendering intent
+!HISTORY_MSG_428;Monitor rendering intent
+!HISTORY_MSG_429;Retinex - Iterations
+!HISTORY_MSG_430;Retinex - Transmission Gradient
+!HISTORY_MSG_431;Retinex - Strength Gradient
+!HISTORY_MSG_432;Retinex - M - Highlights
+!HISTORY_MSG_433;Retinex - M - Highlights TW
+!HISTORY_MSG_434;Retinex - M - Shadows
+!HISTORY_MSG_435;Retinex - M - Shadows TW
+!HISTORY_MSG_436;Retinex - M - Radius
+!HISTORY_MSG_437;Retinex - M - Method
+!HISTORY_MSG_438;Retinex - M - Equalizer
+!HISTORY_MSG_439;Retinex - Preview
!MAIN_BUTTON_SENDTOEDITOR;Edit image in external editor
!MAIN_TAB_INSPECT; Inspect
!MAIN_TAB_WAVELET;Wavelet
!MAIN_TAB_WAVELET_TOOLTIP;Shortcut: Alt-w
+!MONITOR_PROFILE_SYSTEM;System default
+!MONITOR_SOFTPROOF;Soft-proof
!PARTIALPASTE_COLORTONING;Color toning
!PARTIALPASTE_EQUALIZER;Wavelet levels
!PARTIALPASTE_FILMSIMULATION;Film simulation
!PARTIALPASTE_FLATFIELDCLIPCONTROL;Flat-field clip control
!PARTIALPASTE_PREPROCESS_DEADPIXFILT;Dead pixel filter
!PARTIALPASTE_PREPROCESS_HOTPIXFILT;Hot pixel filter
+!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
!PARTIALPASTE_RETINEX;Retinex
!PARTIALPASTE_WAVELETGROUP;Wavelet Levels
!PREFERENCES_AUTLISLOW;Low
@@ -1606,6 +1620,8 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: -
!PREFERENCES_MAXRECENTFOLDERS;Maximum number of recent folders
!PREFERENCES_MED;Medium (Tile/2)
!PREFERENCES_MIN;Mini (100x115)
+!PREFERENCES_MONINTENT;Default monitor intent
+!PREFERENCES_MONPROFILE;Default monitor profile
!PREFERENCES_NAVIGATIONFRAME;Navigation
!PREFERENCES_NOISE;Noise Reduction
!PREFERENCES_OVERLAY_FILENAMES_FILMSTRIP;Overlay filenames on thumbnails in the editor pannel
@@ -1615,6 +1631,7 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: -
!PREFERENCES_PREVDEMO_FAST;Fast
!PREFERENCES_PREVDEMO_LABEL;Demosaicing method used for the preview at <100% zoom:
!PREFERENCES_PREVDEMO_SIDECAR;As in PP3
+!PREFERENCES_PROFILE_NONE;None
!PREFERENCES_REMEMBERZOOMPAN;Remember zoom % and pan offset
!PREFERENCES_REMEMBERZOOMPAN_TOOLTIP;Remember the zoom % and pan offset of the current image when opening a new image.\n\nThis option only works in "Single Editor Tab Mode" and when "Demosaicing method used for the preview at <100% zoom" is set to "As in PP3".
!PREFERENCES_SERIALIZE_TIFF_READ;Tiff Read Settings
@@ -1739,6 +1756,7 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: -
!TP_ICM_APPLYHUESATMAP_TOOLTIP;Employ the embedded DCP base table (HueSatMap). The setting is only enabled if the selected DCP has one.
!TP_ICM_APPLYLOOKTABLE;Look table
!TP_ICM_APPLYLOOKTABLE_TOOLTIP;Employ the embedded DCP look table. The setting is only enabled if the selected DCP has one.
+!TP_ICM_PROFILEINTENT;Rendering Intent
!TP_ICM_SAVEREFERENCE_APPLYWB;Apply white balance
!TP_ICM_SAVEREFERENCE_APPLYWB_TOOLTIP;Generally, apply the white balance when saving images to create ICC profiles, and do not apply the white balance to create DCP profiles.
!TP_NEUTRAL;Reset
@@ -1764,12 +1782,15 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: -
!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL
!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b*
!TP_RETINEX_CONTEDIT_LH;Hue equalizer
+!TP_RETINEX_CONTEDIT_MAP;Mask 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_CURVEEDITOR_MAP;L=f(L)
+!TP_RETINEX_CURVEEDITOR_MAP_TOOLTIP;This curve can be applied alone or with a Gaussian mask or wavelet mask.\nBeware of artifacts!
!TP_RETINEX_FREEGAMMA;Free gamma
-!TP_RETINEX_GAIN;Gain
+!TP_RETINEX_GAIN;Contrast
!TP_RETINEX_GAIN_TOOLTIP;Acts on the restored image.\n\nThis is very different from the others settings. Used for black or white pixels, and to help balance the histogram.
!TP_RETINEX_GAMMA;Gamma
!TP_RETINEX_GAMMA_FREE;Free
@@ -1778,24 +1799,39 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: -
!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_GRAD;Transmission gradient
+!TP_RETINEX_GRADS;Strength gradient
+!TP_RETINEX_GRADS_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Strength is reduced when iterations increase, and conversely.
+!TP_RETINEX_GRAD_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Variance and Threshold are reduced when iterations increase, and conversely.
!TP_RETINEX_HIGH;High
!TP_RETINEX_HIGHLIG;Highlight
!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_HSLSPACE_LIN;HSL-Linear
!TP_RETINEX_HSLSPACE_LOG;HSL-Logarithmic
+!TP_RETINEX_ITER;Iterations (Tone-mapping)
+!TP_RETINEX_ITER_TOOLTIP;Simulate a tone-mapping operator.\nHigh values increase the processing time.
!TP_RETINEX_LABEL;Retinex
!TP_RETINEX_LABSPACE;L*a*b*
!TP_RETINEX_LOW;Low
+!TP_RETINEX_MAP;Mask method
+!TP_RETINEX_MAP_CURV;Curve only
+!TP_RETINEX_MAP_GAUS;Gaussian mask
+!TP_RETINEX_MAP_MAPP;Sharp mask (wavelet partial)
+!TP_RETINEX_MAP_MAPT;Sharp mask (wavelet total)
+!TP_RETINEX_MAP_METHOD_TOOLTIP;Use the mask generated by the Gaussian function above to reduce halos and artifacts.\n\nCurve only: apply a diagonal contrast curve on the mask.\nBeware of artifacts!\n\nGaussian mask: generate and use a Gaussian blur of the original mask.\nQuick.\n\nSharp mask: generate and use a wavelet on the original mask.\nSlow.
+!TP_RETINEX_MAP_NONE;None
!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,\nHighlights = 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_NEIGHBOR;Radius
!TP_RETINEX_NEUTRAL;Reset
!TP_RETINEX_NEUTRAL_TIP;Reset all sliders and curves to their default values.
-!TP_RETINEX_OFFSET;Offset
+!TP_RETINEX_OFFSET;Brightness
+!TP_RETINEX_SCALES;Gaussian gradient
+!TP_RETINEX_SCALES_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Scale and Neighboring pixels are reduced when iterations increase, and conversely.
!TP_RETINEX_SETTINGS;Settings
!TP_RETINEX_SLOPE;Free gamma slope
!TP_RETINEX_STRENGTH;Strength
@@ -1807,8 +1843,15 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: -
!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;Contrast
!TP_RETINEX_VARIANCE_TOOLTIP;Low variance increase local contrast and saturation, but can lead to artifacts.
+!TP_RETINEX_VIEW;Process (Preview)
+!TP_RETINEX_VIEW_MASK;Mask
+!TP_RETINEX_VIEW_METHOD_TOOLTIP;Standard - Normal display.\nMask - Displays the mask.\nUnsharp mask - Displays the image with a high radius unsharp mask.\nTransmission - Auto/Fixed - Displays the file transmission-map, before any action on contrast and brightness.\n\nAttention: the mask does not correspond to reality, but is amplified to make it more visible.
+!TP_RETINEX_VIEW_NONE;Standard
+!TP_RETINEX_VIEW_TRAN;Transmission - Auto
+!TP_RETINEX_VIEW_TRAN2;Transmission - Fixed
+!TP_RETINEX_VIEW_UNSHARP;Unsharp mask
!TP_WAVELET_1;Level 1
!TP_WAVELET_2;Level 2
!TP_WAVELET_3;Level 3
diff --git a/rtdata/languages/Japanese b/rtdata/languages/Japanese
index fbce3a1c2..2998f0652 100644
--- a/rtdata/languages/Japanese
+++ b/rtdata/languages/Japanese
@@ -894,7 +894,6 @@ PREFERENCES_CLIPPINGIND;クリッピング領域の表示
PREFERENCES_CLUTSCACHE;HaldCLUT cache
PREFERENCES_CLUTSCACHE_LABEL;cacheに置けるHaldCLUTの最大数
PREFERENCES_CLUTSDIR;HaldCLUTのディレクトリー
-PREFERENCES_CMETRICINTENT;レンダリング・インテント
PREFERENCES_CURVEBBOXPOS;カーブのコピーペイストボタンの位置
PREFERENCES_CURVEBBOXPOS_ABOVE;上
PREFERENCES_CURVEBBOXPOS_BELOW;下
@@ -989,7 +988,6 @@ PREFERENCES_MENUGROUPRANK;"ランキング"のグループ
PREFERENCES_MENUOPTIONS;メニューオプションの状況
PREFERENCES_METADATA;メタデータ
PREFERENCES_MIN;最小 (100x115)
-PREFERENCES_MONITORICC;モニター・カラープロファイル
PREFERENCES_MULTITAB;マルチ編集タブモード
PREFERENCES_MULTITABDUALMON;独自のウィンドウモードによるマルチ編集タブ
PREFERENCES_NAVGUIDEBRUSH;ナビゲーターのガイドカラー
@@ -1928,11 +1926,11 @@ ZOOMPANEL_ZOOMOUT;ズームアウト\nショートカット: -
!FILEBROWSER_SHOWORIGINALHINT;Show only original images.\n\nWhen several images exist with the same filename but different extensions, the one considered original is the one whose extension is nearest the top of the parsed extensions list in Preferences > File Browser > Parsed Extensions.
!HISTORY_MSG_166;Exposure - Reset
!HISTORY_MSG_407;Retinex - Method
-!HISTORY_MSG_408;Retinex - Neighboring
-!HISTORY_MSG_409;Retinex - Gain
-!HISTORY_MSG_410;Retinex - Offset
+!HISTORY_MSG_408;Retinex - Radius
+!HISTORY_MSG_409;Retinex - Contrast
+!HISTORY_MSG_410;Retinex - Brightness
!HISTORY_MSG_411;Retinex - Strength
-!HISTORY_MSG_412;Retinex - Scales
+!HISTORY_MSG_412;Retinex - Gaussian Gradient
!HISTORY_MSG_413;Retinex - Variance
!HISTORY_MSG_414;Retinex - Histogram - Lab
!HISTORY_MSG_415;Retinex - Transmission
@@ -1947,22 +1945,45 @@ ZOOMPANEL_ZOOMOUT;ズームアウト\nショートカット: -
!HISTORY_MSG_424;Retinex - HL threshold
!HISTORY_MSG_425;Retinex - Log base
!HISTORY_MSG_426;Retinex - Hue equalizer
+!HISTORY_MSG_427;Output rendering intent
+!HISTORY_MSG_428;Monitor rendering intent
+!HISTORY_MSG_429;Retinex - Iterations
+!HISTORY_MSG_430;Retinex - Transmission Gradient
+!HISTORY_MSG_431;Retinex - Strength Gradient
+!HISTORY_MSG_432;Retinex - M - Highlights
+!HISTORY_MSG_433;Retinex - M - Highlights TW
+!HISTORY_MSG_434;Retinex - M - Shadows
+!HISTORY_MSG_435;Retinex - M - Shadows TW
+!HISTORY_MSG_436;Retinex - M - Radius
+!HISTORY_MSG_437;Retinex - M - Method
+!HISTORY_MSG_438;Retinex - M - Equalizer
+!HISTORY_MSG_439;Retinex - Preview
!MAIN_BUTTON_SENDTOEDITOR;Edit image in external editor
+!MONITOR_PROFILE_SYSTEM;System default
+!MONITOR_SOFTPROOF;Soft-proof
+!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
!PARTIALPASTE_RETINEX;Retinex
+!PREFERENCES_MONINTENT;Default monitor intent
+!PREFERENCES_MONPROFILE;Default monitor profile
!PREFERENCES_PARSEDEXTDOWNHINT;Move selected extension down in the list.
!PREFERENCES_PARSEDEXTUPHINT;Move selected extension up in the list.
+!PREFERENCES_PROFILE_NONE;None
!PREFERENCES_TUNNELMETADATA;Copy Exif/IPTC/XMP unchanged to output file
!SAVEDLG_SUBSAMP_TOOLTIP;Best compression:\nJ:a:b 4:2:0\nh/v 2/2\nChroma halved horizontally and vertically.\n\nBalanced:\nJ:a:b 4:2:2\nh/v 2/1\nChroma halved horizontally.\n\nBest quality:\nJ:a:b 4:4:4\nh/v 1/1\nNo chroma subsampling.
+!TP_ICM_PROFILEINTENT;Rendering Intent
!TP_NEUTRAL;Reset
!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL
!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b*
!TP_RETINEX_CONTEDIT_LH;Hue equalizer
+!TP_RETINEX_CONTEDIT_MAP;Mask 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_CURVEEDITOR_MAP;L=f(L)
+!TP_RETINEX_CURVEEDITOR_MAP_TOOLTIP;This curve can be applied alone or with a Gaussian mask or wavelet mask.\nBeware of artifacts!
!TP_RETINEX_FREEGAMMA;Free gamma
-!TP_RETINEX_GAIN;Gain
+!TP_RETINEX_GAIN;Contrast
!TP_RETINEX_GAIN_TOOLTIP;Acts on the restored image.\n\nThis is very different from the others settings. Used for black or white pixels, and to help balance the histogram.
!TP_RETINEX_GAMMA;Gamma
!TP_RETINEX_GAMMA_FREE;Free
@@ -1971,24 +1992,39 @@ ZOOMPANEL_ZOOMOUT;ズームアウト\nショートカット: -
!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_GRAD;Transmission gradient
+!TP_RETINEX_GRADS;Strength gradient
+!TP_RETINEX_GRADS_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Strength is reduced when iterations increase, and conversely.
+!TP_RETINEX_GRAD_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Variance and Threshold are reduced when iterations increase, and conversely.
!TP_RETINEX_HIGH;High
!TP_RETINEX_HIGHLIG;Highlight
!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_HSLSPACE_LIN;HSL-Linear
!TP_RETINEX_HSLSPACE_LOG;HSL-Logarithmic
+!TP_RETINEX_ITER;Iterations (Tone-mapping)
+!TP_RETINEX_ITER_TOOLTIP;Simulate a tone-mapping operator.\nHigh values increase the processing time.
!TP_RETINEX_LABEL;Retinex
!TP_RETINEX_LABSPACE;L*a*b*
!TP_RETINEX_LOW;Low
+!TP_RETINEX_MAP;Mask method
+!TP_RETINEX_MAP_CURV;Curve only
+!TP_RETINEX_MAP_GAUS;Gaussian mask
+!TP_RETINEX_MAP_MAPP;Sharp mask (wavelet partial)
+!TP_RETINEX_MAP_MAPT;Sharp mask (wavelet total)
+!TP_RETINEX_MAP_METHOD_TOOLTIP;Use the mask generated by the Gaussian function above to reduce halos and artifacts.\n\nCurve only: apply a diagonal contrast curve on the mask.\nBeware of artifacts!\n\nGaussian mask: generate and use a Gaussian blur of the original mask.\nQuick.\n\nSharp mask: generate and use a wavelet on the original mask.\nSlow.
+!TP_RETINEX_MAP_NONE;None
!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,\nHighlights = 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_NEIGHBOR;Radius
!TP_RETINEX_NEUTRAL;Reset
!TP_RETINEX_NEUTRAL_TIP;Reset all sliders and curves to their default values.
-!TP_RETINEX_OFFSET;Offset
+!TP_RETINEX_OFFSET;Brightness
+!TP_RETINEX_SCALES;Gaussian gradient
+!TP_RETINEX_SCALES_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Scale and Neighboring pixels are reduced when iterations increase, and conversely.
!TP_RETINEX_SETTINGS;Settings
!TP_RETINEX_SLOPE;Free gamma slope
!TP_RETINEX_STRENGTH;Strength
@@ -2000,5 +2036,12 @@ ZOOMPANEL_ZOOMOUT;ズームアウト\nショートカット: -
!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;Contrast
!TP_RETINEX_VARIANCE_TOOLTIP;Low variance increase local contrast and saturation, but can lead to artifacts.
+!TP_RETINEX_VIEW;Process (Preview)
+!TP_RETINEX_VIEW_MASK;Mask
+!TP_RETINEX_VIEW_METHOD_TOOLTIP;Standard - Normal display.\nMask - Displays the mask.\nUnsharp mask - Displays the image with a high radius unsharp mask.\nTransmission - Auto/Fixed - Displays the file transmission-map, before any action on contrast and brightness.\n\nAttention: the mask does not correspond to reality, but is amplified to make it more visible.
+!TP_RETINEX_VIEW_NONE;Standard
+!TP_RETINEX_VIEW_TRAN;Transmission - Auto
+!TP_RETINEX_VIEW_TRAN2;Transmission - Fixed
+!TP_RETINEX_VIEW_UNSHARP;Unsharp mask
diff --git a/rtdata/languages/Latvian b/rtdata/languages/Latvian
index 200bc80a0..acc3ae463 100644
--- a/rtdata/languages/Latvian
+++ b/rtdata/languages/Latvian
@@ -268,7 +268,6 @@ PREFERENCES_CACHEMAXENTRIES;Maksimālais keša ierakstu skaits
PREFERENCES_CACHEOPTS;Keša opcijas
PREFERENCES_CACHETHUMBHEIGHT;Keša maksimālais sīktēla augstums
PREFERENCES_CLIPPINGIND;Cirpšanas pazīme
-PREFERENCES_CMETRICINTENT;Kolorimetrijas nolūks
PREFERENCES_DATEFORMAT;Datuma formāts
PREFERENCES_DATEFORMATHINT;Jūs varat lietot šāduas formatēšanas parametrus:\n%y : gads\n%m : mēnesis\n%d : diena\n\nPiemēram, ungāru datuma formāts ir:\n%y/%m/%d
PREFERENCES_DEFAULTLANG;Noklusētā valoda
@@ -292,7 +291,6 @@ PREFERENCES_INTENT_ABSOLUTE;Absolūtā kolorimetrija
PREFERENCES_INTENT_PERCEPTUAL;Uztverams
PREFERENCES_INTENT_RELATIVE;Relatīvā kolorimetrija
PREFERENCES_INTENT_SATURATION;Piesātinājums
-PREFERENCES_MONITORICC;Monitora Profils
PREFERENCES_OUTDIR;Izvades mape
PREFERENCES_OUTDIRFOLDER;Saglabāt mapē
PREFERENCES_OUTDIRFOLDERHINT;Likt saglabātos attēlus norādītajā mapē
@@ -879,7 +877,7 @@ TP_WBALANCE_TEMPERATURE;Temperatūra
!HISTORY_MSG_364;W - Final - Contrast balance
!HISTORY_MSG_365;W - Final - Delta balance
!HISTORY_MSG_366;W - Residual - Compression gamma
-!HISTORY_MSG_367;W - ES - Local contrast curve
+!HISTORY_MSG_367;W - Final - 'After' contrast curve
!HISTORY_MSG_368;W - Final - Contrast balance
!HISTORY_MSG_369;W - Final - Balance method
!HISTORY_MSG_370;W - Final - Local contrast curve
@@ -920,11 +918,11 @@ TP_WBALANCE_TEMPERATURE;Temperatūra
!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_408;Retinex - Radius
+!HISTORY_MSG_409;Retinex - Contrast
+!HISTORY_MSG_410;Retinex - Brightness
!HISTORY_MSG_411;Retinex - Strength
-!HISTORY_MSG_412;Retinex - Scales
+!HISTORY_MSG_412;Retinex - Gaussian Gradient
!HISTORY_MSG_413;Retinex - Variance
!HISTORY_MSG_414;Retinex - Histogram - Lab
!HISTORY_MSG_415;Retinex - Transmission
@@ -939,6 +937,19 @@ TP_WBALANCE_TEMPERATURE;Temperatūra
!HISTORY_MSG_424;Retinex - HL threshold
!HISTORY_MSG_425;Retinex - Log base
!HISTORY_MSG_426;Retinex - Hue equalizer
+!HISTORY_MSG_427;Output rendering intent
+!HISTORY_MSG_428;Monitor rendering intent
+!HISTORY_MSG_429;Retinex - Iterations
+!HISTORY_MSG_430;Retinex - Transmission Gradient
+!HISTORY_MSG_431;Retinex - Strength Gradient
+!HISTORY_MSG_432;Retinex - M - Highlights
+!HISTORY_MSG_433;Retinex - M - Highlights TW
+!HISTORY_MSG_434;Retinex - M - Shadows
+!HISTORY_MSG_435;Retinex - M - Shadows TW
+!HISTORY_MSG_436;Retinex - M - Radius
+!HISTORY_MSG_437;Retinex - M - Method
+!HISTORY_MSG_438;Retinex - M - Equalizer
+!HISTORY_MSG_439;Retinex - Preview
!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
@@ -985,6 +996,8 @@ TP_WBALANCE_TEMPERATURE;Temperatūra
!MAIN_TOOLTIP_SHOWHIDETP1;Show/Hide the top panel.\nShortcut: Shift-l
!MAIN_TOOLTIP_THRESHOLD;Threshold
!MAIN_TOOLTIP_TOGGLE;Toggle the Before/After view.\nShortcut: Shift-b
+!MONITOR_PROFILE_SYSTEM;System default
+!MONITOR_SOFTPROOF;Soft-proof
!NAVIGATOR_B;B:
!NAVIGATOR_G;G:
!NAVIGATOR_H;H:
@@ -1030,6 +1043,7 @@ TP_WBALANCE_TEMPERATURE;Temperatūra
!PARTIALPASTE_PREPROCESS_GREENEQUIL;Green equilibration
!PARTIALPASTE_PREPROCESS_HOTPIXFILT;Hot pixel filter
!PARTIALPASTE_PREPROCESS_LINEDENOISE;Line noise filter
+!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
!PARTIALPASTE_RAWCACORR_AUTO;CA auto-correction
!PARTIALPASTE_RAWCACORR_CABLUE;CA blue
!PARTIALPASTE_RAWCACORR_CARED;CA red
@@ -1141,6 +1155,8 @@ TP_WBALANCE_TEMPERATURE;Temperatūra
!PREFERENCES_MENUOPTIONS;Context Menu Options
!PREFERENCES_METADATA;Metadata
!PREFERENCES_MIN;Mini (100x115)
+!PREFERENCES_MONINTENT;Default monitor intent
+!PREFERENCES_MONPROFILE;Default monitor profile
!PREFERENCES_MULTITAB;Multiple Editor Tabs Mode
!PREFERENCES_MULTITABDUALMON;Multiple Editor Tabs In Own Window Mode
!PREFERENCES_NAVGUIDEBRUSH;Navigator guide color
@@ -1156,6 +1172,7 @@ TP_WBALANCE_TEMPERATURE;Temperatūra
!PREFERENCES_PREVDEMO_FAST;Fast
!PREFERENCES_PREVDEMO_LABEL;Demosaicing method used for the preview at <100% zoom:
!PREFERENCES_PREVDEMO_SIDECAR;As in PP3
+!PREFERENCES_PROFILE_NONE;None
!PREFERENCES_PROPERTY;Property
!PREFERENCES_REMEMBERZOOMPAN;Remember zoom % and pan offset
!PREFERENCES_REMEMBERZOOMPAN_TOOLTIP;Remember the zoom % and pan offset of the current image when opening a new image.\n\nThis option only works in "Single Editor Tab Mode" and when "Demosaicing method used for the preview at <100% zoom" is set to "As in PP3".
@@ -1567,6 +1584,7 @@ TP_WBALANCE_TEMPERATURE;Temperatūra
!TP_ICM_INPUTEMBEDDED_TOOLTIP;Use color profile embedded in non-raw files.
!TP_ICM_INPUTNONE;No profile
!TP_ICM_INPUTNONE_TOOLTIP;Use no input color profile at all.\nUse only in special cases.
+!TP_ICM_PROFILEINTENT;Rendering Intent
!TP_ICM_SAVEREFERENCE_APPLYWB;Apply white balance
!TP_ICM_SAVEREFERENCE_APPLYWB_TOOLTIP;Generally, apply the white balance when saving images to create ICC profiles, and do not apply the white balance to create DCP profiles.
!TP_ICM_SAVEREFERENCE_TOOLTIP;Save the linear TIFF image before the input profile is applied. The result can be used for calibration purposes and generation of a camera profile.
@@ -1681,12 +1699,15 @@ TP_WBALANCE_TEMPERATURE;Temperatūra
!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL
!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b*
!TP_RETINEX_CONTEDIT_LH;Hue equalizer
+!TP_RETINEX_CONTEDIT_MAP;Mask 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_CURVEEDITOR_MAP;L=f(L)
+!TP_RETINEX_CURVEEDITOR_MAP_TOOLTIP;This curve can be applied alone or with a Gaussian mask or wavelet mask.\nBeware of artifacts!
!TP_RETINEX_FREEGAMMA;Free gamma
-!TP_RETINEX_GAIN;Gain
+!TP_RETINEX_GAIN;Contrast
!TP_RETINEX_GAIN_TOOLTIP;Acts on the restored image.\n\nThis is very different from the others settings. Used for black or white pixels, and to help balance the histogram.
!TP_RETINEX_GAMMA;Gamma
!TP_RETINEX_GAMMA_FREE;Free
@@ -1695,24 +1716,39 @@ TP_WBALANCE_TEMPERATURE;Temperatūra
!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_GRAD;Transmission gradient
+!TP_RETINEX_GRADS;Strength gradient
+!TP_RETINEX_GRADS_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Strength is reduced when iterations increase, and conversely.
+!TP_RETINEX_GRAD_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Variance and Threshold are reduced when iterations increase, and conversely.
!TP_RETINEX_HIGH;High
!TP_RETINEX_HIGHLIG;Highlight
!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_HSLSPACE_LIN;HSL-Linear
!TP_RETINEX_HSLSPACE_LOG;HSL-Logarithmic
+!TP_RETINEX_ITER;Iterations (Tone-mapping)
+!TP_RETINEX_ITER_TOOLTIP;Simulate a tone-mapping operator.\nHigh values increase the processing time.
!TP_RETINEX_LABEL;Retinex
!TP_RETINEX_LABSPACE;L*a*b*
!TP_RETINEX_LOW;Low
+!TP_RETINEX_MAP;Mask method
+!TP_RETINEX_MAP_CURV;Curve only
+!TP_RETINEX_MAP_GAUS;Gaussian mask
+!TP_RETINEX_MAP_MAPP;Sharp mask (wavelet partial)
+!TP_RETINEX_MAP_MAPT;Sharp mask (wavelet total)
+!TP_RETINEX_MAP_METHOD_TOOLTIP;Use the mask generated by the Gaussian function above to reduce halos and artifacts.\n\nCurve only: apply a diagonal contrast curve on the mask.\nBeware of artifacts!\n\nGaussian mask: generate and use a Gaussian blur of the original mask.\nQuick.\n\nSharp mask: generate and use a wavelet on the original mask.\nSlow.
+!TP_RETINEX_MAP_NONE;None
!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,\nHighlights = 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_NEIGHBOR;Radius
!TP_RETINEX_NEUTRAL;Reset
!TP_RETINEX_NEUTRAL_TIP;Reset all sliders and curves to their default values.
-!TP_RETINEX_OFFSET;Offset
+!TP_RETINEX_OFFSET;Brightness
+!TP_RETINEX_SCALES;Gaussian gradient
+!TP_RETINEX_SCALES_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Scale and Neighboring pixels are reduced when iterations increase, and conversely.
!TP_RETINEX_SETTINGS;Settings
!TP_RETINEX_SLOPE;Free gamma slope
!TP_RETINEX_STRENGTH;Strength
@@ -1724,8 +1760,15 @@ TP_WBALANCE_TEMPERATURE;Temperatūra
!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;Contrast
!TP_RETINEX_VARIANCE_TOOLTIP;Low variance increase local contrast and saturation, but can lead to artifacts.
+!TP_RETINEX_VIEW;Process (Preview)
+!TP_RETINEX_VIEW_MASK;Mask
+!TP_RETINEX_VIEW_METHOD_TOOLTIP;Standard - Normal display.\nMask - Displays the mask.\nUnsharp mask - Displays the image with a high radius unsharp mask.\nTransmission - Auto/Fixed - Displays the file transmission-map, before any action on contrast and brightness.\n\nAttention: the mask does not correspond to reality, but is amplified to make it more visible.
+!TP_RETINEX_VIEW_NONE;Standard
+!TP_RETINEX_VIEW_TRAN;Transmission - Auto
+!TP_RETINEX_VIEW_TRAN2;Transmission - Fixed
+!TP_RETINEX_VIEW_UNSHARP;Unsharp mask
!TP_RGBCURVES_BLUE;B
!TP_RGBCURVES_CHANNEL;Channel
!TP_RGBCURVES_GREEN;G
diff --git a/rtdata/languages/Magyar b/rtdata/languages/Magyar
index 84b23b8fb..86c58c8d9 100644
--- a/rtdata/languages/Magyar
+++ b/rtdata/languages/Magyar
@@ -518,7 +518,6 @@ PREFERENCES_CACHEMAXENTRIES;Gyorsítótárban tárolt képek max. száma
PREFERENCES_CACHEOPTS;Gyorsítótár beállítások
PREFERENCES_CACHETHUMBHEIGHT;Előnézeti kép maximális magassága
PREFERENCES_CLIPPINGIND;Kiégett és bebukott részek jelzése
-PREFERENCES_CMETRICINTENT;Intent
PREFERENCES_CUSTPROFBUILD;Egyedi profil készítő
PREFERENCES_CUSTPROFBUILDHINT;Executable (or script) file called when a new initial profile should be generated for an image.\nReceives command line params to allow a rules based .pp3 generation:\n[Path raw/JPG] [Path default profile] [f-no] [exposure in secs] [focal length in mm] [ISO] [Lens] [Camera]
PREFERENCES_CUSTPROFBUILDPATH;Indítóállomány útvonala
@@ -567,7 +566,6 @@ PREFERENCES_MENUGROUPPROFILEOPERATIONS;Profilműveletek csoportosítása
PREFERENCES_MENUGROUPRANK;Értékelés csoportosítása
PREFERENCES_MENUOPTIONS;Menübeállítások
PREFERENCES_METADATA;Metaadatok
-PREFERENCES_MONITORICC;Monitor ICC profilja
PREFERENCES_MULTITAB;Több szerkesztőfül
PREFERENCES_MULTITABDUALMON;Több fül mód második kijelzővel (ha elérhető)
PREFERENCES_OUTDIR;Kimeneti alapértelmezett könyvtár
@@ -1160,7 +1158,7 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés -
!HISTORY_MSG_364;W - Final - Contrast balance
!HISTORY_MSG_365;W - Final - Delta balance
!HISTORY_MSG_366;W - Residual - Compression gamma
-!HISTORY_MSG_367;W - ES - Local contrast curve
+!HISTORY_MSG_367;W - Final - 'After' contrast curve
!HISTORY_MSG_368;W - Final - Contrast balance
!HISTORY_MSG_369;W - Final - Balance method
!HISTORY_MSG_370;W - Final - Local contrast curve
@@ -1201,11 +1199,11 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés -
!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_408;Retinex - Radius
+!HISTORY_MSG_409;Retinex - Contrast
+!HISTORY_MSG_410;Retinex - Brightness
!HISTORY_MSG_411;Retinex - Strength
-!HISTORY_MSG_412;Retinex - Scales
+!HISTORY_MSG_412;Retinex - Gaussian Gradient
!HISTORY_MSG_413;Retinex - Variance
!HISTORY_MSG_414;Retinex - Histogram - Lab
!HISTORY_MSG_415;Retinex - Transmission
@@ -1220,6 +1218,19 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés -
!HISTORY_MSG_424;Retinex - HL threshold
!HISTORY_MSG_425;Retinex - Log base
!HISTORY_MSG_426;Retinex - Hue equalizer
+!HISTORY_MSG_427;Output rendering intent
+!HISTORY_MSG_428;Monitor rendering intent
+!HISTORY_MSG_429;Retinex - Iterations
+!HISTORY_MSG_430;Retinex - Transmission Gradient
+!HISTORY_MSG_431;Retinex - Strength Gradient
+!HISTORY_MSG_432;Retinex - M - Highlights
+!HISTORY_MSG_433;Retinex - M - Highlights TW
+!HISTORY_MSG_434;Retinex - M - Shadows
+!HISTORY_MSG_435;Retinex - M - Shadows TW
+!HISTORY_MSG_436;Retinex - M - Radius
+!HISTORY_MSG_437;Retinex - M - Method
+!HISTORY_MSG_438;Retinex - M - Equalizer
+!HISTORY_MSG_439;Retinex - Preview
!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
@@ -1235,6 +1246,8 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés -
!MAIN_TOOLTIP_BACKCOLOR0;Background color of the preview: Theme-based\nShortcut: 9
!MAIN_TOOLTIP_BACKCOLOR1;Background color of the preview: Black\nShortcut: 9
!MAIN_TOOLTIP_BACKCOLOR2;Background color of the preview: White\nShortcut: 9
+!MONITOR_PROFILE_SYSTEM;System default
+!MONITOR_SOFTPROOF;Soft-proof
!NAVIGATOR_B;B:
!NAVIGATOR_G;G:
!NAVIGATOR_H;H:
@@ -1259,6 +1272,7 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés -
!PARTIALPASTE_PCVIGNETTE;Vignette filter
!PARTIALPASTE_PREPROCESS_DEADPIXFILT;Dead pixel filter
!PARTIALPASTE_PREPROCESS_HOTPIXFILT;Hot pixel filter
+!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
!PARTIALPASTE_RAW_LMMSEITERATIONS;LMMSE enhancement steps
!PARTIALPASTE_RETINEX;Retinex
!PARTIALPASTE_WAVELETGROUP;Wavelet Levels
@@ -1326,6 +1340,8 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés -
!PREFERENCES_MED;Medium (Tile/2)
!PREFERENCES_MENUGROUPEXTPROGS;Group "Open with"
!PREFERENCES_MIN;Mini (100x115)
+!PREFERENCES_MONINTENT;Default monitor intent
+!PREFERENCES_MONPROFILE;Default monitor profile
!PREFERENCES_NAVGUIDEBRUSH;Navigator guide color
!PREFERENCES_NAVIGATIONFRAME;Navigation
!PREFERENCES_NOISE;Noise Reduction
@@ -1336,6 +1352,7 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés -
!PREFERENCES_PREVDEMO_FAST;Fast
!PREFERENCES_PREVDEMO_LABEL;Demosaicing method used for the preview at <100% zoom:
!PREFERENCES_PREVDEMO_SIDECAR;As in PP3
+!PREFERENCES_PROFILE_NONE;None
!PREFERENCES_REMEMBERZOOMPAN;Remember zoom % and pan offset
!PREFERENCES_REMEMBERZOOMPAN_TOOLTIP;Remember the zoom % and pan offset of the current image when opening a new image.\n\nThis option only works in "Single Editor Tab Mode" and when "Demosaicing method used for the preview at <100% zoom" is set to "As in PP3".
!PREFERENCES_RGBDTL_LABEL;Max number of threads for Noise Reduction and Wavelet Levels
@@ -1664,6 +1681,7 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés -
!TP_ICM_DCPILLUMINANT;Illuminant
!TP_ICM_DCPILLUMINANT_INTERPOLATED;Interpolated
!TP_ICM_DCPILLUMINANT_TOOLTIP;Select which embedded DCP illuminant to employ. Default is "interpolated" which is a mix between the two based on white balance. The setting is only enabled if a Dual-Illuminant DCP with interpolation support is selected.
+!TP_ICM_PROFILEINTENT;Rendering Intent
!TP_ICM_SAVEREFERENCE_APPLYWB;Apply white balance
!TP_ICM_SAVEREFERENCE_APPLYWB_TOOLTIP;Generally, apply the white balance when saving images to create ICC profiles, and do not apply the white balance to create DCP profiles.
!TP_ICM_SAVEREFERENCE_TOOLTIP;Save the linear TIFF image before the input profile is applied. The result can be used for calibration purposes and generation of a camera profile.
@@ -1743,12 +1761,15 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés -
!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL
!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b*
!TP_RETINEX_CONTEDIT_LH;Hue equalizer
+!TP_RETINEX_CONTEDIT_MAP;Mask 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_CURVEEDITOR_MAP;L=f(L)
+!TP_RETINEX_CURVEEDITOR_MAP_TOOLTIP;This curve can be applied alone or with a Gaussian mask or wavelet mask.\nBeware of artifacts!
!TP_RETINEX_FREEGAMMA;Free gamma
-!TP_RETINEX_GAIN;Gain
+!TP_RETINEX_GAIN;Contrast
!TP_RETINEX_GAIN_TOOLTIP;Acts on the restored image.\n\nThis is very different from the others settings. Used for black or white pixels, and to help balance the histogram.
!TP_RETINEX_GAMMA;Gamma
!TP_RETINEX_GAMMA_FREE;Free
@@ -1757,24 +1778,39 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés -
!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_GRAD;Transmission gradient
+!TP_RETINEX_GRADS;Strength gradient
+!TP_RETINEX_GRADS_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Strength is reduced when iterations increase, and conversely.
+!TP_RETINEX_GRAD_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Variance and Threshold are reduced when iterations increase, and conversely.
!TP_RETINEX_HIGH;High
!TP_RETINEX_HIGHLIG;Highlight
!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_HSLSPACE_LIN;HSL-Linear
!TP_RETINEX_HSLSPACE_LOG;HSL-Logarithmic
+!TP_RETINEX_ITER;Iterations (Tone-mapping)
+!TP_RETINEX_ITER_TOOLTIP;Simulate a tone-mapping operator.\nHigh values increase the processing time.
!TP_RETINEX_LABEL;Retinex
!TP_RETINEX_LABSPACE;L*a*b*
!TP_RETINEX_LOW;Low
+!TP_RETINEX_MAP;Mask method
+!TP_RETINEX_MAP_CURV;Curve only
+!TP_RETINEX_MAP_GAUS;Gaussian mask
+!TP_RETINEX_MAP_MAPP;Sharp mask (wavelet partial)
+!TP_RETINEX_MAP_MAPT;Sharp mask (wavelet total)
+!TP_RETINEX_MAP_METHOD_TOOLTIP;Use the mask generated by the Gaussian function above to reduce halos and artifacts.\n\nCurve only: apply a diagonal contrast curve on the mask.\nBeware of artifacts!\n\nGaussian mask: generate and use a Gaussian blur of the original mask.\nQuick.\n\nSharp mask: generate and use a wavelet on the original mask.\nSlow.
+!TP_RETINEX_MAP_NONE;None
!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,\nHighlights = 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_NEIGHBOR;Radius
!TP_RETINEX_NEUTRAL;Reset
!TP_RETINEX_NEUTRAL_TIP;Reset all sliders and curves to their default values.
-!TP_RETINEX_OFFSET;Offset
+!TP_RETINEX_OFFSET;Brightness
+!TP_RETINEX_SCALES;Gaussian gradient
+!TP_RETINEX_SCALES_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Scale and Neighboring pixels are reduced when iterations increase, and conversely.
!TP_RETINEX_SETTINGS;Settings
!TP_RETINEX_SLOPE;Free gamma slope
!TP_RETINEX_STRENGTH;Strength
@@ -1786,8 +1822,15 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés -
!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;Contrast
!TP_RETINEX_VARIANCE_TOOLTIP;Low variance increase local contrast and saturation, but can lead to artifacts.
+!TP_RETINEX_VIEW;Process (Preview)
+!TP_RETINEX_VIEW_MASK;Mask
+!TP_RETINEX_VIEW_METHOD_TOOLTIP;Standard - Normal display.\nMask - Displays the mask.\nUnsharp mask - Displays the image with a high radius unsharp mask.\nTransmission - Auto/Fixed - Displays the file transmission-map, before any action on contrast and brightness.\n\nAttention: the mask does not correspond to reality, but is amplified to make it more visible.
+!TP_RETINEX_VIEW_NONE;Standard
+!TP_RETINEX_VIEW_TRAN;Transmission - Auto
+!TP_RETINEX_VIEW_TRAN2;Transmission - Fixed
+!TP_RETINEX_VIEW_UNSHARP;Unsharp mask
!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
diff --git a/rtdata/languages/Nederlands b/rtdata/languages/Nederlands
index 4ff8bc482..46f443942 100644
--- a/rtdata/languages/Nederlands
+++ b/rtdata/languages/Nederlands
@@ -893,7 +893,6 @@ PREFERENCES_CLIPPINGIND;Indicatie over-/onderbelichting
PREFERENCES_CLUTSCACHE;HaldCLUT cache
PREFERENCES_CLUTSCACHE_LABEL;Maximum aantal cached Cluts
PREFERENCES_CLUTSDIR;HaldCLUT map
-PREFERENCES_CMETRICINTENT;Bedoelde colorimetrie
PREFERENCES_CURVEBBOXPOS;Positie copy/paste knoppen bij Curves
PREFERENCES_CURVEBBOXPOS_ABOVE;Boven
PREFERENCES_CURVEBBOXPOS_BELOW;Beneden
@@ -988,7 +987,6 @@ PREFERENCES_MENUGROUPRANK;Groepeer markering
PREFERENCES_MENUOPTIONS;Menu-opties
PREFERENCES_METADATA;Metadata
PREFERENCES_MIN;Mini (100x115)
-PREFERENCES_MONITORICC;Monitorprofiel
PREFERENCES_MULTITAB;Multi-tab: elke foto opent in nieuw tabvenster
PREFERENCES_MULTITABDUALMON;Multi-tab, indien beschikbaar op tweede monitor
PREFERENCES_NAVGUIDEBRUSH;Navigator randkleur
@@ -1854,7 +1852,6 @@ TP_WAVELET_LEVTHRE;Niveau 4
TP_WAVELET_LEVTWO;Niveau 3
TP_WAVELET_LEVZERO;Niveau 1
TP_WAVELET_LINKEDG;Koppel met Randscherpte Waarde
-TP_WAVELET_LIPST_TOOLTIP;Dit algoritme gebruikt 'Lipschitz regelmatigheid' om de kwaliteit van rand detectie te vergroten. Dit geeft wel een langere verwerkingstijd en meer geheugengebruik.
TP_WAVELET_LOWLIGHT;Schaduwen: Luminantie Reeks (0..100)
TP_WAVELET_MEDGREINF;Eerste Niveau
TP_WAVELET_MEDI;Verminder artefacten in blauwe lucht
@@ -1967,21 +1964,66 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: -
!FILEBROWSER_SHOWORIGINALHINT;Show only original images.\n\nWhen several images exist with the same filename but different extensions, the one considered original is the one whose extension is nearest the top of the parsed extensions list in Preferences > File Browser > Parsed Extensions.
!HISTORY_MSG_166;Exposure - Reset
-!HISTORY_MSG_412;Retinex - Scales
+!HISTORY_MSG_412;Retinex - Gaussian Gradient
!HISTORY_MSG_416;Retinex
+!HISTORY_MSG_427;Output rendering intent
+!HISTORY_MSG_428;Monitor rendering intent
+!HISTORY_MSG_429;Retinex - Iterations
+!HISTORY_MSG_430;Retinex - Transmission Gradient
+!HISTORY_MSG_431;Retinex - Strength Gradient
+!HISTORY_MSG_432;Retinex - M - Highlights
+!HISTORY_MSG_433;Retinex - M - Highlights TW
+!HISTORY_MSG_434;Retinex - M - Shadows
+!HISTORY_MSG_435;Retinex - M - Shadows TW
+!HISTORY_MSG_436;Retinex - M - Radius
+!HISTORY_MSG_437;Retinex - M - Method
+!HISTORY_MSG_438;Retinex - M - Equalizer
+!HISTORY_MSG_439;Retinex - Preview
!MAIN_BUTTON_SENDTOEDITOR;Edit image in external editor
+!MONITOR_PROFILE_SYSTEM;System default
+!MONITOR_SOFTPROOF;Soft-proof
+!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
+!PREFERENCES_MONINTENT;Default monitor intent
+!PREFERENCES_MONPROFILE;Default monitor profile
!PREFERENCES_PARSEDEXTDOWNHINT;Move selected extension down in the list.
!PREFERENCES_PARSEDEXTUPHINT;Move selected extension up in the list.
+!PREFERENCES_PROFILE_NONE;None
!TP_COLORTONING_STR;Strength
!TP_DIRPYRDENOISE_CUR;Curve
!TP_DIRPYRDENOISE_LAB;L*a*b*
!TP_DIRPYRDENOISE_PASSES;Median iterations
+!TP_ICM_PROFILEINTENT;Rendering Intent
!TP_NEUTRAL;Reset
+!TP_RETINEX_CONTEDIT_MAP;Mask equalizer
+!TP_RETINEX_CURVEEDITOR_MAP;L=f(L)
+!TP_RETINEX_CURVEEDITOR_MAP_TOOLTIP;This curve can be applied alone or with a Gaussian mask or wavelet mask.\nBeware of artifacts!
!TP_RETINEX_FREEGAMMA;Free gamma
!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_GRAD;Transmission gradient
+!TP_RETINEX_GRADS;Strength gradient
+!TP_RETINEX_GRADS_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Strength is reduced when iterations increase, and conversely.
+!TP_RETINEX_GRAD_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Variance and Threshold are reduced when iterations increase, and conversely.
+!TP_RETINEX_ITER;Iterations (Tone-mapping)
+!TP_RETINEX_ITER_TOOLTIP;Simulate a tone-mapping operator.\nHigh values increase the processing time.
+!TP_RETINEX_MAP;Mask method
+!TP_RETINEX_MAP_CURV;Curve only
+!TP_RETINEX_MAP_GAUS;Gaussian mask
+!TP_RETINEX_MAP_MAPP;Sharp mask (wavelet partial)
+!TP_RETINEX_MAP_MAPT;Sharp mask (wavelet total)
+!TP_RETINEX_MAP_METHOD_TOOLTIP;Use the mask generated by the Gaussian function above to reduce halos and artifacts.\n\nCurve only: apply a diagonal contrast curve on the mask.\nBeware of artifacts!\n\nGaussian mask: generate and use a Gaussian blur of the original mask.\nQuick.\n\nSharp mask: generate and use a wavelet on the original mask.\nSlow.
+!TP_RETINEX_MAP_NONE;None
!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_SCALES;Gaussian gradient
+!TP_RETINEX_SCALES_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Scale and Neighboring pixels are reduced when iterations increase, and conversely.
!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_VIEW;Process (Preview)
+!TP_RETINEX_VIEW_MASK;Mask
+!TP_RETINEX_VIEW_METHOD_TOOLTIP;Standard - Normal display.\nMask - Displays the mask.\nUnsharp mask - Displays the image with a high radius unsharp mask.\nTransmission - Auto/Fixed - Displays the file transmission-map, before any action on contrast and brightness.\n\nAttention: the mask does not correspond to reality, but is amplified to make it more visible.
+!TP_RETINEX_VIEW_NONE;Standard
+!TP_RETINEX_VIEW_TRAN;Transmission - Auto
+!TP_RETINEX_VIEW_TRAN2;Transmission - Fixed
+!TP_RETINEX_VIEW_UNSHARP;Unsharp mask
!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_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_EDGEDETECTTHR_TOOLTIP;This adjuster lets you target edge detection for example to avoid applying edge sharpness to fine details, such as noise in the sky.
diff --git a/rtdata/languages/Norsk BM b/rtdata/languages/Norsk BM
index e27fc6897..8ce590aaf 100644
--- a/rtdata/languages/Norsk BM
+++ b/rtdata/languages/Norsk BM
@@ -268,7 +268,6 @@ PREFERENCES_CACHEMAXENTRIES;Maksimalt antall cache oppføringer
PREFERENCES_CACHEOPTS;Cache innstillinger
PREFERENCES_CACHETHUMBHEIGHT;Maksimal Thumbnail Høyde
PREFERENCES_CLIPPINGIND;Markerings-indikasjon
-PREFERENCES_CMETRICINTENT;Kolorimetrisk Inntrykk
PREFERENCES_DATEFORMAT;Datoformat
PREFERENCES_DATEFORMATHINT;Du kan bruke følgende formattering:\n%y : år\n%m : måned\n%d : dag\n\nF. eks. er ungarsk datoformat:\n%y/%m/%d
PREFERENCES_DEFAULTLANG;Programspråk
@@ -292,7 +291,6 @@ PREFERENCES_INTENT_ABSOLUTE;Total kolorimetri
PREFERENCES_INTENT_PERCEPTUAL;Oppfattet kolorimetri
PREFERENCES_INTENT_RELATIVE;Relativ kolorimetri
PREFERENCES_INTENT_SATURATION;Metning
-PREFERENCES_MONITORICC;Skjermprofil
PREFERENCES_OUTDIR;Utmappe
PREFERENCES_OUTDIRFOLDER;Lagre til folder
PREFERENCES_OUTDIRFOLDERHINT;Send lagrede bilder til valgt folder
@@ -878,7 +876,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!HISTORY_MSG_364;W - Final - Contrast balance
!HISTORY_MSG_365;W - Final - Delta balance
!HISTORY_MSG_366;W - Residual - Compression gamma
-!HISTORY_MSG_367;W - ES - Local contrast curve
+!HISTORY_MSG_367;W - Final - 'After' contrast curve
!HISTORY_MSG_368;W - Final - Contrast balance
!HISTORY_MSG_369;W - Final - Balance method
!HISTORY_MSG_370;W - Final - Local contrast curve
@@ -919,11 +917,11 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!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_408;Retinex - Radius
+!HISTORY_MSG_409;Retinex - Contrast
+!HISTORY_MSG_410;Retinex - Brightness
!HISTORY_MSG_411;Retinex - Strength
-!HISTORY_MSG_412;Retinex - Scales
+!HISTORY_MSG_412;Retinex - Gaussian Gradient
!HISTORY_MSG_413;Retinex - Variance
!HISTORY_MSG_414;Retinex - Histogram - Lab
!HISTORY_MSG_415;Retinex - Transmission
@@ -938,6 +936,19 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!HISTORY_MSG_424;Retinex - HL threshold
!HISTORY_MSG_425;Retinex - Log base
!HISTORY_MSG_426;Retinex - Hue equalizer
+!HISTORY_MSG_427;Output rendering intent
+!HISTORY_MSG_428;Monitor rendering intent
+!HISTORY_MSG_429;Retinex - Iterations
+!HISTORY_MSG_430;Retinex - Transmission Gradient
+!HISTORY_MSG_431;Retinex - Strength Gradient
+!HISTORY_MSG_432;Retinex - M - Highlights
+!HISTORY_MSG_433;Retinex - M - Highlights TW
+!HISTORY_MSG_434;Retinex - M - Shadows
+!HISTORY_MSG_435;Retinex - M - Shadows TW
+!HISTORY_MSG_436;Retinex - M - Radius
+!HISTORY_MSG_437;Retinex - M - Method
+!HISTORY_MSG_438;Retinex - M - Equalizer
+!HISTORY_MSG_439;Retinex - Preview
!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
@@ -984,6 +995,8 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!MAIN_TOOLTIP_SHOWHIDETP1;Show/Hide the top panel.\nShortcut: Shift-l
!MAIN_TOOLTIP_THRESHOLD;Threshold
!MAIN_TOOLTIP_TOGGLE;Toggle the Before/After view.\nShortcut: Shift-b
+!MONITOR_PROFILE_SYSTEM;System default
+!MONITOR_SOFTPROOF;Soft-proof
!NAVIGATOR_B;B:
!NAVIGATOR_G;G:
!NAVIGATOR_H;H:
@@ -1029,6 +1042,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!PARTIALPASTE_PREPROCESS_GREENEQUIL;Green equilibration
!PARTIALPASTE_PREPROCESS_HOTPIXFILT;Hot pixel filter
!PARTIALPASTE_PREPROCESS_LINEDENOISE;Line noise filter
+!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
!PARTIALPASTE_RAWCACORR_AUTO;CA auto-correction
!PARTIALPASTE_RAWCACORR_CABLUE;CA blue
!PARTIALPASTE_RAWCACORR_CARED;CA red
@@ -1140,6 +1154,8 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!PREFERENCES_MENUOPTIONS;Context Menu Options
!PREFERENCES_METADATA;Metadata
!PREFERENCES_MIN;Mini (100x115)
+!PREFERENCES_MONINTENT;Default monitor intent
+!PREFERENCES_MONPROFILE;Default monitor profile
!PREFERENCES_MULTITAB;Multiple Editor Tabs Mode
!PREFERENCES_MULTITABDUALMON;Multiple Editor Tabs In Own Window Mode
!PREFERENCES_NAVGUIDEBRUSH;Navigator guide color
@@ -1155,6 +1171,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!PREFERENCES_PREVDEMO_FAST;Fast
!PREFERENCES_PREVDEMO_LABEL;Demosaicing method used for the preview at <100% zoom:
!PREFERENCES_PREVDEMO_SIDECAR;As in PP3
+!PREFERENCES_PROFILE_NONE;None
!PREFERENCES_PROPERTY;Property
!PREFERENCES_REMEMBERZOOMPAN;Remember zoom % and pan offset
!PREFERENCES_REMEMBERZOOMPAN_TOOLTIP;Remember the zoom % and pan offset of the current image when opening a new image.\n\nThis option only works in "Single Editor Tab Mode" and when "Demosaicing method used for the preview at <100% zoom" is set to "As in PP3".
@@ -1566,6 +1583,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!TP_ICM_INPUTEMBEDDED_TOOLTIP;Use color profile embedded in non-raw files.
!TP_ICM_INPUTNONE;No profile
!TP_ICM_INPUTNONE_TOOLTIP;Use no input color profile at all.\nUse only in special cases.
+!TP_ICM_PROFILEINTENT;Rendering Intent
!TP_ICM_SAVEREFERENCE_APPLYWB;Apply white balance
!TP_ICM_SAVEREFERENCE_APPLYWB_TOOLTIP;Generally, apply the white balance when saving images to create ICC profiles, and do not apply the white balance to create DCP profiles.
!TP_ICM_SAVEREFERENCE_TOOLTIP;Save the linear TIFF image before the input profile is applied. The result can be used for calibration purposes and generation of a camera profile.
@@ -1680,12 +1698,15 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL
!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b*
!TP_RETINEX_CONTEDIT_LH;Hue equalizer
+!TP_RETINEX_CONTEDIT_MAP;Mask 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_CURVEEDITOR_MAP;L=f(L)
+!TP_RETINEX_CURVEEDITOR_MAP_TOOLTIP;This curve can be applied alone or with a Gaussian mask or wavelet mask.\nBeware of artifacts!
!TP_RETINEX_FREEGAMMA;Free gamma
-!TP_RETINEX_GAIN;Gain
+!TP_RETINEX_GAIN;Contrast
!TP_RETINEX_GAIN_TOOLTIP;Acts on the restored image.\n\nThis is very different from the others settings. Used for black or white pixels, and to help balance the histogram.
!TP_RETINEX_GAMMA;Gamma
!TP_RETINEX_GAMMA_FREE;Free
@@ -1694,24 +1715,39 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!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_GRAD;Transmission gradient
+!TP_RETINEX_GRADS;Strength gradient
+!TP_RETINEX_GRADS_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Strength is reduced when iterations increase, and conversely.
+!TP_RETINEX_GRAD_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Variance and Threshold are reduced when iterations increase, and conversely.
!TP_RETINEX_HIGH;High
!TP_RETINEX_HIGHLIG;Highlight
!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_HSLSPACE_LIN;HSL-Linear
!TP_RETINEX_HSLSPACE_LOG;HSL-Logarithmic
+!TP_RETINEX_ITER;Iterations (Tone-mapping)
+!TP_RETINEX_ITER_TOOLTIP;Simulate a tone-mapping operator.\nHigh values increase the processing time.
!TP_RETINEX_LABEL;Retinex
!TP_RETINEX_LABSPACE;L*a*b*
!TP_RETINEX_LOW;Low
+!TP_RETINEX_MAP;Mask method
+!TP_RETINEX_MAP_CURV;Curve only
+!TP_RETINEX_MAP_GAUS;Gaussian mask
+!TP_RETINEX_MAP_MAPP;Sharp mask (wavelet partial)
+!TP_RETINEX_MAP_MAPT;Sharp mask (wavelet total)
+!TP_RETINEX_MAP_METHOD_TOOLTIP;Use the mask generated by the Gaussian function above to reduce halos and artifacts.\n\nCurve only: apply a diagonal contrast curve on the mask.\nBeware of artifacts!\n\nGaussian mask: generate and use a Gaussian blur of the original mask.\nQuick.\n\nSharp mask: generate and use a wavelet on the original mask.\nSlow.
+!TP_RETINEX_MAP_NONE;None
!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,\nHighlights = 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_NEIGHBOR;Radius
!TP_RETINEX_NEUTRAL;Reset
!TP_RETINEX_NEUTRAL_TIP;Reset all sliders and curves to their default values.
-!TP_RETINEX_OFFSET;Offset
+!TP_RETINEX_OFFSET;Brightness
+!TP_RETINEX_SCALES;Gaussian gradient
+!TP_RETINEX_SCALES_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Scale and Neighboring pixels are reduced when iterations increase, and conversely.
!TP_RETINEX_SETTINGS;Settings
!TP_RETINEX_SLOPE;Free gamma slope
!TP_RETINEX_STRENGTH;Strength
@@ -1723,8 +1759,15 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!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;Contrast
!TP_RETINEX_VARIANCE_TOOLTIP;Low variance increase local contrast and saturation, but can lead to artifacts.
+!TP_RETINEX_VIEW;Process (Preview)
+!TP_RETINEX_VIEW_MASK;Mask
+!TP_RETINEX_VIEW_METHOD_TOOLTIP;Standard - Normal display.\nMask - Displays the mask.\nUnsharp mask - Displays the image with a high radius unsharp mask.\nTransmission - Auto/Fixed - Displays the file transmission-map, before any action on contrast and brightness.\n\nAttention: the mask does not correspond to reality, but is amplified to make it more visible.
+!TP_RETINEX_VIEW_NONE;Standard
+!TP_RETINEX_VIEW_TRAN;Transmission - Auto
+!TP_RETINEX_VIEW_TRAN2;Transmission - Fixed
+!TP_RETINEX_VIEW_UNSHARP;Unsharp mask
!TP_RGBCURVES_BLUE;B
!TP_RGBCURVES_CHANNEL;Channel
!TP_RGBCURVES_GREEN;G
diff --git a/rtdata/languages/Polish b/rtdata/languages/Polish
index cc0c436e0..d31cb5363 100644
--- a/rtdata/languages/Polish
+++ b/rtdata/languages/Polish
@@ -732,7 +732,6 @@ PREFERENCES_CIEART_LABEL;Użyj precyzję zmiennoprzecinkową zamiast podwójną.
PREFERENCES_CIEART_TOOLTIP;Gdy umożliwione, kalkulacje CIECAM02 są wykonywane w notacji zmiennoprzecinkowej o pojedyńczej precyzji zamiast podwójnej. Skraca to czas egzekucji kosztem nieistotnej zmiany w jakości.
PREFERENCES_CLIPPINGIND;Pokazywanie obciętych prześwietleń/cieni
PREFERENCES_CLUTSDIR;Folder obrazów HaldCLUT
-PREFERENCES_CMETRICINTENT;Sposób odwzorowania barw
PREFERENCES_CUSTPROFBUILD;Zewnętrzny kreator profilów przetwarzania
PREFERENCES_CUSTPROFBUILDHINT;Plik wykonywalny (lub skrypt) uruchamiany kiedy trzeba wygenerować profil przetwarzania dla zdjęcia.\n\nScieżka pliku nośnego (w stylu *.ini czyli sekcje i klucze/parametry) występuje jako parametr wiersza poleceń. Plik ten zawiera przeróżne parametry oraz dane Exif dzięki którym odpowiedni program bądź skrypt może wygenerować plik PP3 według reguł.\n\nUWAGA: Twoją odpowiedzialnością jest prawidłowe użycie cudzysłowiów w przypadku ścieżek zawierających spacje i znaki specjalne.
PREFERENCES_CUSTPROFBUILDKEYFORMAT;Rodzaj kluczy
@@ -803,7 +802,6 @@ PREFERENCES_MENUGROUPPROFILEOPERATIONS;Grupuj operacje profili przetwarzania
PREFERENCES_MENUGROUPRANK;Grupuj operacje oceny
PREFERENCES_MENUOPTIONS;Opcje menu
PREFERENCES_METADATA;Metadane
-PREFERENCES_MONITORICC;Profil monitora
PREFERENCES_MULTITAB;Tryb wielu zakładek
PREFERENCES_MULTITABDUALMON;Tryb wielu zakładek (na drugim monitorze jeśli dostępny)
PREFERENCES_NAVGUIDEBRUSH;Kolor ramki Nawigatora
@@ -1591,7 +1589,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: -
!HISTORY_MSG_364;W - Final - Contrast balance
!HISTORY_MSG_365;W - Final - Delta balance
!HISTORY_MSG_366;W - Residual - Compression gamma
-!HISTORY_MSG_367;W - ES - Local contrast curve
+!HISTORY_MSG_367;W - Final - 'After' contrast curve
!HISTORY_MSG_368;W - Final - Contrast balance
!HISTORY_MSG_369;W - Final - Balance method
!HISTORY_MSG_370;W - Final - Local contrast curve
@@ -1632,11 +1630,11 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: -
!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_408;Retinex - Radius
+!HISTORY_MSG_409;Retinex - Contrast
+!HISTORY_MSG_410;Retinex - Brightness
!HISTORY_MSG_411;Retinex - Strength
-!HISTORY_MSG_412;Retinex - Scales
+!HISTORY_MSG_412;Retinex - Gaussian Gradient
!HISTORY_MSG_413;Retinex - Variance
!HISTORY_MSG_414;Retinex - Histogram - Lab
!HISTORY_MSG_415;Retinex - Transmission
@@ -1651,11 +1649,27 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: -
!HISTORY_MSG_424;Retinex - HL threshold
!HISTORY_MSG_425;Retinex - Log base
!HISTORY_MSG_426;Retinex - Hue equalizer
+!HISTORY_MSG_427;Output rendering intent
+!HISTORY_MSG_428;Monitor rendering intent
+!HISTORY_MSG_429;Retinex - Iterations
+!HISTORY_MSG_430;Retinex - Transmission Gradient
+!HISTORY_MSG_431;Retinex - Strength Gradient
+!HISTORY_MSG_432;Retinex - M - Highlights
+!HISTORY_MSG_433;Retinex - M - Highlights TW
+!HISTORY_MSG_434;Retinex - M - Shadows
+!HISTORY_MSG_435;Retinex - M - Shadows TW
+!HISTORY_MSG_436;Retinex - M - Radius
+!HISTORY_MSG_437;Retinex - M - Method
+!HISTORY_MSG_438;Retinex - M - Equalizer
+!HISTORY_MSG_439;Retinex - Preview
!MAIN_BUTTON_SENDTOEDITOR;Edit image in external editor
!MAIN_TAB_INSPECT; Inspect
!MAIN_TAB_WAVELET;Wavelet
!MAIN_TAB_WAVELET_TOOLTIP;Shortcut: Alt-w
+!MONITOR_PROFILE_SYSTEM;System default
+!MONITOR_SOFTPROOF;Soft-proof
!PARTIALPASTE_EQUALIZER;Wavelet levels
+!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
!PARTIALPASTE_RETINEX;Retinex
!PARTIALPASTE_WAVELETGROUP;Wavelet Levels
!PREFERENCES_AUTLISLOW;Low
@@ -1691,6 +1705,8 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: -
!PREFERENCES_MAXRECENTFOLDERS;Maximum number of recent folders
!PREFERENCES_MED;Medium (Tile/2)
!PREFERENCES_MIN;Mini (100x115)
+!PREFERENCES_MONINTENT;Default monitor intent
+!PREFERENCES_MONPROFILE;Default monitor profile
!PREFERENCES_NAVIGATIONFRAME;Navigation
!PREFERENCES_NOISE;Noise Reduction
!PREFERENCES_OVERLAY_FILENAMES_FILMSTRIP;Overlay filenames on thumbnails in the editor pannel
@@ -1700,6 +1716,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: -
!PREFERENCES_PREVDEMO_FAST;Fast
!PREFERENCES_PREVDEMO_LABEL;Demosaicing method used for the preview at <100% zoom:
!PREFERENCES_PREVDEMO_SIDECAR;As in PP3
+!PREFERENCES_PROFILE_NONE;None
!PREFERENCES_REMEMBERZOOMPAN;Remember zoom % and pan offset
!PREFERENCES_REMEMBERZOOMPAN_TOOLTIP;Remember the zoom % and pan offset of the current image when opening a new image.\n\nThis option only works in "Single Editor Tab Mode" and when "Demosaicing method used for the preview at <100% zoom" is set to "As in PP3".
!PREFERENCES_SERIALIZE_TIFF_READ;Tiff Read Settings
@@ -1760,6 +1777,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: -
!TP_ICM_APPLYHUESATMAP_TOOLTIP;Employ the embedded DCP base table (HueSatMap). The setting is only enabled if the selected DCP has one.
!TP_ICM_APPLYLOOKTABLE;Look table
!TP_ICM_APPLYLOOKTABLE_TOOLTIP;Employ the embedded DCP look table. The setting is only enabled if the selected DCP has one.
+!TP_ICM_PROFILEINTENT;Rendering Intent
!TP_ICM_SAVEREFERENCE_APPLYWB;Apply white balance
!TP_ICM_SAVEREFERENCE_APPLYWB_TOOLTIP;Generally, apply the white balance when saving images to create ICC profiles, and do not apply the white balance to create DCP profiles.
!TP_NEUTRAL;Reset
@@ -1770,12 +1788,15 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: -
!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL
!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b*
!TP_RETINEX_CONTEDIT_LH;Hue equalizer
+!TP_RETINEX_CONTEDIT_MAP;Mask 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_CURVEEDITOR_MAP;L=f(L)
+!TP_RETINEX_CURVEEDITOR_MAP_TOOLTIP;This curve can be applied alone or with a Gaussian mask or wavelet mask.\nBeware of artifacts!
!TP_RETINEX_FREEGAMMA;Free gamma
-!TP_RETINEX_GAIN;Gain
+!TP_RETINEX_GAIN;Contrast
!TP_RETINEX_GAIN_TOOLTIP;Acts on the restored image.\n\nThis is very different from the others settings. Used for black or white pixels, and to help balance the histogram.
!TP_RETINEX_GAMMA;Gamma
!TP_RETINEX_GAMMA_FREE;Free
@@ -1784,24 +1805,39 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: -
!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_GRAD;Transmission gradient
+!TP_RETINEX_GRADS;Strength gradient
+!TP_RETINEX_GRADS_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Strength is reduced when iterations increase, and conversely.
+!TP_RETINEX_GRAD_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Variance and Threshold are reduced when iterations increase, and conversely.
!TP_RETINEX_HIGH;High
!TP_RETINEX_HIGHLIG;Highlight
!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_HSLSPACE_LIN;HSL-Linear
!TP_RETINEX_HSLSPACE_LOG;HSL-Logarithmic
+!TP_RETINEX_ITER;Iterations (Tone-mapping)
+!TP_RETINEX_ITER_TOOLTIP;Simulate a tone-mapping operator.\nHigh values increase the processing time.
!TP_RETINEX_LABEL;Retinex
!TP_RETINEX_LABSPACE;L*a*b*
!TP_RETINEX_LOW;Low
+!TP_RETINEX_MAP;Mask method
+!TP_RETINEX_MAP_CURV;Curve only
+!TP_RETINEX_MAP_GAUS;Gaussian mask
+!TP_RETINEX_MAP_MAPP;Sharp mask (wavelet partial)
+!TP_RETINEX_MAP_MAPT;Sharp mask (wavelet total)
+!TP_RETINEX_MAP_METHOD_TOOLTIP;Use the mask generated by the Gaussian function above to reduce halos and artifacts.\n\nCurve only: apply a diagonal contrast curve on the mask.\nBeware of artifacts!\n\nGaussian mask: generate and use a Gaussian blur of the original mask.\nQuick.\n\nSharp mask: generate and use a wavelet on the original mask.\nSlow.
+!TP_RETINEX_MAP_NONE;None
!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,\nHighlights = 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_NEIGHBOR;Radius
!TP_RETINEX_NEUTRAL;Reset
!TP_RETINEX_NEUTRAL_TIP;Reset all sliders and curves to their default values.
-!TP_RETINEX_OFFSET;Offset
+!TP_RETINEX_OFFSET;Brightness
+!TP_RETINEX_SCALES;Gaussian gradient
+!TP_RETINEX_SCALES_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Scale and Neighboring pixels are reduced when iterations increase, and conversely.
!TP_RETINEX_SETTINGS;Settings
!TP_RETINEX_SLOPE;Free gamma slope
!TP_RETINEX_STRENGTH;Strength
@@ -1813,8 +1849,15 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: -
!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;Contrast
!TP_RETINEX_VARIANCE_TOOLTIP;Low variance increase local contrast and saturation, but can lead to artifacts.
+!TP_RETINEX_VIEW;Process (Preview)
+!TP_RETINEX_VIEW_MASK;Mask
+!TP_RETINEX_VIEW_METHOD_TOOLTIP;Standard - Normal display.\nMask - Displays the mask.\nUnsharp mask - Displays the image with a high radius unsharp mask.\nTransmission - Auto/Fixed - Displays the file transmission-map, before any action on contrast and brightness.\n\nAttention: the mask does not correspond to reality, but is amplified to make it more visible.
+!TP_RETINEX_VIEW_NONE;Standard
+!TP_RETINEX_VIEW_TRAN;Transmission - Auto
+!TP_RETINEX_VIEW_TRAN2;Transmission - Fixed
+!TP_RETINEX_VIEW_UNSHARP;Unsharp mask
!TP_WAVELET_1;Level 1
!TP_WAVELET_2;Level 2
!TP_WAVELET_3;Level 3
diff --git a/rtdata/languages/Polish (Latin Characters) b/rtdata/languages/Polish (Latin Characters)
index 3c3d08d8e..bbc9fcc4f 100644
--- a/rtdata/languages/Polish (Latin Characters)
+++ b/rtdata/languages/Polish (Latin Characters)
@@ -732,7 +732,6 @@ PREFERENCES_CIEART_LABEL;Uzyj precyzje zmiennoprzecinkowa zamiast podwojna.
PREFERENCES_CIEART_TOOLTIP;Gdy umozliwione, kalkulacje CIECAM02 sa wykonywane w notacji zmiennoprzecinkowej o pojedynczej precyzji zamiast podwojnej. Skraca to czas egzekucji kosztem nieistotnej zmiany w jakosci.
PREFERENCES_CLIPPINGIND;Pokazywanie obcietych przeswietlen/cieni
PREFERENCES_CLUTSDIR;Folder obrazow HaldCLUT
-PREFERENCES_CMETRICINTENT;Sposob odwzorowania barw
PREFERENCES_CUSTPROFBUILD;Zewnetrzny kreator profilow przetwarzania
PREFERENCES_CUSTPROFBUILDHINT;Plik wykonywalny (lub skrypt) uruchamiany kiedy trzeba wygenerowac profil przetwarzania dla zdjecia.\n\nSciezka pliku nosnego (w stylu *.ini czyli sekcje i klucze/parametry) wystepuje jako parametr wiersza polecen. Plik ten zawiera przerozne parametry oraz dane Exif dzieki ktorym odpowiedni program badz skrypt moze wygenerowac plik PP3 wedlug regul.\n\nUWAGA: Twoja odpowiedzialnoscia jest prawidlowe uzycie cudzyslowiow w przypadku sciezek zawierajacych spacje i znaki specjalne.
PREFERENCES_CUSTPROFBUILDKEYFORMAT;Rodzaj kluczy
@@ -803,7 +802,6 @@ PREFERENCES_MENUGROUPPROFILEOPERATIONS;Grupuj operacje profili przetwarzania
PREFERENCES_MENUGROUPRANK;Grupuj operacje oceny
PREFERENCES_MENUOPTIONS;Opcje menu
PREFERENCES_METADATA;Metadane
-PREFERENCES_MONITORICC;Profil monitora
PREFERENCES_MULTITAB;Tryb wielu zakladek
PREFERENCES_MULTITABDUALMON;Tryb wielu zakladek (na drugim monitorze jesli dostepny)
PREFERENCES_NAVGUIDEBRUSH;Kolor ramki Nawigatora
@@ -1591,7 +1589,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrot: -
!HISTORY_MSG_364;W - Final - Contrast balance
!HISTORY_MSG_365;W - Final - Delta balance
!HISTORY_MSG_366;W - Residual - Compression gamma
-!HISTORY_MSG_367;W - ES - Local contrast curve
+!HISTORY_MSG_367;W - Final - 'After' contrast curve
!HISTORY_MSG_368;W - Final - Contrast balance
!HISTORY_MSG_369;W - Final - Balance method
!HISTORY_MSG_370;W - Final - Local contrast curve
@@ -1632,11 +1630,11 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrot: -
!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_408;Retinex - Radius
+!HISTORY_MSG_409;Retinex - Contrast
+!HISTORY_MSG_410;Retinex - Brightness
!HISTORY_MSG_411;Retinex - Strength
-!HISTORY_MSG_412;Retinex - Scales
+!HISTORY_MSG_412;Retinex - Gaussian Gradient
!HISTORY_MSG_413;Retinex - Variance
!HISTORY_MSG_414;Retinex - Histogram - Lab
!HISTORY_MSG_415;Retinex - Transmission
@@ -1651,11 +1649,27 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrot: -
!HISTORY_MSG_424;Retinex - HL threshold
!HISTORY_MSG_425;Retinex - Log base
!HISTORY_MSG_426;Retinex - Hue equalizer
+!HISTORY_MSG_427;Output rendering intent
+!HISTORY_MSG_428;Monitor rendering intent
+!HISTORY_MSG_429;Retinex - Iterations
+!HISTORY_MSG_430;Retinex - Transmission Gradient
+!HISTORY_MSG_431;Retinex - Strength Gradient
+!HISTORY_MSG_432;Retinex - M - Highlights
+!HISTORY_MSG_433;Retinex - M - Highlights TW
+!HISTORY_MSG_434;Retinex - M - Shadows
+!HISTORY_MSG_435;Retinex - M - Shadows TW
+!HISTORY_MSG_436;Retinex - M - Radius
+!HISTORY_MSG_437;Retinex - M - Method
+!HISTORY_MSG_438;Retinex - M - Equalizer
+!HISTORY_MSG_439;Retinex - Preview
!MAIN_BUTTON_SENDTOEDITOR;Edit image in external editor
!MAIN_TAB_INSPECT; Inspect
!MAIN_TAB_WAVELET;Wavelet
!MAIN_TAB_WAVELET_TOOLTIP;Shortcut: Alt-w
+!MONITOR_PROFILE_SYSTEM;System default
+!MONITOR_SOFTPROOF;Soft-proof
!PARTIALPASTE_EQUALIZER;Wavelet levels
+!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
!PARTIALPASTE_RETINEX;Retinex
!PARTIALPASTE_WAVELETGROUP;Wavelet Levels
!PREFERENCES_AUTLISLOW;Low
@@ -1691,6 +1705,8 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrot: -
!PREFERENCES_MAXRECENTFOLDERS;Maximum number of recent folders
!PREFERENCES_MED;Medium (Tile/2)
!PREFERENCES_MIN;Mini (100x115)
+!PREFERENCES_MONINTENT;Default monitor intent
+!PREFERENCES_MONPROFILE;Default monitor profile
!PREFERENCES_NAVIGATIONFRAME;Navigation
!PREFERENCES_NOISE;Noise Reduction
!PREFERENCES_OVERLAY_FILENAMES_FILMSTRIP;Overlay filenames on thumbnails in the editor pannel
@@ -1700,6 +1716,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrot: -
!PREFERENCES_PREVDEMO_FAST;Fast
!PREFERENCES_PREVDEMO_LABEL;Demosaicing method used for the preview at <100% zoom:
!PREFERENCES_PREVDEMO_SIDECAR;As in PP3
+!PREFERENCES_PROFILE_NONE;None
!PREFERENCES_REMEMBERZOOMPAN;Remember zoom % and pan offset
!PREFERENCES_REMEMBERZOOMPAN_TOOLTIP;Remember the zoom % and pan offset of the current image when opening a new image.\n\nThis option only works in "Single Editor Tab Mode" and when "Demosaicing method used for the preview at <100% zoom" is set to "As in PP3".
!PREFERENCES_SERIALIZE_TIFF_READ;Tiff Read Settings
@@ -1760,6 +1777,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrot: -
!TP_ICM_APPLYHUESATMAP_TOOLTIP;Employ the embedded DCP base table (HueSatMap). The setting is only enabled if the selected DCP has one.
!TP_ICM_APPLYLOOKTABLE;Look table
!TP_ICM_APPLYLOOKTABLE_TOOLTIP;Employ the embedded DCP look table. The setting is only enabled if the selected DCP has one.
+!TP_ICM_PROFILEINTENT;Rendering Intent
!TP_ICM_SAVEREFERENCE_APPLYWB;Apply white balance
!TP_ICM_SAVEREFERENCE_APPLYWB_TOOLTIP;Generally, apply the white balance when saving images to create ICC profiles, and do not apply the white balance to create DCP profiles.
!TP_NEUTRAL;Reset
@@ -1770,12 +1788,15 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrot: -
!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL
!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b*
!TP_RETINEX_CONTEDIT_LH;Hue equalizer
+!TP_RETINEX_CONTEDIT_MAP;Mask 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_CURVEEDITOR_MAP;L=f(L)
+!TP_RETINEX_CURVEEDITOR_MAP_TOOLTIP;This curve can be applied alone or with a Gaussian mask or wavelet mask.\nBeware of artifacts!
!TP_RETINEX_FREEGAMMA;Free gamma
-!TP_RETINEX_GAIN;Gain
+!TP_RETINEX_GAIN;Contrast
!TP_RETINEX_GAIN_TOOLTIP;Acts on the restored image.\n\nThis is very different from the others settings. Used for black or white pixels, and to help balance the histogram.
!TP_RETINEX_GAMMA;Gamma
!TP_RETINEX_GAMMA_FREE;Free
@@ -1784,24 +1805,39 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrot: -
!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_GRAD;Transmission gradient
+!TP_RETINEX_GRADS;Strength gradient
+!TP_RETINEX_GRADS_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Strength is reduced when iterations increase, and conversely.
+!TP_RETINEX_GRAD_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Variance and Threshold are reduced when iterations increase, and conversely.
!TP_RETINEX_HIGH;High
!TP_RETINEX_HIGHLIG;Highlight
!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_HSLSPACE_LIN;HSL-Linear
!TP_RETINEX_HSLSPACE_LOG;HSL-Logarithmic
+!TP_RETINEX_ITER;Iterations (Tone-mapping)
+!TP_RETINEX_ITER_TOOLTIP;Simulate a tone-mapping operator.\nHigh values increase the processing time.
!TP_RETINEX_LABEL;Retinex
!TP_RETINEX_LABSPACE;L*a*b*
!TP_RETINEX_LOW;Low
+!TP_RETINEX_MAP;Mask method
+!TP_RETINEX_MAP_CURV;Curve only
+!TP_RETINEX_MAP_GAUS;Gaussian mask
+!TP_RETINEX_MAP_MAPP;Sharp mask (wavelet partial)
+!TP_RETINEX_MAP_MAPT;Sharp mask (wavelet total)
+!TP_RETINEX_MAP_METHOD_TOOLTIP;Use the mask generated by the Gaussian function above to reduce halos and artifacts.\n\nCurve only: apply a diagonal contrast curve on the mask.\nBeware of artifacts!\n\nGaussian mask: generate and use a Gaussian blur of the original mask.\nQuick.\n\nSharp mask: generate and use a wavelet on the original mask.\nSlow.
+!TP_RETINEX_MAP_NONE;None
!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,\nHighlights = 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_NEIGHBOR;Radius
!TP_RETINEX_NEUTRAL;Reset
!TP_RETINEX_NEUTRAL_TIP;Reset all sliders and curves to their default values.
-!TP_RETINEX_OFFSET;Offset
+!TP_RETINEX_OFFSET;Brightness
+!TP_RETINEX_SCALES;Gaussian gradient
+!TP_RETINEX_SCALES_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Scale and Neighboring pixels are reduced when iterations increase, and conversely.
!TP_RETINEX_SETTINGS;Settings
!TP_RETINEX_SLOPE;Free gamma slope
!TP_RETINEX_STRENGTH;Strength
@@ -1813,8 +1849,15 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrot: -
!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;Contrast
!TP_RETINEX_VARIANCE_TOOLTIP;Low variance increase local contrast and saturation, but can lead to artifacts.
+!TP_RETINEX_VIEW;Process (Preview)
+!TP_RETINEX_VIEW_MASK;Mask
+!TP_RETINEX_VIEW_METHOD_TOOLTIP;Standard - Normal display.\nMask - Displays the mask.\nUnsharp mask - Displays the image with a high radius unsharp mask.\nTransmission - Auto/Fixed - Displays the file transmission-map, before any action on contrast and brightness.\n\nAttention: the mask does not correspond to reality, but is amplified to make it more visible.
+!TP_RETINEX_VIEW_NONE;Standard
+!TP_RETINEX_VIEW_TRAN;Transmission - Auto
+!TP_RETINEX_VIEW_TRAN2;Transmission - Fixed
+!TP_RETINEX_VIEW_UNSHARP;Unsharp mask
!TP_WAVELET_1;Level 1
!TP_WAVELET_2;Level 2
!TP_WAVELET_3;Level 3
diff --git a/rtdata/languages/Portugues (Brasil) b/rtdata/languages/Portugues (Brasil)
index 0d141802b..ee64e1da8 100644
--- a/rtdata/languages/Portugues (Brasil)
+++ b/rtdata/languages/Portugues (Brasil)
@@ -268,7 +268,6 @@ PREFERENCES_CACHEMAXENTRIES;Número máximo de entradas no cache
PREFERENCES_CACHEOPTS;Opções de Cache
PREFERENCES_CACHETHUMBHEIGHT;Tamanho máximo das miniaturas
PREFERENCES_CLIPPINGIND;Recortando indicação
-PREFERENCES_CMETRICINTENT;Intenção colorimétrica
PREFERENCES_DATEFORMAT;Formato de data
PREFERENCES_DATEFORMATHINT;Você pode usar as seguintes formatações:\n%a : ano\n%m : mês\n%d : dia\n\nPor exemplo, o formato de data húngaro é:\n%a/%m/%d
PREFERENCES_DEFAULTLANG;Idioma padrão
@@ -292,7 +291,6 @@ PREFERENCES_INTENT_ABSOLUTE;Colorimétrico Absoluto
PREFERENCES_INTENT_PERCEPTUAL;Perceptual
PREFERENCES_INTENT_RELATIVE;Colorimétrico Relativo
PREFERENCES_INTENT_SATURATION;Saturação
-PREFERENCES_MONITORICC;Monitorar perfil
PREFERENCES_OUTDIR;Diretório de Saída
PREFERENCES_OUTDIRFOLDER;Salvar em folder
PREFERENCES_OUTDIRFOLDERHINT;Colocar as imagens salvas na pasta selecionada
@@ -879,7 +877,7 @@ TP_WBALANCE_TEMPERATURE;Temperatura
!HISTORY_MSG_364;W - Final - Contrast balance
!HISTORY_MSG_365;W - Final - Delta balance
!HISTORY_MSG_366;W - Residual - Compression gamma
-!HISTORY_MSG_367;W - ES - Local contrast curve
+!HISTORY_MSG_367;W - Final - 'After' contrast curve
!HISTORY_MSG_368;W - Final - Contrast balance
!HISTORY_MSG_369;W - Final - Balance method
!HISTORY_MSG_370;W - Final - Local contrast curve
@@ -920,11 +918,11 @@ TP_WBALANCE_TEMPERATURE;Temperatura
!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_408;Retinex - Radius
+!HISTORY_MSG_409;Retinex - Contrast
+!HISTORY_MSG_410;Retinex - Brightness
!HISTORY_MSG_411;Retinex - Strength
-!HISTORY_MSG_412;Retinex - Scales
+!HISTORY_MSG_412;Retinex - Gaussian Gradient
!HISTORY_MSG_413;Retinex - Variance
!HISTORY_MSG_414;Retinex - Histogram - Lab
!HISTORY_MSG_415;Retinex - Transmission
@@ -939,6 +937,19 @@ TP_WBALANCE_TEMPERATURE;Temperatura
!HISTORY_MSG_424;Retinex - HL threshold
!HISTORY_MSG_425;Retinex - Log base
!HISTORY_MSG_426;Retinex - Hue equalizer
+!HISTORY_MSG_427;Output rendering intent
+!HISTORY_MSG_428;Monitor rendering intent
+!HISTORY_MSG_429;Retinex - Iterations
+!HISTORY_MSG_430;Retinex - Transmission Gradient
+!HISTORY_MSG_431;Retinex - Strength Gradient
+!HISTORY_MSG_432;Retinex - M - Highlights
+!HISTORY_MSG_433;Retinex - M - Highlights TW
+!HISTORY_MSG_434;Retinex - M - Shadows
+!HISTORY_MSG_435;Retinex - M - Shadows TW
+!HISTORY_MSG_436;Retinex - M - Radius
+!HISTORY_MSG_437;Retinex - M - Method
+!HISTORY_MSG_438;Retinex - M - Equalizer
+!HISTORY_MSG_439;Retinex - Preview
!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
@@ -985,6 +996,8 @@ TP_WBALANCE_TEMPERATURE;Temperatura
!MAIN_TOOLTIP_SHOWHIDETP1;Show/Hide the top panel.\nShortcut: Shift-l
!MAIN_TOOLTIP_THRESHOLD;Threshold
!MAIN_TOOLTIP_TOGGLE;Toggle the Before/After view.\nShortcut: Shift-b
+!MONITOR_PROFILE_SYSTEM;System default
+!MONITOR_SOFTPROOF;Soft-proof
!NAVIGATOR_B;B:
!NAVIGATOR_G;G:
!NAVIGATOR_H;H:
@@ -1030,6 +1043,7 @@ TP_WBALANCE_TEMPERATURE;Temperatura
!PARTIALPASTE_PREPROCESS_GREENEQUIL;Green equilibration
!PARTIALPASTE_PREPROCESS_HOTPIXFILT;Hot pixel filter
!PARTIALPASTE_PREPROCESS_LINEDENOISE;Line noise filter
+!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
!PARTIALPASTE_RAWCACORR_AUTO;CA auto-correction
!PARTIALPASTE_RAWCACORR_CABLUE;CA blue
!PARTIALPASTE_RAWCACORR_CARED;CA red
@@ -1141,6 +1155,8 @@ TP_WBALANCE_TEMPERATURE;Temperatura
!PREFERENCES_MENUOPTIONS;Context Menu Options
!PREFERENCES_METADATA;Metadata
!PREFERENCES_MIN;Mini (100x115)
+!PREFERENCES_MONINTENT;Default monitor intent
+!PREFERENCES_MONPROFILE;Default monitor profile
!PREFERENCES_MULTITAB;Multiple Editor Tabs Mode
!PREFERENCES_MULTITABDUALMON;Multiple Editor Tabs In Own Window Mode
!PREFERENCES_NAVGUIDEBRUSH;Navigator guide color
@@ -1156,6 +1172,7 @@ TP_WBALANCE_TEMPERATURE;Temperatura
!PREFERENCES_PREVDEMO_FAST;Fast
!PREFERENCES_PREVDEMO_LABEL;Demosaicing method used for the preview at <100% zoom:
!PREFERENCES_PREVDEMO_SIDECAR;As in PP3
+!PREFERENCES_PROFILE_NONE;None
!PREFERENCES_PROPERTY;Property
!PREFERENCES_REMEMBERZOOMPAN;Remember zoom % and pan offset
!PREFERENCES_REMEMBERZOOMPAN_TOOLTIP;Remember the zoom % and pan offset of the current image when opening a new image.\n\nThis option only works in "Single Editor Tab Mode" and when "Demosaicing method used for the preview at <100% zoom" is set to "As in PP3".
@@ -1567,6 +1584,7 @@ TP_WBALANCE_TEMPERATURE;Temperatura
!TP_ICM_INPUTEMBEDDED_TOOLTIP;Use color profile embedded in non-raw files.
!TP_ICM_INPUTNONE;No profile
!TP_ICM_INPUTNONE_TOOLTIP;Use no input color profile at all.\nUse only in special cases.
+!TP_ICM_PROFILEINTENT;Rendering Intent
!TP_ICM_SAVEREFERENCE_APPLYWB;Apply white balance
!TP_ICM_SAVEREFERENCE_APPLYWB_TOOLTIP;Generally, apply the white balance when saving images to create ICC profiles, and do not apply the white balance to create DCP profiles.
!TP_ICM_SAVEREFERENCE_TOOLTIP;Save the linear TIFF image before the input profile is applied. The result can be used for calibration purposes and generation of a camera profile.
@@ -1681,12 +1699,15 @@ TP_WBALANCE_TEMPERATURE;Temperatura
!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL
!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b*
!TP_RETINEX_CONTEDIT_LH;Hue equalizer
+!TP_RETINEX_CONTEDIT_MAP;Mask 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_CURVEEDITOR_MAP;L=f(L)
+!TP_RETINEX_CURVEEDITOR_MAP_TOOLTIP;This curve can be applied alone or with a Gaussian mask or wavelet mask.\nBeware of artifacts!
!TP_RETINEX_FREEGAMMA;Free gamma
-!TP_RETINEX_GAIN;Gain
+!TP_RETINEX_GAIN;Contrast
!TP_RETINEX_GAIN_TOOLTIP;Acts on the restored image.\n\nThis is very different from the others settings. Used for black or white pixels, and to help balance the histogram.
!TP_RETINEX_GAMMA;Gamma
!TP_RETINEX_GAMMA_FREE;Free
@@ -1695,24 +1716,39 @@ TP_WBALANCE_TEMPERATURE;Temperatura
!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_GRAD;Transmission gradient
+!TP_RETINEX_GRADS;Strength gradient
+!TP_RETINEX_GRADS_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Strength is reduced when iterations increase, and conversely.
+!TP_RETINEX_GRAD_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Variance and Threshold are reduced when iterations increase, and conversely.
!TP_RETINEX_HIGH;High
!TP_RETINEX_HIGHLIG;Highlight
!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_HSLSPACE_LIN;HSL-Linear
!TP_RETINEX_HSLSPACE_LOG;HSL-Logarithmic
+!TP_RETINEX_ITER;Iterations (Tone-mapping)
+!TP_RETINEX_ITER_TOOLTIP;Simulate a tone-mapping operator.\nHigh values increase the processing time.
!TP_RETINEX_LABEL;Retinex
!TP_RETINEX_LABSPACE;L*a*b*
!TP_RETINEX_LOW;Low
+!TP_RETINEX_MAP;Mask method
+!TP_RETINEX_MAP_CURV;Curve only
+!TP_RETINEX_MAP_GAUS;Gaussian mask
+!TP_RETINEX_MAP_MAPP;Sharp mask (wavelet partial)
+!TP_RETINEX_MAP_MAPT;Sharp mask (wavelet total)
+!TP_RETINEX_MAP_METHOD_TOOLTIP;Use the mask generated by the Gaussian function above to reduce halos and artifacts.\n\nCurve only: apply a diagonal contrast curve on the mask.\nBeware of artifacts!\n\nGaussian mask: generate and use a Gaussian blur of the original mask.\nQuick.\n\nSharp mask: generate and use a wavelet on the original mask.\nSlow.
+!TP_RETINEX_MAP_NONE;None
!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,\nHighlights = 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_NEIGHBOR;Radius
!TP_RETINEX_NEUTRAL;Reset
!TP_RETINEX_NEUTRAL_TIP;Reset all sliders and curves to their default values.
-!TP_RETINEX_OFFSET;Offset
+!TP_RETINEX_OFFSET;Brightness
+!TP_RETINEX_SCALES;Gaussian gradient
+!TP_RETINEX_SCALES_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Scale and Neighboring pixels are reduced when iterations increase, and conversely.
!TP_RETINEX_SETTINGS;Settings
!TP_RETINEX_SLOPE;Free gamma slope
!TP_RETINEX_STRENGTH;Strength
@@ -1724,8 +1760,15 @@ TP_WBALANCE_TEMPERATURE;Temperatura
!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;Contrast
!TP_RETINEX_VARIANCE_TOOLTIP;Low variance increase local contrast and saturation, but can lead to artifacts.
+!TP_RETINEX_VIEW;Process (Preview)
+!TP_RETINEX_VIEW_MASK;Mask
+!TP_RETINEX_VIEW_METHOD_TOOLTIP;Standard - Normal display.\nMask - Displays the mask.\nUnsharp mask - Displays the image with a high radius unsharp mask.\nTransmission - Auto/Fixed - Displays the file transmission-map, before any action on contrast and brightness.\n\nAttention: the mask does not correspond to reality, but is amplified to make it more visible.
+!TP_RETINEX_VIEW_NONE;Standard
+!TP_RETINEX_VIEW_TRAN;Transmission - Auto
+!TP_RETINEX_VIEW_TRAN2;Transmission - Fixed
+!TP_RETINEX_VIEW_UNSHARP;Unsharp mask
!TP_RGBCURVES_BLUE;B
!TP_RGBCURVES_CHANNEL;Channel
!TP_RGBCURVES_GREEN;G
diff --git a/rtdata/languages/Russian b/rtdata/languages/Russian
index 2eacee616..dffed82b2 100644
--- a/rtdata/languages/Russian
+++ b/rtdata/languages/Russian
@@ -663,7 +663,6 @@ PREFERENCES_CIEART;Оптимизация CIECAM02
PREFERENCES_CIEART_LABEL;Использовать числа с плавающей запятой вместо двойной точности
PREFERENCES_CIEART_TOOLTIP;Если включено, вычисления CIECAM02 будут выполняться в формате плавающей запятой с одинарной точностью вместо использования двойной точности. Это обеспечит небольшое увеличение скорости с несущественной потерей качества.
PREFERENCES_CLIPPINGIND;Индикация пересветов/затемнений
-PREFERENCES_CMETRICINTENT;Колориметрическое преобразование
PREFERENCES_CUSTPROFBUILD;Создание собственного профиля обработки
PREFERENCES_CUSTPROFBUILDHINT;Исполняемый (или скриптовой) файл, вызываемый, когда для изображения должен быть сгенерирован новый профиль обработки.\n\nПуть к коммуникационному файлу (стиля *.ini) будет добавлен как параметр. Он содержит различные параметры, требуемые для скрипта и значения Exif фотографии для возможности генерации профиля основанной на правилах.\n\nВнимание: Необходимо использовать двойные кавычки при необходимости, если вы используете пути, содержащие пробелы.
PREFERENCES_CUSTPROFBUILDKEYFORMAT;Формат ключей
@@ -731,7 +730,6 @@ PREFERENCES_MENUGROUPPROFILEOPERATIONS;Группа "Действия с про
PREFERENCES_MENUGROUPRANK;Группа "Рейтинг"
PREFERENCES_MENUOPTIONS;Настройки контекстного меню
PREFERENCES_METADATA;Метаданные
-PREFERENCES_MONITORICC;Профиль монитора
PREFERENCES_MULTITAB;Много вкладок
PREFERENCES_MULTITABDUALMON;Много вкладок, на втором мониторе (если возможно)
PREFERENCES_OUTDIR;Каталог для сохранения изображений
@@ -1442,7 +1440,7 @@ ZOOMPANEL_ZOOMOUT;Удалить -
!HISTORY_MSG_364;W - Final - Contrast balance
!HISTORY_MSG_365;W - Final - Delta balance
!HISTORY_MSG_366;W - Residual - Compression gamma
-!HISTORY_MSG_367;W - ES - Local contrast curve
+!HISTORY_MSG_367;W - Final - 'After' contrast curve
!HISTORY_MSG_368;W - Final - Contrast balance
!HISTORY_MSG_369;W - Final - Balance method
!HISTORY_MSG_370;W - Final - Local contrast curve
@@ -1483,11 +1481,11 @@ ZOOMPANEL_ZOOMOUT;Удалить -
!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_408;Retinex - Radius
+!HISTORY_MSG_409;Retinex - Contrast
+!HISTORY_MSG_410;Retinex - Brightness
!HISTORY_MSG_411;Retinex - Strength
-!HISTORY_MSG_412;Retinex - Scales
+!HISTORY_MSG_412;Retinex - Gaussian Gradient
!HISTORY_MSG_413;Retinex - Variance
!HISTORY_MSG_414;Retinex - Histogram - Lab
!HISTORY_MSG_415;Retinex - Transmission
@@ -1502,11 +1500,26 @@ ZOOMPANEL_ZOOMOUT;Удалить -
!HISTORY_MSG_424;Retinex - HL threshold
!HISTORY_MSG_425;Retinex - Log base
!HISTORY_MSG_426;Retinex - Hue equalizer
+!HISTORY_MSG_427;Output rendering intent
+!HISTORY_MSG_428;Monitor rendering intent
+!HISTORY_MSG_429;Retinex - Iterations
+!HISTORY_MSG_430;Retinex - Transmission Gradient
+!HISTORY_MSG_431;Retinex - Strength Gradient
+!HISTORY_MSG_432;Retinex - M - Highlights
+!HISTORY_MSG_433;Retinex - M - Highlights TW
+!HISTORY_MSG_434;Retinex - M - Shadows
+!HISTORY_MSG_435;Retinex - M - Shadows TW
+!HISTORY_MSG_436;Retinex - M - Radius
+!HISTORY_MSG_437;Retinex - M - Method
+!HISTORY_MSG_438;Retinex - M - Equalizer
+!HISTORY_MSG_439;Retinex - Preview
!MAIN_BUTTON_SENDTOEDITOR;Edit image in external editor
!MAIN_TAB_INSPECT; Inspect
!MAIN_TAB_WAVELET;Wavelet
!MAIN_TAB_WAVELET_TOOLTIP;Shortcut: Alt-w
!MAIN_TOOLTIP_HIDEHP;Show/Hide the left panel (including the history).\nShortcut: l
+!MONITOR_PROFILE_SYSTEM;System default
+!MONITOR_SOFTPROOF;Soft-proof
!NAVIGATOR_B;B:
!NAVIGATOR_G;G:
!NAVIGATOR_H;H:
@@ -1523,6 +1536,7 @@ ZOOMPANEL_ZOOMOUT;Удалить -
!PARTIALPASTE_FLATFIELDCLIPCONTROL;Flat-field clip control
!PARTIALPASTE_PREPROCESS_DEADPIXFILT;Dead pixel filter
!PARTIALPASTE_PREPROCESS_HOTPIXFILT;Hot pixel filter
+!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
!PARTIALPASTE_RETINEX;Retinex
!PARTIALPASTE_WAVELETGROUP;Wavelet Levels
!PREFERENCES_AUTLISLOW;Low
@@ -1562,6 +1576,8 @@ ZOOMPANEL_ZOOMOUT;Удалить -
!PREFERENCES_MAXRECENTFOLDERS;Maximum number of recent folders
!PREFERENCES_MED;Medium (Tile/2)
!PREFERENCES_MIN;Mini (100x115)
+!PREFERENCES_MONINTENT;Default monitor intent
+!PREFERENCES_MONPROFILE;Default monitor profile
!PREFERENCES_NAVGUIDEBRUSH;Navigator guide color
!PREFERENCES_NAVIGATIONFRAME;Navigation
!PREFERENCES_NOISE;Noise Reduction
@@ -1572,6 +1588,7 @@ ZOOMPANEL_ZOOMOUT;Удалить -
!PREFERENCES_PREVDEMO_FAST;Fast
!PREFERENCES_PREVDEMO_LABEL;Demosaicing method used for the preview at <100% zoom:
!PREFERENCES_PREVDEMO_SIDECAR;As in PP3
+!PREFERENCES_PROFILE_NONE;None
!PREFERENCES_REMEMBERZOOMPAN;Remember zoom % and pan offset
!PREFERENCES_REMEMBERZOOMPAN_TOOLTIP;Remember the zoom % and pan offset of the current image when opening a new image.\n\nThis option only works in "Single Editor Tab Mode" and when "Demosaicing method used for the preview at <100% zoom" is set to "As in PP3".
!PREFERENCES_SERIALIZE_TIFF_READ;Tiff Read Settings
@@ -1741,6 +1758,7 @@ ZOOMPANEL_ZOOMOUT;Удалить -
!TP_ICM_APPLYLOOKTABLE;Look table
!TP_ICM_APPLYLOOKTABLE_TOOLTIP;Employ the embedded DCP look table. The setting is only enabled if the selected DCP has one.
!TP_ICM_DCPILLUMINANT_TOOLTIP;Select which embedded DCP illuminant to employ. Default is "interpolated" which is a mix between the two based on white balance. The setting is only enabled if a Dual-Illuminant DCP with interpolation support is selected.
+!TP_ICM_PROFILEINTENT;Rendering Intent
!TP_ICM_SAVEREFERENCE_APPLYWB;Apply white balance
!TP_ICM_SAVEREFERENCE_APPLYWB_TOOLTIP;Generally, apply the white balance when saving images to create ICC profiles, and do not apply the white balance to create DCP profiles.
!TP_NEUTRAL;Reset
@@ -1766,12 +1784,15 @@ ZOOMPANEL_ZOOMOUT;Удалить -
!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL
!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b*
!TP_RETINEX_CONTEDIT_LH;Hue equalizer
+!TP_RETINEX_CONTEDIT_MAP;Mask 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_CURVEEDITOR_MAP;L=f(L)
+!TP_RETINEX_CURVEEDITOR_MAP_TOOLTIP;This curve can be applied alone or with a Gaussian mask or wavelet mask.\nBeware of artifacts!
!TP_RETINEX_FREEGAMMA;Free gamma
-!TP_RETINEX_GAIN;Gain
+!TP_RETINEX_GAIN;Contrast
!TP_RETINEX_GAIN_TOOLTIP;Acts on the restored image.\n\nThis is very different from the others settings. Used for black or white pixels, and to help balance the histogram.
!TP_RETINEX_GAMMA;Gamma
!TP_RETINEX_GAMMA_FREE;Free
@@ -1780,24 +1801,39 @@ ZOOMPANEL_ZOOMOUT;Удалить -
!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_GRAD;Transmission gradient
+!TP_RETINEX_GRADS;Strength gradient
+!TP_RETINEX_GRADS_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Strength is reduced when iterations increase, and conversely.
+!TP_RETINEX_GRAD_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Variance and Threshold are reduced when iterations increase, and conversely.
!TP_RETINEX_HIGH;High
!TP_RETINEX_HIGHLIG;Highlight
!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_HSLSPACE_LIN;HSL-Linear
!TP_RETINEX_HSLSPACE_LOG;HSL-Logarithmic
+!TP_RETINEX_ITER;Iterations (Tone-mapping)
+!TP_RETINEX_ITER_TOOLTIP;Simulate a tone-mapping operator.\nHigh values increase the processing time.
!TP_RETINEX_LABEL;Retinex
!TP_RETINEX_LABSPACE;L*a*b*
!TP_RETINEX_LOW;Low
+!TP_RETINEX_MAP;Mask method
+!TP_RETINEX_MAP_CURV;Curve only
+!TP_RETINEX_MAP_GAUS;Gaussian mask
+!TP_RETINEX_MAP_MAPP;Sharp mask (wavelet partial)
+!TP_RETINEX_MAP_MAPT;Sharp mask (wavelet total)
+!TP_RETINEX_MAP_METHOD_TOOLTIP;Use the mask generated by the Gaussian function above to reduce halos and artifacts.\n\nCurve only: apply a diagonal contrast curve on the mask.\nBeware of artifacts!\n\nGaussian mask: generate and use a Gaussian blur of the original mask.\nQuick.\n\nSharp mask: generate and use a wavelet on the original mask.\nSlow.
+!TP_RETINEX_MAP_NONE;None
!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,\nHighlights = 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_NEIGHBOR;Radius
!TP_RETINEX_NEUTRAL;Reset
!TP_RETINEX_NEUTRAL_TIP;Reset all sliders and curves to their default values.
-!TP_RETINEX_OFFSET;Offset
+!TP_RETINEX_OFFSET;Brightness
+!TP_RETINEX_SCALES;Gaussian gradient
+!TP_RETINEX_SCALES_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Scale and Neighboring pixels are reduced when iterations increase, and conversely.
!TP_RETINEX_SETTINGS;Settings
!TP_RETINEX_SLOPE;Free gamma slope
!TP_RETINEX_STRENGTH;Strength
@@ -1809,8 +1845,15 @@ ZOOMPANEL_ZOOMOUT;Удалить -
!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;Contrast
!TP_RETINEX_VARIANCE_TOOLTIP;Low variance increase local contrast and saturation, but can lead to artifacts.
+!TP_RETINEX_VIEW;Process (Preview)
+!TP_RETINEX_VIEW_MASK;Mask
+!TP_RETINEX_VIEW_METHOD_TOOLTIP;Standard - Normal display.\nMask - Displays the mask.\nUnsharp mask - Displays the image with a high radius unsharp mask.\nTransmission - Auto/Fixed - Displays the file transmission-map, before any action on contrast and brightness.\n\nAttention: the mask does not correspond to reality, but is amplified to make it more visible.
+!TP_RETINEX_VIEW_NONE;Standard
+!TP_RETINEX_VIEW_TRAN;Transmission - Auto
+!TP_RETINEX_VIEW_TRAN2;Transmission - Fixed
+!TP_RETINEX_VIEW_UNSHARP;Unsharp mask
!TP_WAVELET_1;Level 1
!TP_WAVELET_2;Level 2
!TP_WAVELET_3;Level 3
diff --git a/rtdata/languages/Serbian (Cyrilic Characters) b/rtdata/languages/Serbian (Cyrilic Characters)
index efbfd7ecd..2df7b6716 100644
--- a/rtdata/languages/Serbian (Cyrilic Characters)
+++ b/rtdata/languages/Serbian (Cyrilic Characters)
@@ -467,7 +467,6 @@ PREFERENCES_CACHEMAXENTRIES;Највећи број мест у остави
PREFERENCES_CACHEOPTS;Подешавање оставе
PREFERENCES_CACHETHUMBHEIGHT;Највећа висина приказа
PREFERENCES_CLIPPINGIND;Показивачи одсечених делова
-PREFERENCES_CMETRICINTENT;Колориметријска намера
PREFERENCES_CUSTPROFBUILD;Изградња произвољног почетног профила слике
PREFERENCES_CUSTPROFBUILDHINT;Извршна датотека (или скрипта) која се позива када изграђујете нови почетни профил за слику.nПрихвата параметре из командне линије ради прављења .pp3 датотеке на основу неких правила:n[Путања до RAW/JPG] [Путања подразумеваног профила] [Бленда] [Експозиција у s] [Жижна дужина mm] [ИСО] [Објектив] [Фото-апарат]
PREFERENCES_CUSTPROFBUILDPATH;Извршна путања
@@ -516,7 +515,6 @@ PREFERENCES_MENUGROUPPROFILEOPERATIONS;Групиши радње са профи
PREFERENCES_MENUGROUPRANK;Групиши оцењивање
PREFERENCES_MENUOPTIONS;Опције менија
PREFERENCES_METADATA;Метаподаци
-PREFERENCES_MONITORICC;Профил монитора
PREFERENCES_MULTITAB;Режим у више листова
PREFERENCES_MULTITABDUALMON;Режим у више листова, на другом монитору
PREFERENCES_OUTDIR;Излазни директоријум
@@ -1083,7 +1081,7 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике -
!HISTORY_MSG_364;W - Final - Contrast balance
!HISTORY_MSG_365;W - Final - Delta balance
!HISTORY_MSG_366;W - Residual - Compression gamma
-!HISTORY_MSG_367;W - ES - Local contrast curve
+!HISTORY_MSG_367;W - Final - 'After' contrast curve
!HISTORY_MSG_368;W - Final - Contrast balance
!HISTORY_MSG_369;W - Final - Balance method
!HISTORY_MSG_370;W - Final - Local contrast curve
@@ -1124,11 +1122,11 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике -
!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_408;Retinex - Radius
+!HISTORY_MSG_409;Retinex - Contrast
+!HISTORY_MSG_410;Retinex - Brightness
!HISTORY_MSG_411;Retinex - Strength
-!HISTORY_MSG_412;Retinex - Scales
+!HISTORY_MSG_412;Retinex - Gaussian Gradient
!HISTORY_MSG_413;Retinex - Variance
!HISTORY_MSG_414;Retinex - Histogram - Lab
!HISTORY_MSG_415;Retinex - Transmission
@@ -1143,6 +1141,19 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике -
!HISTORY_MSG_424;Retinex - HL threshold
!HISTORY_MSG_425;Retinex - Log base
!HISTORY_MSG_426;Retinex - Hue equalizer
+!HISTORY_MSG_427;Output rendering intent
+!HISTORY_MSG_428;Monitor rendering intent
+!HISTORY_MSG_429;Retinex - Iterations
+!HISTORY_MSG_430;Retinex - Transmission Gradient
+!HISTORY_MSG_431;Retinex - Strength Gradient
+!HISTORY_MSG_432;Retinex - M - Highlights
+!HISTORY_MSG_433;Retinex - M - Highlights TW
+!HISTORY_MSG_434;Retinex - M - Shadows
+!HISTORY_MSG_435;Retinex - M - Shadows TW
+!HISTORY_MSG_436;Retinex - M - Radius
+!HISTORY_MSG_437;Retinex - M - Method
+!HISTORY_MSG_438;Retinex - M - Equalizer
+!HISTORY_MSG_439;Retinex - Preview
!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
@@ -1166,6 +1177,8 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике -
!MAIN_TOOLTIP_PREVIEWL;Preview the Luminosity.\nShortcut: v\n\n0.299*R + 0.587*G + 0.114*B
!MAIN_TOOLTIP_PREVIEWR;Preview the Red channel.\nShortcut: r
!MAIN_TOOLTIP_THRESHOLD;Threshold
+!MONITOR_PROFILE_SYSTEM;System default
+!MONITOR_SOFTPROOF;Soft-proof
!NAVIGATOR_B;B:
!NAVIGATOR_G;G:
!NAVIGATOR_H;H:
@@ -1191,6 +1204,7 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике -
!PARTIALPASTE_PCVIGNETTE;Vignette filter
!PARTIALPASTE_PREPROCESS_DEADPIXFILT;Dead pixel filter
!PARTIALPASTE_PREPROCESS_HOTPIXFILT;Hot pixel filter
+!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
!PARTIALPASTE_RAW_LMMSEITERATIONS;LMMSE enhancement steps
!PARTIALPASTE_RETINEX;Retinex
!PARTIALPASTE_RGBCURVES;RGB curves
@@ -1260,6 +1274,8 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике -
!PREFERENCES_MED;Medium (Tile/2)
!PREFERENCES_MENUGROUPEXTPROGS;Group "Open with"
!PREFERENCES_MIN;Mini (100x115)
+!PREFERENCES_MONINTENT;Default monitor intent
+!PREFERENCES_MONPROFILE;Default monitor profile
!PREFERENCES_NAVGUIDEBRUSH;Navigator guide color
!PREFERENCES_NAVIGATIONFRAME;Navigation
!PREFERENCES_NOISE;Noise Reduction
@@ -1270,6 +1286,7 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике -
!PREFERENCES_PREVDEMO_FAST;Fast
!PREFERENCES_PREVDEMO_LABEL;Demosaicing method used for the preview at <100% zoom:
!PREFERENCES_PREVDEMO_SIDECAR;As in PP3
+!PREFERENCES_PROFILE_NONE;None
!PREFERENCES_REMEMBERZOOMPAN;Remember zoom % and pan offset
!PREFERENCES_REMEMBERZOOMPAN_TOOLTIP;Remember the zoom % and pan offset of the current image when opening a new image.\n\nThis option only works in "Single Editor Tab Mode" and when "Demosaicing method used for the preview at <100% zoom" is set to "As in PP3".
!PREFERENCES_RGBDTL_LABEL;Max number of threads for Noise Reduction and Wavelet Levels
@@ -1620,6 +1637,7 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике -
!TP_ICM_INPUTCUSTOM_TOOLTIP;Select your own DCP/ICC color profile file for the camera.
!TP_ICM_INPUTEMBEDDED_TOOLTIP;Use color profile embedded in non-raw files.
!TP_ICM_INPUTNONE_TOOLTIP;Use no input color profile at all.\nUse only in special cases.
+!TP_ICM_PROFILEINTENT;Rendering Intent
!TP_ICM_SAVEREFERENCE_APPLYWB;Apply white balance
!TP_ICM_SAVEREFERENCE_APPLYWB_TOOLTIP;Generally, apply the white balance when saving images to create ICC profiles, and do not apply the white balance to create DCP profiles.
!TP_ICM_SAVEREFERENCE_TOOLTIP;Save the linear TIFF image before the input profile is applied. The result can be used for calibration purposes and generation of a camera profile.
@@ -1700,12 +1718,15 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике -
!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL
!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b*
!TP_RETINEX_CONTEDIT_LH;Hue equalizer
+!TP_RETINEX_CONTEDIT_MAP;Mask 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_CURVEEDITOR_MAP;L=f(L)
+!TP_RETINEX_CURVEEDITOR_MAP_TOOLTIP;This curve can be applied alone or with a Gaussian mask or wavelet mask.\nBeware of artifacts!
!TP_RETINEX_FREEGAMMA;Free gamma
-!TP_RETINEX_GAIN;Gain
+!TP_RETINEX_GAIN;Contrast
!TP_RETINEX_GAIN_TOOLTIP;Acts on the restored image.\n\nThis is very different from the others settings. Used for black or white pixels, and to help balance the histogram.
!TP_RETINEX_GAMMA;Gamma
!TP_RETINEX_GAMMA_FREE;Free
@@ -1714,24 +1735,39 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике -
!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_GRAD;Transmission gradient
+!TP_RETINEX_GRADS;Strength gradient
+!TP_RETINEX_GRADS_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Strength is reduced when iterations increase, and conversely.
+!TP_RETINEX_GRAD_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Variance and Threshold are reduced when iterations increase, and conversely.
!TP_RETINEX_HIGH;High
!TP_RETINEX_HIGHLIG;Highlight
!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_HSLSPACE_LIN;HSL-Linear
!TP_RETINEX_HSLSPACE_LOG;HSL-Logarithmic
+!TP_RETINEX_ITER;Iterations (Tone-mapping)
+!TP_RETINEX_ITER_TOOLTIP;Simulate a tone-mapping operator.\nHigh values increase the processing time.
!TP_RETINEX_LABEL;Retinex
!TP_RETINEX_LABSPACE;L*a*b*
!TP_RETINEX_LOW;Low
+!TP_RETINEX_MAP;Mask method
+!TP_RETINEX_MAP_CURV;Curve only
+!TP_RETINEX_MAP_GAUS;Gaussian mask
+!TP_RETINEX_MAP_MAPP;Sharp mask (wavelet partial)
+!TP_RETINEX_MAP_MAPT;Sharp mask (wavelet total)
+!TP_RETINEX_MAP_METHOD_TOOLTIP;Use the mask generated by the Gaussian function above to reduce halos and artifacts.\n\nCurve only: apply a diagonal contrast curve on the mask.\nBeware of artifacts!\n\nGaussian mask: generate and use a Gaussian blur of the original mask.\nQuick.\n\nSharp mask: generate and use a wavelet on the original mask.\nSlow.
+!TP_RETINEX_MAP_NONE;None
!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,\nHighlights = 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_NEIGHBOR;Radius
!TP_RETINEX_NEUTRAL;Reset
!TP_RETINEX_NEUTRAL_TIP;Reset all sliders and curves to their default values.
-!TP_RETINEX_OFFSET;Offset
+!TP_RETINEX_OFFSET;Brightness
+!TP_RETINEX_SCALES;Gaussian gradient
+!TP_RETINEX_SCALES_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Scale and Neighboring pixels are reduced when iterations increase, and conversely.
!TP_RETINEX_SETTINGS;Settings
!TP_RETINEX_SLOPE;Free gamma slope
!TP_RETINEX_STRENGTH;Strength
@@ -1743,8 +1779,15 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике -
!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;Contrast
!TP_RETINEX_VARIANCE_TOOLTIP;Low variance increase local contrast and saturation, but can lead to artifacts.
+!TP_RETINEX_VIEW;Process (Preview)
+!TP_RETINEX_VIEW_MASK;Mask
+!TP_RETINEX_VIEW_METHOD_TOOLTIP;Standard - Normal display.\nMask - Displays the mask.\nUnsharp mask - Displays the image with a high radius unsharp mask.\nTransmission - Auto/Fixed - Displays the file transmission-map, before any action on contrast and brightness.\n\nAttention: the mask does not correspond to reality, but is amplified to make it more visible.
+!TP_RETINEX_VIEW_NONE;Standard
+!TP_RETINEX_VIEW_TRAN;Transmission - Auto
+!TP_RETINEX_VIEW_TRAN2;Transmission - Fixed
+!TP_RETINEX_VIEW_UNSHARP;Unsharp mask
!TP_RGBCURVES_BLUE;B
!TP_RGBCURVES_CHANNEL;Channel
!TP_RGBCURVES_GREEN;G
diff --git a/rtdata/languages/Serbian (Latin Characters) b/rtdata/languages/Serbian (Latin Characters)
index ad813a976..85f66ae5f 100644
--- a/rtdata/languages/Serbian (Latin Characters)
+++ b/rtdata/languages/Serbian (Latin Characters)
@@ -467,7 +467,6 @@ PREFERENCES_CACHEMAXENTRIES;Najveći broj mest u ostavi
PREFERENCES_CACHEOPTS;Podešavanje ostave
PREFERENCES_CACHETHUMBHEIGHT;Najveća visina prikaza
PREFERENCES_CLIPPINGIND;Pokazivači odsečenih delova
-PREFERENCES_CMETRICINTENT;Kolorimetrijska namera
PREFERENCES_CUSTPROFBUILD;Izgradnja proizvoljnog početnog profila slike
PREFERENCES_CUSTPROFBUILDHINT;Izvršna datoteka (ili skripta) koja se poziva kada izgrađujete novi početni profil za sliku.nPrihvata parametre iz komandne linije radi pravljenja .pp3 datoteke na osnovu nekih pravila:n[Putanja do RAW/JPG] [Putanja podrazumevanog profila] [Blenda] [Ekspozicija u s] [Žižna dužina mm] [ISO] [Objektiv] [Foto-aparat]
PREFERENCES_CUSTPROFBUILDPATH;Izvršna putanja
@@ -516,7 +515,6 @@ PREFERENCES_MENUGROUPPROFILEOPERATIONS;Grupiši radnje sa profilima
PREFERENCES_MENUGROUPRANK;Grupiši ocenjivanje
PREFERENCES_MENUOPTIONS;Opcije menija
PREFERENCES_METADATA;Metapodaci
-PREFERENCES_MONITORICC;Profil monitora
PREFERENCES_MULTITAB;Režim u više listova
PREFERENCES_MULTITABDUALMON;Režim u više listova, na drugom monitoru
PREFERENCES_OUTDIR;Izlazni direktorijum
@@ -1083,7 +1081,7 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike -
!HISTORY_MSG_364;W - Final - Contrast balance
!HISTORY_MSG_365;W - Final - Delta balance
!HISTORY_MSG_366;W - Residual - Compression gamma
-!HISTORY_MSG_367;W - ES - Local contrast curve
+!HISTORY_MSG_367;W - Final - 'After' contrast curve
!HISTORY_MSG_368;W - Final - Contrast balance
!HISTORY_MSG_369;W - Final - Balance method
!HISTORY_MSG_370;W - Final - Local contrast curve
@@ -1124,11 +1122,11 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike -
!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_408;Retinex - Radius
+!HISTORY_MSG_409;Retinex - Contrast
+!HISTORY_MSG_410;Retinex - Brightness
!HISTORY_MSG_411;Retinex - Strength
-!HISTORY_MSG_412;Retinex - Scales
+!HISTORY_MSG_412;Retinex - Gaussian Gradient
!HISTORY_MSG_413;Retinex - Variance
!HISTORY_MSG_414;Retinex - Histogram - Lab
!HISTORY_MSG_415;Retinex - Transmission
@@ -1143,6 +1141,19 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike -
!HISTORY_MSG_424;Retinex - HL threshold
!HISTORY_MSG_425;Retinex - Log base
!HISTORY_MSG_426;Retinex - Hue equalizer
+!HISTORY_MSG_427;Output rendering intent
+!HISTORY_MSG_428;Monitor rendering intent
+!HISTORY_MSG_429;Retinex - Iterations
+!HISTORY_MSG_430;Retinex - Transmission Gradient
+!HISTORY_MSG_431;Retinex - Strength Gradient
+!HISTORY_MSG_432;Retinex - M - Highlights
+!HISTORY_MSG_433;Retinex - M - Highlights TW
+!HISTORY_MSG_434;Retinex - M - Shadows
+!HISTORY_MSG_435;Retinex - M - Shadows TW
+!HISTORY_MSG_436;Retinex - M - Radius
+!HISTORY_MSG_437;Retinex - M - Method
+!HISTORY_MSG_438;Retinex - M - Equalizer
+!HISTORY_MSG_439;Retinex - Preview
!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
@@ -1166,6 +1177,8 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike -
!MAIN_TOOLTIP_PREVIEWL;Preview the Luminosity.\nShortcut: v\n\n0.299*R + 0.587*G + 0.114*B
!MAIN_TOOLTIP_PREVIEWR;Preview the Red channel.\nShortcut: r
!MAIN_TOOLTIP_THRESHOLD;Threshold
+!MONITOR_PROFILE_SYSTEM;System default
+!MONITOR_SOFTPROOF;Soft-proof
!NAVIGATOR_B;B:
!NAVIGATOR_G;G:
!NAVIGATOR_H;H:
@@ -1191,6 +1204,7 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike -
!PARTIALPASTE_PCVIGNETTE;Vignette filter
!PARTIALPASTE_PREPROCESS_DEADPIXFILT;Dead pixel filter
!PARTIALPASTE_PREPROCESS_HOTPIXFILT;Hot pixel filter
+!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
!PARTIALPASTE_RAW_LMMSEITERATIONS;LMMSE enhancement steps
!PARTIALPASTE_RETINEX;Retinex
!PARTIALPASTE_RGBCURVES;RGB curves
@@ -1260,6 +1274,8 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike -
!PREFERENCES_MED;Medium (Tile/2)
!PREFERENCES_MENUGROUPEXTPROGS;Group "Open with"
!PREFERENCES_MIN;Mini (100x115)
+!PREFERENCES_MONINTENT;Default monitor intent
+!PREFERENCES_MONPROFILE;Default monitor profile
!PREFERENCES_NAVGUIDEBRUSH;Navigator guide color
!PREFERENCES_NAVIGATIONFRAME;Navigation
!PREFERENCES_NOISE;Noise Reduction
@@ -1270,6 +1286,7 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike -
!PREFERENCES_PREVDEMO_FAST;Fast
!PREFERENCES_PREVDEMO_LABEL;Demosaicing method used for the preview at <100% zoom:
!PREFERENCES_PREVDEMO_SIDECAR;As in PP3
+!PREFERENCES_PROFILE_NONE;None
!PREFERENCES_REMEMBERZOOMPAN;Remember zoom % and pan offset
!PREFERENCES_REMEMBERZOOMPAN_TOOLTIP;Remember the zoom % and pan offset of the current image when opening a new image.\n\nThis option only works in "Single Editor Tab Mode" and when "Demosaicing method used for the preview at <100% zoom" is set to "As in PP3".
!PREFERENCES_RGBDTL_LABEL;Max number of threads for Noise Reduction and Wavelet Levels
@@ -1620,6 +1637,7 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike -
!TP_ICM_INPUTCUSTOM_TOOLTIP;Select your own DCP/ICC color profile file for the camera.
!TP_ICM_INPUTEMBEDDED_TOOLTIP;Use color profile embedded in non-raw files.
!TP_ICM_INPUTNONE_TOOLTIP;Use no input color profile at all.\nUse only in special cases.
+!TP_ICM_PROFILEINTENT;Rendering Intent
!TP_ICM_SAVEREFERENCE_APPLYWB;Apply white balance
!TP_ICM_SAVEREFERENCE_APPLYWB_TOOLTIP;Generally, apply the white balance when saving images to create ICC profiles, and do not apply the white balance to create DCP profiles.
!TP_ICM_SAVEREFERENCE_TOOLTIP;Save the linear TIFF image before the input profile is applied. The result can be used for calibration purposes and generation of a camera profile.
@@ -1700,12 +1718,15 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike -
!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL
!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b*
!TP_RETINEX_CONTEDIT_LH;Hue equalizer
+!TP_RETINEX_CONTEDIT_MAP;Mask 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_CURVEEDITOR_MAP;L=f(L)
+!TP_RETINEX_CURVEEDITOR_MAP_TOOLTIP;This curve can be applied alone or with a Gaussian mask or wavelet mask.\nBeware of artifacts!
!TP_RETINEX_FREEGAMMA;Free gamma
-!TP_RETINEX_GAIN;Gain
+!TP_RETINEX_GAIN;Contrast
!TP_RETINEX_GAIN_TOOLTIP;Acts on the restored image.\n\nThis is very different from the others settings. Used for black or white pixels, and to help balance the histogram.
!TP_RETINEX_GAMMA;Gamma
!TP_RETINEX_GAMMA_FREE;Free
@@ -1714,24 +1735,39 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike -
!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_GRAD;Transmission gradient
+!TP_RETINEX_GRADS;Strength gradient
+!TP_RETINEX_GRADS_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Strength is reduced when iterations increase, and conversely.
+!TP_RETINEX_GRAD_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Variance and Threshold are reduced when iterations increase, and conversely.
!TP_RETINEX_HIGH;High
!TP_RETINEX_HIGHLIG;Highlight
!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_HSLSPACE_LIN;HSL-Linear
!TP_RETINEX_HSLSPACE_LOG;HSL-Logarithmic
+!TP_RETINEX_ITER;Iterations (Tone-mapping)
+!TP_RETINEX_ITER_TOOLTIP;Simulate a tone-mapping operator.\nHigh values increase the processing time.
!TP_RETINEX_LABEL;Retinex
!TP_RETINEX_LABSPACE;L*a*b*
!TP_RETINEX_LOW;Low
+!TP_RETINEX_MAP;Mask method
+!TP_RETINEX_MAP_CURV;Curve only
+!TP_RETINEX_MAP_GAUS;Gaussian mask
+!TP_RETINEX_MAP_MAPP;Sharp mask (wavelet partial)
+!TP_RETINEX_MAP_MAPT;Sharp mask (wavelet total)
+!TP_RETINEX_MAP_METHOD_TOOLTIP;Use the mask generated by the Gaussian function above to reduce halos and artifacts.\n\nCurve only: apply a diagonal contrast curve on the mask.\nBeware of artifacts!\n\nGaussian mask: generate and use a Gaussian blur of the original mask.\nQuick.\n\nSharp mask: generate and use a wavelet on the original mask.\nSlow.
+!TP_RETINEX_MAP_NONE;None
!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,\nHighlights = 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_NEIGHBOR;Radius
!TP_RETINEX_NEUTRAL;Reset
!TP_RETINEX_NEUTRAL_TIP;Reset all sliders and curves to their default values.
-!TP_RETINEX_OFFSET;Offset
+!TP_RETINEX_OFFSET;Brightness
+!TP_RETINEX_SCALES;Gaussian gradient
+!TP_RETINEX_SCALES_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Scale and Neighboring pixels are reduced when iterations increase, and conversely.
!TP_RETINEX_SETTINGS;Settings
!TP_RETINEX_SLOPE;Free gamma slope
!TP_RETINEX_STRENGTH;Strength
@@ -1743,8 +1779,15 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike -
!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;Contrast
!TP_RETINEX_VARIANCE_TOOLTIP;Low variance increase local contrast and saturation, but can lead to artifacts.
+!TP_RETINEX_VIEW;Process (Preview)
+!TP_RETINEX_VIEW_MASK;Mask
+!TP_RETINEX_VIEW_METHOD_TOOLTIP;Standard - Normal display.\nMask - Displays the mask.\nUnsharp mask - Displays the image with a high radius unsharp mask.\nTransmission - Auto/Fixed - Displays the file transmission-map, before any action on contrast and brightness.\n\nAttention: the mask does not correspond to reality, but is amplified to make it more visible.
+!TP_RETINEX_VIEW_NONE;Standard
+!TP_RETINEX_VIEW_TRAN;Transmission - Auto
+!TP_RETINEX_VIEW_TRAN2;Transmission - Fixed
+!TP_RETINEX_VIEW_UNSHARP;Unsharp mask
!TP_RGBCURVES_BLUE;B
!TP_RGBCURVES_CHANNEL;Channel
!TP_RGBCURVES_GREEN;G
diff --git a/rtdata/languages/Slovak b/rtdata/languages/Slovak
index 2924fe7dd..3e51af283 100644
--- a/rtdata/languages/Slovak
+++ b/rtdata/languages/Slovak
@@ -312,7 +312,6 @@ PREFERENCES_CACHEMAXENTRIES;Maximálny počet vstupov v cache
PREFERENCES_CACHEOPTS;Možnosti cache
PREFERENCES_CACHETHUMBHEIGHT;Maximálna výška zmenšenín
PREFERENCES_CLIPPINGIND;Indikácia orezu
-PREFERENCES_CMETRICINTENT;Kolorimetrický zámer
PREFERENCES_DATEFORMAT;Formát dátumu
PREFERENCES_DATEFORMATHINT;Môžete použiť nasledujúce formátovacie reťazce:\n%y : rok\n%m : mesiac\n%d : deň\n\nNapríklad, slovenský formát je:\n%d.%m.%y
PREFERENCES_DEFAULTLANG;Predvolený jazyk
@@ -337,7 +336,6 @@ PREFERENCES_INTENT_ABSOLUTE;Absolútny kolorimetrický
PREFERENCES_INTENT_PERCEPTUAL;Vnímaný
PREFERENCES_INTENT_RELATIVE;Relatívny kolorimetrický
PREFERENCES_INTENT_SATURATION;Sýtosť
-PREFERENCES_MONITORICC;Profil monitora
PREFERENCES_MULTITAB;Režim viacerých kariet
PREFERENCES_OUTDIR;Výstupný adresár
PREFERENCES_OUTDIRFOLDER;Uložiť do adresára
@@ -942,7 +940,7 @@ ZOOMPANEL_ZOOMOUT;Oddialiť -
!HISTORY_MSG_364;W - Final - Contrast balance
!HISTORY_MSG_365;W - Final - Delta balance
!HISTORY_MSG_366;W - Residual - Compression gamma
-!HISTORY_MSG_367;W - ES - Local contrast curve
+!HISTORY_MSG_367;W - Final - 'After' contrast curve
!HISTORY_MSG_368;W - Final - Contrast balance
!HISTORY_MSG_369;W - Final - Balance method
!HISTORY_MSG_370;W - Final - Local contrast curve
@@ -983,11 +981,11 @@ ZOOMPANEL_ZOOMOUT;Oddialiť -
!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_408;Retinex - Radius
+!HISTORY_MSG_409;Retinex - Contrast
+!HISTORY_MSG_410;Retinex - Brightness
!HISTORY_MSG_411;Retinex - Strength
-!HISTORY_MSG_412;Retinex - Scales
+!HISTORY_MSG_412;Retinex - Gaussian Gradient
!HISTORY_MSG_413;Retinex - Variance
!HISTORY_MSG_414;Retinex - Histogram - Lab
!HISTORY_MSG_415;Retinex - Transmission
@@ -1002,6 +1000,19 @@ ZOOMPANEL_ZOOMOUT;Oddialiť -
!HISTORY_MSG_424;Retinex - HL threshold
!HISTORY_MSG_425;Retinex - Log base
!HISTORY_MSG_426;Retinex - Hue equalizer
+!HISTORY_MSG_427;Output rendering intent
+!HISTORY_MSG_428;Monitor rendering intent
+!HISTORY_MSG_429;Retinex - Iterations
+!HISTORY_MSG_430;Retinex - Transmission Gradient
+!HISTORY_MSG_431;Retinex - Strength Gradient
+!HISTORY_MSG_432;Retinex - M - Highlights
+!HISTORY_MSG_433;Retinex - M - Highlights TW
+!HISTORY_MSG_434;Retinex - M - Shadows
+!HISTORY_MSG_435;Retinex - M - Shadows TW
+!HISTORY_MSG_436;Retinex - M - Radius
+!HISTORY_MSG_437;Retinex - M - Method
+!HISTORY_MSG_438;Retinex - M - Equalizer
+!HISTORY_MSG_439;Retinex - Preview
!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
@@ -1041,6 +1052,8 @@ ZOOMPANEL_ZOOMOUT;Oddialiť -
!MAIN_TOOLTIP_SHOWHIDERP1;Show/Hide the right panel.\nShortcut: Alt-l
!MAIN_TOOLTIP_SHOWHIDETP1;Show/Hide the top panel.\nShortcut: Shift-l
!MAIN_TOOLTIP_THRESHOLD;Threshold
+!MONITOR_PROFILE_SYSTEM;System default
+!MONITOR_SOFTPROOF;Soft-proof
!NAVIGATOR_B;B:
!NAVIGATOR_G;G:
!NAVIGATOR_H;H:
@@ -1084,6 +1097,7 @@ ZOOMPANEL_ZOOMOUT;Oddialiť -
!PARTIALPASTE_PREPROCESS_GREENEQUIL;Green equilibration
!PARTIALPASTE_PREPROCESS_HOTPIXFILT;Hot pixel filter
!PARTIALPASTE_PREPROCESS_LINEDENOISE;Line noise filter
+!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
!PARTIALPASTE_RAWCACORR_AUTO;CA auto-correction
!PARTIALPASTE_RAWCACORR_CABLUE;CA blue
!PARTIALPASTE_RAWCACORR_CARED;CA red
@@ -1191,6 +1205,8 @@ ZOOMPANEL_ZOOMOUT;Oddialiť -
!PREFERENCES_MENUOPTIONS;Context Menu Options
!PREFERENCES_METADATA;Metadata
!PREFERENCES_MIN;Mini (100x115)
+!PREFERENCES_MONINTENT;Default monitor intent
+!PREFERENCES_MONPROFILE;Default monitor profile
!PREFERENCES_MULTITABDUALMON;Multiple Editor Tabs In Own Window Mode
!PREFERENCES_NAVGUIDEBRUSH;Navigator guide color
!PREFERENCES_NAVIGATIONFRAME;Navigation
@@ -1204,6 +1220,7 @@ ZOOMPANEL_ZOOMOUT;Oddialiť -
!PREFERENCES_PREVDEMO_FAST;Fast
!PREFERENCES_PREVDEMO_LABEL;Demosaicing method used for the preview at <100% zoom:
!PREFERENCES_PREVDEMO_SIDECAR;As in PP3
+!PREFERENCES_PROFILE_NONE;None
!PREFERENCES_REMEMBERZOOMPAN;Remember zoom % and pan offset
!PREFERENCES_REMEMBERZOOMPAN_TOOLTIP;Remember the zoom % and pan offset of the current image when opening a new image.\n\nThis option only works in "Single Editor Tab Mode" and when "Demosaicing method used for the preview at <100% zoom" is set to "As in PP3".
!PREFERENCES_RGBDTL_LABEL;Max number of threads for Noise Reduction and Wavelet Levels
@@ -1595,6 +1612,7 @@ ZOOMPANEL_ZOOMOUT;Oddialiť -
!TP_ICM_INPUTEMBEDDED_TOOLTIP;Use color profile embedded in non-raw files.
!TP_ICM_INPUTNONE;No profile
!TP_ICM_INPUTNONE_TOOLTIP;Use no input color profile at all.\nUse only in special cases.
+!TP_ICM_PROFILEINTENT;Rendering Intent
!TP_ICM_SAVEREFERENCE_APPLYWB;Apply white balance
!TP_ICM_SAVEREFERENCE_APPLYWB_TOOLTIP;Generally, apply the white balance when saving images to create ICC profiles, and do not apply the white balance to create DCP profiles.
!TP_ICM_SAVEREFERENCE_TOOLTIP;Save the linear TIFF image before the input profile is applied. The result can be used for calibration purposes and generation of a camera profile.
@@ -1689,12 +1707,15 @@ ZOOMPANEL_ZOOMOUT;Oddialiť -
!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL
!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b*
!TP_RETINEX_CONTEDIT_LH;Hue equalizer
+!TP_RETINEX_CONTEDIT_MAP;Mask 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_CURVEEDITOR_MAP;L=f(L)
+!TP_RETINEX_CURVEEDITOR_MAP_TOOLTIP;This curve can be applied alone or with a Gaussian mask or wavelet mask.\nBeware of artifacts!
!TP_RETINEX_FREEGAMMA;Free gamma
-!TP_RETINEX_GAIN;Gain
+!TP_RETINEX_GAIN;Contrast
!TP_RETINEX_GAIN_TOOLTIP;Acts on the restored image.\n\nThis is very different from the others settings. Used for black or white pixels, and to help balance the histogram.
!TP_RETINEX_GAMMA;Gamma
!TP_RETINEX_GAMMA_FREE;Free
@@ -1703,24 +1724,39 @@ ZOOMPANEL_ZOOMOUT;Oddialiť -
!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_GRAD;Transmission gradient
+!TP_RETINEX_GRADS;Strength gradient
+!TP_RETINEX_GRADS_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Strength is reduced when iterations increase, and conversely.
+!TP_RETINEX_GRAD_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Variance and Threshold are reduced when iterations increase, and conversely.
!TP_RETINEX_HIGH;High
!TP_RETINEX_HIGHLIG;Highlight
!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_HSLSPACE_LIN;HSL-Linear
!TP_RETINEX_HSLSPACE_LOG;HSL-Logarithmic
+!TP_RETINEX_ITER;Iterations (Tone-mapping)
+!TP_RETINEX_ITER_TOOLTIP;Simulate a tone-mapping operator.\nHigh values increase the processing time.
!TP_RETINEX_LABEL;Retinex
!TP_RETINEX_LABSPACE;L*a*b*
!TP_RETINEX_LOW;Low
+!TP_RETINEX_MAP;Mask method
+!TP_RETINEX_MAP_CURV;Curve only
+!TP_RETINEX_MAP_GAUS;Gaussian mask
+!TP_RETINEX_MAP_MAPP;Sharp mask (wavelet partial)
+!TP_RETINEX_MAP_MAPT;Sharp mask (wavelet total)
+!TP_RETINEX_MAP_METHOD_TOOLTIP;Use the mask generated by the Gaussian function above to reduce halos and artifacts.\n\nCurve only: apply a diagonal contrast curve on the mask.\nBeware of artifacts!\n\nGaussian mask: generate and use a Gaussian blur of the original mask.\nQuick.\n\nSharp mask: generate and use a wavelet on the original mask.\nSlow.
+!TP_RETINEX_MAP_NONE;None
!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,\nHighlights = 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_NEIGHBOR;Radius
!TP_RETINEX_NEUTRAL;Reset
!TP_RETINEX_NEUTRAL_TIP;Reset all sliders and curves to their default values.
-!TP_RETINEX_OFFSET;Offset
+!TP_RETINEX_OFFSET;Brightness
+!TP_RETINEX_SCALES;Gaussian gradient
+!TP_RETINEX_SCALES_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Scale and Neighboring pixels are reduced when iterations increase, and conversely.
!TP_RETINEX_SETTINGS;Settings
!TP_RETINEX_SLOPE;Free gamma slope
!TP_RETINEX_STRENGTH;Strength
@@ -1732,8 +1768,15 @@ ZOOMPANEL_ZOOMOUT;Oddialiť -
!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;Contrast
!TP_RETINEX_VARIANCE_TOOLTIP;Low variance increase local contrast and saturation, but can lead to artifacts.
+!TP_RETINEX_VIEW;Process (Preview)
+!TP_RETINEX_VIEW_MASK;Mask
+!TP_RETINEX_VIEW_METHOD_TOOLTIP;Standard - Normal display.\nMask - Displays the mask.\nUnsharp mask - Displays the image with a high radius unsharp mask.\nTransmission - Auto/Fixed - Displays the file transmission-map, before any action on contrast and brightness.\n\nAttention: the mask does not correspond to reality, but is amplified to make it more visible.
+!TP_RETINEX_VIEW_NONE;Standard
+!TP_RETINEX_VIEW_TRAN;Transmission - Auto
+!TP_RETINEX_VIEW_TRAN2;Transmission - Fixed
+!TP_RETINEX_VIEW_UNSHARP;Unsharp mask
!TP_RGBCURVES_BLUE;B
!TP_RGBCURVES_CHANNEL;Channel
!TP_RGBCURVES_GREEN;G
diff --git a/rtdata/languages/Suomi b/rtdata/languages/Suomi
index 5c8c27551..bc79ebcd5 100644
--- a/rtdata/languages/Suomi
+++ b/rtdata/languages/Suomi
@@ -268,7 +268,6 @@ PREFERENCES_CACHEMAXENTRIES;Välimuistin koko
PREFERENCES_CACHEOPTS;Välimuistin asetukset
PREFERENCES_CACHETHUMBHEIGHT;Suurin esikatselukuvan korkeus
PREFERENCES_CLIPPINGIND;Leikkautuminen
-PREFERENCES_CMETRICINTENT;Näköistystapa
PREFERENCES_DATEFORMAT;Päivämäärän muoto
PREFERENCES_DATEFORMATHINT;Voit käyttää seuraavia komentoja:\n%y : vuosi\n%m : kuukausi\n%d : päivä\n\nEsimerkiksi, pp.kk.vvvv:\n%d.%m.%y
PREFERENCES_DEFAULTLANG;Oletuskieli
@@ -292,7 +291,6 @@ PREFERENCES_INTENT_ABSOLUTE;Absoluuttinen kolorimetrinen
PREFERENCES_INTENT_PERCEPTUAL;Havainnollinen
PREFERENCES_INTENT_RELATIVE;Suhteellinen kolorimetrinen
PREFERENCES_INTENT_SATURATION;Kylläisyyden säilyttävä
-PREFERENCES_MONITORICC;Näytön profiili
PREFERENCES_OUTDIR;Tallennushakemisto
PREFERENCES_OUTDIRFOLDER;Valitse hakemisto
PREFERENCES_OUTDIRFOLDERHINT;Tallenna kuvat valittuun kansioon
@@ -880,7 +878,7 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K]
!HISTORY_MSG_364;W - Final - Contrast balance
!HISTORY_MSG_365;W - Final - Delta balance
!HISTORY_MSG_366;W - Residual - Compression gamma
-!HISTORY_MSG_367;W - ES - Local contrast curve
+!HISTORY_MSG_367;W - Final - 'After' contrast curve
!HISTORY_MSG_368;W - Final - Contrast balance
!HISTORY_MSG_369;W - Final - Balance method
!HISTORY_MSG_370;W - Final - Local contrast curve
@@ -921,11 +919,11 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K]
!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_408;Retinex - Radius
+!HISTORY_MSG_409;Retinex - Contrast
+!HISTORY_MSG_410;Retinex - Brightness
!HISTORY_MSG_411;Retinex - Strength
-!HISTORY_MSG_412;Retinex - Scales
+!HISTORY_MSG_412;Retinex - Gaussian Gradient
!HISTORY_MSG_413;Retinex - Variance
!HISTORY_MSG_414;Retinex - Histogram - Lab
!HISTORY_MSG_415;Retinex - Transmission
@@ -940,6 +938,19 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K]
!HISTORY_MSG_424;Retinex - HL threshold
!HISTORY_MSG_425;Retinex - Log base
!HISTORY_MSG_426;Retinex - Hue equalizer
+!HISTORY_MSG_427;Output rendering intent
+!HISTORY_MSG_428;Monitor rendering intent
+!HISTORY_MSG_429;Retinex - Iterations
+!HISTORY_MSG_430;Retinex - Transmission Gradient
+!HISTORY_MSG_431;Retinex - Strength Gradient
+!HISTORY_MSG_432;Retinex - M - Highlights
+!HISTORY_MSG_433;Retinex - M - Highlights TW
+!HISTORY_MSG_434;Retinex - M - Shadows
+!HISTORY_MSG_435;Retinex - M - Shadows TW
+!HISTORY_MSG_436;Retinex - M - Radius
+!HISTORY_MSG_437;Retinex - M - Method
+!HISTORY_MSG_438;Retinex - M - Equalizer
+!HISTORY_MSG_439;Retinex - Preview
!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
@@ -986,6 +997,8 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K]
!MAIN_TOOLTIP_SHOWHIDETP1;Show/Hide the top panel.\nShortcut: Shift-l
!MAIN_TOOLTIP_THRESHOLD;Threshold
!MAIN_TOOLTIP_TOGGLE;Toggle the Before/After view.\nShortcut: Shift-b
+!MONITOR_PROFILE_SYSTEM;System default
+!MONITOR_SOFTPROOF;Soft-proof
!NAVIGATOR_B;B:
!NAVIGATOR_G;G:
!NAVIGATOR_H;H:
@@ -1031,6 +1044,7 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K]
!PARTIALPASTE_PREPROCESS_GREENEQUIL;Green equilibration
!PARTIALPASTE_PREPROCESS_HOTPIXFILT;Hot pixel filter
!PARTIALPASTE_PREPROCESS_LINEDENOISE;Line noise filter
+!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
!PARTIALPASTE_RAWCACORR_AUTO;CA auto-correction
!PARTIALPASTE_RAWCACORR_CABLUE;CA blue
!PARTIALPASTE_RAWCACORR_CARED;CA red
@@ -1142,6 +1156,8 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K]
!PREFERENCES_MENUOPTIONS;Context Menu Options
!PREFERENCES_METADATA;Metadata
!PREFERENCES_MIN;Mini (100x115)
+!PREFERENCES_MONINTENT;Default monitor intent
+!PREFERENCES_MONPROFILE;Default monitor profile
!PREFERENCES_MULTITAB;Multiple Editor Tabs Mode
!PREFERENCES_MULTITABDUALMON;Multiple Editor Tabs In Own Window Mode
!PREFERENCES_NAVGUIDEBRUSH;Navigator guide color
@@ -1157,6 +1173,7 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K]
!PREFERENCES_PREVDEMO_FAST;Fast
!PREFERENCES_PREVDEMO_LABEL;Demosaicing method used for the preview at <100% zoom:
!PREFERENCES_PREVDEMO_SIDECAR;As in PP3
+!PREFERENCES_PROFILE_NONE;None
!PREFERENCES_PROPERTY;Property
!PREFERENCES_REMEMBERZOOMPAN;Remember zoom % and pan offset
!PREFERENCES_REMEMBERZOOMPAN_TOOLTIP;Remember the zoom % and pan offset of the current image when opening a new image.\n\nThis option only works in "Single Editor Tab Mode" and when "Demosaicing method used for the preview at <100% zoom" is set to "As in PP3".
@@ -1567,6 +1584,7 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K]
!TP_ICM_INPUTEMBEDDED_TOOLTIP;Use color profile embedded in non-raw files.
!TP_ICM_INPUTNONE;No profile
!TP_ICM_INPUTNONE_TOOLTIP;Use no input color profile at all.\nUse only in special cases.
+!TP_ICM_PROFILEINTENT;Rendering Intent
!TP_ICM_SAVEREFERENCE_APPLYWB;Apply white balance
!TP_ICM_SAVEREFERENCE_APPLYWB_TOOLTIP;Generally, apply the white balance when saving images to create ICC profiles, and do not apply the white balance to create DCP profiles.
!TP_ICM_SAVEREFERENCE_TOOLTIP;Save the linear TIFF image before the input profile is applied. The result can be used for calibration purposes and generation of a camera profile.
@@ -1681,12 +1699,15 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K]
!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL
!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b*
!TP_RETINEX_CONTEDIT_LH;Hue equalizer
+!TP_RETINEX_CONTEDIT_MAP;Mask 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_CURVEEDITOR_MAP;L=f(L)
+!TP_RETINEX_CURVEEDITOR_MAP_TOOLTIP;This curve can be applied alone or with a Gaussian mask or wavelet mask.\nBeware of artifacts!
!TP_RETINEX_FREEGAMMA;Free gamma
-!TP_RETINEX_GAIN;Gain
+!TP_RETINEX_GAIN;Contrast
!TP_RETINEX_GAIN_TOOLTIP;Acts on the restored image.\n\nThis is very different from the others settings. Used for black or white pixels, and to help balance the histogram.
!TP_RETINEX_GAMMA;Gamma
!TP_RETINEX_GAMMA_FREE;Free
@@ -1695,24 +1716,39 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K]
!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_GRAD;Transmission gradient
+!TP_RETINEX_GRADS;Strength gradient
+!TP_RETINEX_GRADS_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Strength is reduced when iterations increase, and conversely.
+!TP_RETINEX_GRAD_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Variance and Threshold are reduced when iterations increase, and conversely.
!TP_RETINEX_HIGH;High
!TP_RETINEX_HIGHLIG;Highlight
!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_HSLSPACE_LIN;HSL-Linear
!TP_RETINEX_HSLSPACE_LOG;HSL-Logarithmic
+!TP_RETINEX_ITER;Iterations (Tone-mapping)
+!TP_RETINEX_ITER_TOOLTIP;Simulate a tone-mapping operator.\nHigh values increase the processing time.
!TP_RETINEX_LABEL;Retinex
!TP_RETINEX_LABSPACE;L*a*b*
!TP_RETINEX_LOW;Low
+!TP_RETINEX_MAP;Mask method
+!TP_RETINEX_MAP_CURV;Curve only
+!TP_RETINEX_MAP_GAUS;Gaussian mask
+!TP_RETINEX_MAP_MAPP;Sharp mask (wavelet partial)
+!TP_RETINEX_MAP_MAPT;Sharp mask (wavelet total)
+!TP_RETINEX_MAP_METHOD_TOOLTIP;Use the mask generated by the Gaussian function above to reduce halos and artifacts.\n\nCurve only: apply a diagonal contrast curve on the mask.\nBeware of artifacts!\n\nGaussian mask: generate and use a Gaussian blur of the original mask.\nQuick.\n\nSharp mask: generate and use a wavelet on the original mask.\nSlow.
+!TP_RETINEX_MAP_NONE;None
!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,\nHighlights = 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_NEIGHBOR;Radius
!TP_RETINEX_NEUTRAL;Reset
!TP_RETINEX_NEUTRAL_TIP;Reset all sliders and curves to their default values.
-!TP_RETINEX_OFFSET;Offset
+!TP_RETINEX_OFFSET;Brightness
+!TP_RETINEX_SCALES;Gaussian gradient
+!TP_RETINEX_SCALES_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Scale and Neighboring pixels are reduced when iterations increase, and conversely.
!TP_RETINEX_SETTINGS;Settings
!TP_RETINEX_SLOPE;Free gamma slope
!TP_RETINEX_STRENGTH;Strength
@@ -1724,8 +1760,15 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K]
!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;Contrast
!TP_RETINEX_VARIANCE_TOOLTIP;Low variance increase local contrast and saturation, but can lead to artifacts.
+!TP_RETINEX_VIEW;Process (Preview)
+!TP_RETINEX_VIEW_MASK;Mask
+!TP_RETINEX_VIEW_METHOD_TOOLTIP;Standard - Normal display.\nMask - Displays the mask.\nUnsharp mask - Displays the image with a high radius unsharp mask.\nTransmission - Auto/Fixed - Displays the file transmission-map, before any action on contrast and brightness.\n\nAttention: the mask does not correspond to reality, but is amplified to make it more visible.
+!TP_RETINEX_VIEW_NONE;Standard
+!TP_RETINEX_VIEW_TRAN;Transmission - Auto
+!TP_RETINEX_VIEW_TRAN2;Transmission - Fixed
+!TP_RETINEX_VIEW_UNSHARP;Unsharp mask
!TP_RGBCURVES_BLUE;B
!TP_RGBCURVES_CHANNEL;Channel
!TP_RGBCURVES_GREEN;G
diff --git a/rtdata/languages/Swedish b/rtdata/languages/Swedish
index c7ee0a82e..9881468e0 100644
--- a/rtdata/languages/Swedish
+++ b/rtdata/languages/Swedish
@@ -827,7 +827,6 @@ PREFERENCES_CLIPPINGIND;Klippindikering
PREFERENCES_CLUTSCACHE;HaldCLUT cache
PREFERENCES_CLUTSCACHE_LABEL;Maximalt antal cachade CLUTs
PREFERENCES_CLUTSDIR;HaldCLUT-katalog
-PREFERENCES_CMETRICINTENT;Kolorimetrisk återgivning
PREFERENCES_CURVEBBOXPOS;Positionen för kopiera/klistra in-knapparna
PREFERENCES_CURVEBBOXPOS_ABOVE;Ovan
PREFERENCES_CURVEBBOXPOS_BELOW;Under
@@ -915,7 +914,6 @@ PREFERENCES_MENUGROUPPROFILEOPERATIONS;Visa "Profilaktiviteter"
PREFERENCES_MENUGROUPRANK;Visa "Betygsättning"
PREFERENCES_MENUOPTIONS;Menyval för högerklick
PREFERENCES_METADATA;Metadata
-PREFERENCES_MONITORICC;Skärmprofil
PREFERENCES_MULTITAB;Öppna bilderna i olika flikar
PREFERENCES_MULTITABDUALMON;Visa bild på andra skärmen, om möjligt, i flerfliksläge
PREFERENCES_NAVGUIDEBRUSH;Översiktsvyns guidefärg
@@ -1759,11 +1757,11 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: -
!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_408;Retinex - Radius
+!HISTORY_MSG_409;Retinex - Contrast
+!HISTORY_MSG_410;Retinex - Brightness
!HISTORY_MSG_411;Retinex - Strength
-!HISTORY_MSG_412;Retinex - Scales
+!HISTORY_MSG_412;Retinex - Gaussian Gradient
!HISTORY_MSG_413;Retinex - Variance
!HISTORY_MSG_414;Retinex - Histogram - Lab
!HISTORY_MSG_415;Retinex - Transmission
@@ -1778,9 +1776,25 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: -
!HISTORY_MSG_424;Retinex - HL threshold
!HISTORY_MSG_425;Retinex - Log base
!HISTORY_MSG_426;Retinex - Hue equalizer
+!HISTORY_MSG_427;Output rendering intent
+!HISTORY_MSG_428;Monitor rendering intent
+!HISTORY_MSG_429;Retinex - Iterations
+!HISTORY_MSG_430;Retinex - Transmission Gradient
+!HISTORY_MSG_431;Retinex - Strength Gradient
+!HISTORY_MSG_432;Retinex - M - Highlights
+!HISTORY_MSG_433;Retinex - M - Highlights TW
+!HISTORY_MSG_434;Retinex - M - Shadows
+!HISTORY_MSG_435;Retinex - M - Shadows TW
+!HISTORY_MSG_436;Retinex - M - Radius
+!HISTORY_MSG_437;Retinex - M - Method
+!HISTORY_MSG_438;Retinex - M - Equalizer
+!HISTORY_MSG_439;Retinex - Preview
!MAIN_BUTTON_SENDTOEDITOR;Edit image in external editor
+!MONITOR_PROFILE_SYSTEM;System default
+!MONITOR_SOFTPROOF;Soft-proof
!PARTIALPASTE_COLORTONING;Color toning
!PARTIALPASTE_FLATFIELDCLIPCONTROL;Flat-field clip control
+!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
!PARTIALPASTE_RETINEX;Retinex
!PREFERENCES_GREY;Output device's Yb luminance (%)
!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.
@@ -1789,8 +1803,11 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: -
!PREFERENCES_MAX;Maxi (Tile)
!PREFERENCES_MED;Medium (Tile/2)
!PREFERENCES_MIN;Mini (100x115)
+!PREFERENCES_MONINTENT;Default monitor intent
+!PREFERENCES_MONPROFILE;Default monitor profile
!PREFERENCES_PARSEDEXTDOWNHINT;Move selected extension down in the list.
!PREFERENCES_PARSEDEXTUPHINT;Move selected extension up in the list.
+!PREFERENCES_PROFILE_NONE;None
!PREFERENCES_SERIALIZE_TIFF_READ;Tiff Read Settings
!PREFERENCES_SIMPLAUT;Tool mode
!PREFERENCES_TINB;Number of tiles
@@ -1843,6 +1860,7 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: -
!TP_ICM_APPLYHUESATMAP_TOOLTIP;Employ the embedded DCP base table (HueSatMap). The setting is only enabled if the selected DCP has one.
!TP_ICM_APPLYLOOKTABLE;Look table
!TP_ICM_APPLYLOOKTABLE_TOOLTIP;Employ the embedded DCP look table. The setting is only enabled if the selected DCP has one.
+!TP_ICM_PROFILEINTENT;Rendering Intent
!TP_NEUTRAL;Reset
!TP_PRSHARPENING_LABEL;Post-Resize Sharpening
!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.
@@ -1851,12 +1869,15 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: -
!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL
!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b*
!TP_RETINEX_CONTEDIT_LH;Hue equalizer
+!TP_RETINEX_CONTEDIT_MAP;Mask 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_CURVEEDITOR_MAP;L=f(L)
+!TP_RETINEX_CURVEEDITOR_MAP_TOOLTIP;This curve can be applied alone or with a Gaussian mask or wavelet mask.\nBeware of artifacts!
!TP_RETINEX_FREEGAMMA;Free gamma
-!TP_RETINEX_GAIN;Gain
+!TP_RETINEX_GAIN;Contrast
!TP_RETINEX_GAIN_TOOLTIP;Acts on the restored image.\n\nThis is very different from the others settings. Used for black or white pixels, and to help balance the histogram.
!TP_RETINEX_GAMMA;Gamma
!TP_RETINEX_GAMMA_FREE;Free
@@ -1865,24 +1886,39 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: -
!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_GRAD;Transmission gradient
+!TP_RETINEX_GRADS;Strength gradient
+!TP_RETINEX_GRADS_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Strength is reduced when iterations increase, and conversely.
+!TP_RETINEX_GRAD_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Variance and Threshold are reduced when iterations increase, and conversely.
!TP_RETINEX_HIGH;High
!TP_RETINEX_HIGHLIG;Highlight
!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_HSLSPACE_LIN;HSL-Linear
!TP_RETINEX_HSLSPACE_LOG;HSL-Logarithmic
+!TP_RETINEX_ITER;Iterations (Tone-mapping)
+!TP_RETINEX_ITER_TOOLTIP;Simulate a tone-mapping operator.\nHigh values increase the processing time.
!TP_RETINEX_LABEL;Retinex
!TP_RETINEX_LABSPACE;L*a*b*
!TP_RETINEX_LOW;Low
+!TP_RETINEX_MAP;Mask method
+!TP_RETINEX_MAP_CURV;Curve only
+!TP_RETINEX_MAP_GAUS;Gaussian mask
+!TP_RETINEX_MAP_MAPP;Sharp mask (wavelet partial)
+!TP_RETINEX_MAP_MAPT;Sharp mask (wavelet total)
+!TP_RETINEX_MAP_METHOD_TOOLTIP;Use the mask generated by the Gaussian function above to reduce halos and artifacts.\n\nCurve only: apply a diagonal contrast curve on the mask.\nBeware of artifacts!\n\nGaussian mask: generate and use a Gaussian blur of the original mask.\nQuick.\n\nSharp mask: generate and use a wavelet on the original mask.\nSlow.
+!TP_RETINEX_MAP_NONE;None
!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,\nHighlights = 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_NEIGHBOR;Radius
!TP_RETINEX_NEUTRAL;Reset
!TP_RETINEX_NEUTRAL_TIP;Reset all sliders and curves to their default values.
-!TP_RETINEX_OFFSET;Offset
+!TP_RETINEX_OFFSET;Brightness
+!TP_RETINEX_SCALES;Gaussian gradient
+!TP_RETINEX_SCALES_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Scale and Neighboring pixels are reduced when iterations increase, and conversely.
!TP_RETINEX_SETTINGS;Settings
!TP_RETINEX_SLOPE;Free gamma slope
!TP_RETINEX_STRENGTH;Strength
@@ -1894,8 +1930,15 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: -
!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;Contrast
!TP_RETINEX_VARIANCE_TOOLTIP;Low variance increase local contrast and saturation, but can lead to artifacts.
+!TP_RETINEX_VIEW;Process (Preview)
+!TP_RETINEX_VIEW_MASK;Mask
+!TP_RETINEX_VIEW_METHOD_TOOLTIP;Standard - Normal display.\nMask - Displays the mask.\nUnsharp mask - Displays the image with a high radius unsharp mask.\nTransmission - Auto/Fixed - Displays the file transmission-map, before any action on contrast and brightness.\n\nAttention: the mask does not correspond to reality, but is amplified to make it more visible.
+!TP_RETINEX_VIEW_NONE;Standard
+!TP_RETINEX_VIEW_TRAN;Transmission - Auto
+!TP_RETINEX_VIEW_TRAN2;Transmission - Fixed
+!TP_RETINEX_VIEW_UNSHARP;Unsharp mask
!TP_WAVELET_CBENAB;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
diff --git a/rtdata/languages/Turkish b/rtdata/languages/Turkish
index 2a6694a87..36a2b82df 100644
--- a/rtdata/languages/Turkish
+++ b/rtdata/languages/Turkish
@@ -268,7 +268,6 @@ PREFERENCES_CACHEMAXENTRIES;Maximal Number of Cache Entries
PREFERENCES_CACHEOPTS;Cache Options
PREFERENCES_CACHETHUMBHEIGHT;Maximal Thumbnail Height
PREFERENCES_CLIPPINGIND;Kırpma gösterme
-PREFERENCES_CMETRICINTENT;Renkölçer
PREFERENCES_DATEFORMAT;Tarih biçimi
PREFERENCES_DATEFORMATHINT;You can use the following formatting strings:\n%y : year\n%m : month\n%d : day\n\nFor example, the hungarian date format is:\n%y/%m/%d
PREFERENCES_DEFAULTLANG;Varsayılan dil
@@ -292,7 +291,6 @@ PREFERENCES_INTENT_ABSOLUTE;Mutlak
PREFERENCES_INTENT_PERCEPTUAL;Algısal
PREFERENCES_INTENT_RELATIVE;Bağıl
PREFERENCES_INTENT_SATURATION;Doyum
-PREFERENCES_MONITORICC;Ekran profili
PREFERENCES_OUTDIR;Çıktı dizini
PREFERENCES_OUTDIRFOLDER;Save to folder
PREFERENCES_OUTDIRFOLDERHINT;Put the saved images to the seledted folder
@@ -879,7 +877,7 @@ TP_WBALANCE_TEMPERATURE;Isı
!HISTORY_MSG_364;W - Final - Contrast balance
!HISTORY_MSG_365;W - Final - Delta balance
!HISTORY_MSG_366;W - Residual - Compression gamma
-!HISTORY_MSG_367;W - ES - Local contrast curve
+!HISTORY_MSG_367;W - Final - 'After' contrast curve
!HISTORY_MSG_368;W - Final - Contrast balance
!HISTORY_MSG_369;W - Final - Balance method
!HISTORY_MSG_370;W - Final - Local contrast curve
@@ -920,11 +918,11 @@ TP_WBALANCE_TEMPERATURE;Isı
!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_408;Retinex - Radius
+!HISTORY_MSG_409;Retinex - Contrast
+!HISTORY_MSG_410;Retinex - Brightness
!HISTORY_MSG_411;Retinex - Strength
-!HISTORY_MSG_412;Retinex - Scales
+!HISTORY_MSG_412;Retinex - Gaussian Gradient
!HISTORY_MSG_413;Retinex - Variance
!HISTORY_MSG_414;Retinex - Histogram - Lab
!HISTORY_MSG_415;Retinex - Transmission
@@ -939,6 +937,19 @@ TP_WBALANCE_TEMPERATURE;Isı
!HISTORY_MSG_424;Retinex - HL threshold
!HISTORY_MSG_425;Retinex - Log base
!HISTORY_MSG_426;Retinex - Hue equalizer
+!HISTORY_MSG_427;Output rendering intent
+!HISTORY_MSG_428;Monitor rendering intent
+!HISTORY_MSG_429;Retinex - Iterations
+!HISTORY_MSG_430;Retinex - Transmission Gradient
+!HISTORY_MSG_431;Retinex - Strength Gradient
+!HISTORY_MSG_432;Retinex - M - Highlights
+!HISTORY_MSG_433;Retinex - M - Highlights TW
+!HISTORY_MSG_434;Retinex - M - Shadows
+!HISTORY_MSG_435;Retinex - M - Shadows TW
+!HISTORY_MSG_436;Retinex - M - Radius
+!HISTORY_MSG_437;Retinex - M - Method
+!HISTORY_MSG_438;Retinex - M - Equalizer
+!HISTORY_MSG_439;Retinex - Preview
!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
@@ -985,6 +996,8 @@ TP_WBALANCE_TEMPERATURE;Isı
!MAIN_TOOLTIP_SHOWHIDETP1;Show/Hide the top panel.\nShortcut: Shift-l
!MAIN_TOOLTIP_THRESHOLD;Threshold
!MAIN_TOOLTIP_TOGGLE;Toggle the Before/After view.\nShortcut: Shift-b
+!MONITOR_PROFILE_SYSTEM;System default
+!MONITOR_SOFTPROOF;Soft-proof
!NAVIGATOR_B;B:
!NAVIGATOR_G;G:
!NAVIGATOR_H;H:
@@ -1030,6 +1043,7 @@ TP_WBALANCE_TEMPERATURE;Isı
!PARTIALPASTE_PREPROCESS_GREENEQUIL;Green equilibration
!PARTIALPASTE_PREPROCESS_HOTPIXFILT;Hot pixel filter
!PARTIALPASTE_PREPROCESS_LINEDENOISE;Line noise filter
+!PARTIALPASTE_PRSHARPENING;Post-resize sharpening
!PARTIALPASTE_RAWCACORR_AUTO;CA auto-correction
!PARTIALPASTE_RAWCACORR_CABLUE;CA blue
!PARTIALPASTE_RAWCACORR_CARED;CA red
@@ -1141,6 +1155,8 @@ TP_WBALANCE_TEMPERATURE;Isı
!PREFERENCES_MENUOPTIONS;Context Menu Options
!PREFERENCES_METADATA;Metadata
!PREFERENCES_MIN;Mini (100x115)
+!PREFERENCES_MONINTENT;Default monitor intent
+!PREFERENCES_MONPROFILE;Default monitor profile
!PREFERENCES_MULTITAB;Multiple Editor Tabs Mode
!PREFERENCES_MULTITABDUALMON;Multiple Editor Tabs In Own Window Mode
!PREFERENCES_NAVGUIDEBRUSH;Navigator guide color
@@ -1156,6 +1172,7 @@ TP_WBALANCE_TEMPERATURE;Isı
!PREFERENCES_PREVDEMO_FAST;Fast
!PREFERENCES_PREVDEMO_LABEL;Demosaicing method used for the preview at <100% zoom:
!PREFERENCES_PREVDEMO_SIDECAR;As in PP3
+!PREFERENCES_PROFILE_NONE;None
!PREFERENCES_PROPERTY;Property
!PREFERENCES_REMEMBERZOOMPAN;Remember zoom % and pan offset
!PREFERENCES_REMEMBERZOOMPAN_TOOLTIP;Remember the zoom % and pan offset of the current image when opening a new image.\n\nThis option only works in "Single Editor Tab Mode" and when "Demosaicing method used for the preview at <100% zoom" is set to "As in PP3".
@@ -1566,6 +1583,7 @@ TP_WBALANCE_TEMPERATURE;Isı
!TP_ICM_INPUTEMBEDDED_TOOLTIP;Use color profile embedded in non-raw files.
!TP_ICM_INPUTNONE;No profile
!TP_ICM_INPUTNONE_TOOLTIP;Use no input color profile at all.\nUse only in special cases.
+!TP_ICM_PROFILEINTENT;Rendering Intent
!TP_ICM_SAVEREFERENCE_APPLYWB;Apply white balance
!TP_ICM_SAVEREFERENCE_APPLYWB_TOOLTIP;Generally, apply the white balance when saving images to create ICC profiles, and do not apply the white balance to create DCP profiles.
!TP_ICM_SAVEREFERENCE_TOOLTIP;Save the linear TIFF image before the input profile is applied. The result can be used for calibration purposes and generation of a camera profile.
@@ -1680,12 +1698,15 @@ TP_WBALANCE_TEMPERATURE;Isı
!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL
!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b*
!TP_RETINEX_CONTEDIT_LH;Hue equalizer
+!TP_RETINEX_CONTEDIT_MAP;Mask 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_CURVEEDITOR_MAP;L=f(L)
+!TP_RETINEX_CURVEEDITOR_MAP_TOOLTIP;This curve can be applied alone or with a Gaussian mask or wavelet mask.\nBeware of artifacts!
!TP_RETINEX_FREEGAMMA;Free gamma
-!TP_RETINEX_GAIN;Gain
+!TP_RETINEX_GAIN;Contrast
!TP_RETINEX_GAIN_TOOLTIP;Acts on the restored image.\n\nThis is very different from the others settings. Used for black or white pixels, and to help balance the histogram.
!TP_RETINEX_GAMMA;Gamma
!TP_RETINEX_GAMMA_FREE;Free
@@ -1694,24 +1715,39 @@ TP_WBALANCE_TEMPERATURE;Isı
!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_GRAD;Transmission gradient
+!TP_RETINEX_GRADS;Strength gradient
+!TP_RETINEX_GRADS_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Strength is reduced when iterations increase, and conversely.
+!TP_RETINEX_GRAD_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Variance and Threshold are reduced when iterations increase, and conversely.
!TP_RETINEX_HIGH;High
!TP_RETINEX_HIGHLIG;Highlight
!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_HSLSPACE_LIN;HSL-Linear
!TP_RETINEX_HSLSPACE_LOG;HSL-Logarithmic
+!TP_RETINEX_ITER;Iterations (Tone-mapping)
+!TP_RETINEX_ITER_TOOLTIP;Simulate a tone-mapping operator.\nHigh values increase the processing time.
!TP_RETINEX_LABEL;Retinex
!TP_RETINEX_LABSPACE;L*a*b*
!TP_RETINEX_LOW;Low
+!TP_RETINEX_MAP;Mask method
+!TP_RETINEX_MAP_CURV;Curve only
+!TP_RETINEX_MAP_GAUS;Gaussian mask
+!TP_RETINEX_MAP_MAPP;Sharp mask (wavelet partial)
+!TP_RETINEX_MAP_MAPT;Sharp mask (wavelet total)
+!TP_RETINEX_MAP_METHOD_TOOLTIP;Use the mask generated by the Gaussian function above to reduce halos and artifacts.\n\nCurve only: apply a diagonal contrast curve on the mask.\nBeware of artifacts!\n\nGaussian mask: generate and use a Gaussian blur of the original mask.\nQuick.\n\nSharp mask: generate and use a wavelet on the original mask.\nSlow.
+!TP_RETINEX_MAP_NONE;None
!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,\nHighlights = 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_NEIGHBOR;Radius
!TP_RETINEX_NEUTRAL;Reset
!TP_RETINEX_NEUTRAL_TIP;Reset all sliders and curves to their default values.
-!TP_RETINEX_OFFSET;Offset
+!TP_RETINEX_OFFSET;Brightness
+!TP_RETINEX_SCALES;Gaussian gradient
+!TP_RETINEX_SCALES_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Scale and Neighboring pixels are reduced when iterations increase, and conversely.
!TP_RETINEX_SETTINGS;Settings
!TP_RETINEX_SLOPE;Free gamma slope
!TP_RETINEX_STRENGTH;Strength
@@ -1723,8 +1759,15 @@ TP_WBALANCE_TEMPERATURE;Isı
!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;Contrast
!TP_RETINEX_VARIANCE_TOOLTIP;Low variance increase local contrast and saturation, but can lead to artifacts.
+!TP_RETINEX_VIEW;Process (Preview)
+!TP_RETINEX_VIEW_MASK;Mask
+!TP_RETINEX_VIEW_METHOD_TOOLTIP;Standard - Normal display.\nMask - Displays the mask.\nUnsharp mask - Displays the image with a high radius unsharp mask.\nTransmission - Auto/Fixed - Displays the file transmission-map, before any action on contrast and brightness.\n\nAttention: the mask does not correspond to reality, but is amplified to make it more visible.
+!TP_RETINEX_VIEW_NONE;Standard
+!TP_RETINEX_VIEW_TRAN;Transmission - Auto
+!TP_RETINEX_VIEW_TRAN2;Transmission - Fixed
+!TP_RETINEX_VIEW_UNSHARP;Unsharp mask
!TP_RGBCURVES_BLUE;B
!TP_RGBCURVES_CHANNEL;Channel
!TP_RGBCURVES_GREEN;G
diff --git a/rtdata/languages/default b/rtdata/languages/default
index 67eeaf8df..e44e2f5c1 100644
--- a/rtdata/languages/default
+++ b/rtdata/languages/default
@@ -787,8 +787,8 @@ MAIN_TOOLTIP_SHOWHIDERP1;Show/Hide the right panel.\nShortcut: Alt-l
MAIN_TOOLTIP_SHOWHIDETP1;Show/Hide the top panel.\nShortcut: Shift-l
MAIN_TOOLTIP_THRESHOLD;Threshold
MAIN_TOOLTIP_TOGGLE;Toggle the Before/After view.\nShortcut: Shift-b
-MONITOR_SOFTPROOF;Soft-proof
MONITOR_PROFILE_SYSTEM;System default
+MONITOR_SOFTPROOF;Soft-proof
NAVIGATOR_B;B:
NAVIGATOR_G;G:
NAVIGATOR_H;H:
@@ -903,7 +903,6 @@ PREFERENCES_CLIPPINGIND;Clipping Indication
PREFERENCES_CLUTSCACHE;HaldCLUT Cache
PREFERENCES_CLUTSCACHE_LABEL;Maximum number of cached CLUTs
PREFERENCES_CLUTSDIR;HaldCLUT directory
-PREFERENCES_MONINTENT;Default monitor intent
PREFERENCES_CURVEBBOXPOS;Position of curve copypasta buttons
PREFERENCES_CURVEBBOXPOS_ABOVE;Above
PREFERENCES_CURVEBBOXPOS_BELOW;Below
@@ -998,6 +997,7 @@ PREFERENCES_MENUGROUPRANK;Group "Rank"
PREFERENCES_MENUOPTIONS;Context Menu Options
PREFERENCES_METADATA;Metadata
PREFERENCES_MIN;Mini (100x115)
+PREFERENCES_MONINTENT;Default monitor intent
PREFERENCES_MONPROFILE;Default monitor profile
PREFERENCES_MULTITAB;Multiple Editor Tabs Mode
PREFERENCES_MULTITABDUALMON;Multiple Editor Tabs In Own Window Mode
@@ -1657,12 +1657,12 @@ TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL
TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b*
TP_RETINEX_CONTEDIT_LH;Hue equalizer
TP_RETINEX_CONTEDIT_MAP;Mask equalizer
-TP_RETINEX_CURVEEDITOR_MAP;L=f(L)
-TP_RETINEX_CURVEEDITOR_MAP_TOOLTIP;This curve can be applied alone or with a Gaussian mask or wavelet mask.\nBeware of artifacts!
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_CURVEEDITOR_MAP;L=f(L)
+TP_RETINEX_CURVEEDITOR_MAP_TOOLTIP;This curve can be applied alone or with a Gaussian mask or wavelet mask.\nBeware of artifacts!
TP_RETINEX_FREEGAMMA;Free gamma
TP_RETINEX_GAIN;Gain
TP_RETINEX_GAIN_TOOLTIP;Acts on the restored image.\n\nThis is very different from the others settings. Used for black or white pixels, and to help balance the histogram.
@@ -1673,6 +1673,10 @@ 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_GRAD;Transmission gradient
+TP_RETINEX_GRADS;Strength gradient
+TP_RETINEX_GRADS_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Strength is reduced when iterations increase, and conversely.
+TP_RETINEX_GRAD_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Variance and Threshold are reduced when iterations increase, and conversely.
TP_RETINEX_HIGH;High
TP_RETINEX_HIGHLIG;Highlight
TP_RETINEX_HIGHLIGHT;Highlight threshold
@@ -1681,21 +1685,17 @@ TP_RETINEX_HSLSPACE_LIN;HSL-Linear
TP_RETINEX_HSLSPACE_LOG;HSL-Logarithmic
TP_RETINEX_ITER;Iterations (Tone-mapping)
TP_RETINEX_ITER_TOOLTIP;Simulate a tone-mapping operator.\nHigh values increase the processing time.
-TP_RETINEX_GRAD;Transmission gradient
-TP_RETINEX_GRAD_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Variance and Threshold are reduced when iterations increase, and conversely.
-TP_RETINEX_GRADS;Strength gradient
-TP_RETINEX_GRADS_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Strength is reduced when iterations increase, and conversely.
TP_RETINEX_LABEL;Retinex
TP_RETINEX_LABEL_MASK;Mask
TP_RETINEX_LABSPACE;L*a*b*
TP_RETINEX_LOW;Low
TP_RETINEX_MAP;Mask method
-TP_RETINEX_MAP_METHOD_TOOLTIP;Use the mask generated by the Gaussian function (Radius, Method) to reduce halos and artifacts.\n\nCurve apply a diagonal contrast curve on the mask.\nBeware of artifacts!\n\nGaussian mask: generate and use a Gaussian blur of the original mask.\nQuick.\n\nSharp mask: generate and use a wavelet on the original mask.\nSlow.
-TP_RETINEX_MAP_NONE;None
TP_RETINEX_MAP_CURV;Curve only
TP_RETINEX_MAP_GAUS;Gaussian mask
TP_RETINEX_MAP_MAPP;Sharp mask (wavelet partial)
TP_RETINEX_MAP_MAPT;Sharp mask (wavelet total)
+TP_RETINEX_MAP_METHOD_TOOLTIP;Use the mask generated by the Gaussian function above (Radius, Method) to reduce halos and artifacts.\n\nCurve only: apply a diagonal contrast curve on the mask.\nBeware of artifacts!\n\nGaussian mask: generate and use a Gaussian blur of the original mask.\nQuick.\n\nSharp mask: generate and use a wavelet on the original mask.\nSlow.
+TP_RETINEX_MAP_NONE;None
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.\nHighlights = Remove magenta in highlights.
@@ -1705,9 +1705,9 @@ TP_RETINEX_NEIGHBOR;Radius
TP_RETINEX_NEUTRAL;Reset
TP_RETINEX_NEUTRAL_TIP;Reset all sliders and curves to their default values.
TP_RETINEX_OFFSET;Brightness
-TP_RETINEX_SETTINGS;Settings
TP_RETINEX_SCALES;Gaussian gradient
TP_RETINEX_SCALES_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Scale and radius are reduced when iterations increase, and conversely.
+TP_RETINEX_SETTINGS;Settings
TP_RETINEX_SLOPE;Free gamma slope
TP_RETINEX_STRENGTH;Strength
TP_RETINEX_THRESHOLD;Threshold
@@ -1721,12 +1721,12 @@ TP_RETINEX_UNIFORM;Uniform
TP_RETINEX_VARIANCE;Contrast
TP_RETINEX_VARIANCE_TOOLTIP;Low variance increase local contrast and saturation, but can lead to artifacts.
TP_RETINEX_VIEW;Process
-TP_RETINEX_VIEW_NONE;Standard
TP_RETINEX_VIEW_MASK;Mask
-TP_RETINEX_VIEW_UNSHARP;Unsharp mask
+TP_RETINEX_VIEW_METHOD_TOOLTIP;Standard - Normal display.\nMask - Displays the mask.\nUnsharp mask - Displays the image with a high radius unsharp mask.\nTransmission - Auto/Fixed - Displays the file transmission-map, before any action on contrast and brightness.\n\nAttention: the mask does not correspond to reality, but is amplified to make it more visible.
+TP_RETINEX_VIEW_NONE;Standard
TP_RETINEX_VIEW_TRAN;Transmission - Auto
TP_RETINEX_VIEW_TRAN2;Transmission - Fixed
-TP_RETINEX_VIEW_METHOD_TOOLTIP;Standard - Normal display.\nMask - Displays the mask.\nUnsharp mask - Displays the image with a high radius unsharp mask.\nTransmission - Auto/Fixed - Displays the file transmission-map, before any action on contrast and brightness.\n\nAttention: the mask does not correspond to reality, but is amplified to make it more visible.
+TP_RETINEX_VIEW_UNSHARP;Unsharp mask
TP_RGBCURVES_BLUE;B
TP_RGBCURVES_CHANNEL;Channel
TP_RGBCURVES_GREEN;G
diff --git a/rtdata/themes/09-Gray-Orange.gtkrc b/rtdata/themes/09-Gray-Orange.gtkrc
index 080185d92..579085bcf 100644
--- a/rtdata/themes/09-Gray-Orange.gtkrc
+++ b/rtdata/themes/09-Gray-Orange.gtkrc
@@ -53,6 +53,8 @@ style "clearlooks-default" {
GtkToolbar::internal-padding = 1
GtkTreeView::expander-size = 12
GtkTreeView::vertical-separator = 0
+ GtkTreeView::even_row_color = shade(0.97, @rt_base_color)
+ GtkTreeView::odd_row_color = shade(0.9, @rt_base_color)
GtkMenu::horizontal-padding = 0
GtkMenu::vertical-padding = 0
diff --git a/rtdata/themes/17-Gray-Red.gtkrc b/rtdata/themes/17-Gray-Red.gtkrc
index 03fd95b96..21ba1c816 100644
--- a/rtdata/themes/17-Gray-Red.gtkrc
+++ b/rtdata/themes/17-Gray-Red.gtkrc
@@ -53,6 +53,8 @@ style "clearlooks-default" {
GtkToolbar::internal-padding = 1
GtkTreeView::expander-size = 12
GtkTreeView::vertical-separator = 0
+ GtkTreeView::even_row_color = shade(0.97, @rt_base_color)
+ GtkTreeView::odd_row_color = shade(0.9, @rt_base_color)
GtkMenu::horizontal-padding = 0
GtkMenu::vertical-padding = 0
diff --git a/rtdata/themes/21-Gray-Gray.gtkrc b/rtdata/themes/21-Gray-Gray.gtkrc
index 65bf68698..3bc33edfe 100644
--- a/rtdata/themes/21-Gray-Gray.gtkrc
+++ b/rtdata/themes/21-Gray-Gray.gtkrc
@@ -53,6 +53,8 @@ style "clearlooks-default" {
GtkToolbar::internal-padding = 1
GtkTreeView::expander-size = 12
GtkTreeView::vertical-separator = 1
+ GtkTreeView::even_row_color = shade(0.97, @rt_base_color)
+ GtkTreeView::odd_row_color = shade(0.9, @rt_base_color)
GtkMenu::horizontal-padding = 0
GtkMenu::vertical-padding = 0
diff --git a/rtdata/themes/21-Gray-Orange.gtkrc b/rtdata/themes/21-Gray-Orange.gtkrc
index 44eaaee34..ee8e2669a 100644
--- a/rtdata/themes/21-Gray-Orange.gtkrc
+++ b/rtdata/themes/21-Gray-Orange.gtkrc
@@ -53,6 +53,8 @@ style "clearlooks-default" {
GtkToolbar::internal-padding = 1
GtkTreeView::expander-size = 12
GtkTreeView::vertical-separator = 1
+ GtkTreeView::even_row_color = shade(0.97, @rt_base_color)
+ GtkTreeView::odd_row_color = shade(0.9, @rt_base_color)
GtkMenu::horizontal-padding = 0
GtkMenu::vertical-padding = 0
diff --git a/rtdata/themes/21-Gray-Purple.gtkrc b/rtdata/themes/21-Gray-Purple.gtkrc
index 95f485640..1b15fc3e1 100644
--- a/rtdata/themes/21-Gray-Purple.gtkrc
+++ b/rtdata/themes/21-Gray-Purple.gtkrc
@@ -53,6 +53,8 @@ style "clearlooks-default" {
GtkToolbar::internal-padding = 1
GtkTreeView::expander-size = 12
GtkTreeView::vertical-separator = 1
+ GtkTreeView::even_row_color = shade(0.97, @rt_base_color)
+ GtkTreeView::odd_row_color = shade(0.9, @rt_base_color)
GtkMenu::horizontal-padding = 0
GtkMenu::vertical-padding = 0
diff --git a/rtdata/themes/21-Gray-Red.gtkrc b/rtdata/themes/21-Gray-Red.gtkrc
index ca5378f40..f46dc67e8 100644
--- a/rtdata/themes/21-Gray-Red.gtkrc
+++ b/rtdata/themes/21-Gray-Red.gtkrc
@@ -53,6 +53,8 @@ style "clearlooks-default" {
GtkToolbar::internal-padding = 1
GtkTreeView::expander-size = 12
GtkTreeView::vertical-separator = 1
+ GtkTreeView::even_row_color = shade(0.97, @rt_base_color)
+ GtkTreeView::odd_row_color = shade(0.9, @rt_base_color)
GtkMenu::horizontal-padding = 0
GtkMenu::vertical-padding = 0
diff --git a/rtdata/themes/25-Gray-Gray.gtkrc b/rtdata/themes/25-Gray-Gray.gtkrc
index 13372eb2a..f8f2b7cab 100644
--- a/rtdata/themes/25-Gray-Gray.gtkrc
+++ b/rtdata/themes/25-Gray-Gray.gtkrc
@@ -53,6 +53,8 @@ style "clearlooks-default" {
GtkToolbar::internal-padding = 1
GtkTreeView::expander-size = 12
GtkTreeView::vertical-separator = 0
+ GtkTreeView::even_row_color = shade(0.97, @rt_base_color)
+ GtkTreeView::odd_row_color = shade(0.9, @rt_base_color)
GtkMenu::horizontal-padding = 0
GtkMenu::vertical-padding = 0
diff --git a/rtdata/themes/25-Gray-Purple.gtkrc b/rtdata/themes/25-Gray-Purple.gtkrc
index 79ae82175..5a6fa3fb1 100644
--- a/rtdata/themes/25-Gray-Purple.gtkrc
+++ b/rtdata/themes/25-Gray-Purple.gtkrc
@@ -53,6 +53,8 @@ style "clearlooks-default" {
GtkToolbar::internal-padding = 1
GtkTreeView::expander-size = 12
GtkTreeView::vertical-separator = 0
+ GtkTreeView::even_row_color = shade(0.97, @rt_base_color)
+ GtkTreeView::odd_row_color = shade(0.9, @rt_base_color)
GtkMenu::horizontal-padding = 0
GtkMenu::vertical-padding = 0
diff --git a/rtdata/themes/25-Gray-Red.gtkrc b/rtdata/themes/25-Gray-Red.gtkrc
index fcb6d34ea..346e80f3c 100644
--- a/rtdata/themes/25-Gray-Red.gtkrc
+++ b/rtdata/themes/25-Gray-Red.gtkrc
@@ -53,6 +53,8 @@ style "clearlooks-default" {
GtkToolbar::internal-padding = 1
GtkTreeView::expander-size = 12
GtkTreeView::vertical-separator = 0
+ GtkTreeView::even_row_color = shade(0.97, @rt_base_color)
+ GtkTreeView::odd_row_color = shade(0.9, @rt_base_color)
GtkMenu::horizontal-padding = 0
GtkMenu::vertical-padding = 0
diff --git a/rtdata/themes/37-Gray-Red-Textured.gtkrc b/rtdata/themes/37-Gray-Red-Textured.gtkrc
index 34aa2bb78..ed298e0a2 100644
--- a/rtdata/themes/37-Gray-Red-Textured.gtkrc
+++ b/rtdata/themes/37-Gray-Red-Textured.gtkrc
@@ -53,6 +53,8 @@ style "clearlooks-default" {
GtkToolbar::internal-padding = 1
GtkTreeView::expander-size = 12
GtkTreeView::vertical-separator = 0
+ GtkTreeView::even_row_color = shade(0.97, @rt_base_color)
+ GtkTreeView::odd_row_color = shade(0.9, @rt_base_color)
GtkMenu::horizontal-padding = 0
GtkMenu::vertical-padding = 0
diff --git a/rtdata/themes/37-Gray-Red.gtkrc b/rtdata/themes/37-Gray-Red.gtkrc
index 481c8623d..ad41ce410 100644
--- a/rtdata/themes/37-Gray-Red.gtkrc
+++ b/rtdata/themes/37-Gray-Red.gtkrc
@@ -53,6 +53,8 @@ style "clearlooks-default" {
GtkToolbar::internal-padding = 1
GtkTreeView::expander-size = 12
GtkTreeView::vertical-separator = 0
+ GtkTreeView::even_row_color = shade(0.97, @rt_base_color)
+ GtkTreeView::odd_row_color = shade(0.9, @rt_base_color)
GtkMenu::horizontal-padding = 0
GtkMenu::vertical-padding = 0
diff --git a/rtdata/themes/63-Gray-Cyan.gtkrc b/rtdata/themes/63-Gray-Cyan.gtkrc
index 3c56771ef..bb94d4678 100644
--- a/rtdata/themes/63-Gray-Cyan.gtkrc
+++ b/rtdata/themes/63-Gray-Cyan.gtkrc
@@ -53,6 +53,8 @@ style "clearlooks-default" {
GtkToolbar::internal-padding = 1
GtkTreeView::expander-size = 12
GtkTreeView::vertical-separator = 0
+ GtkTreeView::even_row_color = shade(0.97, @rt_base_color)
+ GtkTreeView::odd_row_color = shade(0.9, @rt_base_color)
GtkMenu::horizontal-padding = 0
GtkMenu::vertical-padding = 0
diff --git a/rtdata/themes/92-Beige-DarkCyan.gtkrc b/rtdata/themes/92-Beige-DarkCyan.gtkrc
index f6489c4fc..f809e357b 100644
--- a/rtdata/themes/92-Beige-DarkCyan.gtkrc
+++ b/rtdata/themes/92-Beige-DarkCyan.gtkrc
@@ -53,6 +53,8 @@ style "clearlooks-default" {
GtkToolbar::internal-padding = 1
GtkTreeView::expander-size = 12
GtkTreeView::vertical-separator = 0
+ GtkTreeView::even_row_color = shade(0.97, @rt_base_color)
+ GtkTreeView::odd_row_color = shade(0.9, @rt_base_color)
GtkMenu::horizontal-padding = 0
GtkMenu::vertical-padding = 0
diff --git a/rtengine/CMakeLists.txt b/rtengine/CMakeLists.txt
index 231875f95..bf9ec442b 100644
--- a/rtengine/CMakeLists.txt
+++ b/rtengine/CMakeLists.txt
@@ -8,7 +8,7 @@ link_directories ("${PROJECT_SOURCE_DIR}/rtexif" ${EXTRA_LIBDIR} ${GTHREAD_LIBRA
set (CAMCONSTSFILE "camconst.json")
set (RTENGINESOURCEFILES safegtk.cc colortemp.cc curves.cc flatcurves.cc diagonalcurves.cc dcraw.cc iccstore.cc color.cc
- dfmanager.cc ffmanager.cc rawimage.cc image8.cc image16.cc imagefloat.cc imagedata.cc imageio.cc improcfun.cc init.cc dcrop.cc
+ dfmanager.cc ffmanager.cc gauss.cc rawimage.cc image8.cc image16.cc imagefloat.cc imagedata.cc imageio.cc improcfun.cc init.cc dcrop.cc
loadinitial.cc procparams.cc rawimagesource.cc demosaic_algos.cc shmap.cc simpleprocess.cc refreshmap.cc
fast_demo.cc amaze_demosaic_RT.cc CA_correct_RT.cc cfa_linedn_RT.cc green_equil_RT.cc hilite_recon.cc expo_before_b.cc
stdimagesource.cc myfile.cc iccjpeg.cc hlmultipliers.cc improccoordinator.cc editbuffer.cc coord.cc
diff --git a/rtengine/PF_correct_RT.cc b/rtengine/PF_correct_RT.cc
index c56ce168d..fce4a14c0 100644
--- a/rtengine/PF_correct_RT.cc
+++ b/rtengine/PF_correct_RT.cc
@@ -65,40 +65,12 @@ SSEFUNCTION void ImProcFunctions::PF_correct_RT(LabImage * src, LabImage * dst,
#pragma omp parallel
#endif
{
- gaussianBlur (src->a, tmp1->a, src->W, src->H, radius);
- gaussianBlur (src->b, tmp1->b, 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;
-#ifdef __SSE2__
-
- if( chCurve ) {
-// vectorized precalculation of the atan2 values
-#ifdef _OPENMP
- #pragma omp parallel
-#endif
- {
- int j;
-#ifdef _OPENMP
- #pragma omp for
-#endif
-
- for(int i = 0; i < height; i++ )
- {
- for(j = 0; j < width - 3; j += 4) {
- _mm_storeu_ps(&fringe[i * width + j], xatan2f(LVFU(src->b[i][j]), LVFU(src->a[i][j])));
- }
-
- for(; j < width; j++) {
- fringe[i * width + j] = xatan2f(src->b[i][j], src->a[i][j]);
- }
- }
- }
- }
-
-#endif
-
#ifdef _OPENMP
#pragma omp parallel
#endif
@@ -109,6 +81,23 @@ SSEFUNCTION void ImProcFunctions::PF_correct_RT(LabImage * src, LabImage * dst,
#endif
for(int i = 0; i < height; i++ ) {
+#ifdef __SSE2__
+
+ // vectorized per row precalculation of the atan2 values
+ if (chCurve) {
+ int k = 0;
+
+ for(; k < width - 3; k += 4) {
+ STVFU(fringe[i * width + k], xatan2f(LVFU(src->b[i][k]), LVFU(src->a[i][k])));
+ }
+
+ for(; k < width; k++) {
+ fringe[i * width + k] = xatan2f(src->b[i][k], src->a[i][k]);
+ }
+ }
+
+#endif // __SSE2__
+
for(int j = 0; j < width; j++) {
if (chCurve) {
#ifdef __SSE2__
@@ -144,19 +133,21 @@ SSEFUNCTION void ImProcFunctions::PF_correct_RT(LabImage * src, LabImage * dst,
#pragma omp parallel
#endif
{
- __m128 sumv = _mm_set1_ps( chromave );
- __m128 onev = _mm_set1_ps( 1.0f );
+ __m128 sumv = F2V( chromave );
+ __m128 onev = F2V( 1.0f );
#ifdef _OPENMP
- #pragma omp for
+ #pragma omp for nowait
#endif
for(int j = 0; j < width * height - 3; j += 4) {
- _mm_storeu_ps( &fringe[j], onev / (LVFU(fringe[j]) + sumv));
+ STVFU(fringe[j], onev / (LVFU(fringe[j]) + sumv));
}
- }
- for(int j = width * height - (width * height) % 4; j < width * height; j++) {
- fringe[j] = 1.f / (fringe[j] + chromave);
+ #pragma omp single
+
+ for(int j = width * height - (width * height) % 4; j < width * height; j++) {
+ fringe[j] = 1.f / (fringe[j] + chromave);
+ }
}
#else
@@ -191,8 +182,6 @@ SSEFUNCTION void ImProcFunctions::PF_correct_RT(LabImage * src, LabImage * dst,
tmp1->b[i][j] = src->b[i][j];
//test for pixel darker than some fraction of neighborhood ave, near an edge, more saturated than average
- /*if (100*tmp1->L[i][j]>50*src->L[i][j] && \*/
- /*1000*abs(tmp1->L[i][j]-src->L[i][j])>thresh*(tmp1->L[i][j]+src->L[i][j]) && \*/
if (fringe[i * width + j] < threshfactor) {
float atot = 0.f;
float btot = 0.f;
@@ -218,8 +207,6 @@ SSEFUNCTION void ImProcFunctions::PF_correct_RT(LabImage * src, LabImage * dst,
tmp1->b[i][j] = src->b[i][j];
//test for pixel darker than some fraction of neighborhood ave, near an edge, more saturated than average
- /*if (100*tmp1->L[i][j]>50*src->L[i][j] && \*/
- /*1000*abs(tmp1->L[i][j]-src->L[i][j])>thresh*(tmp1->L[i][j]+src->L[i][j]) && \*/
if (fringe[i * width + j] < threshfactor) {
float atot = 0.f;
float btot = 0.f;
@@ -245,8 +232,6 @@ SSEFUNCTION void ImProcFunctions::PF_correct_RT(LabImage * src, LabImage * dst,
tmp1->b[i][j] = src->b[i][j];
//test for pixel darker than some fraction of neighborhood ave, near an edge, more saturated than average
- /*if (100*tmp1->L[i][j]>50*src->L[i][j] && \*/
- /*1000*abs(tmp1->L[i][j]-src->L[i][j])>thresh*(tmp1->L[i][j]+src->L[i][j]) && \*/
if (fringe[i * width + j] < threshfactor) {
float atot = 0.f;
float btot = 0.f;
@@ -355,7 +340,7 @@ SSEFUNCTION void ImProcFunctions::PF_correct_RTcam(CieImage * src, CieImage * ds
#ifdef __SSE2__
int j;
vfloat2 sincosvalv;
- __m128 piidv = _mm_set1_ps(piid);
+ __m128 piidv = F2V(piid);
#endif // __SSE2__
#ifdef _OPENMP
#pragma omp for
@@ -366,8 +351,8 @@ SSEFUNCTION void ImProcFunctions::PF_correct_RTcam(CieImage * src, CieImage * ds
for (j = 0; j < width - 3; j += 4) {
sincosvalv = xsincosf(piidv * LVFU(src->h_p[i][j]));
- _mm_storeu_ps(&sraa[i][j], LVFU(src->C_p[i][j])*sincosvalv.y);
- _mm_storeu_ps(&srbb[i][j], LVFU(src->C_p[i][j])*sincosvalv.x);
+ STVFU(sraa[i][j], LVFU(src->C_p[i][j])*sincosvalv.y);
+ STVFU(srbb[i][j], LVFU(src->C_p[i][j])*sincosvalv.x);
}
for (; j < width; j++) {
@@ -392,8 +377,8 @@ SSEFUNCTION void ImProcFunctions::PF_correct_RTcam(CieImage * src, CieImage * ds
#pragma omp parallel
#endif
{
- gaussianBlur (sraa, tmaa, src->W, src->H, radius);
- gaussianBlur (srbb, tmbb, 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;
@@ -414,7 +399,7 @@ SSEFUNCTION void ImProcFunctions::PF_correct_RTcam(CieImage * src, CieImage * ds
for(int i = 0; i < height; i++ )
{
for(j = 0; j < width - 3; j += 4) {
- _mm_storeu_ps(&fringe[i * width + j], xatan2f(LVFU(srbb[i][j]), LVFU(sraa[i][j])));
+ STVFU(fringe[i * width + j], xatan2f(LVFU(srbb[i][j]), LVFU(sraa[i][j])));
}
for(; j < width; j++) {
@@ -470,14 +455,14 @@ SSEFUNCTION void ImProcFunctions::PF_correct_RTcam(CieImage * src, CieImage * ds
#pragma omp parallel
#endif
{
- __m128 sumv = _mm_set1_ps( chromave + eps2 );
- __m128 onev = _mm_set1_ps( 1.0f );
+ __m128 sumv = F2V( chromave + eps2 );
+ __m128 onev = F2V( 1.0f );
#ifdef _OPENMP
#pragma omp for
#endif
for(int j = 0; j < width * height - 3; j += 4) {
- _mm_storeu_ps( &fringe[j], onev / (LVFU(fringe[j]) + sumv));
+ STVFU(fringe[j], onev / (LVFU(fringe[j]) + sumv));
}
}
@@ -599,7 +584,7 @@ SSEFUNCTION void ImProcFunctions::PF_correct_RTcam(CieImage * src, CieImage * ds
#ifdef __SSE2__
int j;
__m128 interav, interbv;
- __m128 piidv = _mm_set1_ps(piid);
+ __m128 piidv = F2V(piid);
#endif
#ifdef _OPENMP
#pragma omp for
@@ -609,11 +594,11 @@ SSEFUNCTION void ImProcFunctions::PF_correct_RTcam(CieImage * src, CieImage * ds
#ifdef __SSE2__
for(j = 0; j < width - 3; j += 4) {
- _mm_storeu_ps( &dst->sh_p[i][j], LVFU(src->sh_p[i][j]));
+ STVFU(dst->sh_p[i][j], LVFU(src->sh_p[i][j]));
interav = LVFU(tmaa[i][j]);
interbv = LVFU(tmbb[i][j]);
- _mm_storeu_ps(&dst->h_p[i][j], (xatan2f(interbv, interav)) / piidv);
- _mm_storeu_ps(&dst->C_p[i][j], _mm_sqrt_ps(SQRV(interbv) + SQRV(interav)));
+ STVFU(dst->h_p[i][j], (xatan2f(interbv, interav)) / piidv);
+ STVFU(dst->C_p[i][j], vsqrtf(SQRV(interbv) + SQRV(interav)));
}
for(; j < width; j++) {
@@ -730,7 +715,7 @@ SSEFUNCTION void ImProcFunctions::Badpixelscam(CieImage * src, CieImage * dst, d
#ifdef __SSE2__
int j;
vfloat2 sincosvalv;
- __m128 piidv = _mm_set1_ps(piid);
+ __m128 piidv = F2V(piid);
#endif // __SSE2__
#ifdef _OPENMP
#pragma omp for
@@ -741,8 +726,8 @@ SSEFUNCTION void ImProcFunctions::Badpixelscam(CieImage * src, CieImage * dst, d
for (j = 0; j < width - 3; j += 4) {
sincosvalv = xsincosf(piidv * LVFU(src->h_p[i][j]));
- _mm_storeu_ps(&sraa[i][j], LVFU(src->C_p[i][j])*sincosvalv.y);
- _mm_storeu_ps(&srbb[i][j], LVFU(src->C_p[i][j])*sincosvalv.x);
+ STVFU(sraa[i][j], LVFU(src->C_p[i][j])*sincosvalv.y);
+ STVFU(srbb[i][j], LVFU(src->C_p[i][j])*sincosvalv.x);
}
for (; j < width; j++) {
@@ -769,12 +754,12 @@ SSEFUNCTION void ImProcFunctions::Badpixelscam(CieImage * src, CieImage * dst, d
{
//chroma a and b
if(mode == 2) { //choice of gaussian blur
- gaussianBlur (sraa, tmaa, src->W, src->H, radius);
- gaussianBlur (srbb, tmbb, src->W, src->H, radius);
+ gaussianBlur (sraa, tmaa, src->W, src->H, radius);
+ gaussianBlur (srbb, tmbb, src->W, src->H, radius);
}
//luma sh_p
- gaussianBlur (src->sh_p, tmL, src->W, src->H, 2.0);//low value to avoid artifacts
+ gaussianBlur (src->sh_p, tmL, src->W, src->H, 2.0);//low value to avoid artifacts
}
if(mode == 1) { //choice of median
@@ -859,8 +844,8 @@ SSEFUNCTION void ImProcFunctions::Badpixelscam(CieImage * src, CieImage * dst, d
int j;
#ifdef __SSE2__
__m128 shfabsv, shmedv;
- __m128 shthrv = _mm_set1_ps(shthr);
- __m128 onev = _mm_set1_ps(1.0f);
+ __m128 shthrv = F2V(shthr);
+ __m128 onev = F2V(1.0f);
#endif // __SSE2__
#ifdef _OPENMP
#pragma omp for private(shfabs, shmed,i1,j1)
@@ -883,14 +868,14 @@ SSEFUNCTION void ImProcFunctions::Badpixelscam(CieImage * src, CieImage * dst, d
for (; j < width - 5; j += 4) {
shfabsv = vabsf(LVFU(src->sh_p[i][j]) - LVFU(tmL[i][j]));
- shmedv = _mm_setzero_ps();
+ shmedv = ZEROV;
for (i1 = max(0, i - 2); i1 <= min(i + 2, height - 1); i1++ )
for (j1 = j - 2; j1 <= j + 2; j1++ ) {
shmedv += vabsf(LVFU(src->sh_p[i1][j1]) - LVFU(tmL[i1][j1]));
}
- _mm_storeu_ps( &badpix[i * width + j], vself(vmaskf_gt(shfabsv, (shmedv - shfabsv)*shthrv), onev, _mm_setzero_ps()));
+ STVFU(badpix[i * width + j], vself(vmaskf_gt(shfabsv, (shmedv - shfabsv)*shthrv), onev, ZEROV));
}
for (; j < width - 2; j++) {
@@ -1082,15 +1067,15 @@ SSEFUNCTION void ImProcFunctions::Badpixelscam(CieImage * src, CieImage * dst, d
#endif
{
int j;
- __m128 sumv = _mm_set1_ps( chrommed + eps2 );
- __m128 onev = _mm_set1_ps( 1.0f );
+ __m128 sumv = F2V( chrommed + eps2 );
+ __m128 onev = F2V( 1.0f );
#ifdef _OPENMP
#pragma omp for
#endif
for(int i = 0; i < height; i++) {
for(j = 0; j < width - 3; j += 4) {
- _mm_storeu_ps( &badpix[i * width + j], onev / (LVFU(badpix[i * width + j]) + sumv));
+ STVFU(badpix[i * width + j], onev / (LVFU(badpix[i * width + j]) + sumv));
}
for(; j < width; j++) {
@@ -1341,7 +1326,7 @@ SSEFUNCTION void ImProcFunctions::BadpixelsLab(LabImage * src, LabImage * dst, d
#ifdef __SSE2__
int j;
// vfloat2 sincosvalv;
-// __m128 piidv = _mm_set1_ps(piid);
+// __m128 piidv = F2V(piid);
#endif // __SSE2__
#ifdef _OPENMP
#pragma omp for
@@ -1351,8 +1336,8 @@ SSEFUNCTION void ImProcFunctions::BadpixelsLab(LabImage * src, LabImage * dst, d
#ifdef __SSE2__
for (j = 0; j < width - 3; j += 4) {
- _mm_storeu_ps(&sraa[i][j], LVFU(src->a[i][j]));
- _mm_storeu_ps(&srbb[i][j], LVFU(src->b[i][j]));
+ STVFU(sraa[i][j], LVFU(src->a[i][j]));
+ STVFU(srbb[i][j], LVFU(src->b[i][j]));
}
for (; j < width; j++) {
@@ -1377,12 +1362,12 @@ SSEFUNCTION void ImProcFunctions::BadpixelsLab(LabImage * src, LabImage * dst, d
{
//chroma a and b
if(mode >= 2) { //choice of gaussian blur
- gaussianBlur (sraa, tmaa, src->W, src->H, radius);
- gaussianBlur (srbb, tmbb, src->W, src->H, radius);
+ gaussianBlur (sraa, tmaa, src->W, src->H, radius);
+ gaussianBlur (srbb, tmbb, src->W, src->H, radius);
}
//luma sh_p
- gaussianBlur (src->L, tmL, src->W, src->H, 2.0);//low value to avoid artifacts
+ gaussianBlur (src->L, tmL, src->W, src->H, 2.0);//low value to avoid artifacts
}
if(mode == 1) { //choice of median
@@ -1467,8 +1452,8 @@ SSEFUNCTION void ImProcFunctions::BadpixelsLab(LabImage * src, LabImage * dst, d
int j;
#ifdef __SSE2__
__m128 shfabsv, shmedv;
- __m128 shthrv = _mm_set1_ps(shthr);
- __m128 onev = _mm_set1_ps(1.0f);
+ __m128 shthrv = F2V(shthr);
+ __m128 onev = F2V(1.0f);
#endif // __SSE2__
#ifdef _OPENMP
#pragma omp for private(shfabs, shmed,i1,j1)
@@ -1491,14 +1476,14 @@ SSEFUNCTION void ImProcFunctions::BadpixelsLab(LabImage * src, LabImage * dst, d
for (; j < width - 5; j += 4) {
shfabsv = vabsf(LVFU(src->L[i][j]) - LVFU(tmL[i][j]));
- shmedv = _mm_setzero_ps();
+ shmedv = ZEROV;
for (i1 = max(0, i - 2); i1 <= min(i + 2, height - 1); i1++ )
for (j1 = j - 2; j1 <= j + 2; j1++ ) {
shmedv += vabsf(LVFU(src->L[i1][j1]) - LVFU(tmL[i1][j1]));
}
- _mm_storeu_ps( &badpix[i * width + j], vself(vmaskf_gt(shfabsv, (shmedv - shfabsv)*shthrv), onev, _mm_setzero_ps()));
+ STVFU(badpix[i * width + j], vself(vmaskf_gt(shfabsv, (shmedv - shfabsv)*shthrv), onev, ZEROV));
}
for (; j < width - 2; j++) {
@@ -1690,15 +1675,15 @@ SSEFUNCTION void ImProcFunctions::BadpixelsLab(LabImage * src, LabImage * dst, d
#endif
{
int j;
- __m128 sumv = _mm_set1_ps( chrommed + eps2 );
- __m128 onev = _mm_set1_ps( 1.0f );
+ __m128 sumv = F2V( chrommed + eps2 );
+ __m128 onev = F2V( 1.0f );
#ifdef _OPENMP
#pragma omp for
#endif
for(int i = 0; i < height; i++) {
for(j = 0; j < width - 3; j += 4) {
- _mm_storeu_ps( &badpix[i * width + j], onev / (LVFU(badpix[i * width + j]) + sumv));
+ STVFU(badpix[i * width + j], onev / (LVFU(badpix[i * width + j]) + sumv));
}
for(; j < width; j++) {
diff --git a/rtengine/camconst.json b/rtengine/camconst.json
index 5e1397f27..1cfbfddf6 100644
--- a/rtengine/camconst.json
+++ b/rtengine/camconst.json
@@ -1546,12 +1546,12 @@ Quality X: unknown, ie we knowing to little about the camera properties to know
and white level is typically at or close to 65535. However sensors vary a bit and can be noisy around clip
so we cut away 0.05 stop from top down to 63300 to be a bit conservative. */
{ // quality A
- "make_model": [ "Phase One P40+", "Phase One IQ140", "Leaf Credo 40", "Phase One P65+", "Phase One IQ160", "Leaf Credo 60", "Phase One IQ260" ],
+ "make_model": [ "Phase One P40+", "Phase One IQ140", "Leaf Credo 40", "Phase One P65+", "Phase One IQ160", "Leaf Credo 60", "Phase One IQ260", "Phase One IQ3 60MP" ],
"dcraw_matrix": [ 8035,435,-962,-6001,13872,2320,-1159,3065,5434 ],
"ranges": { "black": 0, "white": 63300 }
},
{ // quality A
- "make_model": [ "Phase One IQ180", "Leaf Credo 80", "Phase One IQ280" ],
+ "make_model": [ "Phase One IQ180", "Leaf Credo 80", "Phase One IQ280", "Phase One IQ3 80MP" ],
"dcraw_matrix": [ 6294,686,-712,-5435,13417,2211,-1006,2435,5042 ],
"ranges": { "black": 0, "white": 63300 }
},
@@ -1576,10 +1576,15 @@ Quality X: unknown, ie we knowing to little about the camera properties to know
"ranges": { "black": 0, "white": 63300 }
},
{ // quality X, matrix taken from H5D-50c which has the same sensor, probably with the same CFA. Color looks good to the eye with files tested.
- "make_model": [ "Phase One IQ250", "Leaf Credo 50" ],
+ "make_model": [ "Phase One IQ250", "Leaf Credo 50", "Phase One IQ3 50MP" ],
"dcraw_matrix": [ 4932, -835, 141, -4878, 11868, 3437, -1138, 1961, 7067 ],
"ranges": { "black": 0, "white": 64400 } // CMOS sensor, we dare to set white level a bit higher than for the more varying Phase One CCDs
},
+ { // quality C, matrix made from crappy cc24 photo
+ "make_model": [ "Phase One IQ3 100MP" ],
+ "dcraw_matrix": [ 4479,-895,-536,-5818,13569,2742,-1186,2190,7909],
+ "ranges": { "black": 0, "white": 64400 }
+ },
{ // Quality A for tested CFV, the other models have the same sensor (16 megapixel square sensor)
"make_model": [ "Hasselblad V96C", "Hasselblad CFV", "Hasselblad CFV-II" ],
diff --git a/rtengine/dcraw.cc b/rtengine/dcraw.cc
index b1260e307..09cdb8d0f 100644
--- a/rtengine/dcraw.cc
+++ b/rtengine/dcraw.cc
@@ -1685,7 +1685,8 @@ void CLASS phase_one_load_raw_c()
pixel[col] = curve[pixel[col]];
}
for (col=0; col < raw_width; col++) {
- i = (pixel[col] << 2) - ph1.black
+ if (ph1.format != 8) pixel[col] <<= 2;
+ i = pixel[col] - ph1.black
+ cblack[row][col >= ph1.split_col]
+ rblack[col][row >= ph1.split_row];
if (i > 0) RAW(row,col) = i;
diff --git a/rtengine/dcraw.patch b/rtengine/dcraw.patch
index 4451e8909..ce2d186d8 100644
--- a/rtengine/dcraw.patch
+++ b/rtengine/dcraw.patch
@@ -1,5 +1,5 @@
---- dcraw.c 2016-01-02 12:05:48 +0000
-+++ dcraw.cc 2016-01-02 13:21:21 +0000
+--- dcraw.c 2015-09-08 08:08:11.000000000 +0200
++++ dcraw.cc 2016-01-08 15:37:02.884467080 +0100
@@ -1,3 +1,15 @@
+/*RT*/#include
+/*RT*/#include
@@ -236,7 +236,17 @@
unsigned c;
if (nbits == -1)
-@@ -1731,6 +1695,338 @@
+@@ -1721,7 +1685,8 @@
+ pixel[col] = curve[pixel[col]];
+ }
+ for (col=0; col < raw_width; col++) {
+- i = (pixel[col] << 2) - ph1.black
++ if (ph1.format != 8) pixel[col] <<= 2;
++ i = pixel[col] - ph1.black
+ + cblack[row][col >= ph1.split_col]
+ + rblack[col][row >= ph1.split_row];
+ if (i > 0) RAW(row,col) = i;
+@@ -1731,6 +1696,338 @@
maximum = 0xfffc - ph1.black;
}
@@ -575,7 +585,7 @@
void CLASS hasselblad_load_raw()
{
struct jhead jh;
-@@ -1954,10 +2250,10 @@
+@@ -1954,10 +2251,10 @@
maximum = curve[0x3ff];
}
@@ -589,7 +599,7 @@
int byte;
if (!nbits) return vbits=0;
-@@ -2140,7 +2436,7 @@
+@@ -2140,7 +2437,7 @@
void CLASS kodak_radc_load_raw()
{
@@ -598,7 +608,7 @@
1,1, 2,3, 3,4, 4,2, 5,7, 6,5, 7,6, 7,8,
1,0, 2,1, 3,3, 4,4, 5,2, 6,7, 7,6, 8,5, 8,8,
2,1, 2,3, 3,0, 3,2, 3,4, 4,6, 5,5, 6,7, 6,8,
-@@ -2246,11 +2542,11 @@
+@@ -2246,11 +2543,11 @@
METHODDEF(boolean)
fill_input_buffer (j_decompress_ptr cinfo)
{
@@ -612,7 +622,7 @@
cinfo->src->next_input_byte = jpeg_buffer;
cinfo->src->bytes_in_buffer = nbytes;
return TRUE;
-@@ -2600,10 +2896,9 @@
+@@ -2600,10 +2897,9 @@
maximum = (1 << (thumb_misc & 31)) - 1;
}
@@ -625,7 +635,7 @@
if (start) {
for (p=0; p < 4; p++)
pad[p] = key = key * 48828125 + 1;
-@@ -2688,11 +2983,13 @@
+@@ -2688,11 +2984,13 @@
bit += 7;
}
for (i=0; i < 16; i++, col+=2)
@@ -640,7 +650,7 @@
}
void CLASS samsung_load_raw()
-@@ -2988,7 +3285,7 @@
+@@ -2988,7 +3286,7 @@
void CLASS foveon_decoder (unsigned size, unsigned code)
{
@@ -649,7 +659,7 @@
struct decode *cur;
int i, len;
-@@ -3085,7 +3382,7 @@
+@@ -3085,7 +3383,7 @@
pred[c] += diff[dindex->leaf];
if (pred[c] >> 16 && ~pred[c] >> 16) derror();
}
@@ -658,7 +668,7 @@
}
}
}
-@@ -3696,6 +3993,8 @@
+@@ -3696,6 +3994,8 @@
if (load_raw == &CLASS phase_one_load_raw ||
load_raw == &CLASS phase_one_load_raw_c)
phase_one_correct();
@@ -667,7 +677,7 @@
if (fuji_width) {
for (row=0; row < raw_height-top_margin*2; row++) {
for (col=0; col < fuji_width << !fuji_layout; col++) {
-@@ -3711,10 +4010,13 @@
+@@ -3711,10 +4011,13 @@
}
}
} else {
@@ -683,7 +693,7 @@
if (mask[0][3] > 0) goto mask_set;
if (load_raw == &CLASS canon_load_raw ||
load_raw == &CLASS lossless_jpeg_load_raw) {
-@@ -4316,239 +4618,8 @@
+@@ -4316,239 +4619,8 @@
}
}
@@ -924,7 +934,7 @@
void CLASS cielab (ushort rgb[3], short lab[3])
{
-@@ -4814,112 +4885,7 @@
+@@ -4814,112 +4886,7 @@
}
#undef fcol
@@ -1037,7 +1047,7 @@
#undef TS
void CLASS median_filter()
-@@ -5089,7 +5055,7 @@
+@@ -5089,7 +5056,7 @@
}
}
@@ -1046,7 +1056,7 @@
void CLASS parse_makernote (int base, int uptag)
{
-@@ -5194,6 +5160,11 @@
+@@ -5194,6 +5161,11 @@
tag |= uptag << 16;
if (tag == 2 && strstr(make,"NIKON") && !iso_speed)
iso_speed = (get2(),get2());
@@ -1058,7 +1068,7 @@
if (tag == 4 && len > 26 && len < 35) {
if ((i=(get4(),get2())) != 0x7fff && !iso_speed)
iso_speed = 50 * pow (2, i/32.0 - 4);
-@@ -5246,12 +5217,16 @@
+@@ -5246,12 +5218,16 @@
cam_mul[2] = get4() << 2;
}
}
@@ -1076,7 +1086,7 @@
if (tag == 0x1d)
while ((c = fgetc(ifp)) && c != EOF)
serial = serial*10 + (isdigit(c) ? c - '0' : c % 10);
-@@ -5442,6 +5417,7 @@
+@@ -5442,6 +5418,7 @@
case 33434: shutter = getreal(type); break;
case 33437: aperture = getreal(type); break;
case 34855: iso_speed = get2(); break;
@@ -1084,7 +1094,7 @@
case 36867:
case 36868: get_timestamp(0); break;
case 37377: if ((expo = -getreal(type)) < 128)
-@@ -5613,28 +5589,33 @@
+@@ -5613,28 +5590,33 @@
}
}
@@ -1124,7 +1134,7 @@
entries = get2();
if (entries > 512) return 1;
while (entries--) {
-@@ -5702,7 +5683,8 @@
+@@ -5702,7 +5684,8 @@
fgets (make, 64, ifp);
break;
case 272: /* Model */
@@ -1134,7 +1144,7 @@
break;
case 280: /* Panasonic RW2 offset */
if (type != 4) break;
-@@ -5762,6 +5744,9 @@
+@@ -5762,6 +5745,9 @@
case 315: /* Artist */
fread (artist, 64, 1, ifp);
break;
@@ -1144,7 +1154,7 @@
case 322: /* TileWidth */
tiff_ifd[ifd].tile_width = getint(type);
break;
-@@ -5777,6 +5762,9 @@
+@@ -5777,6 +5763,9 @@
is_raw = 5;
}
break;
@@ -1154,7 +1164,7 @@
case 330: /* SubIFDs */
if (!strcmp(model,"DSLR-A100") && tiff_ifd[ifd].width == 3872) {
load_raw = &CLASS sony_arw_load_raw;
-@@ -5790,6 +5778,9 @@
+@@ -5790,6 +5779,9 @@
fseek (ifp, i+4, SEEK_SET);
}
break;
@@ -1164,7 +1174,7 @@
case 400:
strcpy (make, "Sarnoff");
maximum = 0xfff;
-@@ -5971,6 +5962,9 @@
+@@ -5971,6 +5963,9 @@
if (!make[0]) strcpy (make, "DNG");
is_raw = 1;
break;
@@ -1174,7 +1184,7 @@
case 50710: /* CFAPlaneColor */
if (filters == 9) break;
if (len > 4) len = 4;
-@@ -6002,12 +5996,21 @@
+@@ -6002,12 +5997,21 @@
case 61450:
cblack[4] = cblack[5] = MIN(sqrt(len),64);
case 50714: /* BlackLevel */
@@ -1202,7 +1212,7 @@
case 50715: /* BlackLevelDeltaH */
case 50716: /* BlackLevelDeltaV */
for (num=i=0; i < len; i++)
-@@ -6024,13 +6027,13 @@
+@@ -6024,13 +6028,13 @@
case 50721: /* ColorMatrix1 */
case 50722: /* ColorMatrix2 */
FORCC for (j=0; j < 3; j++)
@@ -1218,7 +1228,7 @@
break;
case 50727: /* AnalogBalance */
FORCC ab[c] = getreal(type);
-@@ -6053,6 +6056,11 @@
+@@ -6053,6 +6057,11 @@
case 50752:
read_shorts (cr2_slice, 3);
break;
@@ -1230,7 +1240,7 @@
case 50829: /* ActiveArea */
top_margin = getint(type);
left_margin = getint(type);
-@@ -6085,21 +6093,27 @@
+@@ -6085,21 +6094,27 @@
fread (buf, sony_length, 1, ifp);
sony_decrypt (buf, sony_length/4, 1, sony_key);
sfp = ifp;
@@ -1266,7 +1276,7 @@
cam_xyz_coeff (cmatrix, cam_xyz);
}
if (asn[0]) {
-@@ -6107,13 +6121,14 @@
+@@ -6107,13 +6122,14 @@
FORCC cam_mul[c] = 1 / asn[c];
}
if (!use_cm)
@@ -1282,7 +1292,7 @@
fseek (ifp, base, SEEK_SET);
order = get2();
-@@ -6191,7 +6206,12 @@
+@@ -6191,7 +6207,12 @@
case 8: load_raw = &CLASS eight_bit_load_raw; break;
case 12: if (tiff_ifd[raw].phint == 2)
load_flags = 6;
@@ -1296,7 +1306,7 @@
case 14: load_flags = 0;
case 16: load_raw = &CLASS unpacked_load_raw;
if (!strncmp(make,"OLYMPUS",7) &&
-@@ -6230,6 +6250,7 @@
+@@ -6230,6 +6251,7 @@
case 32803: load_raw = &CLASS kodak_65000_load_raw;
}
case 32867: case 34892: break;
@@ -1304,7 +1314,7 @@
default: is_raw = 0;
}
if (!dng_version)
-@@ -6315,7 +6336,7 @@
+@@ -6315,7 +6337,7 @@
{
const char *file, *ext;
char *jname, *jfile, *jext;
@@ -1313,7 +1323,7 @@
ext = strrchr (ifname, '.');
file = strrchr (ifname, '/');
-@@ -6337,13 +6358,14 @@
+@@ -6337,13 +6359,14 @@
} else
while (isdigit(*--jext)) {
if (*jext != '9') {
@@ -1330,7 +1340,7 @@
if (verbose)
fprintf (stderr,_("Reading metadata from %s ...\n"), jname);
parse_tiff (12);
-@@ -6620,6 +6642,7 @@
+@@ -6620,6 +6643,7 @@
load_raw = ph1.format < 3 ?
&CLASS phase_one_load_raw : &CLASS phase_one_load_raw_c;
maximum = 0xffff;
@@ -1338,7 +1348,7 @@
strcpy (make, "Phase One");
if (model[0]) return;
switch (raw_height) {
-@@ -6688,7 +6711,11 @@
+@@ -6688,7 +6712,11 @@
order = get2();
hlen = get4();
if (get4() == 0x48454150) /* "HEAP" */
@@ -1350,7 +1360,7 @@
if (parse_tiff (save+6)) apply_tiff();
fseek (ifp, save+len, SEEK_SET);
}
-@@ -6960,7 +6987,8 @@
+@@ -6960,7 +6988,8 @@
{
static const struct {
const char *prefix;
@@ -1360,7 +1370,7 @@
} table[] = {
{ "AgfaPhoto DC-833m", 0, 0, /* DJC */
{ 11438,-3762,-1115,-2409,9914,2497,-1227,2295,5300 } },
-@@ -7919,6 +7947,33 @@
+@@ -7919,6 +7948,33 @@
}
break;
}
@@ -1394,7 +1404,7 @@
}
void CLASS simple_coeff (int index)
-@@ -8229,7 +8284,7 @@
+@@ -8229,7 +8285,7 @@
tiff_flip = flip = filters = UINT_MAX; /* unknown */
raw_height = raw_width = fuji_width = fuji_layout = cr2_slice[0] = 0;
maximum = height = width = top_margin = left_margin = 0;
@@ -1403,7 +1413,7 @@
iso_speed = shutter = aperture = focal_len = unique_id = 0;
tiff_nifds = 0;
memset (tiff_ifd, 0, sizeof tiff_ifd);
-@@ -8261,13 +8316,20 @@
+@@ -8261,13 +8317,20 @@
fread (head, 1, 32, ifp);
fseek (ifp, 0, SEEK_END);
flen = fsize = ftell(ifp);
@@ -1426,7 +1436,7 @@
parse_ciff (hlen, flen-hlen, 0);
load_raw = &CLASS canon_load_raw;
} else if (parse_tiff(0)) apply_tiff();
-@@ -8313,6 +8375,7 @@
+@@ -8313,6 +8376,7 @@
fseek (ifp, 100+28*(shot_select > 0), SEEK_SET);
parse_tiff (data_offset = get4());
parse_tiff (thumb_offset+12);
@@ -1434,7 +1444,7 @@
apply_tiff();
} else if (!memcmp (head,"RIFF",4)) {
fseek (ifp, 0, SEEK_SET);
-@@ -8426,9 +8489,10 @@
+@@ -8426,9 +8490,10 @@
if (make[0] == 0) parse_smal (0, flen);
if (make[0] == 0) {
parse_jpeg(0);
@@ -1448,7 +1458,7 @@
strcpy (make, "OmniVision");
data_offset = ftell(ifp) + 0x8000-32;
width = raw_width;
-@@ -8437,6 +8501,7 @@
+@@ -8437,6 +8502,7 @@
filters = 0x16161616;
} else is_raw = 0;
}
@@ -1456,7 +1466,7 @@
for (i=0; i < sizeof corp / sizeof *corp; i++)
if (strcasestr (make, corp[i])) /* Simplify company names */
-@@ -8468,7 +8533,7 @@
+@@ -8468,7 +8534,7 @@
if (height == 3136 && width == 4864) /* Pentax K20D and Samsung GX20 */
{ height = 3124; width = 4688; filters = 0x16161616; }
if (width == 4352 && (!strcmp(model,"K-r") || !strcmp(model,"K-x")))
@@ -1465,7 +1475,7 @@
if (width >= 4960 && !strncmp(model,"K-5",3))
{ left_margin = 10; width = 4950; filters = 0x16161616; }
if (width == 4736 && !strcmp(model,"K-7"))
-@@ -8487,6 +8552,7 @@
+@@ -8487,6 +8553,7 @@
switch (tiff_compress) {
case 1: load_raw = &CLASS packed_dng_load_raw; break;
case 7: load_raw = &CLASS lossless_dng_load_raw; break;
@@ -1473,7 +1483,7 @@
case 34892: load_raw = &CLASS lossy_dng_load_raw; break;
default: load_raw = 0;
}
-@@ -8541,6 +8607,7 @@
+@@ -8541,6 +8608,7 @@
if (height > width) pixel_aspect = 2;
filters = 0;
simple_coeff(0);
@@ -1481,7 +1491,7 @@
} else if (!strcmp(make,"Canon") && tiff_bps == 15) {
switch (width) {
case 3344: width -= 66;
-@@ -8846,24 +8913,53 @@
+@@ -8846,24 +8914,53 @@
if (load_raw == &CLASS lossless_jpeg_load_raw)
load_raw = &CLASS hasselblad_load_raw;
if (raw_width == 7262) {
@@ -1540,7 +1550,7 @@
} else if (raw_width == 4090) {
strcpy (model, "V96C");
height -= (top_margin = 6);
-@@ -8921,6 +9017,7 @@
+@@ -8921,6 +9018,7 @@
filters = 0x16161616;
}
} else if (!strcmp(make,"Leica") || !strcmp(make,"Panasonic")) {
@@ -1548,7 +1558,7 @@
if ((flen - data_offset) / (raw_width*8/7) == raw_height)
load_raw = &CLASS panasonic_load_raw;
if (!load_raw) {
-@@ -8938,6 +9035,7 @@
+@@ -8938,6 +9036,7 @@
}
filters = 0x01010101 * (uchar) "\x94\x61\x49\x16"
[((filters-1) ^ (left_margin & 1) ^ (top_margin << 1)) & 3];
@@ -1556,7 +1566,7 @@
} else if (!strcmp(model,"C770UZ")) {
height = 1718;
width = 2304;
-@@ -9155,6 +9253,18 @@
+@@ -9155,6 +9254,18 @@
memcpy (rgb_cam, cmatrix, sizeof cmatrix);
raw_color = 0;
}
@@ -1575,7 +1585,7 @@
if (raw_color) adobe_coeff (make, model);
if (load_raw == &CLASS kodak_radc_load_raw)
if (raw_color) adobe_coeff ("Apple","Quicktake");
-@@ -9169,9 +9279,9 @@
+@@ -9169,9 +9280,9 @@
if (raw_width < width ) raw_width = width;
}
if (!tiff_bps) tiff_bps = 12;
@@ -1587,7 +1597,7 @@
is_raw = 0;
#ifdef NO_JASPER
if (load_raw == &CLASS redcine_load_raw) {
-@@ -9250,194 +9360,249 @@
+@@ -9250,194 +9361,249 @@
}
#endif
@@ -2016,7 +2026,7 @@
struct tiff_tag {
ushort tag, type;
-@@ -9461,590 +9626,11 @@
+@@ -9461,590 +9627,11 @@
char desc[512], make[64], model[64], soft[32], date[20], artist[64];
};
diff --git a/rtengine/gauss.cc b/rtengine/gauss.cc
new file mode 100644
index 000000000..f8b4124d6
--- /dev/null
+++ b/rtengine/gauss.cc
@@ -0,0 +1,1301 @@
+/*
+ * 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 .
+ */
+#include "gauss.h"
+#include
+#include
+#include "opthelper.h"
+#include "boxblur.h"
+
+namespace
+{
+
+template void calculateYvVFactors( const T sigma, T &b1, T &b2, T &b3, T &B, T M[3][3])
+{
+ // coefficient calculation
+ T q;
+
+ if (sigma < 2.5) {
+ q = 3.97156 - 4.14554 * sqrt (1.0 - 0.26891 * sigma);
+ } else {
+ q = 0.98711 * sigma - 0.96330;
+ }
+
+ T b0 = 1.57825 + 2.44413 * q + 1.4281 * q * q + 0.422205 * q * q * q;
+ b1 = 2.44413 * q + 2.85619 * q * q + 1.26661 * q * q * q;
+ b2 = -1.4281 * q * q - 1.26661 * q * q * q;
+ b3 = 0.422205 * q * q * q;
+ 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
+ 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);
+
+}
+
+// classical filtering if the support window is small and src != dst
+template void gauss3x3 (T** RESTRICT src, T** RESTRICT dst, const int W, const int H, const T c0, const T c1, const T c2, const T b0, const T b1)
+{
+
+ // first row
+#ifdef _OPENMP
+ #pragma omp single nowait
+#endif
+ {
+ dst[0][0] = src[0][0];
+
+ for (int j = 1; j < W - 1; j++)
+ {
+ dst[0][j] = b1 * (src[0][j - 1] + src[0][j + 1]) + b0 * src[0][j];
+ }
+
+ dst[0][W - 1] = src[0][W - 1];
+ }
+
+#ifdef _OPENMP
+ #pragma omp for nowait
+#endif
+
+ for (int i = 1; i < H - 1; i++) {
+ dst[i][0] = b1 * (src[i - 1][0] + src[i + 1][0]) + b0 * src[i][0];
+
+ for (int j = 1; j < W - 1; j++) {
+ dst[i][j] = c2 * (src[i - 1][j - 1] + src[i - 1][j + 1] + src[i + 1][j - 1] + src[i + 1][j + 1]) + c1 * (src[i - 1][j] + src[i][j - 1] + src[i][j + 1] + src[i + 1][j]) + c0 * src[i][j];
+ }
+
+ dst[i][W - 1] = b1 * (src[i - 1][W - 1] + src[i + 1][W - 1]) + b0 * src[i][W - 1];
+ }
+
+ // last row
+#ifdef _OPENMP
+ #pragma omp single
+#endif
+ {
+ dst[H - 1][0] = src[H - 1][0];
+
+ for (int j = 1; j < W - 1; j++) {
+ dst[H - 1][j] = b1 * (src[H - 1][j - 1] + src[H - 1][j + 1]) + b0 * src[H - 1][j];
+ }
+
+ dst[H - 1][W - 1] = src[H - 1][W - 1];
+ }
+}
+
+// classical filtering if the support window is small and src != dst
+template void gauss3x3mult (T** RESTRICT src, T** RESTRICT dst, const int W, const int H, const T c0, const T c1, const T c2, const T b0, const T b1)
+{
+
+ // first row
+#ifdef _OPENMP
+ #pragma omp single nowait
+#endif
+ {
+ dst[0][0] *= src[0][0];
+
+ for (int j = 1; j < W - 1; j++)
+ {
+ dst[0][j] *= b1 * (src[0][j - 1] + src[0][j + 1]) + b0 * src[0][j];
+ }
+
+ dst[0][W - 1] *= src[0][W - 1];
+ }
+
+#ifdef _OPENMP
+ #pragma omp for nowait
+#endif
+
+ for (int i = 1; i < H - 1; i++) {
+ dst[i][0] *= b1 * (src[i - 1][0] + src[i + 1][0]) + b0 * src[i][0];
+
+ for (int j = 1; j < W - 1; j++) {
+ dst[i][j] *= c2 * (src[i - 1][j - 1] + src[i - 1][j + 1] + src[i + 1][j - 1] + src[i + 1][j + 1]) + c1 * (src[i - 1][j] + src[i][j - 1] + src[i][j + 1] + src[i + 1][j]) + c0 * src[i][j];
+ }
+
+ dst[i][W - 1] *= b1 * (src[i - 1][W - 1] + src[i + 1][W - 1]) + b0 * src[i][W - 1];
+ }
+
+ // last row
+#ifdef _OPENMP
+ #pragma omp single
+#endif
+ {
+ dst[H - 1][0] *= src[H - 1][0];
+
+ for (int j = 1; j < W - 1; j++) {
+ dst[H - 1][j] *= b1 * (src[H - 1][j - 1] + src[H - 1][j + 1]) + b0 * src[H - 1][j];
+ }
+
+ dst[H - 1][W - 1] *= src[H - 1][W - 1];
+ }
+}
+
+template void gauss3x3div (T** RESTRICT src, T** RESTRICT dst, T** RESTRICT divBuffer, const int W, const int H, const T c0, const T c1, const T c2, const T b0, const T b1)
+{
+
+ // first row
+#ifdef _OPENMP
+ #pragma omp single nowait
+#endif
+ {
+ dst[0][0] = divBuffer[0][0] / (src[0][0] > 0.f ? src[0][0] : 1.f);
+
+ for (int j = 1; j < W - 1; j++)
+ {
+ float tmp = (b1 * (src[0][j - 1] + src[0][j + 1]) + b0 * src[0][j]);
+ dst[0][j] = divBuffer[0][j] / (tmp > 0.f ? tmp : 1.f);
+ }
+
+ dst[0][W - 1] = divBuffer[0][W - 1] / (src[0][W - 1] > 0.f ? src[0][W - 1] : 1.f);
+ }
+
+#ifdef _OPENMP
+ #pragma omp for nowait
+#endif
+
+ for (int i = 1; i < H - 1; i++) {
+ float tmp = (b1 * (src[i - 1][0] + src[i + 1][0]) + b0 * src[i][0]);
+ dst[i][0] = divBuffer[i][0] / (tmp > 0.f ? tmp : 1.f);
+
+ for (int j = 1; j < W - 1; j++) {
+ tmp = (c2 * (src[i - 1][j - 1] + src[i - 1][j + 1] + src[i + 1][j - 1] + src[i + 1][j + 1]) + c1 * (src[i - 1][j] + src[i][j - 1] + src[i][j + 1] + src[i + 1][j]) + c0 * src[i][j]);
+ dst[i][j] = divBuffer[i][j] / (tmp > 0.f ? tmp : 1.f);
+ }
+
+ tmp = (b1 * (src[i - 1][W - 1] + src[i + 1][W - 1]) + b0 * src[i][W - 1]);
+ dst[i][W - 1] = divBuffer[i][W - 1] / (tmp > 0.f ? tmp : 1.f);
+ }
+
+ // last row
+#ifdef _OPENMP
+ #pragma omp single
+#endif
+ {
+ dst[H - 1][0] = divBuffer[H - 1][0] / (src[H - 1][0] > 0.f ? src[H - 1][0] : 1.f);
+
+ for (int j = 1; j < W - 1; j++) {
+ float tmp = (b1 * (src[H - 1][j - 1] + src[H - 1][j + 1]) + b0 * src[H - 1][j]);
+ dst[H - 1][j] = divBuffer[H - 1][W] / (tmp > 0.f ? tmp : 1.f);
+ }
+
+ dst[H - 1][W - 1] = divBuffer[H - 1][W - 1] / (src[H - 1][W - 1] > 0.f ? src[H - 1][W - 1] : 1.f);
+ }
+}
+
+
+// use separated filter if the support window is small and src == dst
+template void gaussHorizontal3 (T** src, T** dst, int W, int H, const float c0, const float c1)
+{
+ T temp[W] ALIGNED16;
+#ifdef _OPENMP
+ #pragma omp for
+#endif
+
+ for (int i = 0; i < H; i++) {
+ for (int j = 1; j < W - 1; j++) {
+ temp[j] = (T)(c1 * (src[i][j - 1] + src[i][j + 1]) + c0 * src[i][j]);
+ }
+
+ dst[i][0] = src[i][0];
+ memcpy (dst[i] + 1, temp + 1, (W - 2)*sizeof(T));
+
+ dst[i][W - 1] = src[i][W - 1];
+ }
+}
+
+#ifdef __SSE2__
+template SSEFUNCTION void gaussVertical3 (T** src, T** dst, int W, int H, const float c0, const float c1)
+{
+ vfloat Tv, Tm1v, Tp1v;
+ vfloat Tv1, Tm1v1, Tp1v1;
+ vfloat c0v, c1v;
+ c0v = F2V(c0);
+ c1v = F2V(c1);
+
+#ifdef _OPENMP
+ #pragma omp for nowait
+#endif
+
+ // process 8 columns per iteration for better usage of cpu cache
+ for (int i = 0; i < W - 7; i += 8) {
+ Tm1v = LVFU( src[0][i] );
+ Tm1v1 = LVFU( src[0][i + 4] );
+ STVFU( dst[0][i], Tm1v);
+ STVFU( dst[0][i + 4], Tm1v1);
+
+ if (H > 1) {
+ Tv = LVFU( src[1][i]);
+ Tv1 = LVFU( src[1][i + 4]);
+ }
+
+ for (int j = 1; j < H - 1; j++) {
+ Tp1v = LVFU( src[j + 1][i]);
+ Tp1v1 = LVFU( src[j + 1][i + 4]);
+ STVFU( dst[j][i], c1v * (Tp1v + Tm1v) + Tv * c0v);
+ STVFU( dst[j][i + 4], c1v * (Tp1v1 + Tm1v1) + Tv1 * c0v);
+ Tm1v = Tv;
+ Tm1v1 = Tv1;
+ Tv = Tp1v;
+ Tv1 = Tp1v1;
+ }
+
+ STVFU( dst[H - 1][i], LVFU( src[H - 1][i]));
+ STVFU( dst[H - 1][i + 4], LVFU( src[H - 1][i + 4]));
+ }
+
+// Borders are done without SSE
+ float temp[H] ALIGNED16;
+#ifdef _OPENMP
+ #pragma omp single
+#endif
+
+ for (int i = W - (W % 8); i < W; i++) {
+ for (int j = 1; j < H - 1; j++) {
+ temp[j] = c1 * (src[j - 1][i] + src[j + 1][i]) + c0 * src[j][i];
+ }
+
+ dst[0][i] = src[0][i];
+
+ for (int j = 1; j < H - 1; j++) {
+ dst[j][i] = temp[j];
+ }
+
+ dst[H - 1][i] = src[H - 1][i];
+ }
+}
+#else
+template void gaussVertical3 (T** src, T** dst, int W, int H, const float c0, const float c1)
+{
+ T temp[H] ALIGNED16;
+#ifdef _OPENMP
+ #pragma omp for
+#endif
+
+ for (int i = 0; i < W; i++) {
+ for (int j = 1; j < H - 1; j++) {
+ temp[j] = (T)(c1 * (src[j - 1][i] + src[j + 1][i]) + c0 * src[j][i]);
+ }
+
+ dst[0][i] = src[0][i];
+
+ for (int j = 1; j < H - 1; j++) {
+ dst[j][i] = temp[j];
+ }
+
+ dst[H - 1][i] = src[H - 1][i];
+ }
+}
+#endif
+
+#ifdef __SSE2__
+// fast gaussian approximation if the support window is large
+template SSEFUNCTION void gaussHorizontalSse (T** src, T** dst, const int W, const int H, const float sigma)
+{
+ double b1, b2, b3, B, M[3][3];
+ calculateYvVFactors(sigma, b1, b2, b3, B, M);
+
+ for (int i = 0; i < 3; i++)
+ for (int j = 0; j < 3; j++) {
+ M[i][j] *= (1.0 + b2 + (b1 - b3) * b3);
+ M[i][j] /= (1.0 + b1 - b2 + b3) * (1.0 - b1 - b2 - b3);
+ }
+
+ vfloat Rv;
+ vfloat Tv, Tm2v, Tm3v;
+ vfloat Bv, b1v, b2v, b3v;
+ vfloat temp2W, temp2Wp1;
+ float tmp[W][4] ALIGNED16;
+ Bv = F2V(B);
+ b1v = F2V(b1);
+ b2v = F2V(b2);
+ b3v = F2V(b3);
+
+#ifdef _OPENMP
+ #pragma omp for nowait
+#endif
+
+ for (int i = 0; i < H - 3; i += 4) {
+ Tv = _mm_set_ps(src[i][0], src[i + 1][0], src[i + 2][0], src[i + 3][0]);
+ Tm3v = Tv * (Bv + b1v + b2v + b3v);
+ STVF( tmp[0][0], Tm3v );
+
+ Tm2v = _mm_set_ps(src[i][1], src[i + 1][1], src[i + 2][1], src[i + 3][1]) * Bv + Tm3v * b1v + Tv * (b2v + b3v);
+ STVF( tmp[1][0], Tm2v );
+
+ Rv = _mm_set_ps(src[i][2], src[i + 1][2], src[i + 2][2], src[i + 3][2]) * Bv + Tm2v * 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;
+ 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 + 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 + 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;
+ STVF(tmp[W - 2][0], Tm2v);
+
+ Tm3v = Bv * Tm3v + b1v * Tm2v + b2v * Rv + b3v * temp2W;
+ STVF(tmp[W - 3][0], Tm3v);
+
+ Tv = Rv;
+ Rv = Tm3v;
+ Tm3v = Tv;
+
+ for (int j = W - 4; j >= 0; j--) {
+ Tv = Rv;
+ Rv = LVF(tmp[j][0]) * Bv + Tv * b1v + Tm2v * b2v + Tm3v * b3v;
+ STVF(tmp[j][0], Rv);
+ Tm3v = Tm2v;
+ Tm2v = Tv;
+ }
+
+ for (int j = 0; j < W; j++) {
+ dst[i + 3][j] = tmp[j][0];
+ dst[i + 2][j] = tmp[j][1];
+ dst[i + 1][j] = tmp[j][2];
+ dst[i + 0][j] = tmp[j][3];
+ }
+
+
+ }
+
+// Borders are done without SSE
+#ifdef _OPENMP
+ #pragma omp single
+#endif
+
+ for (int i = H - (H % 4); i < H; i++) {
+ tmp[0][0] = src[i][0] * (B + b1 + b2 + b3);
+ tmp[1][0] = B * src[i][1] + b1 * tmp[0][0] + src[i][0] * (b2 + b3);
+ tmp[2][0] = B * src[i][2] + b1 * tmp[1][0] + b2 * tmp[0][0] + b3 * src[i][0];
+
+ for (int j = 3; j < W; j++) {
+ tmp[j][0] = B * src[i][j] + b1 * tmp[j - 1][0] + b2 * tmp[j - 2][0] + b3 * tmp[j - 3][0];
+ }
+
+ float temp2Wm1 = src[i][W - 1] + M[0][0] * (tmp[W - 1][0] - src[i][W - 1]) + M[0][1] * (tmp[W - 2][0] - src[i][W - 1]) + M[0][2] * (tmp[W - 3][0] - src[i][W - 1]);
+ float temp2W = src[i][W - 1] + M[1][0] * (tmp[W - 1][0] - src[i][W - 1]) + M[1][1] * (tmp[W - 2][0] - src[i][W - 1]) + M[1][2] * (tmp[W - 3][0] - src[i][W - 1]);
+ float temp2Wp1 = src[i][W - 1] + M[2][0] * (tmp[W - 1][0] - src[i][W - 1]) + M[2][1] * (tmp[W - 2][0] - src[i][W - 1]) + M[2][2] * (tmp[W - 3][0] - src[i][W - 1]);
+
+ tmp[W - 1][0] = temp2Wm1;
+ tmp[W - 2][0] = B * tmp[W - 2][0] + b1 * tmp[W - 1][0] + b2 * temp2W + b3 * temp2Wp1;
+ tmp[W - 3][0] = B * tmp[W - 3][0] + b1 * tmp[W - 2][0] + b2 * tmp[W - 1][0] + b3 * temp2W;
+
+ for (int j = W - 4; j >= 0; j--) {
+ tmp[j][0] = B * tmp[j][0] + b1 * tmp[j + 1][0] + b2 * tmp[j + 2][0] + b3 * tmp[j + 3][0];
+ }
+
+ for (int j = 0; j < W; j++) {
+ dst[i][j] = tmp[j][0];
+ }
+ }
+}
+#endif
+
+// fast gaussian approximation if the support window is large
+template void gaussHorizontal (T** src, T** dst, const int W, const int H, const double sigma)
+{
+ double b1, b2, b3, B, M[3][3];
+ calculateYvVFactors(sigma, b1, b2, b3, B, M);
+
+ 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);
+ }
+
+ double temp2[W] ALIGNED16;
+
+#ifdef _OPENMP
+ #pragma omp for
+#endif
+
+ for (int i = 0; i < H; i++) {
+
+ 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];
+ temp2[2] = B * src[i][2] + b1 * temp2[1] + b2 * temp2[0] + b3 * src[i][0];
+
+ for (int j = 3; j < W; j++) {
+ temp2[j] = B * src[i][j] + b1 * temp2[j - 1] + b2 * temp2[j - 2] + b3 * temp2[j - 3];
+ }
+
+ double temp2Wm1 = src[i][W - 1] + M[0][0] * (temp2[W - 1] - src[i][W - 1]) + M[0][1] * (temp2[W - 2] - src[i][W - 1]) + M[0][2] * (temp2[W - 3] - src[i][W - 1]);
+ double temp2W = src[i][W - 1] + M[1][0] * (temp2[W - 1] - src[i][W - 1]) + M[1][1] * (temp2[W - 2] - src[i][W - 1]) + M[1][2] * (temp2[W - 3] - src[i][W - 1]);
+ double temp2Wp1 = src[i][W - 1] + M[2][0] * (temp2[W - 1] - src[i][W - 1]) + M[2][1] * (temp2[W - 2] - src[i][W - 1]) + M[2][2] * (temp2[W - 3] - src[i][W - 1]);
+
+ 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];
+ }
+
+ }
+}
+
+#ifdef __SSE2__
+template SSEFUNCTION void gaussVerticalSse (T** src, T** dst, const int W, const int H, const float sigma)
+{
+ double b1, b2, b3, B, M[3][3];
+ calculateYvVFactors(sigma, b1, b2, b3, B, M);
+
+ for (int i = 0; i < 3; i++)
+ for (int j = 0; j < 3; j++) {
+ M[i][j] *= (1.0 + b2 + (b1 - b3) * b3);
+ M[i][j] /= (1.0 + b1 - b2 + b3) * (1.0 - b1 - b2 - b3);
+ }
+
+ float tmp[H][8] ALIGNED16;
+ vfloat Rv;
+ vfloat Tv, Tm2v, Tm3v;
+ vfloat Rv1;
+ vfloat Tv1, Tm2v1, Tm3v1;
+ vfloat Bv, b1v, b2v, b3v;
+ vfloat temp2W, temp2Wp1;
+ vfloat temp2W1, temp2Wp11;
+ Bv = F2V(B);
+ b1v = F2V(b1);
+ b2v = F2V(b2);
+ b3v = F2V(b3);
+
+#ifdef _OPENMP
+ #pragma omp for nowait
+#endif
+
+ // process 8 columns per iteration for better usage of cpu cache
+ for (int i = 0; i < W - 7; i += 8) {
+ Tv = LVFU( src[0][i]);
+ Tv1 = LVFU( src[0][i + 4]);
+ Rv = Tv * (Bv + b1v + b2v + b3v);
+ Rv1 = Tv1 * (Bv + b1v + b2v + b3v);
+ Tm3v = Rv;
+ Tm3v1 = Rv1;
+ STVF( tmp[0][0], Rv );
+ STVF( tmp[0][4], Rv1 );
+
+ Rv = LVFU(src[1][i]) * Bv + Rv * b1v + Tv * (b2v + b3v);
+ Rv1 = LVFU(src[1][i + 4]) * Bv + Rv1 * b1v + Tv1 * (b2v + b3v);
+ Tm2v = Rv;
+ Tm2v1 = Rv1;
+ STVF( tmp[1][0], Rv );
+ STVF( tmp[1][4], Rv1 );
+
+ Rv = LVFU(src[2][i]) * Bv + Rv * b1v + Tm3v * b2v + Tv * b3v;
+ Rv1 = LVFU(src[2][i + 4]) * Bv + Rv1 * b1v + Tm3v1 * b2v + Tv1 * b3v;
+ STVF( tmp[2][0], Rv );
+ STVF( tmp[2][4], Rv1 );
+
+ for (int j = 3; j < H; j++) {
+ Tv = Rv;
+ Tv1 = Rv1;
+ Rv = LVFU(src[j][i]) * Bv + Tv * b1v + Tm2v * b2v + Tm3v * b3v;
+ Rv1 = LVFU(src[j][i + 4]) * Bv + Tv1 * b1v + Tm2v1 * b2v + Tm3v1 * b3v;
+ STVF( tmp[j][0], Rv );
+ STVF( tmp[j][4], Rv1 );
+ Tm3v = Tm2v;
+ Tm3v1 = Tm2v1;
+ Tm2v = Tv;
+ Tm2v1 = Tv1;
+ }
+
+ Tv = LVFU(src[H - 1][i]);
+ Tv1 = LVFU(src[H - 1][i + 4]);
+
+ temp2Wp1 = Tv + F2V(M[2][0]) * (Rv - Tv) + F2V(M[2][1]) * (Tm2v - Tv) + F2V(M[2][2]) * (Tm3v - Tv);
+ temp2Wp11 = Tv1 + F2V(M[2][0]) * (Rv1 - Tv1) + F2V(M[2][1]) * (Tm2v1 - Tv1) + F2V(M[2][2]) * (Tm3v1 - Tv1);
+ temp2W = Tv + F2V(M[1][0]) * (Rv - Tv) + F2V(M[1][1]) * (Tm2v - Tv) + F2V(M[1][2]) * (Tm3v - Tv);
+ temp2W1 = Tv1 + F2V(M[1][0]) * (Rv1 - Tv1) + F2V(M[1][1]) * (Tm2v1 - Tv1) + F2V(M[1][2]) * (Tm3v1 - Tv1);
+
+ Rv = Tv + F2V(M[0][0]) * (Rv - Tv) + F2V(M[0][1]) * (Tm2v - Tv) + F2V(M[0][2]) * (Tm3v - Tv);
+ Rv1 = Tv1 + F2V(M[0][0]) * (Rv1 - Tv1) + F2V(M[0][1]) * (Tm2v1 - Tv1) + F2V(M[0][2]) * (Tm3v1 - Tv1);
+ STVFU( dst[H - 1][i], Rv );
+ STVFU( dst[H - 1][i + 4], Rv1 );
+
+ Tm2v = Bv * Tm2v + b1v * Rv + b2v * temp2W + b3v * temp2Wp1;
+ Tm2v1 = Bv * Tm2v1 + b1v * Rv1 + b2v * temp2W1 + b3v * temp2Wp11;
+ STVFU( dst[H - 2][i], Tm2v );
+ STVFU( dst[H - 2][i + 4], Tm2v1 );
+
+ Tm3v = Bv * Tm3v + b1v * Tm2v + b2v * Rv + b3v * temp2W;
+ Tm3v1 = Bv * Tm3v1 + b1v * Tm2v1 + b2v * Rv1 + b3v * temp2W1;
+ STVFU( dst[H - 3][i], Tm3v );
+ STVFU( dst[H - 3][i + 4], Tm3v1 );
+
+ Tv = Rv;
+ Tv1 = Rv1;
+ Rv = Tm3v;
+ Rv1 = Tm3v1;
+ Tm3v = Tv;
+ Tm3v1 = Tv1;
+
+ for (int j = H - 4; j >= 0; j--) {
+ Tv = Rv;
+ Tv1 = Rv1;
+ Rv = LVF(tmp[j][0]) * Bv + Tv * b1v + Tm2v * b2v + Tm3v * b3v;
+ Rv1 = LVF(tmp[j][4]) * Bv + Tv1 * b1v + Tm2v1 * b2v + Tm3v1 * b3v;
+ STVFU( dst[j][i], Rv );
+ STVFU( dst[j][i + 4], Rv1 );
+ Tm3v = Tm2v;
+ Tm3v1 = Tm2v1;
+ Tm2v = Tv;
+ Tm2v1 = Tv1;
+ }
+ }
+
+// Borders are done without SSE
+#ifdef _OPENMP
+ #pragma omp single
+#endif
+
+ for (int i = W - (W % 8); i < W; i++) {
+ tmp[0][0] = src[0][i] * (B + b1 + b2 + b3);
+ tmp[1][0] = B * src[1][i] + b1 * tmp[0][0] + src[0][i] * (b2 + b3);
+ tmp[2][0] = B * src[2][i] + b1 * tmp[1][0] + b2 * tmp[0][0] + b3 * src[0][i];
+
+ for (int j = 3; j < H; j++) {
+ tmp[j][0] = B * src[j][i] + b1 * tmp[j - 1][0] + b2 * tmp[j - 2][0] + b3 * tmp[j - 3][0];
+ }
+
+ float temp2Hm1 = src[H - 1][i] + M[0][0] * (tmp[H - 1][0] - src[H - 1][i]) + M[0][1] * (tmp[H - 2][0] - src[H - 1][i]) + M[0][2] * (tmp[H - 3][0] - src[H - 1][i]);
+ float temp2H = src[H - 1][i] + M[1][0] * (tmp[H - 1][0] - src[H - 1][i]) + M[1][1] * (tmp[H - 2][0] - src[H - 1][i]) + M[1][2] * (tmp[H - 3][0] - src[H - 1][i]);
+ float temp2Hp1 = src[H - 1][i] + M[2][0] * (tmp[H - 1][0] - src[H - 1][i]) + M[2][1] * (tmp[H - 2][0] - src[H - 1][i]) + M[2][2] * (tmp[H - 3][0] - src[H - 1][i]);
+
+ tmp[H - 1][0] = temp2Hm1;
+ tmp[H - 2][0] = B * tmp[H - 2][0] + b1 * tmp[H - 1][0] + b2 * temp2H + b3 * temp2Hp1;
+ tmp[H - 3][0] = B * tmp[H - 3][0] + b1 * tmp[H - 2][0] + b2 * tmp[H - 1][0] + b3 * temp2H;
+
+ for (int j = H - 4; j >= 0; j--) {
+ tmp[j][0] = B * tmp[j][0] + b1 * tmp[j + 1][0] + b2 * tmp[j + 2][0] + b3 * tmp[j + 3][0];
+ }
+
+ for (int j = 0; j < H; j++) {
+ dst[j][i] = tmp[j][0];
+ }
+
+ }
+}
+#endif
+
+#ifdef __SSE2__
+template SSEFUNCTION void gaussVerticalSsemult (T** RESTRICT src, T** RESTRICT dst, const int W, const int H, const float sigma)
+{
+ double b1, b2, b3, B, M[3][3];
+ calculateYvVFactors(sigma, b1, b2, b3, B, M);
+
+ for (int i = 0; i < 3; i++)
+ for (int j = 0; j < 3; j++) {
+ M[i][j] *= (1.0 + b2 + (b1 - b3) * b3);
+ M[i][j] /= (1.0 + b1 - b2 + b3) * (1.0 - b1 - b2 - b3);
+ }
+
+ float tmp[H][8] ALIGNED16;
+ vfloat Rv;
+ vfloat Tv, Tm2v, Tm3v;
+ vfloat Rv1;
+ vfloat Tv1, Tm2v1, Tm3v1;
+ vfloat Bv, b1v, b2v, b3v;
+ vfloat temp2W, temp2Wp1;
+ vfloat temp2W1, temp2Wp11;
+ Bv = F2V(B);
+ b1v = F2V(b1);
+ b2v = F2V(b2);
+ b3v = F2V(b3);
+
+#ifdef _OPENMP
+ #pragma omp for nowait
+#endif
+
+ // process 8 columns per iteration for better usage of cpu cache
+ for (int i = 0; i < W - 7; i += 8) {
+ Tv = LVFU( src[0][i]);
+ Tv1 = LVFU( src[0][i + 4]);
+ Rv = Tv * (Bv + b1v + b2v + b3v);
+ Rv1 = Tv1 * (Bv + b1v + b2v + b3v);
+ Tm3v = Rv;
+ Tm3v1 = Rv1;
+ STVF( tmp[0][0], Rv );
+ STVF( tmp[0][4], Rv1 );
+
+ Rv = LVFU(src[1][i]) * Bv + Rv * b1v + Tv * (b2v + b3v);
+ Rv1 = LVFU(src[1][i + 4]) * Bv + Rv1 * b1v + Tv1 * (b2v + b3v);
+ Tm2v = Rv;
+ Tm2v1 = Rv1;
+ STVF( tmp[1][0], Rv );
+ STVF( tmp[1][4], Rv1 );
+
+ Rv = LVFU(src[2][i]) * Bv + Rv * b1v + Tm3v * b2v + Tv * b3v;
+ Rv1 = LVFU(src[2][i + 4]) * Bv + Rv1 * b1v + Tm3v1 * b2v + Tv1 * b3v;
+ STVF( tmp[2][0], Rv );
+ STVF( tmp[2][4], Rv1 );
+
+ for (int j = 3; j < H; j++) {
+ Tv = Rv;
+ Tv1 = Rv1;
+ Rv = LVFU(src[j][i]) * Bv + Tv * b1v + Tm2v * b2v + Tm3v * b3v;
+ Rv1 = LVFU(src[j][i + 4]) * Bv + Tv1 * b1v + Tm2v1 * b2v + Tm3v1 * b3v;
+ STVF( tmp[j][0], Rv );
+ STVF( tmp[j][4], Rv1 );
+ Tm3v = Tm2v;
+ Tm3v1 = Tm2v1;
+ Tm2v = Tv;
+ Tm2v1 = Tv1;
+ }
+
+ Tv = LVFU(src[H - 1][i]);
+ Tv1 = LVFU(src[H - 1][i + 4]);
+
+ temp2Wp1 = Tv + F2V(M[2][0]) * (Rv - Tv) + F2V(M[2][1]) * (Tm2v - Tv) + F2V(M[2][2]) * (Tm3v - Tv);
+ temp2Wp11 = Tv1 + F2V(M[2][0]) * (Rv1 - Tv1) + F2V(M[2][1]) * (Tm2v1 - Tv1) + F2V(M[2][2]) * (Tm3v1 - Tv1);
+ temp2W = Tv + F2V(M[1][0]) * (Rv - Tv) + F2V(M[1][1]) * (Tm2v - Tv) + F2V(M[1][2]) * (Tm3v - Tv);
+ temp2W1 = Tv1 + F2V(M[1][0]) * (Rv1 - Tv1) + F2V(M[1][1]) * (Tm2v1 - Tv1) + F2V(M[1][2]) * (Tm3v1 - Tv1);
+
+ Rv = Tv + F2V(M[0][0]) * (Rv - Tv) + F2V(M[0][1]) * (Tm2v - Tv) + F2V(M[0][2]) * (Tm3v - Tv);
+ Rv1 = Tv1 + F2V(M[0][0]) * (Rv1 - Tv1) + F2V(M[0][1]) * (Tm2v1 - Tv1) + F2V(M[0][2]) * (Tm3v1 - Tv1);
+ STVFU( dst[H - 1][i], LVFU(dst[H - 1][i]) * Rv );
+ STVFU( dst[H - 1][i + 4], LVFU(dst[H - 1][i + 4]) * Rv1 );
+
+ Tm2v = Bv * Tm2v + b1v * Rv + b2v * temp2W + b3v * temp2Wp1;
+ Tm2v1 = Bv * Tm2v1 + b1v * Rv1 + b2v * temp2W1 + b3v * temp2Wp11;
+ STVFU( dst[H - 2][i], LVFU(dst[H - 2][i]) * Tm2v );
+ STVFU( dst[H - 2][i + 4], LVFU(dst[H - 2][i + 4]) * Tm2v1 );
+
+ Tm3v = Bv * Tm3v + b1v * Tm2v + b2v * Rv + b3v * temp2W;
+ Tm3v1 = Bv * Tm3v1 + b1v * Tm2v1 + b2v * Rv1 + b3v * temp2W1;
+ STVFU( dst[H - 3][i], LVFU(dst[H - 3][i]) * Tm3v );
+ STVFU( dst[H - 3][i + 4], LVFU(dst[H - 3][i + 4]) * Tm3v1 );
+
+ Tv = Rv;
+ Tv1 = Rv1;
+ Rv = Tm3v;
+ Rv1 = Tm3v1;
+ Tm3v = Tv;
+ Tm3v1 = Tv1;
+
+ for (int j = H - 4; j >= 0; j--) {
+ Tv = Rv;
+ Tv1 = Rv1;
+ Rv = LVF(tmp[j][0]) * Bv + Tv * b1v + Tm2v * b2v + Tm3v * b3v;
+ Rv1 = LVF(tmp[j][4]) * Bv + Tv1 * b1v + Tm2v1 * b2v + Tm3v1 * b3v;
+ STVFU( dst[j][i], LVFU(dst[j][i]) * Rv );
+ STVFU( dst[j][i + 4], LVFU(dst[j][i + 4]) * Rv1 );
+ Tm3v = Tm2v;
+ Tm3v1 = Tm2v1;
+ Tm2v = Tv;
+ Tm2v1 = Tv1;
+ }
+ }
+
+// Borders are done without SSE
+#ifdef _OPENMP
+ #pragma omp single
+#endif
+
+ for (int i = W - (W % 8); i < W; i++) {
+ tmp[0][0] = src[0][i] * (B + b1 + b2 + b3);
+ tmp[1][0] = B * src[1][i] + b1 * tmp[0][0] + src[0][i] * (b2 + b3);
+ tmp[2][0] = B * src[2][i] + b1 * tmp[1][0] + b2 * tmp[0][0] + b3 * src[0][i];
+
+ for (int j = 3; j < H; j++) {
+ tmp[j][0] = B * src[j][i] + b1 * tmp[j - 1][0] + b2 * tmp[j - 2][0] + b3 * tmp[j - 3][0];
+ }
+
+ float temp2Hm1 = src[H - 1][i] + M[0][0] * (tmp[H - 1][0] - src[H - 1][i]) + M[0][1] * (tmp[H - 2][0] - src[H - 1][i]) + M[0][2] * (tmp[H - 3][0] - src[H - 1][i]);
+ float temp2H = src[H - 1][i] + M[1][0] * (tmp[H - 1][0] - src[H - 1][i]) + M[1][1] * (tmp[H - 2][0] - src[H - 1][i]) + M[1][2] * (tmp[H - 3][0] - src[H - 1][i]);
+ float temp2Hp1 = src[H - 1][i] + M[2][0] * (tmp[H - 1][0] - src[H - 1][i]) + M[2][1] * (tmp[H - 2][0] - src[H - 1][i]) + M[2][2] * (tmp[H - 3][0] - src[H - 1][i]);
+
+ tmp[H - 1][0] = temp2Hm1;
+ tmp[H - 2][0] = B * tmp[H - 2][0] + b1 * tmp[H - 1][0] + b2 * temp2H + b3 * temp2Hp1;
+ tmp[H - 3][0] = B * tmp[H - 3][0] + b1 * tmp[H - 2][0] + b2 * tmp[H - 1][0] + b3 * temp2H;
+
+ for (int j = H - 4; j >= 0; j--) {
+ tmp[j][0] = B * tmp[j][0] + b1 * tmp[j + 1][0] + b2 * tmp[j + 2][0] + b3 * tmp[j + 3][0];
+ }
+
+ for (int j = 0; j < H; j++) {
+ dst[j][i] *= tmp[j][0];
+ }
+
+ }
+}
+
+template SSEFUNCTION void gaussVerticalSsediv (T** RESTRICT src, T** RESTRICT dst, T** divBuffer, const int W, const int H, const float sigma)
+{
+ double b1, b2, b3, B, M[3][3];
+ calculateYvVFactors(sigma, b1, b2, b3, B, M);
+
+ for (int i = 0; i < 3; i++)
+ for (int j = 0; j < 3; j++) {
+ M[i][j] *= (1.0 + b2 + (b1 - b3) * b3);
+ M[i][j] /= (1.0 + b1 - b2 + b3) * (1.0 - b1 - b2 - b3);
+ }
+
+ float tmp[H][8] ALIGNED16;
+ vfloat Rv;
+ vfloat Tv, Tm2v, Tm3v;
+ vfloat Rv1;
+ vfloat Tv1, Tm2v1, Tm3v1;
+ vfloat Bv, b1v, b2v, b3v;
+ vfloat temp2W, temp2Wp1;
+ vfloat temp2W1, temp2Wp11;
+ vfloat onev = F2V(1.f);
+ Bv = F2V(B);
+ b1v = F2V(b1);
+ b2v = F2V(b2);
+ b3v = F2V(b3);
+
+#ifdef _OPENMP
+ #pragma omp for nowait
+#endif
+
+ // process 8 columns per iteration for better usage of cpu cache
+ for (int i = 0; i < W - 7; i += 8) {
+ Tv = LVFU( src[0][i]);
+ Tv1 = LVFU( src[0][i + 4]);
+ Rv = Tv * (Bv + b1v + b2v + b3v);
+ Rv1 = Tv1 * (Bv + b1v + b2v + b3v);
+ Tm3v = Rv;
+ Tm3v1 = Rv1;
+ STVF( tmp[0][0], Rv );
+ STVF( tmp[0][4], Rv1 );
+
+ Rv = LVFU(src[1][i]) * Bv + Rv * b1v + Tv * (b2v + b3v);
+ Rv1 = LVFU(src[1][i + 4]) * Bv + Rv1 * b1v + Tv1 * (b2v + b3v);
+ Tm2v = Rv;
+ Tm2v1 = Rv1;
+ STVF( tmp[1][0], Rv );
+ STVF( tmp[1][4], Rv1 );
+
+ Rv = LVFU(src[2][i]) * Bv + Rv * b1v + Tm3v * b2v + Tv * b3v;
+ Rv1 = LVFU(src[2][i + 4]) * Bv + Rv1 * b1v + Tm3v1 * b2v + Tv1 * b3v;
+ STVF( tmp[2][0], Rv );
+ STVF( tmp[2][4], Rv1 );
+
+ for (int j = 3; j < H; j++) {
+ Tv = Rv;
+ Tv1 = Rv1;
+ Rv = LVFU(src[j][i]) * Bv + Tv * b1v + Tm2v * b2v + Tm3v * b3v;
+ Rv1 = LVFU(src[j][i + 4]) * Bv + Tv1 * b1v + Tm2v1 * b2v + Tm3v1 * b3v;
+ STVF( tmp[j][0], Rv );
+ STVF( tmp[j][4], Rv1 );
+ Tm3v = Tm2v;
+ Tm3v1 = Tm2v1;
+ Tm2v = Tv;
+ Tm2v1 = Tv1;
+ }
+
+ Tv = LVFU(src[H - 1][i]);
+ Tv1 = LVFU(src[H - 1][i + 4]);
+
+ temp2Wp1 = Tv + F2V(M[2][0]) * (Rv - Tv) + F2V(M[2][1]) * (Tm2v - Tv) + F2V(M[2][2]) * (Tm3v - Tv);
+ temp2Wp11 = Tv1 + F2V(M[2][0]) * (Rv1 - Tv1) + F2V(M[2][1]) * (Tm2v1 - Tv1) + F2V(M[2][2]) * (Tm3v1 - Tv1);
+ temp2W = Tv + F2V(M[1][0]) * (Rv - Tv) + F2V(M[1][1]) * (Tm2v - Tv) + F2V(M[1][2]) * (Tm3v - Tv);
+ temp2W1 = Tv1 + F2V(M[1][0]) * (Rv1 - Tv1) + F2V(M[1][1]) * (Tm2v1 - Tv1) + F2V(M[1][2]) * (Tm3v1 - Tv1);
+
+ Rv = Tv + F2V(M[0][0]) * (Rv - Tv) + F2V(M[0][1]) * (Tm2v - Tv) + F2V(M[0][2]) * (Tm3v - Tv);
+ Rv1 = Tv1 + F2V(M[0][0]) * (Rv1 - Tv1) + F2V(M[0][1]) * (Tm2v1 - Tv1) + F2V(M[0][2]) * (Tm3v1 - Tv1);
+
+ STVFU( dst[H - 1][i], LVFU(divBuffer[H - 1][i]) / vself(vmaskf_gt(Rv, ZEROV), Rv, onev));
+ STVFU( dst[H - 1][i + 4], LVFU(divBuffer[H - 1][i + 4]) / vself(vmaskf_gt(Rv1, ZEROV), Rv1, onev));
+
+ Tm2v = Bv * Tm2v + b1v * Rv + b2v * temp2W + b3v * temp2Wp1;
+ Tm2v1 = Bv * Tm2v1 + b1v * Rv1 + b2v * temp2W1 + b3v * temp2Wp11;
+ STVFU( dst[H - 2][i], LVFU(divBuffer[H - 2][i]) / vself(vmaskf_gt(Tm2v, ZEROV), Tm2v, onev));
+ STVFU( dst[H - 2][i + 4], LVFU(divBuffer[H - 2][i + 4]) / vself(vmaskf_gt(Tm2v1, ZEROV), Tm2v1, onev));
+
+ Tm3v = Bv * Tm3v + b1v * Tm2v + b2v * Rv + b3v * temp2W;
+ Tm3v1 = Bv * Tm3v1 + b1v * Tm2v1 + b2v * Rv1 + b3v * temp2W1;
+ STVFU( dst[H - 3][i], LVFU(divBuffer[H - 3][i]) / vself(vmaskf_gt(Tm3v, ZEROV), Tm3v, onev));
+ STVFU( dst[H - 3][i + 4], LVFU(divBuffer[H - 3][i + 4]) / vself(vmaskf_gt(Tm3v1, ZEROV), Tm3v1, onev));
+
+ Tv = Rv;
+ Tv1 = Rv1;
+ Rv = Tm3v;
+ Rv1 = Tm3v1;
+ Tm3v = Tv;
+ Tm3v1 = Tv1;
+
+ for (int j = H - 4; j >= 0; j--) {
+ Tv = Rv;
+ Tv1 = Rv1;
+ Rv = LVF(tmp[j][0]) * Bv + Tv * b1v + Tm2v * b2v + Tm3v * b3v;
+ Rv1 = LVF(tmp[j][4]) * Bv + Tv1 * b1v + Tm2v1 * b2v + Tm3v1 * b3v;
+ STVFU( dst[j][i], LVFU(divBuffer[j][i]) / vself(vmaskf_gt(Rv, ZEROV), Rv, onev));
+ STVFU( dst[j][i + 4], LVFU(divBuffer[j][i + 4]) / vself(vmaskf_gt(Rv1, ZEROV), Rv1, onev));
+ Tm3v = Tm2v;
+ Tm3v1 = Tm2v1;
+ Tm2v = Tv;
+ Tm2v1 = Tv1;
+ }
+ }
+
+// Borders are done without SSE
+#ifdef _OPENMP
+ #pragma omp single
+#endif
+
+ for (int i = W - (W % 8); i < W; i++) {
+ tmp[0][0] = src[0][i] * (B + b1 + b2 + b3);
+ tmp[1][0] = B * src[1][i] + b1 * tmp[0][0] + src[0][i] * (b2 + b3);
+ tmp[2][0] = B * src[2][i] + b1 * tmp[1][0] + b2 * tmp[0][0] + b3 * src[0][i];
+
+ for (int j = 3; j < H; j++) {
+ tmp[j][0] = B * src[j][i] + b1 * tmp[j - 1][0] + b2 * tmp[j - 2][0] + b3 * tmp[j - 3][0];
+ }
+
+ float temp2Hm1 = src[H - 1][i] + M[0][0] * (tmp[H - 1][0] - src[H - 1][i]) + M[0][1] * (tmp[H - 2][0] - src[H - 1][i]) + M[0][2] * (tmp[H - 3][0] - src[H - 1][i]);
+ float temp2H = src[H - 1][i] + M[1][0] * (tmp[H - 1][0] - src[H - 1][i]) + M[1][1] * (tmp[H - 2][0] - src[H - 1][i]) + M[1][2] * (tmp[H - 3][0] - src[H - 1][i]);
+ float temp2Hp1 = src[H - 1][i] + M[2][0] * (tmp[H - 1][0] - src[H - 1][i]) + M[2][1] * (tmp[H - 2][0] - src[H - 1][i]) + M[2][2] * (tmp[H - 3][0] - src[H - 1][i]);
+
+ tmp[H - 1][0] = temp2Hm1;
+ tmp[H - 2][0] = B * tmp[H - 2][0] + b1 * tmp[H - 1][0] + b2 * temp2H + b3 * temp2Hp1;
+ tmp[H - 3][0] = B * tmp[H - 3][0] + b1 * tmp[H - 2][0] + b2 * tmp[H - 1][0] + b3 * temp2H;
+
+ for (int j = H - 4; j >= 0; j--) {
+ tmp[j][0] = B * tmp[j][0] + b1 * tmp[j + 1][0] + b2 * tmp[j + 2][0] + b3 * tmp[j + 3][0];
+ }
+
+ for (int j = 0; j < H; j++) {
+ dst[j][i] = divBuffer[j][i] / (tmp[j][0] > 0.f ? tmp[j][0] : 1.f);
+ }
+
+ }
+}
+
+#endif
+
+template void gaussVertical (T** src, T** dst, const int W, const int H, const double sigma)
+{
+ double b1, b2, b3, B, M[3][3];
+ calculateYvVFactors(sigma, b1, b2, b3, B, M);
+
+ 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);
+ }
+
+ // process 'numcols' columns for better usage of L1 cpu cache (especially faster for large values of H)
+ static const int numcols = 8;
+ double temp2[H][numcols] ALIGNED16;
+ double temp2Hm1[numcols], temp2H[numcols], temp2Hp1[numcols];
+#ifdef _OPENMP
+ #pragma omp for nowait
+#endif
+
+ for (int i = 0; i < W - numcols + 1; i += numcols) {
+ for (int k = 0; k < numcols; k++) {
+ temp2[0][k] = B * src[0][i + k] + b1 * src[0][i + k] + b2 * src[0][i + k] + b3 * src[0][i + k];
+ temp2[1][k] = B * src[1][i + k] + b1 * temp2[0][k] + b2 * src[0][i + k] + b3 * src[0][i + k];
+ temp2[2][k] = B * src[2][i + k] + b1 * temp2[1][k] + b2 * temp2[0][k] + b3 * src[0][i + k];
+ }
+
+ for (int j = 3; j < H; j++) {
+ for (int k = 0; k < numcols; k++) {
+ temp2[j][k] = B * src[j][i + k] + b1 * temp2[j - 1][k] + b2 * temp2[j - 2][k] + b3 * temp2[j - 3][k];
+ }
+ }
+
+ for (int k = 0; k < numcols; k++) {
+ temp2Hm1[k] = src[H - 1][i + k] + M[0][0] * (temp2[H - 1][k] - src[H - 1][i + k]) + M[0][1] * (temp2[H - 2][k] - src[H - 1][i + k]) + M[0][2] * (temp2[H - 3][k] - src[H - 1][i + k]);
+ temp2H[k] = src[H - 1][i + k] + M[1][0] * (temp2[H - 1][k] - src[H - 1][i + k]) + M[1][1] * (temp2[H - 2][k] - src[H - 1][i + k]) + M[1][2] * (temp2[H - 3][k] - src[H - 1][i + k]);
+ temp2Hp1[k] = src[H - 1][i + k] + M[2][0] * (temp2[H - 1][k] - src[H - 1][i + k]) + M[2][1] * (temp2[H - 2][k] - src[H - 1][i + k]) + M[2][2] * (temp2[H - 3][k] - src[H - 1][i + k]);
+ }
+
+ for (int k = 0; k < numcols; 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++) {
+ 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];
+ }
+ }
+ }
+
+#ifdef _OPENMP
+ #pragma omp single
+#endif
+
+ // process remaining columns
+ for (int i = W - (W % numcols); i < W; i++) {
+ temp2[0][0] = B * src[0][i] + b1 * src[0][i] + b2 * src[0][i] + b3 * src[0][i];
+ temp2[1][0] = B * src[1][i] + b1 * temp2[0][0] + b2 * src[0][i] + b3 * src[0][i];
+ temp2[2][0] = B * src[2][i] + b1 * temp2[1][0] + b2 * temp2[0][0] + b3 * src[0][i];
+
+ for (int j = 3; j < H; j++) {
+ temp2[j][0] = B * src[j][i] + b1 * temp2[j - 1][0] + b2 * temp2[j - 2][0] + b3 * temp2[j - 3][0];
+ }
+
+ double temp2Hm1 = src[H - 1][i] + M[0][0] * (temp2[H - 1][0] - src[H - 1][i]) + M[0][1] * (temp2[H - 2][0] - src[H - 1][i]) + M[0][2] * (temp2[H - 3][0] - src[H - 1][i]);
+ 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]);
+
+ 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--) {
+ 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];
+ }
+ }
+}
+
+#ifndef __SSE2__
+template void gaussVerticaldiv (T** src, T** dst, T** divBuffer, const int W, const int H, const double sigma)
+{
+ double b1, b2, b3, B, M[3][3];
+ calculateYvVFactors(sigma, b1, b2, b3, B, M);
+
+ 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);
+ }
+
+ // process 'numcols' columns for better usage of L1 cpu cache (especially faster for large values of H)
+ static const int numcols = 8;
+ double temp2[H][numcols] ALIGNED16;
+ double temp2Hm1[numcols], temp2H[numcols], temp2Hp1[numcols];
+#ifdef _OPENMP
+ #pragma omp for nowait
+#endif
+
+ for (int i = 0; i < W - numcols + 1; i += numcols) {
+ for (int k = 0; k < numcols; k++) {
+ temp2[0][k] = B * src[0][i + k] + b1 * src[0][i + k] + b2 * src[0][i + k] + b3 * src[0][i + k];
+ temp2[1][k] = B * src[1][i + k] + b1 * temp2[0][k] + b2 * src[0][i + k] + b3 * src[0][i + k];
+ temp2[2][k] = B * src[2][i + k] + b1 * temp2[1][k] + b2 * temp2[0][k] + b3 * src[0][i + k];
+ }
+
+ for (int j = 3; j < H; j++) {
+ for (int k = 0; k < numcols; k++) {
+ temp2[j][k] = B * src[j][i + k] + b1 * temp2[j - 1][k] + b2 * temp2[j - 2][k] + b3 * temp2[j - 3][k];
+ }
+ }
+
+ for (int k = 0; k < numcols; k++) {
+ temp2Hm1[k] = src[H - 1][i + k] + M[0][0] * (temp2[H - 1][k] - src[H - 1][i + k]) + M[0][1] * (temp2[H - 2][k] - src[H - 1][i + k]) + M[0][2] * (temp2[H - 3][k] - src[H - 1][i + k]);
+ temp2H[k] = src[H - 1][i + k] + M[1][0] * (temp2[H - 1][k] - src[H - 1][i + k]) + M[1][1] * (temp2[H - 2][k] - src[H - 1][i + k]) + M[1][2] * (temp2[H - 3][k] - src[H - 1][i + k]);
+ temp2Hp1[k] = src[H - 1][i + k] + M[2][0] * (temp2[H - 1][k] - src[H - 1][i + k]) + M[2][1] * (temp2[H - 2][k] - src[H - 1][i + k]) + M[2][2] * (temp2[H - 3][k] - src[H - 1][i + k]);
+ }
+
+ for (int k = 0; k < numcols; k++) {
+ dst[H - 1][i + k] = divBuffer[H - 1][i + k] / (temp2[H - 1][k] = temp2Hm1[k]);
+ dst[H - 2][i + k] = divBuffer[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] = divBuffer[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++) {
+ dst[j][i + k] = divBuffer[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]);
+ }
+ }
+ }
+
+#ifdef _OPENMP
+ #pragma omp single
+#endif
+
+ // process remaining columns
+ for (int i = W - (W % numcols); i < W; i++) {
+ temp2[0][0] = B * src[0][i] + b1 * src[0][i] + b2 * src[0][i] + b3 * src[0][i];
+ temp2[1][0] = B * src[1][i] + b1 * temp2[0][0] + b2 * src[0][i] + b3 * src[0][i];
+ temp2[2][0] = B * src[2][i] + b1 * temp2[1][0] + b2 * temp2[0][0] + b3 * src[0][i];
+
+ for (int j = 3; j < H; j++) {
+ temp2[j][0] = B * src[j][i] + b1 * temp2[j - 1][0] + b2 * temp2[j - 2][0] + b3 * temp2[j - 3][0];
+ }
+
+ double temp2Hm1 = src[H - 1][i] + M[0][0] * (temp2[H - 1][0] - src[H - 1][i]) + M[0][1] * (temp2[H - 2][0] - src[H - 1][i]) + M[0][2] * (temp2[H - 3][0] - src[H - 1][i]);
+ 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]);
+
+ dst[H - 1][i] = divBuffer[H - 1][i] / (temp2[H - 1][0] = temp2Hm1);
+ dst[H - 2][i] = divBuffer[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] = divBuffer[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--) {
+ dst[j][i] = divBuffer[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 gaussVerticalmult (T** src, T** dst, const int W, const int H, const double sigma)
+{
+ double b1, b2, b3, B, M[3][3];
+ calculateYvVFactors(sigma, b1, b2, b3, B, M);
+
+ 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);
+ }
+
+ // process 'numcols' columns for better usage of L1 cpu cache (especially faster for large values of H)
+ static const int numcols = 8;
+ double temp2[H][numcols] ALIGNED16;
+ double temp2Hm1[numcols], temp2H[numcols], temp2Hp1[numcols];
+#ifdef _OPENMP
+ #pragma omp for nowait
+#endif
+
+ for (int i = 0; i < W - numcols + 1; i += numcols) {
+ for (int k = 0; k < numcols; k++) {
+ temp2[0][k] = B * src[0][i + k] + b1 * src[0][i + k] + b2 * src[0][i + k] + b3 * src[0][i + k];
+ temp2[1][k] = B * src[1][i + k] + b1 * temp2[0][k] + b2 * src[0][i + k] + b3 * src[0][i + k];
+ temp2[2][k] = B * src[2][i + k] + b1 * temp2[1][k] + b2 * temp2[0][k] + b3 * src[0][i + k];
+ }
+
+ for (int j = 3; j < H; j++) {
+ for (int k = 0; k < numcols; k++) {
+ temp2[j][k] = B * src[j][i + k] + b1 * temp2[j - 1][k] + b2 * temp2[j - 2][k] + b3 * temp2[j - 3][k];
+ }
+ }
+
+ for (int k = 0; k < numcols; k++) {
+ temp2Hm1[k] = src[H - 1][i + k] + M[0][0] * (temp2[H - 1][k] - src[H - 1][i + k]) + M[0][1] * (temp2[H - 2][k] - src[H - 1][i + k]) + M[0][2] * (temp2[H - 3][k] - src[H - 1][i + k]);
+ temp2H[k] = src[H - 1][i + k] + M[1][0] * (temp2[H - 1][k] - src[H - 1][i + k]) + M[1][1] * (temp2[H - 2][k] - src[H - 1][i + k]) + M[1][2] * (temp2[H - 3][k] - src[H - 1][i + k]);
+ temp2Hp1[k] = src[H - 1][i + k] + M[2][0] * (temp2[H - 1][k] - src[H - 1][i + k]) + M[2][1] * (temp2[H - 2][k] - src[H - 1][i + k]) + M[2][2] * (temp2[H - 3][k] - src[H - 1][i + k]);
+ }
+
+ for (int k = 0; k < numcols; 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++) {
+ 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]);
+ }
+ }
+ }
+
+#ifdef _OPENMP
+ #pragma omp single
+#endif
+
+ // process remaining columns
+ for (int i = W - (W % numcols); i < W; i++) {
+ temp2[0][0] = B * src[0][i] + b1 * src[0][i] + b2 * src[0][i] + b3 * src[0][i];
+ temp2[1][0] = B * src[1][i] + b1 * temp2[0][0] + b2 * src[0][i] + b3 * src[0][i];
+ temp2[2][0] = B * src[2][i] + b1 * temp2[1][0] + b2 * temp2[0][0] + b3 * src[0][i];
+
+ for (int j = 3; j < H; j++) {
+ temp2[j][0] = B * src[j][i] + b1 * temp2[j - 1][0] + b2 * temp2[j - 2][0] + b3 * temp2[j - 3][0];
+ }
+
+ double temp2Hm1 = src[H - 1][i] + M[0][0] * (temp2[H - 1][0] - src[H - 1][i]) + M[0][1] * (temp2[H - 2][0] - src[H - 1][i]) + M[0][2] * (temp2[H - 3][0] - src[H - 1][i]);
+ 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]);
+
+ 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--) {
+ 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]);
+ }
+ }
+}
+#endif
+
+template void gaussianBlurImpl(T** src, T** dst, const int W, const int H, const double sigma, T *buffer = nullptr, eGaussType gausstype = GAUSS_STANDARD, T** buffer2 = nullptr)
+{
+ static constexpr auto GAUSS_SKIP = 0.25;
+ static constexpr auto GAUSS_3X3_LIMIT = 0.6;
+ static constexpr auto GAUSS_DOUBLE = 70.0;
+
+ if(buffer) {
+ // special variant for very large sigma, currently only used by retinex algorithm
+ // use iterated boxblur to approximate gaussian blur
+ // Compute ideal averaging filter width and number of iterations
+ int n = 1;
+ double wIdeal = sqrt((12 * sigma * sigma) + 1);
+
+ while(wIdeal > W || wIdeal > H) {
+ n++;
+ wIdeal = sqrt((12 * sigma * sigma / n) + 1);
+ }
+
+ if(n < 3) {
+ n = 3;
+ wIdeal = sqrt((12 * sigma * sigma / n) + 1);
+ } else if(n > 6) {
+ n = 6;
+ }
+
+ int wl = wIdeal;
+
+ if(wl % 2 == 0) {
+ wl--;
+ }
+
+ int wu = wl + 2;
+
+ double mIdeal = (12 * sigma * sigma - n * wl * wl - 4 * n * wl - 3 * n) / (-4 * wl - 4);
+ int m = round(mIdeal);
+
+ int sizes[n];
+
+ for(int i = 0; i < n; i++) {
+ sizes[i] = ((i < m ? wl : wu) - 1) / 2;
+ }
+
+ rtengine::boxblur(src, dst, buffer, sizes[0], sizes[0], W, H);
+
+ for(int i = 1; i < n; i++) {
+ rtengine::boxblur(dst, dst, buffer, sizes[i], sizes[i], W, H);
+ }
+ } else {
+ if (sigma < GAUSS_SKIP) {
+ // don't perform filtering
+ if (src != dst) {
+ memcpy (dst[0], src[0], W * H * sizeof(T));
+ }
+ } else if (sigma < GAUSS_3X3_LIMIT) {
+ if(src != dst) {
+ // If src != dst we can take the fast way
+ // compute 3x3 kernel values
+ double c0 = 1.0;
+ double c1 = exp( -0.5 * (rtengine::SQR(1.0 / sigma)) );
+ double c2 = exp( -rtengine::SQR(1.0 / sigma) );
+
+ // normalize kernel values
+ double sum = c0 + 4.0 * (c1 + c2);
+ c0 /= sum;
+ c1 /= sum;
+ c2 /= sum;
+ // compute kernel values for border pixels
+ double b1 = exp (-1.0 / (2.0 * sigma * sigma));
+ double bsum = 2.0 * b1 + 1.0;
+ b1 /= bsum;
+ double b0 = 1.0 / bsum;
+
+ switch (gausstype) {
+ case GAUSS_MULT :
+ gauss3x3mult (src, dst, W, H, c0, c1, c2, b0, b1);
+ break;
+
+ case GAUSS_DIV :
+ gauss3x3div (src, dst, buffer2, W, H, c0, c1, c2, b0, b1);
+ break;
+
+ case GAUSS_STANDARD :
+ gauss3x3 (src, dst, W, H, c0, c1, c2, b0, b1);
+ break;
+ }
+ } else {
+ // compute kernel values for separated 3x3 gaussian blur
+ double c1 = exp (-1.0 / (2.0 * sigma * sigma));
+ double csum = 2.0 * c1 + 1.0;
+ c1 /= csum;
+ double c0 = 1.0 / csum;
+ gaussHorizontal3 (src, dst, W, H, c0, c1);
+ gaussVertical3 (dst, dst, W, H, c0, c1);
+ }
+ } else {
+#ifdef __SSE2__
+
+ if (sigma < GAUSS_DOUBLE) {
+ switch (gausstype) {
+ case GAUSS_MULT : {
+ gaussHorizontalSse (src, src, W, H, sigma);
+ gaussVerticalSsemult (src, dst, W, H, sigma);
+ break;
+ }
+
+ case GAUSS_DIV : {
+ gaussHorizontalSse (src, dst, W, H, sigma);
+ gaussVerticalSsediv (dst, dst, buffer2, W, H, sigma);
+ break;
+ }
+
+ case GAUSS_STANDARD : {
+ gaussHorizontalSse (src, dst, W, H, sigma);
+ gaussVerticalSse (dst, dst, W, H, sigma);
+ break;
+ }
+ }
+ } else { // large sigma only with double precision
+ gaussHorizontal (src, dst, W, H, sigma);
+ gaussVertical (dst, dst, W, H, sigma);
+ }
+
+#else
+
+ if (sigma < GAUSS_DOUBLE) {
+ switch (gausstype) {
+ case GAUSS_MULT : {
+ gaussHorizontal (src, src, W, H, sigma);
+ gaussVerticalmult (src, dst, W, H, sigma);
+ break;
+ }
+
+ case GAUSS_DIV : {
+ gaussHorizontal (src, dst, W, H, sigma);
+ gaussVerticaldiv (dst, dst, buffer2, W, H, sigma);
+ break;
+ }
+
+ case GAUSS_STANDARD : {
+ gaussHorizontal (src, dst, W, H, sigma);
+ gaussVertical (dst, dst, W, H, sigma);
+ break;
+ }
+ }
+ } else { // large sigma only with double precision
+ gaussHorizontal (src, dst, W, H, sigma);
+ gaussVertical (dst, dst, W, H, sigma);
+ }
+
+#endif
+ }
+ }
+}
+}
+
+void gaussianBlur(float** src, float** dst, const int W, const int H, const double sigma, float *buffer, eGaussType gausstype, float** buffer2)
+{
+ gaussianBlurImpl(src, dst, W, H, sigma, buffer, gausstype, buffer2);
+}
+
diff --git a/rtengine/gauss.h b/rtengine/gauss.h
index 4136e6f6d..72f115cc4 100644
--- a/rtengine/gauss.h
+++ b/rtengine/gauss.h
@@ -19,797 +19,8 @@
#ifndef _GAUSS_H_
#define _GAUSS_H_
-#include
-#include
-#include
-#include "opthelper.h"
-#include "stdio.h"
-#include "boxblur.h"
-// classical filtering if the support window is small:
+enum eGaussType {GAUSS_STANDARD, GAUSS_MULT, GAUSS_DIV};
-template void gaussHorizontal3 (T** src, T** dst, int W, int H, const float c0, const float c1)
-{
+void gaussianBlur(float** src, float** dst, const int W, const int H, const double sigma, float *buffer = nullptr, eGaussType gausstype = GAUSS_STANDARD, float** buffer2 = nullptr);
-#ifdef _OPENMP
- #pragma omp for
-#endif
-
- for (int i = 0; i < H; i++) {
- 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]);
- }
-
- dst[i][0] = src[i][0];
- memcpy (dst[i] + 1, temp + 1, (W - 2)*sizeof(T));
-
- dst[i][W - 1] = src[i][W - 1];
- }
-}
-
-template void gaussVertical3 (T** src, T** dst, int W, int H, const float c0, const float c1)
-{
-
-#ifdef _OPENMP
- #pragma omp for
-#endif
-
- for (int i = 0; i < W; i++) {
- 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]);
- }
-
- dst[0][i] = src[0][i];
-
- for (int j = 1; j < H - 1; j++) {
- dst[j][i] = temp[j];
- }
-
- dst[H - 1][i] = src[H - 1][i];
- }
-}
-
-#ifdef __SSE2__
-template SSEFUNCTION void gaussVertical3Sse (T** src, T** dst, int W, int H, const float c0, const float c1)
-{
- vfloat Tv, Tm1v, Tp1v;
- vfloat c0v, c1v;
- c0v = F2V(c0);
- c1v = F2V(c1);
-#ifdef _OPENMP
- #pragma omp for
-#endif
-
- for (int i = 0; i < W - 3; i += 4) {
- Tm1v = LVFU( src[0][i] );
- STVFU( dst[0][i], Tm1v);
-
- if (H > 1) {
- Tv = LVFU( src[1][i]);
- }
-
- for (int j = 1; j < H - 1; j++) {
- Tp1v = LVFU( src[j + 1][i]);
- STVFU( dst[j][i], c1v * (Tp1v + Tm1v) + Tv * c0v);
- Tm1v = Tv;
- Tv = Tp1v;
- }
-
- STVFU( dst[H - 1][i], LVFU( src[H - 1][i]));
- }
-
-// Borders are done without SSE
-#ifdef _OPENMP
- #pragma omp for
-#endif
-
- for (int i = W - (W % 4); i < W; i++) {
- dst[0][i] = src[0][i];
-
- for (int j = 1; j < H - 1; j++) {
- dst[j][i] = c1 * (src[j - 1][i] + src[j + 1][i]) + c0 * src[j][i];
- }
-
- dst[H - 1][i] = src[H - 1][i];
- }
-}
-
-
-template SSEFUNCTION void gaussHorizontal3Sse (T** src, T** dst, int W, int H, const float c0, const float c1)
-{
- float tmp[W][4] ALIGNED16;
-
- vfloat Tv, Tm1v, Tp1v;
- vfloat c0v, c1v;
- c0v = F2V(c0);
- c1v = F2V(c1);
-#ifdef _OPENMP
- #pragma omp for
-#endif
-
- for (int i = 0; i < H - 3; i += 4) {
- dst[i][0] = src[i][0];
- dst[i + 1][0] = src[i + 1][0];
- dst[i + 2][0] = src[i + 2][0];
- dst[i + 3][0] = src[i + 3][0];
- Tm1v = _mm_set_ps( src[i][0], src[i + 1][0], src[i + 2][0], src[i + 3][0] );
-
- if (W > 1) {
- Tv = _mm_set_ps( src[i][1], src[i + 1][1], src[i + 2][1], src[i + 3][1] );
- }
-
- 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] );
- STVF( tmp[j][0], c1v * (Tp1v + Tm1v) + Tv * c0v);
- Tm1v = Tv;
- Tv = Tp1v;
- }
-
- for (int j = 1; j < W - 1; j++) {
- dst[i + 3][j] = tmp[j][0];
- dst[i + 2][j] = tmp[j][1];
- dst[i + 1][j] = tmp[j][2];
- dst[i][j] = tmp[j][3];
- }
-
- dst[i][W - 1] = src[i][W - 1];
- dst[i + 1][W - 1] = src[i + 1][W - 1];
- dst[i + 2][W - 1] = src[i + 2][W - 1];
- dst[i + 3][W - 1] = src[i + 3][W - 1];
- }
-
-// Borders are done without SSE
-#ifdef _OPENMP
- #pragma omp for
-#endif
-
- for (int i = H - (H % 4); i < H; i++) {
- dst[i][0] = src[i][0];
-
- for (int j = 1; j < W - 1; j++) {
- dst[i][j] = c1 * (src[i][j - 1] + src[i][j + 1]) + c0 * src[i][j];
- }
-
- dst[i][W - 1] = src[i][W - 1];
- }
-}
-
-
-
-// fast gaussian approximation if the support window is large
-template SSEFUNCTION void gaussHorizontalSse (T** src, T** dst, int W, int H, float sigma)
-{
-
- if (sigma < 0.25) {
- // dont perform filtering
- if (src != dst)
-#ifdef _OPENMP
- #pragma omp for
-#endif
- for (int i = 0; i < H; i++) {
- memcpy (dst[i], src[i], W * sizeof(T));
- }
-
- return;
- }
-
- if (sigma < 0.6) {
- // compute 3x3 kernel
- float c1 = exp (-1.0 / (2.0 * sigma * sigma));
- float csum = 2.0 * c1 + 1.0;
- c1 /= csum;
- float c0 = 1.0 / csum;
- gaussHorizontal3Sse (src, dst, W, H, c0, c1);
- return;
- }
-
- // coefficient calculation
- float q = 0.98711 * sigma - 0.96330;
-
- if (sigma < 2.5) {
- q = 3.97156 - 4.14554 * sqrt (1.0 - 0.26891 * sigma);
- }
-
- float b0 = 1.57825 + 2.44413 * q + 1.4281 * q * q + 0.422205 * q * q * q;
- float b1 = 2.44413 * q + 2.85619 * q * q + 1.26661 * q * q * q;
- float b2 = -1.4281 * q * q - 1.26661 * q * q * q;
- float b3 = 0.422205 * q * q * q;
- float 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
- float 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 + b2 + (b1 - b3) * b3);
- M[i][j] /= (1.0 + b1 - b2 + b3) * (1.0 - b1 - b2 - b3);
- }
-
- vfloat Rv;
- vfloat Tv, Tm2v, Tm3v;
- vfloat Bv, b1v, b2v, b3v;
- vfloat temp2W, temp2Wp1;
- float tmp[W][4] ALIGNED16;
- float tmpV[4] ALIGNED16;
- Bv = F2V(B);
- b1v = F2V(b1);
- b2v = F2V(b2);
- b3v = F2V(b3);
-
-#ifdef _OPENMP
- #pragma omp for
-#endif
-
- for (int i = 0; i < H - 3; i += 4) {
- tmpV[0] = src[i + 3][0];
- tmpV[1] = src[i + 2][0];
- tmpV[2] = src[i + 1][0];
- tmpV[3] = src[i][0];
- Tv = LVF(tmpV[0]);
- Rv = Tv * (Bv + b1v + b2v + b3v);
- Tm3v = 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 = LVF(tmpV[0]) * Bv + Rv * b1v + Tv * (b2v + b3v);
- Tm2v = 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 = 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;
- 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 + 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 + 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;
- STVF( tmp[W - 2][0], Tm2v );
-
- Tm3v = Bv * Tm3v + b1v * Tm2v + b2v * Rv + b3v * temp2W;
- STVF( tmp[W - 3][0], Tm3v );
-
- Tv = Rv;
- Rv = Tm3v;
- Tm3v = Tv;
-
- for (int j = W - 4; j >= 0; j--) {
- Tv = Rv;
- Rv = LVF(tmp[j][0]) * Bv + Tv * b1v + Tm2v * b2v + Tm3v * b3v;
- STVF( tmp[j][0], Rv );
- Tm3v = Tm2v;
- Tm2v = Tv;
- }
-
- for (int j = 0; j < W; j++) {
- dst[i + 3][j] = tmp[j][0];
- dst[i + 2][j] = tmp[j][1];
- dst[i + 1][j] = tmp[j][2];
- dst[i][j] = tmp[j][3];
- }
-
-
- }
-
-// Borders are done without SSE
-#ifdef _OPENMP
- #pragma omp for
-#endif
-
- for (int i = H - (H % 4); i < H; i++) {
- tmp[0][0] = B * src[i][0] + b1 * src[i][0] + b2 * src[i][0] + b3 * src[i][0];
- tmp[1][0] = B * src[i][1] + b1 * tmp[0][0] + b2 * src[i][0] + b3 * src[i][0];
- tmp[2][0] = B * src[i][2] + b1 * tmp[1][0] + b2 * tmp[0][0] + b3 * src[i][0];
-
- for (int j = 3; j < W; j++) {
- tmp[j][0] = B * src[i][j] + b1 * tmp[j - 1][0] + b2 * tmp[j - 2][0] + b3 * tmp[j - 3][0];
- }
-
- float temp2Wm1 = src[i][W - 1] + M[0][0] * (tmp[W - 1][0] - src[i][W - 1]) + M[0][1] * (tmp[W - 2][0] - src[i][W - 1]) + M[0][2] * (tmp[W - 3][0] - src[i][W - 1]);
- float temp2W = src[i][W - 1] + M[1][0] * (tmp[W - 1][0] - src[i][W - 1]) + M[1][1] * (tmp[W - 2][0] - src[i][W - 1]) + M[1][2] * (tmp[W - 3][0] - src[i][W - 1]);
- float temp2Wp1 = src[i][W - 1] + M[2][0] * (tmp[W - 1][0] - src[i][W - 1]) + M[2][1] * (tmp[W - 2][0] - src[i][W - 1]) + M[2][2] * (tmp[W - 3][0] - src[i][W - 1]);
-
- tmp[W - 1][0] = temp2Wm1;
- tmp[W - 2][0] = B * tmp[W - 2][0] + b1 * tmp[W - 1][0] + b2 * temp2W + b3 * temp2Wp1;
- tmp[W - 3][0] = B * tmp[W - 3][0] + b1 * tmp[W - 2][0] + b2 * tmp[W - 1][0] + b3 * temp2W;
-
- for (int j = W - 4; j >= 0; j--) {
- tmp[j][0] = B * tmp[j][0] + b1 * tmp[j + 1][0] + b2 * tmp[j + 2][0] + b3 * tmp[j + 3][0];
- }
-
- for (int j = 0; j < W; j++) {
- dst[i][j] = tmp[j][0];
- }
-
- }
-}
-#endif
-
-// fast gaussian approximation if the support window is large
-
-template void gaussHorizontal (T** src, T** dst, int W, int H, double sigma)
-{
-
-#ifdef __SSE2__
-
- if (sigma < 70) { // bigger sigma only with double precision
- gaussHorizontalSse (src, dst, W, H, sigma);
- return;
- }
-
-#endif
-
- if (sigma < 0.25) {
- // dont perform filtering
- if (src != dst)
-#ifdef _OPENMP
- #pragma omp for
-#endif
- for (int i = 0; i < H; i++) {
- memcpy (dst[i], src[i], W * sizeof(T));
- }
-
- return;
- }
-
- if (sigma < 0.6) {
- // compute 3x3 kernel
- double c1 = exp (-1.0 / (2.0 * sigma * sigma));
- double csum = 2.0 * c1 + 1.0;
- c1 /= csum;
- double c0 = 1.0 / csum;
- gaussHorizontal3 (src, dst, W, H, c0, c1);
- 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);
- }
-
- double temp2[W] ALIGNED16;
-
-#ifdef _OPENMP
- #pragma omp for
-#endif
-
- for (int i = 0; i < H; i++) {
-
- 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];
- temp2[2] = B * src[i][2] + b1 * temp2[1] + b2 * temp2[0] + b3 * src[i][0];
-
- for (int j = 3; j < W; j++) {
- temp2[j] = B * src[i][j] + b1 * temp2[j - 1] + b2 * temp2[j - 2] + b3 * temp2[j - 3];
- }
-
- double temp2Wm1 = src[i][W - 1] + M[0][0] * (temp2[W - 1] - src[i][W - 1]) + M[0][1] * (temp2[W - 2] - src[i][W - 1]) + M[0][2] * (temp2[W - 3] - src[i][W - 1]);
- double temp2W = src[i][W - 1] + M[1][0] * (temp2[W - 1] - src[i][W - 1]) + M[1][1] * (temp2[W - 2] - src[i][W - 1]) + M[1][2] * (temp2[W - 3] - src[i][W - 1]);
- double temp2Wp1 = src[i][W - 1] + M[2][0] * (temp2[W - 1] - src[i][W - 1]) + M[2][1] * (temp2[W - 2] - src[i][W - 1]) + M[2][2] * (temp2[W - 3] - src[i][W - 1]);
-
- 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];
- }
-
- }
-}
-
-#ifdef __SSE2__
-template SSEFUNCTION void gaussVerticalSse (T** src, T** dst, int W, int H, float sigma)
-{
-
- if (sigma < 0.25) {
- // dont perform filtering
- if (src != dst)
-#ifdef _OPENMP
- #pragma omp for
-#endif
- for (int i = 0; i < H; i++) {
- memcpy (dst[i], src[i], W * sizeof(T));
- }
-
- return;
- }
-
- if (sigma < 0.6) {
- // compute 3x3 kernel
- double c1 = exp (-1.0 / (2.0 * sigma * sigma));
- double csum = 2.0 * c1 + 1.0;
- c1 /= csum;
- double c0 = 1.0 / csum;
- gaussVertical3Sse (src, dst, W, H, c0, c1);
- 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 + b2 + (b1 - b3) * b3);
- M[i][j] /= (1.0 + b1 - b2 + b3) * (1.0 - b1 - b2 - b3);
- }
-
- float tmp[H][4] ALIGNED16;
- vfloat Rv;
- vfloat Tv, Tm2v, Tm3v;
- vfloat Bv, b1v, b2v, b3v;
- vfloat temp2W, temp2Wp1;
- Bv = F2V(B);
- b1v = F2V(b1);
- b2v = F2V(b2);
- b3v = F2V(b3);
-
-
-#ifdef _OPENMP
- #pragma omp for
-#endif
-
- for (int i = 0; i < W - 3; i += 4) {
- Tv = LVFU( src[0][i]);
- Rv = Tv * (Bv + b1v + b2v + b3v);
- Tm3v = Rv;
- STVF( tmp[0][0], Rv );
-
- Rv = LVFU(src[1][i]) * Bv + Rv * b1v + Tv * (b2v + b3v);
- Tm2v = Rv;
- STVF( tmp[1][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 = LVFU(src[j][i]) * Bv + Tv * b1v + Tm2v * b2v + Tm3v * b3v;
- STVF( tmp[j][0], Rv );
- Tm3v = Tm2v;
- Tm2v = Tv;
- }
-
- Tv = LVFU(src[H - 1][i]);
-
- 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 + 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;
- STVFU( dst[H - 2][i], Tm2v );
-
- Tm3v = Bv * Tm3v + b1v * Tm2v + b2v * Rv + b3v * temp2W;
- STVFU( dst[H - 3][i], Tm3v );
-
- Tv = Rv;
- Rv = Tm3v;
- Tm3v = Tv;
-
- for (int j = H - 4; j >= 0; j--) {
- Tv = Rv;
- Rv = LVF(tmp[j][0]) * Bv + Tv * b1v + Tm2v * b2v + Tm3v * b3v;
- STVFU( dst[j][i], Rv );
- Tm3v = Tm2v;
- Tm2v = Tv;
- }
- }
-
-// Borders are done without SSE
-#ifdef _OPENMP
- #pragma omp for
-#endif
-
- for (int i = W - (W % 4); i < W; i++) {
- tmp[0][0] = B * src[0][i] + b1 * src[0][i] + b2 * src[0][i] + b3 * src[0][i];
- tmp[1][0] = B * src[1][i] + b1 * tmp[0][0] + b2 * src[0][i] + b3 * src[0][i];
- tmp[2][0] = B * src[2][i] + b1 * tmp[1][0] + b2 * tmp[0][0] + b3 * src[0][i];
-
- for (int j = 3; j < H; j++) {
- tmp[j][0] = B * src[j][i] + b1 * tmp[j - 1][0] + b2 * tmp[j - 2][0] + b3 * tmp[j - 3][0];
- }
-
- float temp2Hm1 = src[H - 1][i] + M[0][0] * (tmp[H - 1][0] - src[H - 1][i]) + M[0][1] * (tmp[H - 2][0] - src[H - 1][i]) + M[0][2] * (tmp[H - 3][0] - src[H - 1][i]);
- float temp2H = src[H - 1][i] + M[1][0] * (tmp[H - 1][0] - src[H - 1][i]) + M[1][1] * (tmp[H - 2][0] - src[H - 1][i]) + M[1][2] * (tmp[H - 3][0] - src[H - 1][i]);
- float temp2Hp1 = src[H - 1][i] + M[2][0] * (tmp[H - 1][0] - src[H - 1][i]) + M[2][1] * (tmp[H - 2][0] - src[H - 1][i]) + M[2][2] * (tmp[H - 3][0] - src[H - 1][i]);
-
- tmp[H - 1][0] = temp2Hm1;
- tmp[H - 2][0] = B * tmp[H - 2][0] + b1 * tmp[H - 1][0] + b2 * temp2H + b3 * temp2Hp1;
- tmp[H - 3][0] = B * tmp[H - 3][0] + b1 * tmp[H - 2][0] + b2 * tmp[H - 1][0] + b3 * temp2H;
-
- for (int j = H - 4; j >= 0; j--) {
- tmp[j][0] = B * tmp[j][0] + b1 * tmp[j + 1][0] + b2 * tmp[j + 2][0] + b3 * tmp[j + 3][0];
- }
-
- for (int j = 0; j < H; j++) {
- dst[j][i] = tmp[j][0];
- }
-
- }
-}
-
-#endif
-
-template void gaussVertical (T** src, T** dst, int W, int H, double sigma)
-{
-
-#ifdef __SSE2__
-
- if (sigma < 70) { // bigger sigma only with double precision
- gaussVerticalSse (src, dst, W, H, sigma);
- return;
- }
-
-#endif
-
- if (sigma < 0.25) {
- // don't perform filtering
- if (src != dst)
-#ifdef _OPENMP
- #pragma omp for
-#endif
- for (int i = 0; i < H; i++) {
- memcpy (dst[i], src[i], W * sizeof(T));
- }
-
- return;
- }
-
- if (sigma < 0.6) {
- // compute 3x3 kernel
- double c1 = exp (-1.0 / (2.0 * sigma * sigma));
- double csum = 2.0 * c1 + 1.0;
- c1 /= csum;
- double c0 = 1.0 / csum;
- gaussVertical3 (src, dst, W, H, c0, c1);
- 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);
- }
-
- // process 'numcols' columns for better usage of L1 cpu cache (especially faster for large values of H)
- static const int numcols = 8;
- double temp2[H][numcols] ALIGNED16;
- double temp2Hm1[numcols], temp2H[numcols], temp2Hp1[numcols];
-#ifdef _OPENMP
- #pragma omp for nowait
-#endif
-
- for (int i = 0; i < W - numcols + 1; i += numcols) {
- for (int k = 0; k < numcols; k++) {
- temp2[0][k] = B * src[0][i + k] + b1 * src[0][i + k] + b2 * src[0][i + k] + b3 * src[0][i + k];
- temp2[1][k] = B * src[1][i + k] + b1 * temp2[0][k] + b2 * src[0][i + k] + b3 * src[0][i + k];
- temp2[2][k] = B * src[2][i + k] + b1 * temp2[1][k] + b2 * temp2[0][k] + b3 * src[0][i + k];
- }
-
- for (int j = 3; j < H; j++) {
- for (int k = 0; k < numcols; k++) {
- temp2[j][k] = B * src[j][i + k] + b1 * temp2[j - 1][k] + b2 * temp2[j - 2][k] + b3 * temp2[j - 3][k];
- }
- }
-
- for (int k = 0; k < numcols; k++) {
- temp2Hm1[k] = src[H - 1][i + k] + M[0][0] * (temp2[H - 1][k] - src[H - 1][i + k]) + M[0][1] * (temp2[H - 2][k] - src[H - 1][i + k]) + M[0][2] * (temp2[H - 3][k] - src[H - 1][i + k]);
- temp2H[k] = src[H - 1][i + k] + M[1][0] * (temp2[H - 1][k] - src[H - 1][i + k]) + M[1][1] * (temp2[H - 2][k] - src[H - 1][i + k]) + M[1][2] * (temp2[H - 3][k] - src[H - 1][i + k]);
- temp2Hp1[k] = src[H - 1][i + k] + M[2][0] * (temp2[H - 1][k] - src[H - 1][i + k]) + M[2][1] * (temp2[H - 2][k] - src[H - 1][i + k]) + M[2][2] * (temp2[H - 3][k] - src[H - 1][i + k]);
- }
-
- for (int k = 0; k < numcols; 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++) {
- 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];
- }
- }
- }
-
-#ifdef _OPENMP
- #pragma omp single
-#endif
-
- // process remaining column
- for (int i = W - (W % numcols); i < W; i++) {
- temp2[0][0] = B * src[0][i] + b1 * src[0][i] + b2 * src[0][i] + b3 * src[0][i];
- temp2[1][0] = B * src[1][i] + b1 * temp2[0][0] + b2 * src[0][i] + b3 * src[0][i];
- temp2[2][0] = B * src[2][i] + b1 * temp2[1][0] + b2 * temp2[0][0] + b3 * src[0][i];
-
- for (int j = 3; j < H; j++) {
- temp2[j][0] = B * src[j][i] + b1 * temp2[j - 1][0] + b2 * temp2[j - 2][0] + b3 * temp2[j - 3][0];
- }
-
- double temp2Hm1 = src[H - 1][i] + M[0][0] * (temp2[H - 1][0] - src[H - 1][i]) + M[0][1] * (temp2[H - 2][0] - src[H - 1][i]) + M[0][2] * (temp2[H - 3][0] - src[H - 1][i]);
- 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]);
-
- 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--) {
- 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 gaussianBlur(T** src, T** dst, const int W, const int H, const double sigma, T *buffer = NULL)
-{
-
- if(buffer) { // use iterated boxblur to approximate gaussian blur
- // Compute ideal averaging filter width and number of iterations
- int n = 1;
- double wIdeal = sqrt((12 * sigma * sigma) + 1);
-
- while(wIdeal > W || wIdeal > H) {
- n++;
- wIdeal = sqrt((12 * sigma * sigma / n) + 1);
- }
-
- if(n < 3) {
- n = 3;
- wIdeal = sqrt((12 * sigma * sigma / n) + 1);
- } else if(n > 6) {
- n = 6;
- }
-
- int wl = wIdeal;
-
- if(wl % 2 == 0) {
- wl--;
- }
-
- int wu = wl + 2;
-
- double mIdeal = (12 * sigma * sigma - n * wl * wl - 4 * n * wl - 3 * n) / (-4 * wl - 4);
- int m = round(mIdeal);
-
- int sizes[n];
-
- for(int i = 0; i < n; i++) {
- sizes[i] = ((i < m ? wl : wu) - 1) / 2;
- }
-
- rtengine::boxblur(src, dst, buffer, sizes[0], sizes[0], W, H);
-
- for(int i = 1; i < n; i++) {
- rtengine::boxblur(dst, dst, buffer, sizes[i], sizes[i], W, H);
- }
-
- } else {
- gaussHorizontal (src, dst, W, H, sigma);
- gaussVertical (dst, dst, W, H, sigma);
-
- }
-}
-
-#endif
+#endif
\ No newline at end of file
diff --git a/rtengine/helpersse2.h b/rtengine/helpersse2.h
index 9257ab81e..b60b5c9bc 100644
--- a/rtengine/helpersse2.h
+++ b/rtengine/helpersse2.h
@@ -115,21 +115,30 @@ static INLINE vfloat vcast_vf_f(float f)
return _mm_set_ps(f, f, f, f);
}
+// Don't use intrinsics here. Newer gcc versions (>= 4.9, maybe also before 4.9) generate better code when not using intrinsics
+// example: vaddf(vmulf(a,b),c) will generate an FMA instruction when build for chips with that feature only when vaddf and vmulf don't use intrinsics
static INLINE vfloat vaddf(vfloat x, vfloat y)
{
- return _mm_add_ps(x, y);
+ return x + y;
}
static INLINE vfloat vsubf(vfloat x, vfloat y)
{
- return _mm_sub_ps(x, y);
+ return x - y;
}
static INLINE vfloat vmulf(vfloat x, vfloat y)
{
- return _mm_mul_ps(x, y);
+ return x * y;
}
static INLINE vfloat vdivf(vfloat x, vfloat y)
{
- return _mm_div_ps(x, y);
+ return x / y;
+}
+// Also don't use intrinsic here: Some chips support FMA instructions with 3 and 4 operands
+// 3 operands: a = a*b+c, b = a*b+c, c = a*b+c // destination has to be one of a,b,c
+// 4 operands: d = a*b+c // destination does not have to be one of a,b,c
+// gcc will use the one which fits best when not using intrinsics. With using intrinsics that's not possible
+static INLINE vfloat vmlaf(vfloat x, vfloat y, vfloat z) {
+ return x * y + z;
}
static INLINE vfloat vrecf(vfloat x)
{
diff --git a/rtengine/imagedata.cc b/rtengine/imagedata.cc
index 11ca6f2ea..93c6b6604 100644
--- a/rtengine/imagedata.cc
+++ b/rtengine/imagedata.cc
@@ -21,10 +21,6 @@
#include
#include "safegtk.h"
-#ifndef GLIBMM_EXCEPTIONS_ENABLED
-#include
-#endif
-
using namespace rtengine;
extern "C" IptcData *iptc_data_new_from_jpeg_file (FILE* infile);
diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc
index d12027c6d..ee75e831a 100644
--- a/rtengine/improccoordinator.cc
+++ b/rtengine/improccoordinator.cc
@@ -787,11 +787,6 @@ void ImProcCoordinator::updatePreviewImage (int todo, Crop* cropCall)
ipf.updateColorProfiles(params.icm, monitorProfile, monitorIntent);
}
- // Update the monitor color transform if necessary
- if (todo & M_MONITOR) {
- ipf.updateColorProfiles(params.icm, monitorProfile, monitorIntent);
- }
-
// process crop, if needed
for (size_t i = 0; i < crops.size(); i++)
if (crops[i]->hasListener () && cropCall != crops[i] ) {
diff --git a/rtengine/improcfun.h b/rtengine/improcfun.h
index ec81f26eb..74db0ff3f 100644
--- a/rtengine/improcfun.h
+++ b/rtengine/improcfun.h
@@ -73,6 +73,7 @@ class ImProcFunctions
void transformLuminanceOnly (Imagefloat* original, Imagefloat* transformed, int cx, int cy, int oW, int oH, int fW, int fH);
void transformHighQuality (Imagefloat* original, Imagefloat* transformed, int cx, int cy, int sx, int sy, int oW, int oH, int fW, int fH, const LCPMapper *pLCPMap, bool fullImage);
+ void sharpenHaloCtrl (float** luminance, float** blurmap, float** base, int W, int H, const SharpeningParams &sharpenParam);
void sharpenHaloCtrl (LabImage* lab, float** blurmap, float** base, int W, int H, SharpeningParams &sharpenParam);
void sharpenHaloCtrlcam (CieImage* ncie, float** blurmap, float** base, int W, int H);
void firstAnalysisThread(Imagefloat* original, Glib::ustring wprofile, unsigned int* histogram, int row_from, int row_to);
@@ -271,9 +272,9 @@ public:
void Lanczos (const LabImage* src, LabImage* dst, float scale);
void Lanczos (const Image16* src, Image16* dst, float scale);
- void deconvsharpening (LabImage* lab, float** buffer, SharpeningParams &sharpenParam);
- void deconvsharpeningcam (CieImage* ncie, float** buffer);
+ void deconvsharpening (float** luminance, float** buffer, int W, int H, const SharpeningParams &sharpenParam);
void MLsharpen (LabImage* lab);// Manuel's clarity / sharpening
+ void MLmicrocontrast(float** luminance, int W, int H ); //Manuel's microcontrast
void MLmicrocontrast(LabImage* lab ); //Manuel's microcontrast
void MLmicrocontrastcam(CieImage* ncie ); //Manuel's microcontrast
diff --git a/rtengine/impulse_denoise.h b/rtengine/impulse_denoise.h
index 0e3fefd97..ba596559c 100644
--- a/rtengine/impulse_denoise.h
+++ b/rtengine/impulse_denoise.h
@@ -32,7 +32,6 @@ namespace rtengine
SSEFUNCTION void ImProcFunctions::impulse_nr (LabImage* lab, double thresh)
{
-
// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
// impulse noise removal
// local variables
@@ -41,15 +40,15 @@ SSEFUNCTION void ImProcFunctions::impulse_nr (LabImage* lab, double thresh)
int height = lab->H;
// buffer for the lowpass image
- float ** lpf = new float *[height];
+ float * lpf[height] ALIGNED16;
+ lpf[0] = new float [width * height];
// buffer for the highpass image
- float ** impish = new float *[height];
+ char * impish[height] ALIGNED16;
+ impish[0] = new char [width * height];
- for (int i = 0; i < height; i++) {
- lpf[i] = new float [width];
- //memset (lpf[i], 0, width*sizeof(float));
- impish[i] = new float [width];
- //memset (impish[i], 0, width*sizeof(unsigned short));
+ for (int i = 1; i < height; i++) {
+ lpf[i] = lpf[i - 1] + width;
+ impish[i] = impish[i - 1] + width;
}
@@ -60,12 +59,11 @@ SSEFUNCTION void ImProcFunctions::impulse_nr (LabImage* lab, double thresh)
const float eps = 1.0;
- //rangeblur (lab->L, lpf, impish /*used as buffer here*/, width, height, thresh, false);
#ifdef _OPENMP
#pragma omp parallel
#endif
{
- gaussianBlur (lab->L, lpf, width, height, max(2.0, thresh - 1.0));
+ gaussianBlur (lab->L, lpf, width, height, max(2.0, thresh - 1.0));
}
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -81,9 +79,9 @@ SSEFUNCTION void ImProcFunctions::impulse_nr (LabImage* lab, double thresh)
int i1, j1, j;
float hpfabs, hfnbrave;
#ifdef __SSE2__
- __m128 hfnbravev, hpfabsv;
- __m128 impthrDiv24v = _mm_set1_ps( impthrDiv24 );
- __m128 onev = _mm_set1_ps( 1.0f );
+ vfloat hfnbravev, hpfabsv;
+ vfloat impthrDiv24v = F2V( impthrDiv24 );
+ vfloat onev = F2V( 1.0f );
#endif
#ifdef _OPENMP
#pragma omp for
@@ -105,46 +103,37 @@ SSEFUNCTION void ImProcFunctions::impulse_nr (LabImage* lab, double thresh)
#ifdef __SSE2__
for (; j < width - 5; j += 4) {
- hfnbravev = _mm_setzero_ps( );
+ hfnbravev = ZEROV;
hpfabsv = vabsf(LVFU(lab->L[i][j]) - LVFU(lpf[i][j]));
//block average of high pass data
- for (i1 = max(0, i - 2); i1 <= min(i + 2, height - 1); i1++ )
+ for (i1 = max(0, i - 2); i1 <= min(i + 2, height - 1); i1++ ) {
for (j1 = j - 2; j1 <= j + 2; j1++) {
hfnbravev += vabsf(LVFU(lab->L[i1][j1]) - LVFU(lpf[i1][j1]));
}
+ }
- _mm_storeu_ps(&impish[i][j], vself(vmaskf_gt(hpfabsv, (hfnbravev - hpfabsv)*impthrDiv24v), onev, _mm_setzero_ps()));
- }
-
- for (; j < width - 2; j++) {
- hpfabs = fabs(lab->L[i][j] - lpf[i][j]);
-
- //block average of high pass data
- for (i1 = max(0, i - 2), hfnbrave = 0; i1 <= min(i + 2, height - 1); i1++ )
- for (j1 = j - 2; j1 <= j + 2; j1++) {
- hfnbrave += fabs(lab->L[i1][j1] - lpf[i1][j1]);
- }
-
- impish[i][j] = (hpfabs > ((hfnbrave - hpfabs) * impthrDiv24));
- }
-
-#else
-
- for (; j < width - 2; j++) {
- hpfabs = fabs(lab->L[i][j] - lpf[i][j]);
-
- //block average of high pass data
- for (i1 = max(0, i - 2), hfnbrave = 0; i1 <= min(i + 2, height - 1); i1++ )
- for (j1 = j - 2; j1 <= j + 2; j1++) {
- hfnbrave += fabs(lab->L[i1][j1] - lpf[i1][j1]);
- }
-
- impish[i][j] = (hpfabs > ((hfnbrave - hpfabs) * impthrDiv24));
+ int mask = _mm_movemask_ps((hfnbravev - hpfabsv) * impthrDiv24v - hpfabsv);
+ impish[i][j] = (mask & 1);
+ impish[i][j + 1] = ((mask & 2) >> 1);
+ impish[i][j + 2] = ((mask & 4) >> 2);
+ impish[i][j + 3] = ((mask & 8) >> 3);
}
#endif
+ for (; j < width - 2; j++) {
+ hpfabs = fabs(lab->L[i][j] - lpf[i][j]);
+
+ //block average of high pass data
+ for (i1 = max(0, i - 2), hfnbrave = 0; i1 <= min(i + 2, height - 1); i1++ )
+ for (j1 = j - 2; j1 <= j + 2; j1++) {
+ hfnbrave += fabs(lab->L[i1][j1] - lpf[i1][j1]);
+ }
+
+ impish[i][j] = (hpfabs > ((hfnbrave - hpfabs) * impthrDiv24));
+ }
+
for (; j < width; j++) {
hpfabs = fabs(lab->L[i][j] - lpf[i][j]);
@@ -188,10 +177,6 @@ SSEFUNCTION void ImProcFunctions::impulse_nr (LabImage* lab, double thresh)
for (i1 = max(0, i - 2); i1 <= min(i + 2, height - 1); i1++ )
for (j1 = 0; j1 <= j + 2; j1++ ) {
- if (i1 == i && j1 == j) {
- continue;
- }
-
if (impish[i1][j1]) {
continue;
}
@@ -220,10 +205,6 @@ SSEFUNCTION void ImProcFunctions::impulse_nr (LabImage* lab, double thresh)
for (i1 = max(0, i - 2); i1 <= min(i + 2, height - 1); i1++ )
for (j1 = j - 2; j1 <= j + 2; j1++ ) {
- if (i1 == i && j1 == j) {
- continue;
- }
-
if (impish[i1][j1]) {
continue;
}
@@ -252,10 +233,6 @@ SSEFUNCTION void ImProcFunctions::impulse_nr (LabImage* lab, double thresh)
for (i1 = max(0, i - 2); i1 <= min(i + 2, height - 1); i1++ )
for (j1 = j - 2; j1 < width; j1++ ) {
- if (i1 == i && j1 == j) {
- continue;
- }
-
if (impish[i1][j1]) {
continue;
}
@@ -277,13 +254,8 @@ SSEFUNCTION void ImProcFunctions::impulse_nr (LabImage* lab, double thresh)
}
//now impulsive values have been corrected
- for (int i = 0; i < height; i++) {
- delete [] lpf[i];
- delete [] impish[i];
- }
-
- delete [] lpf;
- delete [] impish;
+ delete [] lpf[0];
+ delete [] impish[0];
}
@@ -317,7 +289,7 @@ SSEFUNCTION void ImProcFunctions::impulse_nrcam (CieImage* ncie, double thresh,
#pragma omp parallel
#endif
{
- gaussianBlur (ncie->sh_p, lpf, width, height, max(2.0, thresh - 1.0));
+ gaussianBlur (ncie->sh_p, lpf, width, height, max(2.0, thresh - 1.0));
}
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -332,9 +304,9 @@ SSEFUNCTION void ImProcFunctions::impulse_nrcam (CieImage* ncie, double thresh,
int i1, j1, j;
float hpfabs, hfnbrave;
#ifdef __SSE2__
- __m128 hfnbravev, hpfabsv;
- __m128 impthrDiv24v = _mm_set1_ps( impthrDiv24 );
- __m128 onev = _mm_set1_ps( 1.0f );
+ vfloat hfnbravev, hpfabsv;
+ vfloat impthrDiv24v = F2V( impthrDiv24 );
+ vfloat onev = F2V( 1.0f );
#endif
#ifdef _OPENMP
#pragma omp for
@@ -357,7 +329,7 @@ SSEFUNCTION void ImProcFunctions::impulse_nrcam (CieImage* ncie, double thresh,
for (; j < width - 5; j += 4) {
hpfabsv = vabsf(LVFU(ncie->sh_p[i][j]) - LVFU(lpf[i][j]));
- hfnbravev = _mm_setzero_ps();
+ hfnbravev = ZEROV;
//block average of high pass data
for (i1 = max(0, i - 2); i1 <= min(i + 2, height - 1); i1++ ) {
@@ -365,38 +337,25 @@ SSEFUNCTION void ImProcFunctions::impulse_nrcam (CieImage* ncie, double thresh,
hfnbravev += vabsf(LVFU(ncie->sh_p[i1][j1]) - LVFU(lpf[i1][j1]));
}
- _mm_storeu_ps(&impish[i][j], vself(vmaskf_gt(hpfabsv, (hfnbravev - hpfabsv)*impthrDiv24v), onev, _mm_setzero_ps()));
}
- }
- for (; j < width - 2; j++) {
- hpfabs = fabs(ncie->sh_p[i][j] - lpf[i][j]);
-
- //block average of high pass data
- for (i1 = max(0, i - 2), hfnbrave = 0; i1 <= min(i + 2, height - 1); i1++ )
- for (j1 = j - 2; j1 <= j + 2; j1++ ) {
- hfnbrave += fabs(ncie->sh_p[i1][j1] - lpf[i1][j1]);
- }
-
- impish[i][j] = (hpfabs > ((hfnbrave - hpfabs) * impthrDiv24));
- }
-
-#else
-
- for (; j < width - 2; j++) {
- hpfabs = fabs(ncie->sh_p[i][j] - lpf[i][j]);
-
- //block average of high pass data
- for (i1 = max(0, i - 2), hfnbrave = 0; i1 <= min(i + 2, height - 1); i1++ )
- for (j1 = j - 2; j1 <= j + 2; j1++ ) {
- hfnbrave += fabs(ncie->sh_p[i1][j1] - lpf[i1][j1]);
- }
-
- impish[i][j] = (hpfabs > ((hfnbrave - hpfabs) * impthrDiv24));
+ STVFU(impish[i][j], vselfzero(vmaskf_gt(hpfabsv, (hfnbravev - hpfabsv)*impthrDiv24v), onev));
}
#endif
+ for (; j < width - 2; j++) {
+ hpfabs = fabs(ncie->sh_p[i][j] - lpf[i][j]);
+
+ //block average of high pass data
+ for (i1 = max(0, i - 2), hfnbrave = 0; i1 <= min(i + 2, height - 1); i1++ )
+ for (j1 = j - 2; j1 <= j + 2; j1++ ) {
+ hfnbrave += fabs(ncie->sh_p[i1][j1] - lpf[i1][j1]);
+ }
+
+ impish[i][j] = (hpfabs > ((hfnbrave - hpfabs) * impthrDiv24));
+ }
+
for (; j < width; j++) {
hpfabs = fabs(ncie->sh_p[i][j] - lpf[i][j]);
@@ -422,42 +381,34 @@ SSEFUNCTION void ImProcFunctions::impulse_nrcam (CieImage* ncie, double thresh,
#pragma omp parallel
#endif
{
- int j;
- float2 sincosval;
+
#ifdef __SSE2__
vfloat2 sincosvalv;
- __m128 piidv = _mm_set1_ps( piid );
- __m128 tempv;
+ vfloat piidv = F2V( piid );
+ vfloat tempv;
#endif
#ifdef _OPENMP
#pragma omp for
#endif
for (int i = 0; i < height; i++) {
+ int j = 0;
#ifdef __SSE2__
- for (j = 0; j < width - 3; j += 4) {
+ for (; j < width - 3; j += 4) {
sincosvalv = xsincosf(piidv * LVFU(ncie->h_p[i][j]));
tempv = LVFU(ncie->C_p[i][j]);
- _mm_storeu_ps(&sraa[i][j], tempv * sincosvalv.y);
- _mm_storeu_ps(&srbb[i][j], tempv * sincosvalv.x);
- }
-
- for (; j < width; j++) {
- sincosval = xsincosf(piid * ncie->h_p[i][j]);
- sraa[i][j] = ncie->C_p[i][j] * sincosval.y;
- srbb[i][j] = ncie->C_p[i][j] * sincosval.x;
- }
-
-#else
-
- for (j = 0; j < width; j++) {
- sincosval = xsincosf(piid * ncie->h_p[i][j]);
- sraa[i][j] = ncie->C_p[i][j] * sincosval.y;
- srbb[i][j] = ncie->C_p[i][j] * sincosval.x;
+ STVFU(sraa[i][j], tempv * sincosvalv.y);
+ STVFU(srbb[i][j], tempv * sincosvalv.x);
}
#endif
+
+ for (; j < width; j++) {
+ float2 sincosval = xsincosf(piid * ncie->h_p[i][j]);
+ sraa[i][j] = ncie->C_p[i][j] * sincosval.y;
+ srbb[i][j] = ncie->C_p[i][j] * sincosval.x;
+ }
}
}
@@ -488,10 +439,6 @@ SSEFUNCTION void ImProcFunctions::impulse_nrcam (CieImage* ncie, double thresh,
for (i1 = max(0, i - 2); i1 <= min(i + 2, height - 1); i1++ )
for (j1 = 0; j1 <= j + 2; j1++ ) {
- if (i1 == i && j1 == j) {
- continue;
- }
-
if (impish[i1][j1]) {
continue;
}
@@ -520,10 +467,6 @@ SSEFUNCTION void ImProcFunctions::impulse_nrcam (CieImage* ncie, double thresh,
for (i1 = max(0, i - 2); i1 <= min(i + 2, height - 1); i1++ )
for (j1 = j - 2; j1 <= j + 2; j1++ ) {
- if (i1 == i && j1 == j) {
- continue;
- }
-
if (impish[i1][j1]) {
continue;
}
@@ -552,10 +495,6 @@ SSEFUNCTION void ImProcFunctions::impulse_nrcam (CieImage* ncie, double thresh,
for (i1 = max(0, i - 2); i1 <= min(i + 2, height - 1); i1++ )
for (j1 = j - 2; j1 < width; j1++ ) {
- if (i1 == i && j1 == j) {
- continue;
- }
-
if (impish[i1][j1]) {
continue;
}
@@ -583,41 +522,32 @@ SSEFUNCTION void ImProcFunctions::impulse_nrcam (CieImage* ncie, double thresh,
#endif
{
#ifdef __SSE2__
- __m128 interav, interbv;
- __m128 piidv = _mm_set1_ps(piid);
+ vfloat interav, interbv;
+ vfloat piidv = F2V(piid);
#endif // __SSE2__
- int j;
#ifdef _OPENMP
#pragma omp for
#endif
for(int i = 0; i < height; i++ ) {
+ int j = 0;
#ifdef __SSE2__
- for(j = 0; j < width - 3; j += 4) {
+ for(; j < width - 3; j += 4) {
interav = LVFU(sraa[i][j]);
interbv = LVFU(srbb[i][j]);
- _mm_storeu_ps(&ncie->h_p[i][j], (xatan2f(interbv, interav)) / piidv);
- _mm_storeu_ps(&ncie->C_p[i][j], _mm_sqrt_ps(SQRV(interbv) + SQRV(interav)));
+ STVFU(ncie->h_p[i][j], (xatan2f(interbv, interav)) / piidv);
+ STVFU(ncie->C_p[i][j], vsqrtf(SQRV(interbv) + SQRV(interav)));
}
+#endif
+
for(; j < width; j++) {
float intera = sraa[i][j];
float interb = srbb[i][j];
ncie->h_p[i][j] = (xatan2f(interb, intera)) / piid;
ncie->C_p[i][j] = sqrt(SQR(interb) + SQR(intera));
}
-
-#else
-
- for(j = 0; j < width; j++) {
- float intera = sraa[i][j];
- float interb = srbb[i][j];
- ncie->h_p[i][j] = (xatan2f(interb, intera)) / piid;
- ncie->C_p[i][j] = sqrt(SQR(interb) + SQR(intera));
- }
-
-#endif
}
}
diff --git a/rtengine/ipretinex.cc b/rtengine/ipretinex.cc
index 0704fc40d..085e2683a 100644
--- a/rtengine/ipretinex.cc
+++ b/rtengine/ipretinex.cc
@@ -18,7 +18,7 @@
* adaptation to RawTherapee
* 2015 Jacques Desmis
- * 2015 Ingo Weyrich
+ * 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
@@ -210,7 +210,7 @@ void RawImageSource::MSR(float** luminance, float** originalLuminance, float **e
{
if (deh.enabled) {//enabled
float mean, stddv, maxtr, mintr;
- // float mini, delta, maxi;
+ //float mini, delta, maxi;
float delta;
float eps = 2.f;
bool useHsl = deh.retinexcolorspace == "HSLLOG";
@@ -235,18 +235,19 @@ void RawImageSource::MSR(float** luminance, float** originalLuminance, float **e
bool higplus = false ;
float elogt;
float hl = deh.baselog;
- SHMap* shmap;
+
if(hl >= 2.71828f) {
elogt = 2.71828f + SQR(SQR(hl - 2.71828f));
} else {
elogt = hl;
}
+
int H_L = height;
int W_L = width;
float *tran[H_L] ALIGNED16;
float *tranBuffer;
- int viewmet=0;
+ int viewmet = 0;
elogt = 2.71828f;//disabled baselog
FlatCurve* shcurve = NULL;//curve L=f(H)
@@ -281,119 +282,121 @@ void RawImageSource::MSR(float** luminance, float** originalLuminance, float **e
if (deh.retinexMethod == "highli" || deh.retinexMethod == "highliplus") {
moderetinex = 3;
}
- for(int it=1; it 1) shmap = new SHMap (W_L, H_L, true);
+ auto shmap = mapmet > 1 ? new SHMap (W_L, H_L, true) : nullptr;
@@ -462,29 +488,36 @@ void RawImageSource::MSR(float** luminance, float** originalLuminance, float **e
{
for ( int scale = scal - 1; scale >= 0; scale-- ) {
if(scale == scal - 1) {
- gaussianBlur (src, out, W_L, H_L, RetinexScales[scale], buffer);
- } else {
- // reuse result of last iteration
- gaussianBlur (out, out, W_L, H_L, sqrtf(SQR(RetinexScales[scale]) - SQR(RetinexScales[scale + 1])), buffer);
+ gaussianBlur (src, out, W_L, H_L, RetinexScales[scale], buffer);
+ } else { // reuse result of last iteration
+ gaussianBlur (out, out, W_L, H_L, sqrtf(SQR(RetinexScales[scale]) - SQR(RetinexScales[scale + 1])), buffer);
}
- //printf("scal=%d RetinexScales=%f\n",scale, RetinexScales[scale]);
- // printf("..");
+ if(mapmet == 4) {
+ shradius /= 1.;
+ } else {
+ shradius = 40.;
+ }
- if(mapmet==4) shradius /= 1.;
- else shradius = 40.;
+ //if(shHighlights > 0 || shShadows > 0) {
+ if(mapmet == 3) if(it == 1) {
+ shmap->updateL (out, shradius, true, 1); //wav Total
+ }
- // if(shHighlights > 0 || shShadows > 0) {
- if(mapmet==3) if(it==1) shmap->updateL (out, shradius, true, 1);//wav Total
- if(mapmet==2 && scale >2) if(it==1) shmap->updateL (out, shradius, true, 1);//wav partial
- if(mapmet==4) if(it==1) shmap->updateL (out, shradius, false, 1);//gauss
- // }
+ if(mapmet == 2 && scale > 2) if(it == 1) {
+ shmap->updateL (out, shradius, true, 1); //wav partial
+ }
+
+ if(mapmet == 4) if(it == 1) {
+ shmap->updateL (out, shradius, false, 1); //gauss
+ }
+
+ //}
if (shmap) {
h_th = shmap->max_f - deh.htonalwidth * (shmap->max_f - shmap->avg) / 100;
s_th = deh.stonalwidth * (shmap->avg - shmap->min_f) / 100;
}
-
#ifdef __SSE2__
vfloat pondv = F2V(pond);
vfloat limMinv = F2V(ilimdx);
@@ -496,26 +529,32 @@ void RawImageSource::MSR(float** luminance, float** originalLuminance, float **e
#ifdef _OPENMP
#pragma omp for
#endif
+
for (int i = 0; i < H_L; i++) {
if(mapcontlutili) {
int j = 0;
+
for (; j < W_L; j++) {
- if(it==1) out[i][j] = mapcurve[2.f * out[i][j]] / 2.f;
+ if(it == 1) {
+ out[i][j] = mapcurve[2.f * out[i][j]] / 2.f;
+ }
}
}
}
}
- // if(shHighlights > 0 || shShadows > 0) {
- if(((mapmet == 2 && scale >2) || mapmet==3 || mapmet==4) && it==1) {
+ //if(shHighlights > 0 || shShadows > 0) {
+ if(((mapmet == 2 && scale > 2) || mapmet == 3 || mapmet == 4) && it == 1) {
#ifdef _OPENMP
#pragma omp for
#endif
+
for (int i = 0; i < H_L; i++) {
int j = 0;
+
for (; j < W_L; j++) {
double mapval = 1.0 + shmap->map[i][j];
double factor = 1.0;
@@ -525,12 +564,14 @@ void RawImageSource::MSR(float** luminance, float** originalLuminance, float **e
} else if (mapval < s_th) {
factor = (s_th - (100.0 - shShadows) * (s_th - mapval) / 100.0) / mapval;
}
+
out[i][j] *= factor;
}
}
}
- // }
+
+ //}
#ifdef _OPENMP
#pragma omp for
@@ -565,16 +606,17 @@ void RawImageSource::MSR(float** luminance, float** originalLuminance, float **e
}
}
}
- // printf(".\n");
+
if(mapmet > 1) {
if(shmap) {
delete shmap;
}
}
+
shmap = NULL;
delete [] buffer;
-// delete [] outBuffer;
+ //delete [] outBuffer;
delete [] srcBuffer;
mean = 0.f;
@@ -582,9 +624,9 @@ void RawImageSource::MSR(float** luminance, float** originalLuminance, float **e
// 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);
+ //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);
+ //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;
@@ -619,12 +661,15 @@ void RawImageSource::MSR(float** luminance, float** originalLuminance, float **e
}
luminance[i][j] *= (-1.f + 4.f * dehatransmissionCurve[absciss]); //new transmission
- if(viewmet==3 || viewmet==2) tran[i][j]=luminance[i][j];
+
+ if(viewmet == 3 || viewmet == 2) {
+ tran[i][j] = luminance[i][j];
+ }
}
}
// median filter on transmission ==> reduce artifacts
- if (deh.medianmap && it==1) {//only one time
+ if (deh.medianmap && it == 1) { //only one time
int wid = W_L;
int hei = H_L;
float *tmL[hei] ALIGNED16;
@@ -662,7 +707,7 @@ void RawImageSource::MSR(float** luminance, float** originalLuminance, float **e
}
// I call mean_stddv2 instead of mean_stddv ==> logBetaGain
- // mean_stddv( luminance, mean, stddv, W_L, H_L, 1.f, maxtr, mintr);
+ //mean_stddv( luminance, mean, stddv, W_L, H_L, 1.f, maxtr, mintr);
mean_stddv2( luminance, mean, stddv, W_L, H_L, maxtr, mintr);
}
@@ -682,7 +727,7 @@ void RawImageSource::MSR(float** luminance, float** originalLuminance, float **e
}
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);
+ //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;
@@ -692,10 +737,10 @@ void RawImageSource::MSR(float** luminance, float** originalLuminance, float **e
maxCD = -9999999.f;
minCD = 9999999.f;
// coeff for auto "transmission" with 2 sigma #95% datas
- float aza=16300.f/(2.f*stddv);
- float azb=-aza*(mean-2.f*stddv);
- float bza=16300.f/(2.f*stddv);
- float bzb=16300.f-bza*(mean);
+ float aza = 16300.f / (2.f * stddv);
+ float azb = -aza * (mean - 2.f * stddv);
+ float bza = 16300.f / (2.f * stddv);
+ float bzb = 16300.f - bza * (mean);
@@ -711,7 +756,7 @@ void RawImageSource::MSR(float** luminance, float** originalLuminance, float **e
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] * logBetaGain - mini ) + offse;
float cd = cdfactor * ( luminance[i][j] - mini ) + offse;
if(cd > cdmax) {
@@ -724,7 +769,7 @@ void RawImageSource::MSR(float** luminance, float** originalLuminance, float **e
float str = strengthx;
- if(lhutili && it==1) { // S=f(H)
+ if(lhutili && it == 1) { // S=f(H)
{
float HH = exLuminance[i][j];
float valparam;
@@ -739,15 +784,33 @@ void RawImageSource::MSR(float** luminance, float** originalLuminance, float **e
}
}
- if(exLuminance[i][j] > 65535.f*hig && higplus) str *= hig;
- if(viewmet==0) luminance[i][j]=clipretinex( cd, 0.f, 32768.f ) * str + (1.f - str) * originalLuminance[i][j];
- if(viewmet==1) luminance[i][j] = out[i][j];
- if(viewmet==4) luminance[i][j] = (1.f + str) * originalLuminance[i][j] - str* out[i][j];//unsharp
- if(viewmet==2) {
- if(tran[i][j]<= mean) luminance[i][j] = azb + aza*tran[i][j];//auto values
- else luminance[i][j] = bzb + bza*tran[i][j];
+ if(exLuminance[i][j] > 65535.f * hig && higplus) {
+ str *= hig;
+ }
+
+ if(viewmet == 0) {
+ luminance[i][j] = clipretinex( cd, 0.f, 32768.f ) * str + (1.f - str) * originalLuminance[i][j];
+ }
+
+ if(viewmet == 1) {
+ luminance[i][j] = out[i][j];
+ }
+
+ if(viewmet == 4) {
+ luminance[i][j] = (1.f + str) * originalLuminance[i][j] - str * out[i][j]; //unsharp
+ }
+
+ if(viewmet == 2) {
+ if(tran[i][j] <= mean) {
+ luminance[i][j] = azb + aza * tran[i][j]; //auto values
+ } else {
+ luminance[i][j] = bzb + bza * tran[i][j];
+ }
+ }
+
+ if(viewmet == 3) {
+ luminance[i][j] = 1000.f + tran[i][j] * 700.f; //arbitrary values to help display log values which are between -20 to + 30 - usage values -4 + 5
}
- if(viewmet==3) luminance[i][j] = 1000.f + tran[i][j]*700.f;//arbitrary values to help display log values which are between -20 to + 30 - usage values -4 + 5
}
@@ -762,18 +825,19 @@ void RawImageSource::MSR(float** luminance, float** originalLuminance, float **e
}
delete [] outBuffer;
outBuffer = NULL;
- // printf("cdmin=%f cdmax=%f\n",minCD, maxCD);
+ //printf("cdmin=%f cdmax=%f\n",minCD, maxCD);
Tmean = mean;
Tsigma = stddv;
Tmin = mintr;
Tmax = maxtr;
- if (shcurve && it==1) {
+ if (shcurve && it == 1) {
delete shcurve;
}
}
- if(viewmet==3 || viewmet==2) {
+
+ if(viewmet == 3 || viewmet == 2) {
delete [] tranBuffer;
tranBuffer = NULL;
}
diff --git a/rtengine/ipsharpen.cc b/rtengine/ipsharpen.cc
index 928ffe5bd..a3d624b65 100644
--- a/rtengine/ipsharpen.cc
+++ b/rtengine/ipsharpen.cc
@@ -23,7 +23,6 @@
#include "rt_math.h"
#include "sleef.c"
#include "opthelper.h"
-
using namespace std;
namespace rtengine
@@ -42,136 +41,96 @@ SSEFUNCTION void ImProcFunctions::dcdamping (float** aI, float** aO, float dampi
const float dampingFac = -2.0 / (damping * damping);
#ifdef __SSE2__
- __m128 Iv, Ov, Uv, zerov, onev, fourv, fivev, dampingFacv, Tv;
+ __m128 Iv, Ov, Uv, zerov, onev, fourv, fivev, dampingFacv, Tv, Wv, Lv;
zerov = _mm_setzero_ps( );
- onev = _mm_set1_ps( 1.0f );
- fourv = _mm_set1_ps( 4.0f );
- fivev = _mm_set1_ps( 5.0f );
- dampingFacv = _mm_set1_ps( dampingFac );
+ onev = F2V( 1.0f );
+ fourv = F2V( 4.0f );
+ fivev = F2V( 5.0f );
+ dampingFacv = F2V( dampingFac );
+#endif
#ifdef _OPENMP
#pragma omp for
#endif
- for (int i = 0; i < H; i++)
- for (int j = 0; j < W - 3; j += 4) {
- Iv = _mm_loadu_ps( &aI[i][j] );
- Ov = _mm_loadu_ps( &aO[i][j] );
+ for (int i = 0; i < H; i++) {
+ int j = 0;
+#ifdef __SSE2__
- Uv = (Ov * xlogf(Iv / Ov) - Iv + Ov) * dampingFacv;
- Uv = _mm_min_ps(Uv, onev);
+ for (; j < W - 3; j += 4) {
+ Iv = LVFU( aI[i][j] );
+ Ov = LVFU( aO[i][j] );
+ Lv = xlogf(Iv / Ov);
+ Wv = Ov - Iv;
+ Uv = (Ov * Lv + Wv) * dampingFacv;
+ Uv = vminf(Uv, onev);
Tv = Uv * Uv;
Tv = Tv * Tv;
Uv = Tv * (fivev - Uv * fourv);
- Uv = (Ov - Iv) / Iv * Uv + onev;
- Uv = vself(vmaskf_ge(zerov, Iv), zerov, Uv);
- Uv = vself(vmaskf_ge(zerov, Ov), zerov, Uv);
-
- _mm_storeu_ps( &aI[i][j], Uv );
+ Uv = (Wv / Iv) * Uv + onev;
+ Uv = vselfzero(vmaskf_gt(Iv, zerov), Uv);
+ Uv = vselfzero(vmaskf_gt(Ov, zerov), Uv);
+ STVFU( aI[i][j], Uv );
}
-// border pixels are done without SSE2
- float I, O, U;
-#ifdef _OPENMP
- #pragma omp for
#endif
- for (int i = 0; i < H; i++)
- for(int j = W - (W % 4); j < W; j++) {
- I = aI[i][j];
- O = aO[i][j];
+ for(; j < W; j++) {
+ float I = aI[i][j];
+ float O = aO[i][j];
- if (O <= 0.0 || I <= 0.0) {
- aI[i][j] = 0.0;
+ if (O <= 0.f || I <= 0.f) {
+ aI[i][j] = 0.f;
continue;
}
- U = (O * xlogf(I / O) - I + O) * dampingFac;
+ float U = (O * xlogf(I / O) - I + O) * dampingFac;
U = min(U, 1.0f);
- U = U * U * U * U * (5.0 - U * 4.0);
- aI[i][j] = (O - I) / I * U + 1.0;
+ U = U * U * U * U * (5.f - U * 4.f);
+ aI[i][j] = (O - I) / I * U + 1.f;
}
-
-#else // without __SSE2__
- float I, O, U;
-#ifdef _OPENMP
- #pragma omp for
-#endif
-
- for (int i = 0; i < H; i++)
- for (int j = 0; j < W; j++) {
- I = aI[i][j];
- O = aO[i][j];
-
- if (O <= 0.0 || I <= 0.0) {
- aI[i][j] = 0.0;
- continue;
- }
-
- U = (O * xlogf(I / O) - I + O) * dampingFac;
- U = min(U, 1.0f);
- U = U * U * U * U * (5.0 - U * 4.0);
- aI[i][j] = (O - I) / I * U + 1.0;
- }
-
-#endif
+ }
}
-void ImProcFunctions::deconvsharpening (LabImage* lab, float** b2, SharpeningParams &sharpenParam)
+void ImProcFunctions::deconvsharpening (float** luminance, float** tmp, int W, int H, const SharpeningParams &sharpenParam)
{
- if (sharpenParam.enabled == false || sharpenParam.deconvamount < 1) {
+ if (sharpenParam.deconvamount < 1) {
return;
}
- int W = lab->W, H = lab->H;
+ float *tmpI[H] ALIGNED16;
- float** tmpI = new float*[H];
+ tmpI[0] = new float[W * H];
+
+ for (int i = 1; i < H; i++) {
+ tmpI[i] = tmpI[i - 1] + W;
+ }
for (int i = 0; i < H; i++) {
- tmpI[i] = new float[W];
-
- for (int j = 0; j < W; j++) {
- tmpI[i][j] = (float)lab->L[i][j];
+ for(int j = 0; j < W; j++) {
+ tmpI[i][j] = luminance[i][j];
}
}
- float** tmp = (float**)b2;
+ float damping = sharpenParam.deconvdamping / 5.0;
+ bool needdamp = sharpenParam.deconvdamping > 0;
+ double sigma = sharpenParam.deconvradius / scale;
#ifdef _OPENMP
#pragma omp parallel
#endif
{
- float damping = sharpenParam.deconvdamping / 5.0;
- bool needdamp = sharpenParam.deconvdamping > 0;
-
for (int k = 0; k < sharpenParam.deconviter; k++) {
-
- // apply blur function (gaussian blur)
- gaussianBlur (tmpI, tmp, W, H, sharpenParam.deconvradius / scale);
-
if (!needdamp) {
-#ifdef _OPENMP
- #pragma omp for
-#endif
-
- for (int i = 0; i < H; i++)
- for (int j = 0; j < W; j++)
- if (tmp[i][j] > 0) {
- tmp[i][j] = (float)lab->L[i][j] / tmp[i][j];
- }
+ // apply gaussian blur and divide luminance by result of gaussian blur
+ gaussianBlur (tmpI, tmp, W, H, sigma, nullptr, GAUSS_DIV, luminance);
} else {
- dcdamping (tmp, lab->L, damping, W, H);
+ // apply gaussian blur + damping
+ gaussianBlur (tmpI, tmp, W, H, sigma);
+ dcdamping (tmp, luminance, damping, W, H);
}
- gaussianBlur (tmp, tmp, W, H, sharpenParam.deconvradius / scale);
+ gaussianBlur (tmp, tmpI, W, H, sigma, nullptr, GAUSS_MULT);
-#ifdef _OPENMP
- #pragma omp for
-#endif
-
- for (int i = 0; i < H; i++)
- for (int j = 0; j < W; j++) {
- tmpI[i][j] = tmpI[i][j] * tmp[i][j];
- }
} // end for
float p2 = sharpenParam.deconvamount / 100.0;
@@ -183,34 +142,35 @@ void ImProcFunctions::deconvsharpening (LabImage* lab, float** b2, SharpeningPar
for (int i = 0; i < H; i++)
for (int j = 0; j < W; j++) {
- lab->L[i][j] = lab->L[i][j] * p1 + max(tmpI[i][j], 0.0f) * p2;
+ luminance[i][j] = luminance[i][j] * p1 + max(tmpI[i][j], 0.0f) * p2;
}
-
} // end parallel
- for (int i = 0; i < H; i++) {
- delete [] tmpI[i];
- }
+ delete [] tmpI[0];
- delete [] tmpI;
}
void ImProcFunctions::sharpening (LabImage* lab, float** b2, SharpeningParams &sharpenParam)
{
- if (sharpenParam.method == "rld") {
- deconvsharpening (lab, b2, sharpenParam);
+ if (!sharpenParam.enabled) {
return;
}
+ if (sharpenParam.method == "rld") {
+ deconvsharpening (lab->L, b2, lab->W, lab->H, sharpenParam);
+ return;
+ }
+
+ if ((!sharpenParam.enabled) || sharpenParam.amount < 1 || lab->W < 8 || lab->H < 8) {
+ return;
+ }
+
+
// Rest is UNSHARP MASK
- if (sharpenParam.enabled == false || sharpenParam.amount < 1 || lab->W < 8 || lab->H < 8) {
- return;
- }
-
int W = lab->W, H = lab->H;
- float** b3 = NULL;
- float** labCopy = NULL;
+ float** b3 = nullptr;
+ float** labCopy = nullptr;
if (sharpenParam.edgesonly) {
b3 = new float*[H];
@@ -221,7 +181,7 @@ void ImProcFunctions::sharpening (LabImage* lab, float** b2, SharpeningParams &s
}
if (sharpenParam.halocontrol && !sharpenParam.edgesonly) {
- // We only need the lab parameter copy in this special case
+ // We only need the lab channel copy in this special case
labCopy = new float*[H];
for( int i = 0; i < H; i++ ) {
@@ -235,10 +195,10 @@ void ImProcFunctions::sharpening (LabImage* lab, float** b2, SharpeningParams &s
{
if (sharpenParam.edgesonly == false) {
- gaussianBlur (lab->L, b2, 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);
- gaussianBlur (b3, b2, W, H, sharpenParam.radius / scale);
+ gaussianBlur (b3, b2, W, H, sharpenParam.radius / scale);
}
float** base = lab->L;
@@ -277,7 +237,7 @@ void ImProcFunctions::sharpening (LabImage* lab, float** b2, SharpeningParams &s
base = labCopy;
}
- sharpenHaloCtrl (lab, b2, base, W, H, sharpenParam);
+ sharpenHaloCtrl (lab->L, b2, base, W, H, sharpenParam);
}
} // end parallel
@@ -300,7 +260,7 @@ void ImProcFunctions::sharpening (LabImage* lab, float** b2, SharpeningParams &s
}
}
-void ImProcFunctions::sharpenHaloCtrl (LabImage* lab, float** blurmap, float** base, int W, int H, SharpeningParams &sharpenParam)
+void ImProcFunctions::sharpenHaloCtrl (float** luminance, float** blurmap, float** base, int W, int H, const SharpeningParams &sharpenParam)
{
float scale = (100.f - sharpenParam.halocontrol_amount) * 0.01f;
@@ -331,7 +291,7 @@ void ImProcFunctions::sharpenHaloCtrl (LabImage* lab, float** blurmap, float** b
max2 = maxn;
min1 = min2;
min2 = minn;
- labL = lab->L[i][j];
+ labL = luminance[i][j];
if (max_ < labL) {
max_ = labL;
@@ -358,7 +318,7 @@ void ImProcFunctions::sharpenHaloCtrl (LabImage* lab, float** blurmap, float** b
newL = min_ - (min_ - newL) * scale;
}
- lab->L[i][j] = newL;
+ luminance[i][j] = newL;
}
}
}
@@ -606,851 +566,377 @@ void ImProcFunctions::MLsharpen (LabImage* lab)
//! MicroContrast is a sharpening method developed by Manuel Llorens and documented here: http://www.rawness.es/sharpening/?lang=en
//!
The purpose is maximize clarity of the image without creating halo's.
//!
Addition from JD : pyramid + pondered contrast with matrix 5x5
-//! \param lab LabImage Image in the CIELab colour space
+//! \param luminance : Luminance channel of image
+void ImProcFunctions::MLmicrocontrast(float** luminance, int W, int H)
+{
+ if (params->sharpenMicro.enabled == false) {
+ return;
+ }
+
+ MyTime t1e, t2e;
+ t1e.set();
+
+ int k = params->sharpenMicro.matrix ? 1 : 2;
+
+ // k=2 matrix 5x5 k=1 matrix 3x3
+ int offset, offset2, i, j, col, row, n;
+ float temp, temp2, temp3, temp4, tempL;
+ float *LM, v, s, contrast;
+ int signs[25];
+ int width = W, height = H;
+ float uniform = params->sharpenMicro.uniformity;//between 0 to 100
+ int unif;
+ unif = (int)(uniform / 10.0f); //put unif between 0 to 10
+ float amount = params->sharpenMicro.amount / 1500.0f; //amount 2000.0 quasi no artefacts ==> 1500 = maximum, after artefacts
+
+ if (amount < 0.000001f) {
+ return;
+ }
+
+ if (k == 1) {
+ amount *= 2.7f; //25/9 if 3x3
+ }
+
+ if (settings->verbose) {
+ printf ("Micro-contrast amount %f\n", amount);
+ }
+
+ if (settings->verbose) {
+ printf ("Micro-contrast uniformity %i\n", unif);
+ }
+
+ //modulation uniformity in function of luminance
+ float L98[11] = {0.001f, 0.0015f, 0.002f, 0.004f, 0.006f, 0.008f, 0.01f, 0.03f, 0.05f, 0.1f, 0.1f};
+ float L95[11] = {0.0012f, 0.002f, 0.005f, 0.01f, 0.02f, 0.05f, 0.1f, 0.12f, 0.15f, 0.2f, 0.25f};
+ float L92[11] = {0.01f, 0.015f, 0.02f, 0.06f, 0.10f, 0.13f, 0.17f, 0.25f, 0.3f, 0.32f, 0.35f};
+ float L90[11] = {0.015f, 0.02f, 0.04f, 0.08f, 0.12f, 0.15f, 0.2f, 0.3f, 0.4f, 0.5f, 0.6f};
+ float L87[11] = {0.025f, 0.03f, 0.05f, 0.1f, 0.15f, 0.25f, 0.3f, 0.4f, 0.5f, 0.63f, 0.75f};
+ float L83[11] = {0.055f, 0.08f, 0.1f, 0.15f, 0.2f, 0.3f, 0.4f, 0.5f, 0.6f, 0.75f, 0.85f};
+ float L80[11] = {0.15f, 0.2f, 0.25f, 0.3f, 0.35f, 0.4f, 0.5f, 0.6f, 0.7f, 0.8f, 0.9f};
+ float L75[11] = {0.22f, 0.25f, 0.3f, 0.4f, 0.5f, 0.6f, 0.7f, 0.8f, 0.85f, 0.9f, 0.95f};
+ float L70[11] = {0.35f, 0.4f, 0.5f, 0.6f, 0.7f, 0.8f, 0.97f, 1.0f, 1.0f, 1.0f, 1.0f};
+ float L63[11] = {0.55f, 0.6f, 0.7f, 0.8f, 0.85f, 0.9f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f};
+ float L58[11] = {0.75f, 0.77f, 0.8f, 0.9f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f};
+ //default 5
+ //modulation contrast
+ float Cont0[11] = {0.05f, 0.1f, 0.2f, 0.25f, 0.3f, 0.4f, 0.5f, 0.6f, 0.7f, 0.8f, 0.9f};
+ float Cont1[11] = {0.1f, 0.2f, 0.3f, 0.4f, 0.5f, 0.6f, 0.7f, 0.8f, 0.9f, 0.95f, 1.0f};
+ float Cont2[11] = {0.2f, 0.40f, 0.6f, 0.7f, 0.8f, 0.85f, 0.90f, 0.95f, 1.0f, 1.05f, 1.10f};
+ float Cont3[11] = {0.5f, 0.6f, 0.7f, 0.8f, 0.85f, 0.9f, 1.0f, 1.0f, 1.05f, 1.10f, 1.20f};
+ float Cont4[11] = {0.8f, 0.85f, 0.9f, 0.95f, 1.0f, 1.05f, 1.10f, 1.150f, 1.2f, 1.25f, 1.40f};
+ float Cont5[11] = {1.0f, 1.1f, 1.2f, 1.25f, 1.3f, 1.4f, 1.45f, 1.50f, 1.6f, 1.65f, 1.80f};
+
+ float chmax = 8.0f;
+ LM = new float[width * height]; //allocation for Luminance
+#ifdef _OPENMP
+ #pragma omp parallel for private(offset, i,j) shared(LM)
+#endif
+
+ for(j = 0; j < height; j++)
+ for(i = 0, offset = j * width + i; i < width; i++, offset++) {
+ LM[offset] = luminance[j][i] / 327.68f; // adjust to 0.100 and to RT variables
+ }
+
+#ifdef _OPENMP
+ #pragma omp parallel for private(j,i,offset,s,signs,v,n,row,col,offset2,contrast,temp,temp2,tempL,temp4) shared(luminance,LM,amount,chmax,unif,k,L98,L95,L92,L90,L87,L83,L80,L75,L70,L63,L58,Cont0,Cont1,Cont2,Cont3,Cont4,Cont5)
+#endif
+
+ for(j = k; j < height - k; j++)
+ for(i = k, offset = j * width + i; i < width - k; i++, offset++) {
+ s = amount;
+ v = LM[offset];
+ n = 0;
+
+ for(row = j - k; row <= j + k; row++)
+ for(col = i - k, offset2 = row * width + col; col <= i + k; col++, offset2++) {
+ signs[n] = 0;
+
+ if (v < LM[offset2]) {
+ signs[n] = -1;
+ }
+
+ if (v > LM[offset2]) {
+ signs[n] = 1;
+ }
+
+ n++;
+ }
+
+ if (k == 1) {
+ contrast = sqrt(fabs(LM[offset + 1] - LM[offset - 1]) * fabs(LM[offset + 1] - LM[offset - 1]) + fabs(LM[offset + width] - LM[offset - width]) * fabs(LM[offset + width] - LM[offset - width])) / chmax; //for 3x3
+ } else /* if (k==2) */ contrast = sqrt(fabs(LM[offset + 1] - LM[offset - 1]) * fabs(LM[offset + 1] - LM[offset - 1]) + fabs(LM[offset + width] - LM[offset - width]) * fabs(LM[offset + width] - LM[offset - width])
+ + fabs(LM[offset + 2] - LM[offset - 2]) * fabs(LM[offset + 2] - LM[offset - 2]) + fabs(LM[offset + 2 * width] - LM[offset - 2 * width]) * fabs(LM[offset + 2 * width] - LM[offset - 2 * width])) / (2 * chmax); //for 5x5
+
+ if (contrast > 1.0f) {
+ contrast = 1.0f;
+ }
+
+ //matrix 5x5
+ temp = luminance[j][i] / 327.68f; //begin 3x3
+ temp += CLIREF(v - LM[offset - width - 1]) * sqrtf(2.0f) * s;
+ temp += CLIREF(v - LM[offset - width]) * s;
+ temp += CLIREF(v - LM[offset - width + 1]) * sqrtf(2.0f) * s;
+ temp += CLIREF(v - LM[offset - 1]) * s;
+ temp += CLIREF(v - LM[offset + 1]) * s;
+ temp += CLIREF(v - LM[offset + width - 1]) * sqrtf(2.0f) * s;
+ temp += CLIREF(v - LM[offset + width]) * s;
+ temp += CLIREF(v - LM[offset + width + 1]) * sqrtf(2.0f) * s; //end 3x3
+
+ // add JD continue 5x5
+ if (k == 2) {
+ temp += 2.0f * CLIREF(v - LM[offset + 2 * width]) * s;
+ temp += 2.0f * CLIREF(v - LM[offset - 2 * width]) * s;
+ temp += 2.0f * CLIREF(v - LM[offset - 2 ]) * s;
+ temp += 2.0f * CLIREF(v - LM[offset + 2 ]) * s;
+
+ temp += 2.0f * CLIREF(v - LM[offset + 2 * width - 1]) * s * sqrtf(1.25f); // 1.25 = 1*1 + 0.5*0.5
+ temp += 2.0f * CLIREF(v - LM[offset + 2 * width - 2]) * s * sqrtf(2.00f);
+ temp += 2.0f * CLIREF(v - LM[offset + 2 * width + 1]) * s * sqrtf(1.25f);
+ temp += 2.0f * CLIREF(v - LM[offset + 2 * width + 2]) * s * sqrtf(2.00f);
+ temp += 2.0f * CLIREF(v - LM[offset + width + 2]) * s * sqrtf(1.25f);
+ temp += 2.0f * CLIREF(v - LM[offset + width - 2]) * s * sqrtf(1.25f);
+ temp += 2.0f * CLIREF(v - LM[offset - 2 * width - 1]) * s * sqrtf(1.25f);
+ temp += 2.0f * CLIREF(v - LM[offset - 2 * width - 2]) * s * sqrtf(2.00f);
+ temp += 2.0f * CLIREF(v - LM[offset - 2 * width + 1]) * s * sqrtf(1.25f);
+ temp += 2.0f * CLIREF(v - LM[offset - 2 * width + 2]) * s * sqrtf(2.00f);
+ temp += 2.0f * CLIREF(v - LM[offset - width + 2]) * s * sqrtf(1.25f);
+ temp += 2.0f * CLIREF(v - LM[offset - width - 2]) * s * sqrtf(1.25f);
+ }
+
+ if (temp < 0.0f) {
+ temp = 0.0f;
+ }
+
+ v = temp;
+
+ n = 0;
+
+ for(row = j - k; row <= j + k; row++) {
+ for(col = i - k, offset2 = row * width + col; col <= i + k; col++, offset2++) {
+ if (((v < LM[offset2]) && (signs[n] > 0)) || ((v > LM[offset2]) && (signs[n] < 0))) {
+ temp = v * 0.75f + LM[offset2] * 0.25f; // 0.75 0.25
+ }
+
+ n++;
+ }
+ }
+
+ if (LM[offset] > 95.0f || LM[offset] < 5.0f) {
+ contrast *= Cont0[unif]; //+ JD : luminance pyramid to adjust contrast by evaluation of LM[offset]
+ } else if (LM[offset] > 90.0f || LM[offset] < 10.0f) {
+ contrast *= Cont1[unif];
+ } else if (LM[offset] > 80.0f || LM[offset] < 20.0f) {
+ contrast *= Cont2[unif];
+ } else if (LM[offset] > 70.0f || LM[offset] < 30.0f) {
+ contrast *= Cont3[unif];
+ } else if (LM[offset] > 60.0f || LM[offset] < 40.0f) {
+ contrast *= Cont4[unif];
+ } else {
+ contrast *= Cont5[unif]; //(2.0f/k)*Cont5[unif];
+ }
+
+ if (contrast > 1.0f) {
+ contrast = 1.0f;
+ }
+
+ tempL = 327.68f * (temp * (1.0f - contrast) + LM[offset] * contrast);
+ // JD: modulation of microcontrast in function of original Luminance and modulation of luminance
+ temp2 = tempL / (327.68f * LM[offset]); //for highlights
+
+ if (temp2 > 1.0f) {
+ if (temp2 > 1.70f) {
+ temp2 = 1.70f; //limit action
+ }
+
+ if (LM[offset] > 98.0f) {
+ luminance[j][i] = LM[offset] * 327.68f;
+ } else if (LM[offset] > 95.0f) {
+ temp = (L95[unif] * (temp2 - 1.f)) + 1.0f;
+ luminance[j][i] = temp * LM[offset] * 327.68f;
+ } else if (LM[offset] > 92.0f) {
+ temp = (L92[unif] * (temp2 - 1.f)) + 1.0f;
+ luminance[j][i] = temp * LM[offset] * 327.68f;
+ } else if (LM[offset] > 90.0f) {
+ temp = (L90[unif] * (temp2 - 1.f)) + 1.0f;
+ luminance[j][i] = temp * LM[offset] * 327.68f;
+ } else if (LM[offset] > 87.0f) {
+ temp = (L87[unif] * (temp2 - 1.f)) + 1.0f;
+ luminance[j][i] = temp * LM[offset] * 327.68f;
+ } else if (LM[offset] > 83.0f) {
+ temp = (L83[unif] * (temp2 - 1.f)) + 1.0f;
+ luminance[j][i] = temp * LM[offset] * 327.68f;
+ } else if (LM[offset] > 80.0f) {
+ temp = (L80[unif] * (temp2 - 1.f)) + 1.0f;
+ luminance[j][i] = temp * LM[offset] * 327.68f;
+ } else if (LM[offset] > 75.0f) {
+ temp = (L75[unif] * (temp2 - 1.f)) + 1.0f;
+ luminance[j][i] = temp * LM[offset] * 327.68f;
+ } else if (LM[offset] > 70.0f) {
+ temp = (L70[unif] * (temp2 - 1.f)) + 1.0f;
+ luminance[j][i] = temp * LM[offset] * 327.68f;
+ } else if (LM[offset] > 63.0f) {
+ temp = (L63[unif] * (temp2 - 1.f)) + 1.0f;
+ luminance[j][i] = temp * LM[offset] * 327.68f;
+ } else if (LM[offset] > 58.0f) {
+ temp = (L58[unif] * (temp2 - 1.f)) + 1.0f;
+ luminance[j][i] = temp * LM[offset] * 327.68f;
+ } else if (LM[offset] > 42.0f) {
+ temp = (L58[unif] * (temp2 - 1.f)) + 1.0f;
+ luminance[j][i] = temp * LM[offset] * 327.68f;
+ } else if (LM[offset] > 37.0f) {
+ temp = (L63[unif] * (temp2 - 1.f)) + 1.0f;
+ luminance[j][i] = temp * LM[offset] * 327.68f;
+ } else if (LM[offset] > 30.0f) {
+ temp = (L70[unif] * (temp2 - 1.f)) + 1.0f;
+ luminance[j][i] = temp * LM[offset] * 327.68f;
+ } else if (LM[offset] > 25.0f) {
+ temp = (L75[unif] * (temp2 - 1.f)) + 1.0f;
+ luminance[j][i] = temp * LM[offset] * 327.68f;
+ } else if (LM[offset] > 20.0f) {
+ temp = (L80[unif] * (temp2 - 1.f)) + 1.0f;
+ luminance[j][i] = temp * LM[offset] * 327.68f;
+ } else if (LM[offset] > 17.0f) {
+ temp = (L83[unif] * (temp2 - 1.f)) + 1.0f;
+ luminance[j][i] = temp * LM[offset] * 327.68f;
+ } else if (LM[offset] > 13.0f) {
+ temp = (L87[unif] * (temp2 - 1.f)) + 1.0f;
+ luminance[j][i] = temp * LM[offset] * 327.68f;
+ } else if (LM[offset] > 10.0f) {
+ temp = (L90[unif] * (temp2 - 1.f)) + 1.0f;
+ luminance[j][i] = temp * LM[offset] * 327.68f;
+ } else if (LM[offset] > 5.0f) {
+ temp = (L95[unif] * (temp2 - 1.f)) + 1.0f;
+ luminance[j][i] = temp * LM[offset] * 327.68f;
+ } else if (LM[offset] > 0.0f) {
+ luminance[j][i] = LM[offset] * 327.68f;
+ }
+ }
+
+ temp4 = (327.68f * LM[offset]) / tempL; //
+
+ if (temp4 > 1.0f) {
+ if (temp4 > 1.7f) {
+ temp4 = 1.7f; //limit action
+ }
+
+ if (LM[offset] < 2.0f) {
+ temp3 = temp4 - 1.0f;
+ temp = (L98[unif] * temp3) + 1.0f;
+ luminance[j][i] = (LM[offset] * 327.68f) / temp;
+ } else if (LM[offset] < 5.0f) {
+ temp3 = temp4 - 1.0f;
+ temp = (L95[unif] * temp3) + 1.0f;
+ luminance[j][i] = (LM[offset] * 327.68f) / temp;
+ } else if (LM[offset] < 8.0f) {
+ temp3 = temp4 - 1.0f;
+ temp = (L92[unif] * temp3) + 1.0f;
+ luminance[j][i] = (LM[offset] * 327.68f) / temp;
+ } else if (LM[offset] < 10.0f) {
+ temp3 = temp4 - 1.0f;
+ temp = (L90[unif] * temp3) + 1.0f;
+ luminance[j][i] = (LM[offset] * 327.68f) / temp;
+ } else if (LM[offset] < 13.0f) {
+ temp3 = temp4 - 1.0f;
+ temp = (L87[unif] * temp3) + 1.0f;
+ luminance[j][i] = (LM[offset] * 327.68f) / temp;
+ } else if (LM[offset] < 17.0f) {
+ temp3 = temp4 - 1.0f;
+ temp = (L83[unif] * temp3) + 1.0f;
+ luminance[j][i] = (LM[offset] * 327.68f) / temp;
+ } else if (LM[offset] < 20.0f) {
+ temp3 = temp4 - 1.0f;
+ temp = (L80[unif] * temp3) + 1.0f;
+ luminance[j][i] = (LM[offset] * 327.68f) / temp;
+ } else if (LM[offset] < 25.0f) {
+ temp3 = temp4 - 1.0f;
+ temp = (L75[unif] * temp3) + 1.0f;
+ luminance[j][i] = (LM[offset] * 327.68f) / temp;
+ } else if (LM[offset] < 30.0f) {
+ temp3 = temp4 - 1.0f;
+ temp = (L70[unif] * temp3) + 1.0f;
+ luminance[j][i] = (LM[offset] * 327.68f) / temp;
+ } else if (LM[offset] < 37.0f) {
+ temp3 = temp4 - 1.0f;
+ temp = (L63[unif] * temp3) + 1.0f;
+ luminance[j][i] = (LM[offset] * 327.68f) / temp;
+ } else if (LM[offset] < 42.0f) {
+ temp3 = temp4 - 1.0f;
+ temp = (L58[unif] * temp3) + 1.0f;
+ luminance[j][i] = (LM[offset] * 327.68f) / temp;
+ } else if (LM[offset] < 58.0f) {
+ temp3 = temp4 - 1.0f;
+ temp = (L58[unif] * temp3) + 1.0f;
+ luminance[j][i] = (LM[offset] * 327.68f) / temp;
+ } else if (LM[offset] < 63.0f) {
+ temp3 = temp4 - 1.0f;
+ temp = (L63[unif] * temp3) + 1.0f;
+ luminance[j][i] = (LM[offset] * 327.68f) / temp;
+ } else if (LM[offset] < 70.0f) {
+ temp3 = temp4 - 1.0f;
+ temp = (L70[unif] * temp3) + 1.0f;
+ luminance[j][i] = (LM[offset] * 327.68f) / temp;
+ } else if (LM[offset] < 75.0f) {
+ temp3 = temp4 - 1.0f;
+ temp = (L75[unif] * temp3) + 1.0f;
+ luminance[j][i] = (LM[offset] * 327.68f) / temp;
+ } else if (LM[offset] < 80.0f) {
+ temp3 = temp4 - 1.0f;
+ temp = (L80[unif] * temp3) + 1.0f;
+ luminance[j][i] = (LM[offset] * 327.68f) / temp;
+ } else if (LM[offset] < 83.0f) {
+ temp3 = temp4 - 1.0f;
+ temp = (L83[unif] * temp3) + 1.0f;
+ luminance[j][i] = (LM[offset] * 327.68f) / temp;
+ } else if (LM[offset] < 87.0f) {
+ temp3 = temp4 - 1.0f;
+ temp = (L87[unif] * temp3) + 1.0f;
+ luminance[j][i] = (LM[offset] * 327.68f) / temp;
+ } else if (LM[offset] < 90.0f) {
+ temp3 = temp4 - 1.0f;
+ temp = (L90[unif] * temp3) + 1.0f;
+ luminance[j][i] = (LM[offset] * 327.68f) / temp;
+ } else if (LM[offset] < 95.0f) {
+ temp3 = temp4 - 1.0f;
+ temp = (L95[unif] * temp3) + 1.0f;
+ luminance[j][i] = (LM[offset] * 327.68f) / temp;
+ } else if (LM[offset] < 100.0f) {
+ luminance[j][i] = LM[offset] * 327.68f;
+ }
+ }
+
+ }
+
+ delete [] LM;
+ t2e.set();
+
+ if (settings->verbose) {
+ printf("Micro-contrast %d usec\n", t2e.etime(t1e));
+ }
+
+}
+
void ImProcFunctions::MLmicrocontrast(LabImage* lab)
{
- if (params->sharpenMicro.enabled == false) {
- return;
- }
-
- MyTime t1e, t2e;
- t1e.set();
- int k;
-
- if (params->sharpenMicro.matrix == false) {
- k = 2;
- } else {
- k = 1;
- }
-
- // k=2 matrix 5x5 k=1 matrix 3x3
- int offset, offset2, i, j, col, row, n;
- float temp, temp2, temp3, temp4, tempL;
- float *LM, v, s, contrast;
- int signs[25];
- int width = lab->W, height = lab->H;
- float uniform = params->sharpenMicro.uniformity;//between 0 to 100
- int unif;
- unif = (int)(uniform / 10.0f); //put unif between 0 to 10
- float amount = params->sharpenMicro.amount / 1500.0f; //amount 2000.0 quasi no artefacts ==> 1500 = maximum, after artefacts
-
- if (amount < 0.000001f) {
- return;
- }
-
- if (k == 1) {
- amount *= 2.7f; //25/9 if 3x3
- }
-
- if (settings->verbose) {
- printf ("Micro-contrast amount %f\n", amount);
- }
-
- if (settings->verbose) {
- printf ("Micro-contrast uniformity %i\n", unif);
- }
-
- //modulation uniformity in function of luminance
- float L98[11] = {0.001f, 0.0015f, 0.002f, 0.004f, 0.006f, 0.008f, 0.01f, 0.03f, 0.05f, 0.1f, 0.1f};
- float L95[11] = {0.0012f, 0.002f, 0.005f, 0.01f, 0.02f, 0.05f, 0.1f, 0.12f, 0.15f, 0.2f, 0.25f};
- float L92[11] = {0.01f, 0.015f, 0.02f, 0.06f, 0.10f, 0.13f, 0.17f, 0.25f, 0.3f, 0.32f, 0.35f};
- float L90[11] = {0.015f, 0.02f, 0.04f, 0.08f, 0.12f, 0.15f, 0.2f, 0.3f, 0.4f, 0.5f, 0.6f};
- float L87[11] = {0.025f, 0.03f, 0.05f, 0.1f, 0.15f, 0.25f, 0.3f, 0.4f, 0.5f, 0.63f, 0.75f};
- float L83[11] = {0.055f, 0.08f, 0.1f, 0.15f, 0.2f, 0.3f, 0.4f, 0.5f, 0.6f, 0.75f, 0.85f};
- float L80[11] = {0.15f, 0.2f, 0.25f, 0.3f, 0.35f, 0.4f, 0.5f, 0.6f, 0.7f, 0.8f, 0.9f};
- float L75[11] = {0.22f, 0.25f, 0.3f, 0.4f, 0.5f, 0.6f, 0.7f, 0.8f, 0.85f, 0.9f, 0.95f};
- float L70[11] = {0.35f, 0.4f, 0.5f, 0.6f, 0.7f, 0.8f, 0.97f, 1.0f, 1.0f, 1.0f, 1.0f};
- float L63[11] = {0.55f, 0.6f, 0.7f, 0.8f, 0.85f, 0.9f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f};
- float L58[11] = {0.75f, 0.77f, 0.8f, 0.9f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f};
- //default 5
- //modulation contrast
- float Cont0[11] = {0.05f, 0.1f, 0.2f, 0.25f, 0.3f, 0.4f, 0.5f, 0.6f, 0.7f, 0.8f, 0.9f};
- float Cont1[11] = {0.1f, 0.2f, 0.3f, 0.4f, 0.5f, 0.6f, 0.7f, 0.8f, 0.9f, 0.95f, 1.0f};
- float Cont2[11] = {0.2f, 0.40f, 0.6f, 0.7f, 0.8f, 0.85f, 0.90f, 0.95f, 1.0f, 1.05f, 1.10f};
- float Cont3[11] = {0.5f, 0.6f, 0.7f, 0.8f, 0.85f, 0.9f, 1.0f, 1.0f, 1.05f, 1.10f, 1.20f};
- float Cont4[11] = {0.8f, 0.85f, 0.9f, 0.95f, 1.0f, 1.05f, 1.10f, 1.150f, 1.2f, 1.25f, 1.40f};
- float Cont5[11] = {1.0f, 1.1f, 1.2f, 1.25f, 1.3f, 1.4f, 1.45f, 1.50f, 1.6f, 1.65f, 1.80f};
-
- float chmax = 8.0f;
- LM = new float[width * height]; //allocation for Luminance
-#ifdef _OPENMP
- #pragma omp parallel for private(offset, i,j) shared(LM)
-#endif
-
- for(j = 0; j < height; j++)
- for(i = 0, offset = j * width + i; i < width; i++, offset++) {
- LM[offset] = lab->L[j][i] / 327.68f; // adjust to 0.100 and to RT variables
- }
-
-#ifdef _OPENMP
- #pragma omp parallel for private(j,i,offset,s,signs,v,n,row,col,offset2,contrast,temp,temp2,temp3,tempL,temp4) shared(lab,LM,amount,chmax,unif,k,L98,L95,L92,L90,L87,L83,L80,L75,L70,L63,L58,Cont0,Cont1,Cont2,Cont3,Cont4,Cont5)
-#endif
-
- for(j = k; j < height - k; j++)
- for(i = k, offset = j * width + i; i < width - k; i++, offset++) {
- s = amount;
- v = LM[offset];
- n = 0;
-
- for(row = j - k; row <= j + k; row++)
- for(col = i - k, offset2 = row * width + col; col <= i + k; col++, offset2++) {
- signs[n] = 0;
-
- if (v < LM[offset2]) {
- signs[n] = -1;
- }
-
- if (v > LM[offset2]) {
- signs[n] = 1;
- }
-
- n++;
- }
-
- if (k == 1) {
- contrast = sqrt(fabs(LM[offset + 1] - LM[offset - 1]) * fabs(LM[offset + 1] - LM[offset - 1]) + fabs(LM[offset + width] - LM[offset - width]) * fabs(LM[offset + width] - LM[offset - width])) / chmax; //for 3x3
- } else /* if (k==2) */ contrast = sqrt(fabs(LM[offset + 1] - LM[offset - 1]) * fabs(LM[offset + 1] - LM[offset - 1]) + fabs(LM[offset + width] - LM[offset - width]) * fabs(LM[offset + width] - LM[offset - width])
- + fabs(LM[offset + 2] - LM[offset - 2]) * fabs(LM[offset + 2] - LM[offset - 2]) + fabs(LM[offset + 2 * width] - LM[offset - 2 * width]) * fabs(LM[offset + 2 * width] - LM[offset - 2 * width])) / (2 * chmax); //for 5x5
-
- if (contrast > 1.0f) {
- contrast = 1.0f;
- }
-
- //matrix 5x5
- temp = lab->L[j][i] / 327.68f; //begin 3x3
- temp += CLIREF(v - LM[offset - width - 1]) * sqrtf(2.0f) * s;
- temp += CLIREF(v - LM[offset - width]) * s;
- temp += CLIREF(v - LM[offset - width + 1]) * sqrtf(2.0f) * s;
- temp += CLIREF(v - LM[offset - 1]) * s;
- temp += CLIREF(v - LM[offset + 1]) * s;
- temp += CLIREF(v - LM[offset + width - 1]) * sqrtf(2.0f) * s;
- temp += CLIREF(v - LM[offset + width]) * s;
- temp += CLIREF(v - LM[offset + width + 1]) * sqrtf(2.0f) * s; //end 3x3
-
- // add JD continue 5x5
- if (k == 2) {
- temp += 2.0f * CLIREF(v - LM[offset + 2 * width]) * s;
- temp += 2.0f * CLIREF(v - LM[offset - 2 * width]) * s;
- temp += 2.0f * CLIREF(v - LM[offset - 2 ]) * s;
- temp += 2.0f * CLIREF(v - LM[offset + 2 ]) * s;
-
- temp += 2.0f * CLIREF(v - LM[offset + 2 * width - 1]) * s * sqrtf(1.25f); // 1.25 = 1*1 + 0.5*0.5
- temp += 2.0f * CLIREF(v - LM[offset + 2 * width - 2]) * s * sqrtf(2.00f);
- temp += 2.0f * CLIREF(v - LM[offset + 2 * width + 1]) * s * sqrtf(1.25f);
- temp += 2.0f * CLIREF(v - LM[offset + 2 * width + 2]) * s * sqrtf(2.00f);
- temp += 2.0f * CLIREF(v - LM[offset + width + 2]) * s * sqrtf(1.25f);
- temp += 2.0f * CLIREF(v - LM[offset + width - 2]) * s * sqrtf(1.25f);
- temp += 2.0f * CLIREF(v - LM[offset - 2 * width - 1]) * s * sqrtf(1.25f);
- temp += 2.0f * CLIREF(v - LM[offset - 2 * width - 2]) * s * sqrtf(2.00f);
- temp += 2.0f * CLIREF(v - LM[offset - 2 * width + 1]) * s * sqrtf(1.25f);
- temp += 2.0f * CLIREF(v - LM[offset - 2 * width + 2]) * s * sqrtf(2.00f);
- temp += 2.0f * CLIREF(v - LM[offset - width + 2]) * s * sqrtf(1.25f);
- temp += 2.0f * CLIREF(v - LM[offset - width - 2]) * s * sqrtf(1.25f);
- }
-
- if (temp < 0.0f) {
- temp = 0.0f;
- }
-
- v = temp;
-
- n = 0;
-
- for(row = j - k; row <= j + k; row++) {
- for(col = i - k, offset2 = row * width + col; col <= i + k; col++, offset2++) {
- if (((v < LM[offset2]) && (signs[n] > 0)) || ((v > LM[offset2]) && (signs[n] < 0))) {
- temp = v * 0.75f + LM[offset2] * 0.25f; // 0.75 0.25
- }
-
- n++;
- }
- }
-
- if (LM[offset] > 95.0f || LM[offset] < 5.0f) {
- contrast *= Cont0[unif]; //+ JD : luminance pyramid to adjust contrast by evaluation of LM[offset]
- } else if (LM[offset] > 90.0f || LM[offset] < 10.0f) {
- contrast *= Cont1[unif];
- } else if (LM[offset] > 80.0f || LM[offset] < 20.0f) {
- contrast *= Cont2[unif];
- } else if (LM[offset] > 70.0f || LM[offset] < 30.0f) {
- contrast *= Cont3[unif];
- } else if (LM[offset] > 60.0f || LM[offset] < 40.0f) {
- contrast *= Cont4[unif];
- } else {
- contrast *= Cont5[unif]; //(2.0f/k)*Cont5[unif];
- }
-
- if (contrast > 1.0f) {
- contrast = 1.0f;
- }
-
- tempL = 327.68f * (temp * (1.0f - contrast) + LM[offset] * contrast);
- // JD: modulation of microcontrast in function of original Luminance and modulation of luminance
- temp2 = tempL / (327.68f * LM[offset]); //for highlights
-
- if (temp2 > 1.0f) {
- if (temp2 > 1.70f) {
- temp2 = 1.70f; //limit action
- }
-
- if (LM[offset] > 98.0f) {
- lab->L[j][i] = LM[offset] * 327.68f;
- } else if (LM[offset] > 95.0f) {
- temp3 = temp2 - 1.0f;
- temp = (L95[unif] * temp3) + 1.0f;
- lab->L[j][i] = temp * LM[offset] * 327.68f;
- } else if (LM[offset] > 92.0f) {
- temp3 = temp2 - 1.0f;
- temp = (L92[unif] * temp3) + 1.0f;
- lab->L[j][i] = temp * LM[offset] * 327.68f;
- } else if (LM[offset] > 90.0f) {
- temp3 = temp2 - 1.0f;
- temp = (L90[unif] * temp3) + 1.0f;
- lab->L[j][i] = temp * LM[offset] * 327.68f;
- } else if (LM[offset] > 87.0f) {
- temp3 = temp2 - 1.0f;
- temp = (L87[unif] * temp3) + 1.0f;
- lab->L[j][i] = temp * LM[offset] * 327.68f;
- } else if (LM[offset] > 83.0f) {
- temp3 = temp2 - 1.0f;
- temp = (L83[unif] * temp3) + 1.0f;
- lab->L[j][i] = temp * LM[offset] * 327.68f;
- } else if (LM[offset] > 80.0f) {
- temp3 = temp2 - 1.0f;
- temp = (L80[unif] * temp3) + 1.0f;
- lab->L[j][i] = temp * LM[offset] * 327.68f;
- } else if (LM[offset] > 75.0f) {
- temp3 = temp2 - 1.0f;
- temp = (L75[unif] * temp3) + 1.0f;
- lab->L[j][i] = temp * LM[offset] * 327.68f;
- } else if (LM[offset] > 70.0f) {
- temp3 = temp2 - 1.0f;
- temp = (L70[unif] * temp3) + 1.0f;
- lab->L[j][i] = temp * LM[offset] * 327.68f;
- } else if (LM[offset] > 63.0f) {
- temp3 = temp2 - 1.0f;
- temp = (L63[unif] * temp3) + 1.0f;
- lab->L[j][i] = temp * LM[offset] * 327.68f;
- } else if (LM[offset] > 58.0f) {
- temp3 = temp2 - 1.0f;
- temp = (L58[unif] * temp3) + 1.0f;
- lab->L[j][i] = temp * LM[offset] * 327.68f;
- } else if (LM[offset] > 42.0f) {
- temp3 = temp2 - 1.0f;
- temp = (L58[unif] * temp3) + 1.0f;
- lab->L[j][i] = temp * LM[offset] * 327.68f;
- } else if (LM[offset] > 37.0f) {
- temp3 = temp2 - 1.0f;
- temp = (L63[unif] * temp3) + 1.0f;
- lab->L[j][i] = temp * LM[offset] * 327.68f;
- } else if (LM[offset] > 30.0f) {
- temp3 = temp2 - 1.0f;
- temp = (L70[unif] * temp3) + 1.0f;
- lab->L[j][i] = temp * LM[offset] * 327.68f;
- } else if (LM[offset] > 25.0f) {
- temp3 = temp2 - 1.0f;
- temp = (L75[unif] * temp3) + 1.0f;
- lab->L[j][i] = temp * LM[offset] * 327.68f;
- } else if (LM[offset] > 20.0f) {
- temp3 = temp2 - 1.0f;
- temp = (L80[unif] * temp3) + 1.0f;
- lab->L[j][i] = temp * LM[offset] * 327.68f;
- } else if (LM[offset] > 17.0f) {
- temp3 = temp2 - 1.0f;
- temp = (L83[unif] * temp3) + 1.0f;
- lab->L[j][i] = temp * LM[offset] * 327.68f;
- } else if (LM[offset] > 13.0f) {
- temp3 = temp2 - 1.0f;
- temp = (L87[unif] * temp3) + 1.0f;
- lab->L[j][i] = temp * LM[offset] * 327.68f;
- } else if (LM[offset] > 10.0f) {
- temp3 = temp2 - 1.0f;
- temp = (L90[unif] * temp3) + 1.0f;
- lab->L[j][i] = temp * LM[offset] * 327.68f;
- } else if (LM[offset] > 5.0f) {
- temp3 = temp2 - 1.0f;
- temp = (L95[unif] * temp3) + 1.0f;
- lab->L[j][i] = temp * LM[offset] * 327.68f;
- } else if (LM[offset] > 0.0f) {
- lab->L[j][i] = LM[offset] * 327.68f;
- }
- }
-
- temp4 = (327.68f * LM[offset]) / tempL; //
-
- if (temp4 > 1.0f) {
- if (temp4 > 1.7f) {
- temp4 = 1.7f; //limit action
- }
-
- if (LM[offset] < 2.0f) {
- temp3 = temp4 - 1.0f;
- temp = (L98[unif] * temp3) + 1.0f;
- lab->L[j][i] = (LM[offset] * 327.68f) / temp;
- } else if (LM[offset] < 5.0f) {
- temp3 = temp4 - 1.0f;
- temp = (L95[unif] * temp3) + 1.0f;
- lab->L[j][i] = (LM[offset] * 327.68f) / temp;
- } else if (LM[offset] < 8.0f) {
- temp3 = temp4 - 1.0f;
- temp = (L92[unif] * temp3) + 1.0f;
- lab->L[j][i] = (LM[offset] * 327.68f) / temp;
- } else if (LM[offset] < 10.0f) {
- temp3 = temp4 - 1.0f;
- temp = (L90[unif] * temp3) + 1.0f;
- lab->L[j][i] = (LM[offset] * 327.68f) / temp;
- } else if (LM[offset] < 13.0f) {
- temp3 = temp4 - 1.0f;
- temp = (L87[unif] * temp3) + 1.0f;
- lab->L[j][i] = (LM[offset] * 327.68f) / temp;
- } else if (LM[offset] < 17.0f) {
- temp3 = temp4 - 1.0f;
- temp = (L83[unif] * temp3) + 1.0f;
- lab->L[j][i] = (LM[offset] * 327.68f) / temp;
- } else if (LM[offset] < 20.0f) {
- temp3 = temp4 - 1.0f;
- temp = (L80[unif] * temp3) + 1.0f;
- lab->L[j][i] = (LM[offset] * 327.68f) / temp;
- } else if (LM[offset] < 25.0f) {
- temp3 = temp4 - 1.0f;
- temp = (L75[unif] * temp3) + 1.0f;
- lab->L[j][i] = (LM[offset] * 327.68f) / temp;
- } else if (LM[offset] < 30.0f) {
- temp3 = temp4 - 1.0f;
- temp = (L70[unif] * temp3) + 1.0f;
- lab->L[j][i] = (LM[offset] * 327.68f) / temp;
- } else if (LM[offset] < 37.0f) {
- temp3 = temp4 - 1.0f;
- temp = (L63[unif] * temp3) + 1.0f;
- lab->L[j][i] = (LM[offset] * 327.68f) / temp;
- } else if (LM[offset] < 42.0f) {
- temp3 = temp4 - 1.0f;
- temp = (L58[unif] * temp3) + 1.0f;
- lab->L[j][i] = (LM[offset] * 327.68f) / temp;
- } else if (LM[offset] < 58.0f) {
- temp3 = temp4 - 1.0f;
- temp = (L58[unif] * temp3) + 1.0f;
- lab->L[j][i] = (LM[offset] * 327.68f) / temp;
- } else if (LM[offset] < 63.0f) {
- temp3 = temp4 - 1.0f;
- temp = (L63[unif] * temp3) + 1.0f;
- lab->L[j][i] = (LM[offset] * 327.68f) / temp;
- } else if (LM[offset] < 70.0f) {
- temp3 = temp4 - 1.0f;
- temp = (L70[unif] * temp3) + 1.0f;
- lab->L[j][i] = (LM[offset] * 327.68f) / temp;
- } else if (LM[offset] < 75.0f) {
- temp3 = temp4 - 1.0f;
- temp = (L75[unif] * temp3) + 1.0f;
- lab->L[j][i] = (LM[offset] * 327.68f) / temp;
- } else if (LM[offset] < 80.0f) {
- temp3 = temp4 - 1.0f;
- temp = (L80[unif] * temp3) + 1.0f;
- lab->L[j][i] = (LM[offset] * 327.68f) / temp;
- } else if (LM[offset] < 83.0f) {
- temp3 = temp4 - 1.0f;
- temp = (L83[unif] * temp3) + 1.0f;
- lab->L[j][i] = (LM[offset] * 327.68f) / temp;
- } else if (LM[offset] < 87.0f) {
- temp3 = temp4 - 1.0f;
- temp = (L87[unif] * temp3) + 1.0f;
- lab->L[j][i] = (LM[offset] * 327.68f) / temp;
- } else if (LM[offset] < 90.0f) {
- temp3 = temp4 - 1.0f;
- temp = (L90[unif] * temp3) + 1.0f;
- lab->L[j][i] = (LM[offset] * 327.68f) / temp;
- } else if (LM[offset] < 95.0f) {
- temp3 = temp4 - 1.0f;
- temp = (L95[unif] * temp3) + 1.0f;
- lab->L[j][i] = (LM[offset] * 327.68f) / temp;
- } else if (LM[offset] < 100.0f) {
- lab->L[j][i] = LM[offset] * 327.68f;
- }
- }
-
- }
-
- delete [] LM;
- t2e.set();
-
- if (settings->verbose) {
- printf("Micro-contrast %d usec\n", t2e.etime(t1e));
- }
-
+ MLmicrocontrast(lab->L, lab->W, lab->H);
}
-//! MicroContrast is a sharpening method developed by Manuel Llorens and documented here: http://www.rawness.es/sharpening/?lang=en
-//!
The purpose is maximize clarity of the image without creating halo's.
-//!
Addition from JD : pyramid + pondered contrast with matrix 5x5
-//! \param ncie CieImage Image in the CIECAM02 colour space
void ImProcFunctions::MLmicrocontrastcam(CieImage* ncie)
{
- if (params->sharpenMicro.enabled == false) {
- return;
- }
-
- MyTime t1e, t2e;
- t1e.set();
- int k;
-
- if (params->sharpenMicro.matrix == false) {
- k = 2;
- } else {
- k = 1;
- }
-
- // k=2 matrix 5x5 k=1 matrix 3x3
- int offset, offset2, i, j, col, row, n;
- float temp, temp2, temp3, temp4, tempL;
- float *LM, v, s, contrast;
- int signs[25];
- int width = ncie->W, height = ncie->H;
- float uniform = params->sharpenMicro.uniformity;//between 0 to 100
- int unif;
- unif = (int)(uniform / 10.0f); //put unif between 0 to 10
- float amount = params->sharpenMicro.amount / 1500.0f; //amount 2000.0 quasi no artefacts ==> 1500 = maximum, after artefacts
-
- if (amount < 0.000001f) {
- return;
- }
-
- if (k == 1) {
- amount *= 2.7f; //25/9 if 3x3
- }
-
- if (settings->verbose) {
- printf ("Micro-contrast amount %f\n", amount);
- }
-
- if (settings->verbose) {
- printf ("Micro-contrast uniformity %i\n", unif);
- }
-
- //modulation uniformity in function of luminance
- float L98[11] = {0.001f, 0.0015f, 0.002f, 0.004f, 0.006f, 0.008f, 0.01f, 0.03f, 0.05f, 0.1f, 0.1f};
- float L95[11] = {0.0012f, 0.002f, 0.005f, 0.01f, 0.02f, 0.05f, 0.1f, 0.12f, 0.15f, 0.2f, 0.25f};
- float L92[11] = {0.01f, 0.015f, 0.02f, 0.06f, 0.10f, 0.13f, 0.17f, 0.25f, 0.3f, 0.32f, 0.35f};
- float L90[11] = {0.015f, 0.02f, 0.04f, 0.08f, 0.12f, 0.15f, 0.2f, 0.3f, 0.4f, 0.5f, 0.6f};
- float L87[11] = {0.025f, 0.03f, 0.05f, 0.1f, 0.15f, 0.25f, 0.3f, 0.4f, 0.5f, 0.63f, 0.75f};
- float L83[11] = {0.055f, 0.08f, 0.1f, 0.15f, 0.2f, 0.3f, 0.4f, 0.5f, 0.6f, 0.75f, 0.85f};
- float L80[11] = {0.15f, 0.2f, 0.25f, 0.3f, 0.35f, 0.4f, 0.5f, 0.6f, 0.7f, 0.8f, 0.9f};
- float L75[11] = {0.22f, 0.25f, 0.3f, 0.4f, 0.5f, 0.6f, 0.7f, 0.8f, 0.85f, 0.9f, 0.95f};
- float L70[11] = {0.35f, 0.4f, 0.5f, 0.6f, 0.7f, 0.8f, 0.97f, 1.0f, 1.0f, 1.0f, 1.0f};
- float L63[11] = {0.55f, 0.6f, 0.7f, 0.8f, 0.85f, 0.9f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f};
- float L58[11] = {0.75f, 0.77f, 0.8f, 0.9f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f};
- //default 5
- //modulation contrast
- float Cont0[11] = {0.05f, 0.1f, 0.2f, 0.25f, 0.3f, 0.4f, 0.5f, 0.6f, 0.7f, 0.8f, 0.9f};
- float Cont1[11] = {0.1f, 0.2f, 0.3f, 0.4f, 0.5f, 0.6f, 0.7f, 0.8f, 0.9f, 0.95f, 1.0f};
- float Cont2[11] = {0.2f, 0.40f, 0.6f, 0.7f, 0.8f, 0.85f, 0.90f, 0.95f, 1.0f, 1.05f, 1.10f};
- float Cont3[11] = {0.5f, 0.6f, 0.7f, 0.8f, 0.85f, 0.9f, 1.0f, 1.0f, 1.05f, 1.10f, 1.20f};
- float Cont4[11] = {0.8f, 0.85f, 0.9f, 0.95f, 1.0f, 1.05f, 1.10f, 1.150f, 1.2f, 1.25f, 1.40f};
- float Cont5[11] = {1.0f, 1.1f, 1.2f, 1.25f, 1.3f, 1.4f, 1.45f, 1.50f, 1.6f, 1.65f, 1.80f};
-
- float chmax = 8.0f;
- LM = new float[width * height]; //allocation for Luminance
-#ifdef _OPENMP
- #pragma omp parallel for private(offset, i,j) shared(LM)
-#endif
-
- for(j = 0; j < height; j++)
- for(i = 0, offset = j * width + i; i < width; i++, offset++) {
- LM[offset] = ncie->sh_p[j][i] / 327.68f; // adjust to 0.100 and to RT variables
- }
-
-#ifdef _OPENMP
- #pragma omp parallel for private(j,i,offset,s,signs,v,n,row,col,offset2,contrast,temp,temp2,temp3,tempL,temp4) shared(ncie,LM,amount,chmax,unif,k,L98,L95,L92,L90,L87,L83,L80,L75,L70,L63,L58,Cont0,Cont1,Cont2,Cont3,Cont4,Cont5)
-#endif
-
- for(j = k; j < height - k; j++)
- for(i = k, offset = j * width + i; i < width - k; i++, offset++) {
- s = amount;
- v = LM[offset];
- n = 0;
-
- for(row = j - k; row <= j + k; row++)
- for(col = i - k, offset2 = row * width + col; col <= i + k; col++, offset2++) {
- signs[n] = 0;
-
- if (v < LM[offset2]) {
- signs[n] = -1;
- }
-
- if (v > LM[offset2]) {
- signs[n] = 1;
- }
-
- n++;
- }
-
- if (k == 1) {
- contrast = sqrt(fabs(LM[offset + 1] - LM[offset - 1]) * fabs(LM[offset + 1] - LM[offset - 1]) + fabs(LM[offset + width] - LM[offset - width]) * fabs(LM[offset + width] - LM[offset - width])) / chmax; //for 3x3
- } else /* if (k==2) */ contrast = sqrt(fabs(LM[offset + 1] - LM[offset - 1]) * fabs(LM[offset + 1] - LM[offset - 1]) + fabs(LM[offset + width] - LM[offset - width]) * fabs(LM[offset + width] - LM[offset - width])
- + fabs(LM[offset + 2] - LM[offset - 2]) * fabs(LM[offset + 2] - LM[offset - 2]) + fabs(LM[offset + 2 * width] - LM[offset - 2 * width]) * fabs(LM[offset + 2 * width] - LM[offset - 2 * width])) / (2 * chmax); //for 5x5
-
- if (contrast > 1.0f) {
- contrast = 1.0f;
- }
-
- //matrix 5x5
- temp = ncie->sh_p[j][i] / 327.68f; //begin 3x3
- temp += CLIREF(v - LM[offset - width - 1]) * sqrtf(2.0f) * s;
- temp += CLIREF(v - LM[offset - width]) * s;
- temp += CLIREF(v - LM[offset - width + 1]) * sqrtf(2.0f) * s;
- temp += CLIREF(v - LM[offset - 1]) * s;
- temp += CLIREF(v - LM[offset + 1]) * s;
- temp += CLIREF(v - LM[offset + width - 1]) * sqrtf(2.0f) * s;
- temp += CLIREF(v - LM[offset + width]) * s;
- temp += CLIREF(v - LM[offset + width + 1]) * sqrtf(2.0f) * s; //end 3x3
-
- // add JD continue 5x5
- if (k == 2) {
- temp += 2.0f * CLIREF(v - LM[offset + 2 * width]) * s;
- temp += 2.0f * CLIREF(v - LM[offset - 2 * width]) * s;
- temp += 2.0f * CLIREF(v - LM[offset - 2 ]) * s;
- temp += 2.0f * CLIREF(v - LM[offset + 2 ]) * s;
-
- temp += 2.0f * CLIREF(v - LM[offset + 2 * width - 1]) * s * sqrtf(1.25f); // 1.25 = 1*1 + 0.5*0.5
- temp += 2.0f * CLIREF(v - LM[offset + 2 * width - 2]) * s * sqrtf(2.00f);
- temp += 2.0f * CLIREF(v - LM[offset + 2 * width + 1]) * s * sqrtf(1.25f);
- temp += 2.0f * CLIREF(v - LM[offset + 2 * width + 2]) * s * sqrtf(2.00f);
- temp += 2.0f * CLIREF(v - LM[offset + width + 2]) * s * sqrtf(1.25f);
- temp += 2.0f * CLIREF(v - LM[offset + width - 2]) * s * sqrtf(1.25f);
- temp += 2.0f * CLIREF(v - LM[offset - 2 * width - 1]) * s * sqrtf(1.25f);
- temp += 2.0f * CLIREF(v - LM[offset - 2 * width - 2]) * s * sqrtf(2.00f);
- temp += 2.0f * CLIREF(v - LM[offset - 2 * width + 1]) * s * sqrtf(1.25f);
- temp += 2.0f * CLIREF(v - LM[offset - 2 * width + 2]) * s * sqrtf(2.00f);
- temp += 2.0f * CLIREF(v - LM[offset - width + 2]) * s * sqrtf(1.25f);
- temp += 2.0f * CLIREF(v - LM[offset - width - 2]) * s * sqrtf(1.25f);
- }
-
- if (temp < 0.0f) {
- temp = 0.0f;
- }
-
- v = temp;
-
- n = 0;
-
- for(row = j - k; row <= j + k; row++) {
- for(col = i - k, offset2 = row * width + col; col <= i + k; col++, offset2++) {
- if (((v < LM[offset2]) && (signs[n] > 0)) || ((v > LM[offset2]) && (signs[n] < 0))) {
- temp = v * 0.75f + LM[offset2] * 0.25f; // 0.75 0.25
- }
-
- n++;
- }
- }
-
- if (LM[offset] > 95.0f || LM[offset] < 5.0f) {
- contrast *= Cont0[unif]; //+ JD : luminance pyramid to adjust contrast by evaluation of LM[offset]
- } else if (LM[offset] > 90.0f || LM[offset] < 10.0f) {
- contrast *= Cont1[unif];
- } else if (LM[offset] > 80.0f || LM[offset] < 20.0f) {
- contrast *= Cont2[unif];
- } else if (LM[offset] > 70.0f || LM[offset] < 30.0f) {
- contrast *= Cont3[unif];
- } else if (LM[offset] > 60.0f || LM[offset] < 40.0f) {
- contrast *= Cont4[unif];
- } else {
- contrast *= Cont5[unif]; //(2.0f/k)*Cont5[unif];
- }
-
- if (contrast > 1.0f) {
- contrast = 1.0f;
- }
-
- tempL = 327.68f * (temp * (1.0f - contrast) + LM[offset] * contrast);
- // JD: modulation of microcontrast in function of original Luminance and modulation of luminance
- temp2 = tempL / (327.68f * LM[offset]); //for highlights
-
- if (temp2 > 1.0f) {
- if (temp2 > 1.70f) {
- temp2 = 1.70f; //limit action
- }
-
- if (LM[offset] > 98.0f) {
- ncie->sh_p[j][i] = LM[offset] * 327.68f;
- } else if (LM[offset] > 95.0f) {
- temp3 = temp2 - 1.0f;
- temp = (L95[unif] * temp3) + 1.0f;
- ncie->sh_p[j][i] = temp * LM[offset] * 327.68f;
- } else if (LM[offset] > 92.0f) {
- temp3 = temp2 - 1.0f;
- temp = (L92[unif] * temp3) + 1.0f;
- ncie->sh_p[j][i] = temp * LM[offset] * 327.68f;
- } else if (LM[offset] > 90.0f) {
- temp3 = temp2 - 1.0f;
- temp = (L90[unif] * temp3) + 1.0f;
- ncie->sh_p[j][i] = temp * LM[offset] * 327.68f;
- } else if (LM[offset] > 87.0f) {
- temp3 = temp2 - 1.0f;
- temp = (L87[unif] * temp3) + 1.0f;
- ncie->sh_p[j][i] = temp * LM[offset] * 327.68f;
- } else if (LM[offset] > 83.0f) {
- temp3 = temp2 - 1.0f;
- temp = (L83[unif] * temp3) + 1.0f;
- ncie->sh_p[j][i] = temp * LM[offset] * 327.68f;
- } else if (LM[offset] > 80.0f) {
- temp3 = temp2 - 1.0f;
- temp = (L80[unif] * temp3) + 1.0f;
- ncie->sh_p[j][i] = temp * LM[offset] * 327.68f;
- } else if (LM[offset] > 75.0f) {
- temp3 = temp2 - 1.0f;
- temp = (L75[unif] * temp3) + 1.0f;
- ncie->sh_p[j][i] = temp * LM[offset] * 327.68f;
- } else if (LM[offset] > 70.0f) {
- temp3 = temp2 - 1.0f;
- temp = (L70[unif] * temp3) + 1.0f;
- ncie->sh_p[j][i] = temp * LM[offset] * 327.68f;
- } else if (LM[offset] > 63.0f) {
- temp3 = temp2 - 1.0f;
- temp = (L63[unif] * temp3) + 1.0f;
- ncie->sh_p[j][i] = temp * LM[offset] * 327.68f;
- } else if (LM[offset] > 58.0f) {
- temp3 = temp2 - 1.0f;
- temp = (L58[unif] * temp3) + 1.0f;
- ncie->sh_p[j][i] = temp * LM[offset] * 327.68f;
- } else if (LM[offset] > 42.0f) {
- temp3 = temp2 - 1.0f;
- temp = (L58[unif] * temp3) + 1.0f;
- ncie->sh_p[j][i] = temp * LM[offset] * 327.68f;
- } else if (LM[offset] > 37.0f) {
- temp3 = temp2 - 1.0f;
- temp = (L63[unif] * temp3) + 1.0f;
- ncie->sh_p[j][i] = temp * LM[offset] * 327.68f;
- } else if (LM[offset] > 30.0f) {
- temp3 = temp2 - 1.0f;
- temp = (L70[unif] * temp3) + 1.0f;
- ncie->sh_p[j][i] = temp * LM[offset] * 327.68f;
- } else if (LM[offset] > 25.0f) {
- temp3 = temp2 - 1.0f;
- temp = (L75[unif] * temp3) + 1.0f;
- ncie->sh_p[j][i] = temp * LM[offset] * 327.68f;
- } else if (LM[offset] > 20.0f) {
- temp3 = temp2 - 1.0f;
- temp = (L80[unif] * temp3) + 1.0f;
- ncie->sh_p[j][i] = temp * LM[offset] * 327.68f;
- } else if (LM[offset] > 17.0f) {
- temp3 = temp2 - 1.0f;
- temp = (L83[unif] * temp3) + 1.0f;
- ncie->sh_p[j][i] = temp * LM[offset] * 327.68f;
- } else if (LM[offset] > 13.0f) {
- temp3 = temp2 - 1.0f;
- temp = (L87[unif] * temp3) + 1.0f;
- ncie->sh_p[j][i] = temp * LM[offset] * 327.68f;
- } else if (LM[offset] > 10.0f) {
- temp3 = temp2 - 1.0f;
- temp = (L90[unif] * temp3) + 1.0f;
- ncie->sh_p[j][i] = temp * LM[offset] * 327.68f;
- } else if (LM[offset] > 5.0f) {
- temp3 = temp2 - 1.0f;
- temp = (L95[unif] * temp3) + 1.0f;
- ncie->sh_p[j][i] = temp * LM[offset] * 327.68f;
- } else if (LM[offset] > 0.0f) {
- ncie->sh_p[j][i] = LM[offset] * 327.68f;
- }
- }
-
- temp4 = (327.68f * LM[offset]) / tempL; //
-
- if (temp4 > 1.0f) {
- if (temp4 > 1.7f) {
- temp4 = 1.7f; //limit action
- }
-
- if (LM[offset] < 2.0f) {
- temp3 = temp4 - 1.0f;
- temp = (L98[unif] * temp3) + 1.0f;
- ncie->sh_p[j][i] = (LM[offset] * 327.68f) / temp;
- } else if (LM[offset] < 5.0f) {
- temp3 = temp4 - 1.0f;
- temp = (L95[unif] * temp3) + 1.0f;
- ncie->sh_p[j][i] = (LM[offset] * 327.68f) / temp;
- } else if (LM[offset] < 8.0f) {
- temp3 = temp4 - 1.0f;
- temp = (L92[unif] * temp3) + 1.0f;
- ncie->sh_p[j][i] = (LM[offset] * 327.68f) / temp;
- } else if (LM[offset] < 10.0f) {
- temp3 = temp4 - 1.0f;
- temp = (L90[unif] * temp3) + 1.0f;
- ncie->sh_p[j][i] = (LM[offset] * 327.68f) / temp;
- } else if (LM[offset] < 13.0f) {
- temp3 = temp4 - 1.0f;
- temp = (L87[unif] * temp3) + 1.0f;
- ncie->sh_p[j][i] = (LM[offset] * 327.68f) / temp;
- } else if (LM[offset] < 17.0f) {
- temp3 = temp4 - 1.0f;
- temp = (L83[unif] * temp3) + 1.0f;
- ncie->sh_p[j][i] = (LM[offset] * 327.68f) / temp;
- } else if (LM[offset] < 20.0f) {
- temp3 = temp4 - 1.0f;
- temp = (L80[unif] * temp3) + 1.0f;
- ncie->sh_p[j][i] = (LM[offset] * 327.68f) / temp;
- } else if (LM[offset] < 25.0f) {
- temp3 = temp4 - 1.0f;
- temp = (L75[unif] * temp3) + 1.0f;
- ncie->sh_p[j][i] = (LM[offset] * 327.68f) / temp;
- } else if (LM[offset] < 30.0f) {
- temp3 = temp4 - 1.0f;
- temp = (L70[unif] * temp3) + 1.0f;
- ncie->sh_p[j][i] = (LM[offset] * 327.68f) / temp;
- } else if (LM[offset] < 37.0f) {
- temp3 = temp4 - 1.0f;
- temp = (L63[unif] * temp3) + 1.0f;
- ncie->sh_p[j][i] = (LM[offset] * 327.68f) / temp;
- } else if (LM[offset] < 42.0f) {
- temp3 = temp4 - 1.0f;
- temp = (L58[unif] * temp3) + 1.0f;
- ncie->sh_p[j][i] = (LM[offset] * 327.68f) / temp;
- } else if (LM[offset] < 58.0f) {
- temp3 = temp4 - 1.0f;
- temp = (L58[unif] * temp3) + 1.0f;
- ncie->sh_p[j][i] = (LM[offset] * 327.68f) / temp;
- } else if (LM[offset] < 63.0f) {
- temp3 = temp4 - 1.0f;
- temp = (L63[unif] * temp3) + 1.0f;
- ncie->sh_p[j][i] = (LM[offset] * 327.68f) / temp;
- } else if (LM[offset] < 70.0f) {
- temp3 = temp4 - 1.0f;
- temp = (L70[unif] * temp3) + 1.0f;
- ncie->sh_p[j][i] = (LM[offset] * 327.68f) / temp;
- } else if (LM[offset] < 75.0f) {
- temp3 = temp4 - 1.0f;
- temp = (L75[unif] * temp3) + 1.0f;
- ncie->sh_p[j][i] = (LM[offset] * 327.68f) / temp;
- } else if (LM[offset] < 80.0f) {
- temp3 = temp4 - 1.0f;
- temp = (L80[unif] * temp3) + 1.0f;
- ncie->sh_p[j][i] = (LM[offset] * 327.68f) / temp;
- } else if (LM[offset] < 83.0f) {
- temp3 = temp4 - 1.0f;
- temp = (L83[unif] * temp3) + 1.0f;
- ncie->sh_p[j][i] = (LM[offset] * 327.68f) / temp;
- } else if (LM[offset] < 87.0f) {
- temp3 = temp4 - 1.0f;
- temp = (L87[unif] * temp3) + 1.0f;
- ncie->sh_p[j][i] = (LM[offset] * 327.68f) / temp;
- } else if (LM[offset] < 90.0f) {
- temp3 = temp4 - 1.0f;
- temp = (L90[unif] * temp3) + 1.0f;
- ncie->sh_p[j][i] = (LM[offset] * 327.68f) / temp;
- } else if (LM[offset] < 95.0f) {
- temp3 = temp4 - 1.0f;
- temp = (L95[unif] * temp3) + 1.0f;
- ncie->sh_p[j][i] = (LM[offset] * 327.68f) / temp;
- } else if (LM[offset] < 100.0f) {
- ncie->sh_p[j][i] = LM[offset] * 327.68f;
- }
- }
-
- }
-
- delete [] LM;
- t2e.set();
-
- if (settings->verbose) {
- printf("Micro-contrast %d usec\n", t2e.etime(t1e));
- }
-
-}
-
-void ImProcFunctions::deconvsharpeningcam (CieImage* ncie, float** b2)
-{
-
- if (params->sharpening.enabled == false || params->sharpening.deconvamount < 1) {
- return;
- }
-
- int W = ncie->W, H = ncie->H;
-
- float** tmpI = new float*[H];
-
- for (int i = 0; i < H; i++) {
- tmpI[i] = new float[W];
-
- for (int j = 0; j < W; j++) {
- tmpI[i][j] = (float)ncie->sh_p[i][j];
- }
- }
-
- float** tmp = (float**)b2;
-
-#ifdef _OPENMP
- #pragma omp parallel
-#endif
- {
- 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)
- gaussianBlur (tmpI, tmp, W, H, params->sharpening.deconvradius / scale);
-
- if (!needdamp) {
-#ifdef _OPENMP
- #pragma omp for
-#endif
-
- for (int i = 0; i < H; i++)
- for (int j = 0; j < W; j++)
- if (tmp[i][j] > 0) {
- tmp[i][j] = (float)ncie->sh_p[i][j] / tmp[i][j];
- }
- } else {
- dcdamping (tmp, ncie->sh_p, damping, W, H);
- }
-
- gaussianBlur (tmp, tmp, W, H, params->sharpening.deconvradius / scale);
-
-
-#ifdef _OPENMP
- #pragma omp for
-#endif
-
- for (int i = 0; i < H; i++)
- for (int j = 0; j < W; j++) {
- tmpI[i][j] = tmpI[i][j] * tmp[i][j];
- }
- } // end for
-
-// float p2 = params->sharpening.deconvamount / 100.0;
- float p2 = params->sharpening.deconvamount / 100.0;
- float p1 = 1.0 - p2;
-
-#ifdef _OPENMP
- #pragma omp for
-#endif
-
- for (int i = 0; i < H; i++)
- for (int j = 0; j < W; j++)
- if(ncie->J_p[i][j] > 8.0f && ncie->J_p[i][j] < 92.0f) {
- ncie->sh_p[i][j] = ncie->sh_p[i][j] * p1 + max(tmpI[i][j], 0.0f) * p2;
- }
-
- } // end parallel
-
- for (int i = 0; i < H; i++) {
- delete [] tmpI[i];
- }
-
- delete [] tmpI;
-
+ MLmicrocontrast(ncie->sh_p, ncie->W, ncie->H);
}
void ImProcFunctions::sharpeningcam (CieImage* ncie, float** b2)
{
+ if ((!params->sharpening.enabled) || params->sharpening.amount < 1 || ncie->W < 8 || ncie->H < 8) {
+ return;
+ }
if (params->sharpening.method == "rld") {
- deconvsharpeningcam (ncie, b2);
+ deconvsharpening (ncie->sh_p, b2, ncie->W, ncie->H, params->sharpening);
return;
}
// Rest is UNSHARP MASK
- if (params->sharpening.enabled == false || params->sharpening.amount < 1 || ncie->W < 8 || ncie->H < 8) {
- return;
- }
int W = ncie->W, H = ncie->H;
float** b3;
@@ -1479,10 +965,10 @@ void ImProcFunctions::sharpeningcam (CieImage* ncie, float** b2)
{
if (params->sharpening.edgesonly == false) {
- gaussianBlur (ncie->sh_p, b2, 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);
- gaussianBlur (b3, b2, W, H, params->sharpening.radius / scale);
+ gaussianBlur (b3, b2, W, H, params->sharpening.radius / scale);
}
float** base = ncie->sh_p;
@@ -1524,7 +1010,7 @@ void ImProcFunctions::sharpeningcam (CieImage* ncie, float** b2)
base = ncieCopy;
}
- sharpenHaloCtrlcam (ncie, b2, base, W, H);
+ sharpenHaloCtrl (ncie->sh_p, b2, base, W, H, params->sharpening);
}
} // end parallel
@@ -1547,67 +1033,4 @@ void ImProcFunctions::sharpeningcam (CieImage* ncie, float** b2)
}
}
-void ImProcFunctions::sharpenHaloCtrlcam (CieImage* ncie, float** blurmap, float** base, int W, int H)
-{
-
- float scale = (100.f - params->sharpening.halocontrol_amount) * 0.01f;
- float sharpFac = params->sharpening.amount * 0.01f;
- float** nL = base;
-
-#ifdef _OPENMP
- #pragma omp for
-#endif
-
- for (int i = 2; i < H - 2; i++) {
- float max1 = 0, max2 = 0, min1 = 0, min2 = 0, maxn, minn, np1, np2, np3, min_, max_, labL;
-
- for (int j = 2; j < W - 2; j++) {
- // compute 3 iterations, only forward
- np1 = 2.f * (nL[i - 2][j] + nL[i - 2][j + 1] + nL[i - 2][j + 2] + nL[i - 1][j] + nL[i - 1][j + 1] + nL[i - 1][j + 2] + nL[i] [j] + nL[i] [j + 1] + nL[i] [j + 2]) / 27.f + nL[i - 1][j + 1] / 3.f;
- np2 = 2.f * (nL[i - 1][j] + nL[i - 1][j + 1] + nL[i - 1][j + 2] + nL[i] [j] + nL[i] [j + 1] + nL[i] [j + 2] + nL[i + 1][j] + nL[i + 1][j + 1] + nL[i + 1][j + 2]) / 27.f + nL[i] [j + 1] / 3.f;
- np3 = 2.f * (nL[i] [j] + nL[i] [j + 1] + nL[i] [j + 2] + nL[i + 1][j] + nL[i + 1][j + 1] + nL[i + 1][j + 2] + nL[i + 2][j] + nL[i + 2][j + 1] + nL[i + 2][j + 2]) / 27.f + nL[i + 1][j + 1] / 3.f;
-
- // Max/Min of all these deltas and the last two max/min
- maxn = max(np1, np2, np3);
- minn = min(np1, np2, np3);
- max_ = max(max1, max2, maxn);
- min_ = min(min1, min2, minn);
-
- // Shift the queue
- max1 = max2;
- max2 = maxn;
- min1 = min2;
- min2 = minn;
- labL = ncie->sh_p[i][j];
-
- if (max_ < labL) {
- max_ = labL;
- }
-
- if (min_ > labL) {
- min_ = labL;
- }
-
- // deviation from the environment as measurement
- float diff = nL[i][j] - blurmap[i][j];
-
- const float upperBound = 2000.f; // WARNING: Duplicated value, it's baaaaaad !
- float delta = params->sharpening.threshold.multiply(
- min(ABS(diff), upperBound), // X axis value = absolute value of the difference
- sharpFac * diff // Y axis max value = sharpening.amount * signed difference
- );
- float newL = labL + delta;
-
- // applying halo control
- if (newL > max_) {
- newL = max_ + (newL - max_) * scale;
- } else if (newL < min_) {
- newL = min_ - (min_ - newL) * scale;
- }
-
- ncie->sh_p[i][j] = newL;
- }
- }
-}
-
}
diff --git a/rtengine/rtthumbnail.cc b/rtengine/rtthumbnail.cc
index 5811d01f5..781b7e566 100644
--- a/rtengine/rtthumbnail.cc
+++ b/rtengine/rtthumbnail.cc
@@ -956,6 +956,7 @@ IImage8* Thumbnail::processImage (const procparams::ProcParams& params, int rhei
ImProcFunctions ipf (¶ms, false);
ipf.setScale (sqrt(double(fw * fw + fh * fh)) / sqrt(double(thumbImg->width * thumbImg->width + thumbImg->height * thumbImg->height))*scale);
+ ipf.updateColorProfiles (params.icm, options.rtSettings.monitorProfile, options.rtSettings.monitorIntent);
LUTu hist16 (65536);
LUTu hist16C (65536);
diff --git a/rtengine/safegtk.cc b/rtengine/safegtk.cc
index a1e45b998..a84b73536 100644
--- a/rtengine/safegtk.cc
+++ b/rtengine/safegtk.cc
@@ -76,23 +76,18 @@ Cairo::RefPtr safe_create_from_png(const Glib::ustring& fil
Glib::RefPtr safe_query_file_info (Glib::RefPtr &file)
{
Glib::RefPtr info;
-#ifdef GLIBMM_EXCEPTIONS_ENABLED
try {
info = file->query_info();
} catch (...) { }
-#else
- std::auto_ptr error;
- info = file->query_info("*", Gio::FILE_QUERY_INFO_NONE, error);
-#endif
return info;
}
Glib::RefPtr safe_next_file (Glib::RefPtr &dirList)
{
Glib::RefPtr info;
-#ifdef GLIBMM_EXCEPTIONS_ENABLED
+
bool retry;
Glib::ustring last_error = "";
@@ -113,96 +108,16 @@ Glib::RefPtr safe_next_file (Glib::RefPtr &d
}
} while (retry);
-#else
- bool retry;
- Glib::ustring last_error = "";
-
- do {
- retry = false;
- std::auto_ptr error;
- Glib::RefPtr cancellable;
- info = dirList->next_file(cancellable, error);
-
- if (!info && error.get()) {
- printf ("%s\n", error.what().c_str());
- retry = (error.what() != last_error);
- last_error = error.what();
- }
- } while (retry);
-
-#endif
return info;
}
-#ifdef GLIBMM_EXCEPTIONS_ENABLED
# define SAFE_ENUMERATOR_CODE_START \
do{try { if ((dirList = dir->enumerate_children ())) \
for (Glib::RefPtr info = safe_next_file(dirList); info; info = safe_next_file(dirList)) {
# define SAFE_ENUMERATOR_CODE_END \
}} catch (Glib::Exception& ex) { printf ("%s\n", ex.what().c_str()); }}while(0)
-#else
-# define SAFE_ENUMERATOR_CODE_START \
- do{std::auto_ptr error; Glib::RefPtr cancellable; \
- if ((dirList = dir->enumerate_children (cancellable, "*", Gio::FILE_QUERY_INFO_NONE, error))) \
- for (Glib::RefPtr info = safe_next_file(dirList); info; info = safe_next_file(dirList)) {
-# define SAFE_ENUMERATOR_CODE_END } if (error.get()) printf ("%s\n", error->what().c_str());}while (0)
-#endif
-
-#ifdef WIN32
-
-// High speed Windows version
-void safe_build_file_list (Glib::RefPtr &dir, std::vector &flist)
-{
- Glib::ustring fullPath = dir->get_path() + Glib::ustring("\\*");
-
- DWORD dwVersion = GetVersion();
- bool win7Plus = (LOBYTE(LOWORD(dwVersion)) > 6) || ((LOBYTE(LOWORD(dwVersion)) == 6) && HIBYTE(LOWORD(dwVersion)) >= 1); // 6.1 or better
-
- wchar_t *wDirName = (wchar_t*)g_utf8_to_utf16 (fullPath.c_str(), -1, NULL, NULL, NULL);
- WIN32_FIND_DATAW fi;
-
- HANDLE hFF = FindFirstFileExW(wDirName,
- //win7Plus ? FindExInfoBasic : // TODO: Add if MinGW is updated, makes it even faster
- FindExInfoStandard, &fi,
- FindExSearchNameMatch, NULL,
- win7Plus ? 2 : 0); // Win7 large fetch
-
- if (hFF != INVALID_HANDLE_VALUE) {
- do {
- SYSTEMTIME stUTC;
- FileTimeToSystemTime(&fi.ftLastWriteTime, &stUTC);
- char time[64];
- sprintf(time, "%d-%02d-%02dT%02d:%02d:%02dZ", stUTC.wYear, stUTC.wMonth, stUTC.wDay, stUTC.wHour, stUTC.wMinute, stUTC.wSecond);
- Glib::TimeVal timeVal;
- timeVal.assign_from_iso8601(Glib::ustring(time));
-
- char pathA[MAX_PATH];
- WideCharToMultiByte(CP_UTF8, 0, (WCHAR*)fi.cFileName, -1, pathA, MAX_PATH, 0, 0);
- flist.push_back (FileMTimeInfo (removeExtension(Glib::ustring(pathA)), timeVal));
-
- } while (FindNextFileW(hFF, &fi));
-
- FindClose(hFF);
- }
-
- g_free(wDirName);
-}
-#else
-
-// Generic file list build
-void safe_build_file_list (Glib::RefPtr &dir, std::vector &flist)
-{
- Glib::RefPtr dirList;
-
- if (dir) {
- SAFE_ENUMERATOR_CODE_START
- flist.push_back (FileMTimeInfo (removeExtension(info->get_name()), info->modification_time()));
- SAFE_ENUMERATOR_CODE_END;
- }
-}
-#endif
/*
* safe_build_file_list can now filter out at the source all files that doesn't have the extensions specified (if provided)
*/
@@ -276,8 +191,8 @@ void safe_build_subdir_list (Glib::RefPtr &dir, std::vector error;
- utf8_str = locale_to_utf8(src, error);
- if (error.get()) {
- utf8_str = Glib::convert_with_fallback(src, "UTF-8", "ISO-8859-1", "?", error);
- }
- }
-#endif //GLIBMM_EXCEPTIONS_ENABLED
-#else
utf8_str = Glib::filename_to_utf8(src);
+
#endif
+
return utf8_str;
}
Glib::ustring safe_locale_to_utf8 (const std::string& src)
{
Glib::ustring utf8_str;
-#ifdef GLIBMM_EXCEPTIONS_ENABLED
try {
utf8_str = Glib::locale_to_utf8(src);
@@ -312,38 +219,17 @@ Glib::ustring safe_locale_to_utf8 (const std::string& src)
utf8_str = Glib::convert_with_fallback(src, "UTF-8", "ISO-8859-1", "?");
}
-#else
- {
- std::auto_ptr error;
- utf8_str = locale_to_utf8(src, error);
-
- if (error.get()) {
- utf8_str = Glib::convert_with_fallback(src, "UTF-8", "ISO-8859-1", "?", error);
- }
- }
-#endif //GLIBMM_EXCEPTIONS_ENABLED
return utf8_str;
}
std::string safe_locale_from_utf8 (const Glib::ustring& utf8_str)
{
std::string str;
-#ifdef GLIBMM_EXCEPTIONS_ENABLED
try {
str = Glib::locale_from_utf8(utf8_str);
- } catch (const Glib::Error& e) {
- //str = Glib::convert_with_fallback(utf8_str, "ISO-8859-1", "UTF-8", "?");
- }
+ } catch (Glib::Error&) {}
-#else
- {
- std::auto_ptr error;
- str = Glib::locale_from_utf8(utf8_str, error);
- /*if (error.get())
- {str = Glib::convert_with_fallback(utf8_str, "ISO-8859-1", "UTF-8", "?", error);}*/
- }
-#endif //GLIBMM_EXCEPTIONS_ENABLED
return str;
}
@@ -351,7 +237,6 @@ bool safe_spawn_command_line_async (const Glib::ustring& cmd_utf8)
{
std::string cmd;
bool success = false;
-#ifdef GLIBMM_EXCEPTIONS_ENABLED
try {
cmd = Glib::filename_from_utf8(cmd_utf8);
@@ -362,22 +247,6 @@ bool safe_spawn_command_line_async (const Glib::ustring& cmd_utf8)
printf ("%s\n", ex.what().c_str());
}
-#else
- std::auto_ptr error;
- cmd = Glib::filename_from_utf8(cmd_utf8, error);
-
- if (!error.get()) {
- printf ("command line: %s\n", cmd.c_str());
- Glib::spawn_command_line_async (cmd, error);
- }
-
- if (error.get()) {
- printf ("%s\n", error->what().c_str());
- } else {
- success = true;
- }
-
-#endif
return success;
}
diff --git a/rtengine/safegtk.h b/rtengine/safegtk.h
index f29c18d0b..768d55148 100644
--- a/rtengine/safegtk.h
+++ b/rtengine/safegtk.h
@@ -8,22 +8,7 @@
Glib::RefPtr safe_create_from_file(const Glib::ustring& filename);
Cairo::RefPtr safe_create_from_png(const Glib::ustring& filename);
-class FileMTimeInfo
-{
-
-public:
- Glib::ustring fname;
- Glib::TimeVal mtime;
-
- FileMTimeInfo (Glib::ustring name, Glib::TimeVal mtime) : fname(name), mtime(mtime) {}
- bool operator<(const FileMTimeInfo& other) const
- {
- return mtime < other.mtime;
- }
-};
-
Glib::RefPtr safe_query_file_info (Glib::RefPtr &file);
-void safe_build_file_list (Glib::RefPtr &dir, std::vector &flist);
void safe_build_file_list (Glib::RefPtr &dir, std::vector &names, const Glib::ustring &directory = "", const std::vector *extensions = NULL);
void safe_build_subdir_list (Glib::RefPtr &dir, std::vector &subDirs, bool add_hidden);
diff --git a/rtengine/shmap.cc b/rtengine/shmap.cc
index 2471b17a4..4f93c80d3 100644
--- a/rtengine/shmap.cc
+++ b/rtengine/shmap.cc
@@ -88,7 +88,7 @@ void SHMap::update (Imagefloat* img, double radius, double lumi[3], bool hq, int
#pragma omp parallel
#endif
{
- gaussianBlur (map, map, W, H, radius);
+ gaussianBlur (map, map, W, H, radius);
}
}
@@ -233,7 +233,7 @@ void SHMap::updateL (float** L, double radius, bool hq, int skip)
#pragma omp parallel
#endif
{
- gaussianBlur (map, map, W, H, radius);
+ gaussianBlur (map, map, W, H, radius);
}
}
@@ -244,7 +244,7 @@ void SHMap::updateL (float** L, double radius, bool hq, int skip)
//experimental dirpyr shmap
float thresh = (100.f * radius); //1000;
int levrad = 16;
- levrad=2;//for retinex - otherwise levrad = 16
+ levrad = 2; //for retinex - otherwise levrad = 16
// set up range function
// calculate size of Lookup table. That's possible because from a value k for all i>=k rangefn[i] will be exp(-10)
// So we use this fact and the automatic clip of lut to reduce the size of lut and the number of calculations to fill the lut
@@ -253,6 +253,7 @@ void SHMap::updateL (float** L, double radius, bool hq, int skip)
const int lutSize = (int) thresh * sqrtf(10.f) + 1;
thresh *= thresh;
LUTf rangefn(lutSize);
+
for (int i = 0; i < lutSize - 1; i++) {
rangefn[i] = xexpf(-min(10.f, (static_cast(i) * i) / thresh )); //*intfactor;
}
@@ -275,6 +276,7 @@ void SHMap::updateL (float** L, double radius, bool hq, int skip)
scale *= 2;
numLevels++;
}
+
//printf("numlev=%d\n",numLevels);
float ** dirpyrlo[2];
diff --git a/rtengine/sleefsseavx.c b/rtengine/sleefsseavx.c
index c2d1278f4..453025fd6 100644
--- a/rtengine/sleefsseavx.c
+++ b/rtengine/sleefsseavx.c
@@ -901,11 +901,7 @@ static INLINE vdouble xlog1p(vdouble a) {
typedef struct {
vfloat x, y;
} vfloat2;
-#if defined( __FMA__ ) && defined( __x86_64__ )
- static INLINE vfloat vmlaf(vfloat x, vfloat y, vfloat z) { return _mm_fmadd_ps(x,y,z); }
-#else
- static INLINE vfloat vmlaf(vfloat x, vfloat y, vfloat z) { return vaddf(vmulf(x, y), z); }
-#endif
+
static INLINE vfloat vabsf(vfloat f) { return (vfloat)vandnotm((vmask)vcast_vf_f(-0.0f), (vmask)f); }
static INLINE vfloat vnegf(vfloat f) { return (vfloat)vxorm((vmask)f, (vmask)vcast_vf_f(-0.0f)); }
@@ -921,6 +917,18 @@ static INLINE vfloat vnegf(vfloat f) { return (vfloat)vxorm((vmask)f, (vmask)vca
}
#endif
+static INLINE vfloat vselfzero(vmask mask, vfloat x) {
+ // returns value of x if corresponding mask bits are 1, else returns 0
+ // faster than vself(mask, x, ZEROV)
+ return _mm_and_ps((vfloat)mask, x);
+}
+static INLINE vfloat vselfnotzero(vmask mask, vfloat x) {
+ // returns value of x if corresponding mask bits are 0, else returns 0
+ // faster than vself(mask, ZEROV, x)
+ return _mm_andnot_ps((vfloat)mask, x);
+}
+
+
static INLINE vint2 vseli2_lt(vfloat f0, vfloat f1, vint2 x, vint2 y) {
vint2 m2 = vcast_vi2_vm(vmaskf_lt(f0, f1));
return vori2(vandi2(m2, x), vandnoti2(m2, y));
@@ -1171,7 +1179,7 @@ static INLINE vfloat xatan2f(vfloat y, vfloat x) {
r = vmulsignf(r, x);
r = vself(vorm(vmaskf_isinf(x), vmaskf_eq(x, vcast_vf_f(0.0f))), vsubf(vcast_vf_f((float)(M_PI/2)), visinf2f(x, vmulsignf(vcast_vf_f((float)(M_PI/2)), x))), r);
r = vself(vmaskf_isinf(y), vsubf(vcast_vf_f((float)(M_PI/2)), visinf2f(x, vmulsignf(vcast_vf_f((float)(M_PI/4)), x))), r);
- r = vself(vmaskf_eq(y, vcast_vf_f(0.0f)), vself(vmaskf_eq(vsignf(x), vcast_vf_f(-1.0f)), vcast_vf_f((float)M_PI), vcast_vf_f(0.0f)), r);
+ r = vself(vmaskf_eq(y, vcast_vf_f(0.0f)), vselfzero(vmaskf_eq(vsignf(x), vcast_vf_f(-1.0f)), vcast_vf_f((float)M_PI)), r);
return vself(vorm(vmaskf_isnan(x), vmaskf_isnan(y)), vcast_vf_f(NANf), vmulsignf(r, y));
}
@@ -1304,7 +1312,7 @@ static INLINE vfloat xcbrtf(vfloat d) {
}
static INLINE vfloat LIMV( vfloat a, vfloat b, vfloat c ) {
-return _mm_max_ps( b, _mm_min_ps(a,c));
+return vmaxf( b, vminf(a,c));
}
static INLINE vfloat ULIMV( vfloat a, vfloat b, vfloat c ){
@@ -1312,13 +1320,13 @@ static INLINE vfloat ULIMV( vfloat a, vfloat b, vfloat c ){
}
static INLINE vfloat SQRV(vfloat a){
- return _mm_mul_ps( a,a );
+ return a * a;
}
static inline void vswap( vmask condition, vfloat &a, vfloat &b) {
- vfloat temp = vself(condition, a, b); // the larger of the two
- condition = vnotm(condition); // invert the mask
- a = vself(condition, a, b); // the smaller of the two
+ vfloat temp = vself(condition, a, b); // the values which fit to condition
+ condition = vnotm(condition); // invert the condition
+ a = vself(condition, a, b); // the values which fit to inverted condition
b = temp;
}
diff --git a/rtgui/batchqueue.cc b/rtgui/batchqueue.cc
index 8dc843a8e..338932631 100644
--- a/rtgui/batchqueue.cc
+++ b/rtgui/batchqueue.cc
@@ -21,6 +21,8 @@
#include
#include "../rtengine/rt_math.h"
+#include
+#include
#include
#include
#include
@@ -37,13 +39,13 @@
using namespace std;
using namespace rtengine;
-BatchQueue::BatchQueue (FileCatalog* aFileCatalog) : processing(NULL), fileCatalog(aFileCatalog), sequence(0), listener(NULL)
+BatchQueue::BatchQueue (FileCatalog* aFileCatalog) : processing(NULL), fileCatalog(aFileCatalog), sequence(0), listener(NULL),
+ pmenu (new Gtk::Menu ())
{
location = THLOC_BATCHQUEUE;
int p = 0;
- pmenu = new Gtk::Menu ();
pmenu->attach (*Gtk::manage(open = new Gtk::MenuItem (M("FILEBROWSER_POPUPOPENINEDITOR"))), 0, 1, p, p + 1);
p++;
@@ -79,9 +81,9 @@ BatchQueue::BatchQueue (FileCatalog* aFileCatalog) : processing(NULL), fileCatal
cancel->add_accelerator ("activate", pmenu->get_accel_group(), GDK_Delete, (Gdk::ModifierType)0, Gtk::ACCEL_VISIBLE);
open->signal_activate().connect(sigc::mem_fun(*this, &BatchQueue::openLastSelectedItemInEditor));
- cancel->signal_activate().connect (sigc::bind(sigc::mem_fun(*this, &BatchQueue::cancelItems), &selected));
- head->signal_activate().connect (sigc::bind(sigc::mem_fun(*this, &BatchQueue::headItems), &selected));
- tail->signal_activate().connect (sigc::bind(sigc::mem_fun(*this, &BatchQueue::tailItems), &selected));
+ cancel->signal_activate().connect (std::bind (&BatchQueue::cancelItems, this, std::ref (selected)));
+ head->signal_activate().connect (std::bind (&BatchQueue::headItems, this, std::ref (selected)));
+ tail->signal_activate().connect (std::bind (&BatchQueue::tailItems, this, std::ref (selected)));
selall->signal_activate().connect (sigc::mem_fun(*this, &BatchQueue::selectAll));
setArrangement (ThumbBrowserBase::TB_Vertical);
@@ -99,20 +101,18 @@ BatchQueue::~BatchQueue ()
}
fd.clear ();
-
- delete pmenu;
}
void BatchQueue::resizeLoadedQueue()
{
- // TODO: Check for Linux
#if PROTECT_VECTORS
MYWRITERLOCK(l, entryRW);
#endif
- for (size_t i = 0; i < fd.size(); i++) {
- fd.at(i)->resize(getThumbnailHeight());
- }
+ const auto height = getThumbnailHeight ();
+
+ for (const auto entry : fd)
+ entry->resize(height);
}
// Reduce the max size of a thumb, since thumb is processed synchronously on adding to queue
@@ -161,328 +161,220 @@ bool BatchQueue::keyPressed (GdkEventKey* event)
openLastSelectedItemInEditor();
return true;
} else if (event->keyval == GDK_Home) {
- headItems (&selected);
+ headItems (selected);
return true;
} else if (event->keyval == GDK_End) {
- tailItems (&selected);
+ tailItems (selected);
return true;
} else if (event->keyval == GDK_Delete) {
- cancelItems (&selected);
+ cancelItems (selected);
return true;
}
return false;
}
-void BatchQueue::addEntries ( std::vector &entries, bool head, bool save)
+void BatchQueue::addEntries (const std::vector& entries, bool head, bool save)
{
{
- // TODO: Check for Linux
#if PROTECT_VECTORS
MYWRITERLOCK(l, entryRW);
#endif
- for( std::vector::iterator entry = entries.begin(); entry != entries.end(); entry++ ) {
- (*entry)->setParent (this);
+ for (const auto entry : entries) {
- // BatchQueueButtonSet HAVE TO be added before resizing to take them into account
- BatchQueueButtonSet* bqbs = new BatchQueueButtonSet (*entry);
+ entry->setParent (this);
+
+ // BatchQueueButtonSet have to be added before resizing to take them into account
+ const auto bqbs = new BatchQueueButtonSet (entry);
bqbs->setButtonListener (this);
- (*entry)->addButtonSet (bqbs);
+ entry->addButtonSet (bqbs);
- (*entry)->resize (getThumbnailHeight()); // batch queue might have smaller, restricted size
- Glib::ustring tempFile = getTempFilenameForParams( (*entry)->filename );
+ // batch queue might have smaller, restricted size
+ entry->resize (getThumbnailHeight());
// recovery save
- if( !(*entry)->params.save( tempFile ) ) {
- (*entry)->savedParamsFile = tempFile;
- }
+ const auto tempFile = getTempFilenameForParams (entry->filename);
- (*entry)->selected = false;
+ if (!entry->params.save (tempFile))
+ entry->savedParamsFile = tempFile;
- if (!head) {
- fd.push_back (*entry);
- } else {
- std::vector::iterator pos;
+ entry->selected = false;
- for (pos = fd.begin(); pos != fd.end(); pos++)
- if (!(*pos)->processing) {
- fd.insert (pos, *entry);
- break;
- }
+ // insert either at the end, or before the first non-processing entry
+ auto pos = fd.end ();
- if (pos == fd.end()) {
- fd.push_back (*entry);
- }
- }
+ if (head)
+ pos = std::find_if (fd.begin (), fd.end (), [] (const ThumbBrowserEntryBase* fdEntry) { return !fdEntry->processing; });
- if ((*entry)->thumbnail) {
- (*entry)->thumbnail->imageEnqueued ();
- }
+ fd.insert (pos, entry);
+
+ if (entry->thumbnail)
+ entry->thumbnail->imageEnqueued ();
}
}
- if (save) {
- saveBatchQueue( );
- }
+ if (save)
+ saveBatchQueue ();
- redraw();
+ redraw ();
notifyListener (false);
}
-bool BatchQueue::saveBatchQueue( )
+bool BatchQueue::saveBatchQueue ()
{
- Glib::ustring savedQueueFile;
- savedQueueFile = options.rtdir + "/batch/queue.csv";
- FILE *f = safe_g_fopen (savedQueueFile, "wt");
+ const auto fileName = Glib::build_filename (options.rtdir, "batch", "queue.csv");
- if (f == NULL) {
+ std::ofstream file (fileName, std::ios::trunc);
+
+ if (!file.is_open ())
return false;
- }
{
- // TODO: Check for Linux
#if PROTECT_VECTORS
MYREADERLOCK(l, entryRW);
#endif
+ if (fd.empty ())
+ return true;
- if (fd.size())
- // The column's header is mandatory (the first line will be skipped when loaded)
- fprintf(f, "input image full path|param file full path|output image full path|file format|jpeg quality|jpeg subsampling|"
- "png bit depth|png compression|tiff bit depth|uncompressed tiff|save output params|force format options|\n");
+ // The column's header is mandatory (the first line will be skipped when loaded)
+ file << "input image full path|param file full path|output image full path|file format|jpeg quality|jpeg subsampling|"
+ << "png bit depth|png compression|tiff bit depth|uncompressed tiff|save output params|force format options|"
+ << std::endl;
// method is already running with entryLock, so no need to lock again
- for (std::vector::iterator pos = fd.begin(); pos != fd.end(); pos++) {
- BatchQueueEntry* bqe = reinterpret_cast(*pos);
+ for (const auto fdEntry : fd) {
+
+ const auto entry = static_cast (fdEntry);
+ const auto& saveFormat = entry->saveFormat;
+
// Warning: for code's simplicity in loadBatchQueue, each field must end by the '|' character, safer than ';' or ',' since it can't be used in paths
- fprintf(f, "%s|%s|%s|%s|%d|%d|%d|%d|%d|%d|%d|%d|\n",
- bqe->filename.c_str(), bqe->savedParamsFile.c_str(), bqe->outFileName.c_str(), bqe->saveFormat.format.c_str(),
- bqe->saveFormat.jpegQuality, bqe->saveFormat.jpegSubSamp,
- bqe->saveFormat.pngBits, bqe->saveFormat.pngCompression,
- bqe->saveFormat.tiffBits, bqe->saveFormat.tiffUncompressed,
- bqe->saveFormat.saveParams, bqe->forceFormatOpts
- );
+ file << entry->filename << '|' << entry->savedParamsFile << '|' << entry->outFileName << '|' << saveFormat.format << '|'
+ << saveFormat.jpegQuality << '|' << saveFormat.jpegSubSamp << '|'
+ << saveFormat.pngBits << '|' << saveFormat.pngCompression << '|'
+ << saveFormat.tiffBits << '|' << saveFormat.tiffUncompressed << '|'
+ << saveFormat.saveParams << '|' << entry->forceFormatOpts << '|'
+ << std::endl;
}
}
- fclose (f);
return true;
}
-bool BatchQueue::loadBatchQueue( )
+bool BatchQueue::loadBatchQueue ()
{
- Glib::ustring savedQueueFile;
- savedQueueFile = options.rtdir + "/batch/queue.csv";
- FILE *f = safe_g_fopen (savedQueueFile, "rt");
+ const auto fileName = Glib::build_filename (options.rtdir, "batch", "queue.csv");
- if (f != NULL) {
- char *buffer = new char[1024];
- unsigned numLoaded = 0;
- // skipping the first line
- bool firstLine = true;
+ std::ifstream file (fileName);
+ if (file.is_open ()) {
// Yes, it's better to get the lock for the whole file reading,
// to update the list in one shot without any other concurrent access!
-
- // TODO: Check for Linux
#if PROTECT_VECTORS
MYWRITERLOCK(l, entryRW);
#endif
- while (fgets (buffer, 1024, f)) {
+ std::string row, column;
+ std::vector values;
- if (firstLine) {
- // skipping the column's title line
- firstLine = false;
+ // skipping the first row
+ std::getline (file, row);
+
+ while (std::getline (file, row)) {
+
+ std::istringstream line (row);
+
+ values.clear ();
+
+ while (std::getline(line, column, '|')) {
+ values.push_back (column);
+ }
+
+ auto value = values.begin ();
+
+ const auto nextStringOr = [&] (const Glib::ustring& defaultValue) -> Glib::ustring
+ {
+ return value != values.end () ? Glib::ustring(*value++) : defaultValue;
+ };
+ const auto nextIntOr = [&] (int defaultValue) -> int
+ {
+ try {
+ return value != values.end () ? std::stoi(*value++) : defaultValue;
+ }
+ catch (std::exception&) {
+ return defaultValue;
+ }
+ };
+
+ const auto source = nextStringOr (Glib::ustring ());
+ const auto paramsFile = nextStringOr (Glib::ustring ());
+
+ if (source.empty () || paramsFile.empty ())
continue;
+
+ const auto outputFile = nextStringOr (Glib::ustring ());
+ const auto saveFmt = nextStringOr (options.saveFormat.format);
+ const auto jpegQuality = nextIntOr (options.saveFormat.jpegQuality);
+ const auto jpegSubSamp = nextIntOr (options.saveFormat.jpegSubSamp);
+ const auto pngBits = nextIntOr (options.saveFormat.pngBits);
+ const auto pngCompression = nextIntOr (options.saveFormat.pngCompression);
+ const auto tiffBits = nextIntOr (options.saveFormat.tiffBits);
+ const auto tiffUncompressed = nextIntOr (options.saveFormat.tiffUncompressed);
+ const auto saveParams = nextIntOr (options.saveFormat.saveParams);
+ const auto forceFormatOpts = nextIntOr (options.forceFormatOpts);
+
+ rtengine::procparams::ProcParams pparams;
+
+ if (pparams.load (paramsFile))
+ continue;
+
+ auto thumb = CacheManager::getInstance ()->getEntry (source);
+
+ if (!thumb)
+ continue;
+
+ auto job = rtengine::ProcessingJob::create (source, thumb->getType () == FT_Raw, pparams);
+
+ auto prevh = getMaxThumbnailHeight ();
+ auto prevw = prevh;
+ thumb->getThumbnailSize (prevw, prevh, &pparams);
+
+ auto entry = new BatchQueueEntry (job, pparams, source, prevw, prevh, thumb);
+ thumb->decreaseRef (); // Removing the refCount acquired by cacheMgr->getEntry
+ entry->setParent (this);
+
+ // BatchQueueButtonSet have to be added before resizing to take them into account
+ auto bqbs = new BatchQueueButtonSet (entry);
+ bqbs->setButtonListener (this);
+ entry->addButtonSet (bqbs);
+
+ entry->savedParamsFile = paramsFile;
+ entry->selected = false;
+ entry->outFileName = outputFile;
+
+ if (!outputFile.empty ()) {
+ auto& saveFormat = entry->saveFormat;
+ saveFormat.format = saveFmt;
+ saveFormat.jpegQuality = jpegQuality;
+ saveFormat.jpegSubSamp = jpegSubSamp;
+ saveFormat.pngBits = pngBits;
+ saveFormat.pngCompression = pngCompression;
+ saveFormat.tiffBits = tiffBits;
+ saveFormat.tiffUncompressed = tiffUncompressed != 0;
+ saveFormat.saveParams = saveParams != 0;
+ entry->forceFormatOpts = forceFormatOpts != 0;
+ } else {
+ entry->forceFormatOpts = false;
}
- size_t pos;
- Glib::ustring source;
- Glib::ustring paramsFile;
- Glib::ustring outputFile;
- Glib::ustring saveFmt(options.saveFormat.format);
- int jpegQuality = options.saveFormat.jpegQuality, jpegSubSamp = options.saveFormat.jpegSubSamp;
- int pngBits = options.saveFormat.pngBits, pngCompression = options.saveFormat.pngCompression;
- int tiffBits = options.saveFormat.tiffBits, tiffUncompressed = options.saveFormat.tiffUncompressed;
- int saveParams = options.saveFormat.saveParams;
- int forceFormatOpts = options.forceFormatOpts;
-
- Glib::ustring currLine(buffer);
- int a = 0;
-
- if (currLine.rfind('\n') != Glib::ustring::npos) {
- a++;
- }
-
- if (currLine.rfind('\r') != Glib::ustring::npos) {
- a++;
- }
-
- if (a) {
- currLine = currLine.substr(0, currLine.length() - a);
- }
-
- // Looking for the image's full path
- pos = currLine.find('|');
-
- if (pos != Glib::ustring::npos) {
- source = currLine.substr(0, pos);
- currLine = currLine.substr(pos + 1);
-
- // Looking for the procparams' full path
- pos = currLine.find('|');
-
- if (pos != Glib::ustring::npos) {
- paramsFile = currLine.substr(0, pos);
- currLine = currLine.substr(pos + 1);
-
- // Looking for the full output path; if empty, it'll use the template string
- pos = currLine.find('|');
-
- if (pos != Glib::ustring::npos) {
- outputFile = currLine.substr(0, pos);
- currLine = currLine.substr(pos + 1);
-
- // No need to bother reading the last options, they will be ignored if outputFile is empty!
- if (!outputFile.empty()) {
-
- // Looking for the saving format
- pos = currLine.find('|');
-
- if (pos != Glib::ustring::npos) {
- saveFmt = currLine.substr(0, pos);
- currLine = currLine.substr(pos + 1);
-
- // Looking for the jpeg quality
- pos = currLine.find('|');
-
- if (pos != Glib::ustring::npos) {
- jpegQuality = atoi(currLine.substr(0, pos).c_str());
- currLine = currLine.substr(pos + 1);
-
- // Looking for the jpeg subsampling
- pos = currLine.find('|');
-
- if (pos != Glib::ustring::npos) {
- jpegSubSamp = atoi(currLine.substr(0, pos).c_str());
- currLine = currLine.substr(pos + 1);
-
- // Looking for the png bit depth
- pos = currLine.find('|');
-
- if (pos != Glib::ustring::npos) {
- pngBits = atoi(currLine.substr(0, pos).c_str());
- currLine = currLine.substr(pos + 1);
-
- // Looking for the png compression
- pos = currLine.find('|');
-
- if (pos != Glib::ustring::npos) {
- pngCompression = atoi(currLine.substr(0, pos).c_str());
- currLine = currLine.substr(pos + 1);
-
- // Looking for the tiff bit depth
- pos = currLine.find('|');
-
- if (pos != Glib::ustring::npos) {
- tiffBits = atoi(currLine.substr(0, pos).c_str());
- currLine = currLine.substr(pos + 1);
-
- // Looking for the tiff uncompression
- pos = currLine.find('|');
-
- if (pos != Glib::ustring::npos) {
- tiffUncompressed = atoi(currLine.substr(0, pos).c_str());
- currLine = currLine.substr(pos + 1);
-
- // Looking out if we have to save the procparams
- pos = currLine.find('|');
-
- if (pos != Glib::ustring::npos) {
- saveParams = atoi(currLine.substr(0, pos).c_str());
- currLine = currLine.substr(pos + 1);
-
- // Looking out if we have to to use the format options
- pos = currLine.find('|');
-
- if (pos != Glib::ustring::npos) {
- forceFormatOpts = atoi(currLine.substr(0, pos).c_str());
- // currLine = currLine.substr(pos+1);
-
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
-
- if( !source.empty() && !paramsFile.empty() ) {
- rtengine::procparams::ProcParams pparams;
-
- if( pparams.load( paramsFile ) ) {
- continue;
- }
-
- ::Thumbnail *thumb = cacheMgr->getEntry( source );
-
- if( thumb ) {
- rtengine::ProcessingJob* job = rtengine::ProcessingJob::create(source, thumb->getType() == FT_Raw, pparams);
-
- int prevh = getMaxThumbnailHeight();
- int prevw = prevh;
- thumb->getThumbnailSize (prevw, prevh, &pparams);
-
- BatchQueueEntry *entry = new BatchQueueEntry(job, pparams, source, prevw, prevh, thumb);
- thumb->decreaseRef(); // Removing the refCount acquired by cacheMgr->getEntry
- entry->setParent(this);
-
- // BatchQueueButtonSet HAVE TO be added before resizing to take them into account
- BatchQueueButtonSet* bqbs = new BatchQueueButtonSet(entry);
- bqbs->setButtonListener(this);
- entry->addButtonSet(bqbs);
-
- //entry->resize(getThumbnailHeight());
- entry->savedParamsFile = paramsFile;
- entry->selected = false;
- entry->outFileName = outputFile;
-
- if (!outputFile.empty()) {
- entry->saveFormat.format = saveFmt;
- entry->saveFormat.jpegQuality = jpegQuality;
- entry->saveFormat.jpegSubSamp = jpegSubSamp;
- entry->saveFormat.pngBits = pngBits;
- entry->saveFormat.pngCompression = pngCompression;
- entry->saveFormat.tiffBits = tiffBits;
- entry->saveFormat.tiffUncompressed = tiffUncompressed != 0;
- entry->saveFormat.saveParams = saveParams != 0;
- entry->forceFormatOpts = forceFormatOpts != 0;
- } else {
- entry->forceFormatOpts = false;
- }
-
- fd.push_back(entry);
-
- numLoaded++;
- }
- }
+ fd.push_back (entry);
}
-
- delete [] buffer;
- fclose(f);
}
- redraw();
- notifyListener(false);
+ redraw ();
+ notifyListener (false);
- return !fd.empty();
+ return !fd.empty ();
}
Glib::ustring BatchQueue::getTempFilenameForParams( const Glib::ustring filename )
@@ -509,107 +401,106 @@ int cancelItemUI (void* data)
return 0;
}
-void BatchQueue::cancelItems (std::vector* items)
+void BatchQueue::cancelItems (const std::vector& items)
{
{
- // TODO: Check for Linux
#if PROTECT_VECTORS
MYWRITERLOCK(l, entryRW);
#endif
- for (size_t i = 0; i < items->size(); i++) {
- BatchQueueEntry* entry = (BatchQueueEntry*)(*items)[i];
+ for (const auto item : items) {
- if (entry->processing) {
+ const auto entry = static_cast (item);
+
+ if (entry->processing)
continue;
- }
- std::vector::iterator pos = std::find (fd.begin(), fd.end(), entry);
+ const auto pos = std::find (fd.begin (), fd.end (), entry);
- if (pos != fd.end()) {
- fd.erase (pos);
- rtengine::ProcessingJob::destroy (entry->job);
+ if (pos == fd.end ())
+ continue;
- if (entry->thumbnail) {
- entry->thumbnail->imageRemovedFromQueue ();
- }
+ fd.erase (pos);
- g_idle_add (cancelItemUI, entry);
- }
+ rtengine::ProcessingJob::destroy (entry->job);
+
+ if (entry->thumbnail)
+ entry->thumbnail->imageRemovedFromQueue ();
+
+ g_idle_add (cancelItemUI, entry);
}
- for (size_t i = 0; i < fd.size(); i++) {
- fd[i]->selected = false;
- }
+ for (const auto entry : fd)
+ entry->selected = false;
- lastClicked = NULL;
+ lastClicked = nullptr;
selected.clear ();
}
- saveBatchQueue( );
+ saveBatchQueue ();
redraw ();
notifyListener (false);
}
-void BatchQueue::headItems (std::vector* items)
+void BatchQueue::headItems (const std::vector& items)
{
{
- // TODO: Check for Linux
#if PROTECT_VECTORS
MYWRITERLOCK(l, entryRW);
#endif
+ for (auto item = items.rbegin(); item != items.rend(); ++item) {
- for (int i = items->size() - 1; i >= 0; i--) {
- BatchQueueEntry* entry = (BatchQueueEntry*)(*items)[i];
+ const auto entry = static_cast (*item);
- if (entry->processing) {
+ if (entry->processing)
continue;
- }
- std::vector::iterator pos = std::find (fd.begin(), fd.end(), entry);
+ const auto pos = std::find (fd.begin (), fd.end (), entry);
- if (pos != fd.end() && pos != fd.begin()) {
- fd.erase (pos);
+ if (pos == fd.end () || pos == fd.begin ())
+ continue;
- // find the first item that is not under processing
- for (pos = fd.begin(); pos != fd.end(); pos++)
- if (!(*pos)->processing) {
- fd.insert (pos, entry);
- break;
- }
- }
+ fd.erase (pos);
+
+ // find the first item that is not under processing
+ const auto newPos = std::find_if (fd.begin (), fd.end (), [] (const ThumbBrowserEntryBase* fdEntry) { return !fdEntry->processing; });
+
+ fd.insert (newPos, entry);
}
}
- saveBatchQueue( );
+
+ saveBatchQueue ();
redraw ();
}
-void BatchQueue::tailItems (std::vector* items)
+void BatchQueue::tailItems (const std::vector& items)
{
{
- // TODO: Check for Linux
#if PROTECT_VECTORS
MYWRITERLOCK(l, entryRW);
#endif
- for (size_t i = 0; i < items->size(); i++) {
- BatchQueueEntry* entry = (BatchQueueEntry*)(*items)[i];
+ for (const auto item : items) {
- if (entry->processing) {
+ const auto entry = static_cast (item);
+
+ if (entry->processing)
continue;
- }
- std::vector::iterator pos = std::find (fd.begin(), fd.end(), entry);
+ const auto pos = std::find (fd.begin (), fd.end (), entry);
- if (pos != fd.end()) {
- fd.erase (pos);
- fd.push_back (entry);
- }
+ if (pos == fd.end ())
+ continue;
+
+ fd.erase (pos);
+
+ fd.push_back (entry);
}
}
- saveBatchQueue( );
+
+ saveBatchQueue ();
redraw ();
}
@@ -1034,11 +925,11 @@ void BatchQueue::buttonPressed (LWButton* button, int actionCode, void* actionDa
bqe.push_back (static_cast(actionData));
if (actionCode == 10) { // cancel
- cancelItems (&bqe);
+ cancelItems (bqe);
} else if (actionCode == 8) { // to head
- headItems (&bqe);
+ headItems (bqe);
} else if (actionCode == 9) { // to tail
- tailItems (&bqe);
+ tailItems (bqe);
}
}
diff --git a/rtgui/batchqueue.h b/rtgui/batchqueue.h
index 4e97ebc9f..38fbee1f8 100644
--- a/rtgui/batchqueue.h
+++ b/rtgui/batchqueue.h
@@ -57,7 +57,7 @@ protected:
Gtk::ImageMenuItem* tail;
Gtk::MenuItem* selall;
Gtk::MenuItem* open;
- Gtk::Menu* pmenu;
+ std::unique_ptr pmenu;
Glib::RefPtr pmaccelgroup;
@@ -65,17 +65,17 @@ protected:
Glib::ustring autoCompleteFileName (const Glib::ustring& fileName, const Glib::ustring& format);
Glib::ustring getTempFilenameForParams( const Glib::ustring filename );
- bool saveBatchQueue( );
+ bool saveBatchQueue ();
void notifyListener (bool queueEmptied);
public:
BatchQueue (FileCatalog* aFileCatalog);
~BatchQueue ();
- void addEntries (std::vector &entries, bool head = false, bool save = true);
- void cancelItems (std::vector* items);
- void headItems (std::vector* items);
- void tailItems (std::vector* items);
+ void addEntries (const std::vector& entries, bool head = false, bool save = true);
+ void cancelItems (const std::vector& items);
+ void headItems (const std::vector& items);
+ void tailItems (const std::vector& items);
void selectAll ();
void openItemInEditor(ThumbBrowserEntryBase* item);
void openLastSelectedItemInEditor();
diff --git a/rtgui/cachemanager.cc b/rtgui/cachemanager.cc
index 0b88ea5f4..4d3949890 100644
--- a/rtgui/cachemanager.cc
+++ b/rtgui/cachemanager.cc
@@ -17,372 +17,364 @@
* along with RawTherapee. If not, see .
*/
#include "cachemanager.h"
-#include "options.h"
+
+#include
+
#include
#include
-#include "guiutils.h"
-#include "procparamchangers.h"
-#include "../rtengine/safegtk.h"
+
#ifdef WIN32
#include
#endif
-CacheManager*
-CacheManager::getInstance(void)
+#include "guiutils.h"
+#include "options.h"
+#include "procparamchangers.h"
+#include "thumbnail.h"
+
+namespace
{
- static CacheManager instance_;
- return &instance_;
+
+constexpr auto cacheDirMode = 511;
+constexpr auto cacheDirs = { "profiles", "images", "aehistograms", "embprofiles", "data" };
+
+}
+
+CacheManager* CacheManager::getInstance ()
+{
+ static CacheManager instance;
+ return &instance;
}
void CacheManager::init ()
{
-
- MyMutex::MyLock lock(mutex_);
+ MyMutex::MyLock lock (mutex);
openEntries.clear ();
baseDir = options.cacheBaseDir;
- if (!safe_file_test (baseDir, Glib::FILE_TEST_IS_DIR)) {
- safe_g_mkdir_with_parents (baseDir, 511);
+ auto error = g_mkdir_with_parents (baseDir.c_str(), cacheDirMode);
+
+ for (const auto& cacheDir : cacheDirs) {
+ error |= g_mkdir_with_parents (Glib::build_filename (baseDir, cacheDir).c_str(), cacheDirMode);
}
- if (!safe_file_test (Glib::build_filename (baseDir, "profiles"), Glib::FILE_TEST_IS_DIR)) {
- safe_g_mkdir_with_parents (Glib::ustring(Glib::build_filename (baseDir, "profiles")), 511);
- }
-
- if (!safe_file_test (Glib::build_filename (baseDir, "images"), Glib::FILE_TEST_IS_DIR)) {
- safe_g_mkdir_with_parents (Glib::ustring(Glib::build_filename (baseDir, "images")), 511);
- }
-
- if (!safe_file_test (Glib::build_filename (baseDir, "aehistograms"), Glib::FILE_TEST_IS_DIR)) {
- safe_g_mkdir_with_parents (Glib::ustring(Glib::build_filename (baseDir, "aehistograms")), 511);
- }
-
- if (!safe_file_test (Glib::build_filename (baseDir, "embprofiles"), Glib::FILE_TEST_IS_DIR)) {
- safe_g_mkdir_with_parents (Glib::ustring(Glib::build_filename (baseDir, "embprofiles")), 511);
- }
-
- if (!safe_file_test (Glib::build_filename (baseDir, "data"), Glib::FILE_TEST_IS_DIR)) {
- safe_g_mkdir_with_parents (Glib::ustring(Glib::build_filename (baseDir, "data")), 511);
+ if (error != 0 && options.rtSettings.verbose) {
+ std::cerr << "Failed to create all cache directories: " << g_strerror(errno) << std::endl;
}
}
Thumbnail* CacheManager::getEntry (const Glib::ustring& fname)
{
+ std::unique_ptr thumbnail;
- Thumbnail* res = NULL;
-
- // take manager lock and search for entry, if found return it else release
- // lock and create it
+ // take manager lock and search for entry,
+ // if found return it,
+ // else release lock and create it
{
- MyMutex::MyLock lock(mutex_);
-
- string_thumb_map::iterator r = openEntries.find (fname);
+ MyMutex::MyLock lock (mutex);
// if it is open, return it
- if (r != openEntries.end()) {
- r->second->increaseRef ();
- return r->second;
+ const auto iterator = openEntries.find (fname);
+ if (iterator != openEntries.end ()) {
+
+ auto cachedThumbnail = iterator->second;
+
+ cachedThumbnail->increaseRef ();
+ return cachedThumbnail;
}
}
- // compute the md5
- std::string md5 = getMD5 (fname);
-
- if (md5 == "") {
- return NULL;
- }
-
// build path name
- Glib::ustring cfname = getCacheFileName ("data", fname, md5) + ".txt";
+ const auto md5 = getMD5 (fname);
+
+ if (md5.empty ()) {
+ return nullptr;
+ }
+
+ const auto cacheName = getCacheFileName ("data", fname, ".txt", md5);
// let's see if we have it in the cache
- if (safe_file_test (cfname, Glib::FILE_TEST_EXISTS)) {
- CacheImageData* cfs = new CacheImageData ();
- int e = cfs->load (cfname);
+ {
+ CacheImageData imageData;
- if (!e && cfs->supported == true) {
- res = new Thumbnail (this, fname, cfs);
+ const auto error = imageData.load (cacheName);
+ if (error == 0 && imageData.supported) {
+
+ thumbnail.reset (new Thumbnail (this, fname, &imageData));
+ if (!thumbnail->isSupported ()) {
+ thumbnail.reset ();
+ }
}
-
- if (res && !res->isSupported ()) {
- delete res;
- res = NULL;
- }
-
- delete cfs;
}
// if not, create a new one
- if (!res) {
- res = new Thumbnail (this, fname, md5);
+ if (!thumbnail) {
- if (!res->isSupported ()) {
- delete res;
- res = NULL;
+ thumbnail.reset (new Thumbnail (this, fname, md5));
+ if (!thumbnail->isSupported ()) {
+ thumbnail.reset ();
}
}
// retake the lock and see if it was added while we we're unlocked, if it
// was use it over our version. if not added we create the cache entry
- if (res) {
- MyMutex::MyLock lock(mutex_);
+ if (thumbnail) {
+ MyMutex::MyLock lock (mutex);
- string_thumb_map::iterator r = openEntries.find (fname);
+ const auto iterator = openEntries.find (fname);
+ if (iterator != openEntries.end ()) {
- if (r != openEntries.end()) {
- delete res;
- r->second->increaseRef ();
- return r->second;
+ auto cachedThumbnail = iterator->second;
+
+ cachedThumbnail->increaseRef ();
+ return cachedThumbnail;
}
// it wasn't, create a new entry
- openEntries[fname] = res;
+ openEntries.emplace (fname, thumbnail.get ());
}
- return res;
+ return thumbnail.release ();
}
void CacheManager::deleteEntry (const Glib::ustring& fname)
{
-
- MyMutex::MyLock lock(mutex_);
+ MyMutex::MyLock lock (mutex);
// check if it is opened
- string_thumb_map::iterator r = openEntries.find (fname);
+ auto iterator = openEntries.find (fname);
+ if (iterator == openEntries.end ()) {
+ deleteFiles (fname, getMD5 (fname), true, true);
+ return;
+ }
- // if it is open, dont delete it
- if (r != openEntries.end()) {
- std::string md5 = r->second->getMD5 ();
+ auto thumbnail = iterator->second;
- // decrease reference count; this will call back into CacheManager so
- // we release the lock for it.
- {
- lock.release();
- r->second->decreaseRef ();
- lock.acquire();
- }
+ // decrease reference count;
+ // this will call back into CacheManager,
+ // so we release the lock for it
+ {
+ lock.release ();
+ thumbnail->decreaseRef ();
+ lock.acquire ();
+ }
- // if in the editor, the thumbnail still exists. If not, delete it:
- r = openEntries.find (fname);
-
- if (r == openEntries.end() && md5 != "") {
- safe_g_remove (getCacheFileName ("data", fname, md5) + ".txt");
- safe_g_remove (getCacheFileName ("profiles", fname, md5) + paramFileExtension);
- safe_g_remove (getCacheFileName ("images", fname, md5) + ".rtti");
- safe_g_remove (getCacheFileName ("images", fname, md5) + ".cust16");
- safe_g_remove (getCacheFileName ("images", fname, md5) + ".cust");
- safe_g_remove (getCacheFileName ("images", fname, md5) + ".jpg");
- safe_g_remove (getCacheFileName ("aehistograms", fname, md5));
- safe_g_remove (getCacheFileName ("embprofiles", fname, md5) + ".icc");
- }
- } else {
- std::string md5 = getMD5 (fname);
-
- if (md5 != "") {
- safe_g_remove (getCacheFileName ("data", fname, md5) + ".txt");
- safe_g_remove (getCacheFileName ("profiles", fname, md5) + paramFileExtension);
- safe_g_remove (getCacheFileName ("images", fname, md5) + ".rtti");
- safe_g_remove (getCacheFileName ("images", fname, md5) + ".cust16");
- safe_g_remove (getCacheFileName ("images", fname, md5) + ".cust");
- safe_g_remove (getCacheFileName ("images", fname, md5) + ".jpg");
- safe_g_remove (getCacheFileName ("aehistograms", fname, md5));
- safe_g_remove (getCacheFileName ("embprofiles", fname, md5) + ".icc");
- }
+ // check again if in the editor,
+ // the thumbnail still exists,
+ // if not, delete it
+ if (openEntries.count (fname) == 0) {
+ deleteFiles (fname, thumbnail->getMD5 (), true, true);
}
}
-void CacheManager::clearFromCache (const Glib::ustring& fname, bool leavenotrace)
+void CacheManager::clearFromCache (const Glib::ustring& fname, bool purge) const
{
- std::string md5 = getMD5 (fname);
-
- if (md5 != "") {
- if (leavenotrace) {
- safe_g_remove (getCacheFileName ("data", fname, md5) + ".txt");
- safe_g_remove (getCacheFileName ("profiles", fname, md5) + paramFileExtension);
- }
-
- safe_g_remove (getCacheFileName ("images", fname, md5) + ".rtti");
- safe_g_remove (getCacheFileName ("images", fname, md5) + ".cust16");
- safe_g_remove (getCacheFileName ("images", fname, md5) + ".cust");
- safe_g_remove (getCacheFileName ("images", fname, md5) + ".jpg");
- safe_g_remove (getCacheFileName ("aehistograms", fname, md5));
- safe_g_remove (getCacheFileName ("embprofiles", fname, md5) + ".icc");
- }
+ deleteFiles (fname, getMD5 (fname), purge, purge);
}
void CacheManager::renameEntry (const std::string& oldfilename, const std::string& oldmd5, const std::string& newfilename)
{
+ MyMutex::MyLock lock (mutex);
- MyMutex::MyLock lock(mutex_);
+ const auto newmd5 = getMD5 (newfilename);
- std::string newmd5 = getMD5 (newfilename);
+ auto error = g_rename (getCacheFileName ("profiles", oldfilename, paramFileExtension, oldmd5).c_str (), getCacheFileName ("profiles", newfilename, paramFileExtension, newmd5).c_str ());
+ error |= g_rename (getCacheFileName ("images", oldfilename, ".rtti", oldmd5).c_str (), getCacheFileName ("images", newfilename, ".rtti", newmd5).c_str ());
+ error |= g_rename (getCacheFileName ("images", oldfilename, ".cust16", oldmd5).c_str (), getCacheFileName ("images", newfilename, ".cust16", newmd5).c_str ());
+ error |= g_rename (getCacheFileName ("images", oldfilename, ".cust", oldmd5).c_str (), getCacheFileName ("images", newfilename, ".cust", newmd5).c_str ());
+ error |= g_rename (getCacheFileName ("images", oldfilename, ".jpg", oldmd5).c_str (), getCacheFileName ("images", newfilename, ".jpg", newmd5).c_str ());
+ error |= g_rename (getCacheFileName ("aehistograms", oldfilename, "", oldmd5).c_str (), getCacheFileName ("aehistograms", newfilename, "", newmd5).c_str ());
+ error |= g_rename (getCacheFileName ("embprofiles", oldfilename, ".icc", oldmd5).c_str (), getCacheFileName ("embprofiles", newfilename, ".icc", newmd5).c_str ());
+ error |= g_rename (getCacheFileName ("data", oldfilename, ".txt", oldmd5).c_str (), getCacheFileName ("data", newfilename, ".txt", newmd5).c_str ());
- safe_g_rename (getCacheFileName ("profiles", oldfilename, oldmd5) + paramFileExtension, (getCacheFileName ("profiles", newfilename, newmd5) + paramFileExtension).c_str());
- safe_g_rename (getCacheFileName ("images", oldfilename, oldmd5) + ".rtti", getCacheFileName ("images", newfilename, newmd5) + ".rtti");
- safe_g_rename (getCacheFileName ("images", oldfilename, oldmd5) + ".cust16", getCacheFileName ("images", newfilename, newmd5) + ".cust16");
- safe_g_rename (getCacheFileName ("images", oldfilename, oldmd5) + ".cust", getCacheFileName ("images", newfilename, newmd5) + ".cust");
- safe_g_rename (getCacheFileName ("images", oldfilename, oldmd5) + ".jpg", getCacheFileName ("images", newfilename, newmd5) + ".jpg");
- safe_g_rename (getCacheFileName ("aehistograms", oldfilename, oldmd5), getCacheFileName ("aehistograms", newfilename, newmd5));
- safe_g_rename (getCacheFileName ("embprofiles", oldfilename, oldmd5) + ".icc", getCacheFileName ("embprofiles", newfilename, newmd5) + ".icc");
- safe_g_rename (getCacheFileName ("data", oldfilename, oldmd5) + ".txt", getCacheFileName ("data", newfilename, newmd5) + ".txt");
+ if (error != 0 && options.rtSettings.verbose) {
+ std::cerr << "Failed to rename all files for cache entry '" << oldfilename << "': " << g_strerror(errno) << std::endl;
+ }
// check if it is opened
- string_thumb_map::iterator r = openEntries.find (oldfilename);
-
// if it is open, update md5
- if (r != openEntries.end()) {
- Thumbnail* t = r->second;
- openEntries.erase (r);
- t->setFileName (newfilename);
- openEntries[newfilename] = t;
- t->updateCache ();
- t->saveThumbnail ();
- }
-}
-
-void CacheManager::closeThumbnail (Thumbnail* t)
-{
-
- MyMutex::MyLock lock(mutex_);
-
-// t->updateCache ();
- string_thumb_map::iterator r = openEntries.find (t->getFileName());
-
- if (r != openEntries.end()) {
- openEntries.erase (r);
+ const auto iterator = openEntries.find (oldfilename);
+ if (iterator == openEntries.end ()) {
+ return;
}
- delete t;
+ auto thumbnail = iterator->second;
+ openEntries.erase (iterator);
+ openEntries.emplace (newfilename, thumbnail);
+
+ thumbnail->setFileName (newfilename);
+ thumbnail->updateCache ();
+ thumbnail->saveThumbnail ();
}
-void CacheManager::closeCache ()
+void CacheManager::closeThumbnail (Thumbnail* thumbnail)
{
+ MyMutex::MyLock lock (mutex);
- MyMutex::MyLock lock(mutex_);
+ openEntries.erase (thumbnail->getFileName ());
+ delete thumbnail;
+}
+
+void CacheManager::closeCache () const
+{
+ MyMutex::MyLock lock (mutex);
applyCacheSizeLimitation ();
}
-void CacheManager::clearAll ()
+void CacheManager::clearAll () const
{
+ MyMutex::MyLock lock (mutex);
- MyMutex::MyLock lock(mutex_);
-
- deleteDir ("images");
- deleteDir ("aehistograms");
- deleteDir ("embprofiles");
- deleteDir ("profiles");
- deleteDir ("data");
-
- // re-generate thumbnail images and clear profiles of open thumbnails
- //string_thumb_map::iterator i;
- //for (i=openEntries.begin(); i!=openEntries.end(); i++) {
- // i->second->clearProcParams (CACHEMGR);
- // i->second->generateThumbnailImage ();
- // i->second->updateCache ();
- //}
+ for (const auto& cacheDir : cacheDirs) {
+ deleteDir (cacheDir);
+ }
}
-void CacheManager::clearThumbImages ()
-{
- MyMutex::MyLock lock(mutex_);
+void CacheManager::clearImages () const
+{
+ MyMutex::MyLock lock (mutex);
deleteDir ("images");
deleteDir ("aehistograms");
deleteDir ("embprofiles");
}
-void CacheManager::clearProfiles ()
+void CacheManager::clearProfiles () const
{
- MyMutex::MyLock lock(mutex_);
+ MyMutex::MyLock lock (mutex);
deleteDir ("profiles");
}
-void CacheManager::deleteDir (const Glib::ustring& dirName)
+void CacheManager::deleteDir (const Glib::ustring& dirName) const
{
-
try {
- Glib::Dir* dir = new Glib::Dir (Glib::build_filename (baseDir, dirName));
- for (Glib::DirIterator i = dir->begin(); i != dir->end(); ++i) {
- safe_g_remove (Glib::build_filename (Glib::build_filename (baseDir, dirName), *i));
+ Glib::Dir dir (Glib::build_filename (baseDir, dirName));
+
+ auto error = 0;
+ for (auto entry = dir.begin (); entry != dir.end (); ++entry) {
+ error |= g_remove (Glib::build_filename (baseDir, dirName, *entry).c_str ());
}
- delete dir;
- } catch (const Glib::Error& e) {
+ if (error != 0 && options.rtSettings.verbose) {
+ std::cerr << "Failed to delete all entries in cache directory '" << dirName << "': " << g_strerror(errno) << std::endl;
+ }
+
+ } catch (Glib::Error&) {}
+}
+
+void CacheManager::deleteFiles (const Glib::ustring& fname, const std::string& md5, bool purgeData, bool purgeProfile) const
+{
+ if (md5.empty ()) {
+ return;
+ }
+
+ auto error = g_remove (getCacheFileName ("images", fname, ".rtti", md5).c_str ());
+ error |= g_remove (getCacheFileName ("images", fname, ".cust16", md5).c_str ());
+ error |= g_remove (getCacheFileName ("images", fname, ".cust", md5).c_str ());
+ error |= g_remove (getCacheFileName ("images", fname, ".jpg", md5).c_str ());
+ error |= g_remove (getCacheFileName ("aehistograms", fname, "", md5).c_str ());
+ error |= g_remove (getCacheFileName ("embprofiles", fname, ".icc", md5).c_str ());
+
+ if (purgeData) {
+ error |= g_remove (getCacheFileName ("data", fname, ".txt", md5).c_str ());
+ }
+
+ if (purgeProfile) {
+ error |= g_remove (getCacheFileName ("profiles", fname, paramFileExtension, md5).c_str ());
+ }
+
+ if (error != 0 && options.rtSettings.verbose) {
+ std::cerr << "Failed to delete all files for cache entry '" << fname << "': " << g_strerror(errno) << std::endl;
}
}
std::string CacheManager::getMD5 (const Glib::ustring& fname)
{
- Glib::RefPtr file = Gio::File::create_for_path (fname);
+ auto file = Gio::File::create_for_path (fname);
- if (file && file->query_exists()) {
+ if (file && file->query_exists ()) {
#ifdef WIN32
- // Windows: file name + size + creation time
- // Safer because e.g. your camera image counter turns over. Do NOT use modified date, since tagging programs will change that
- wchar_t *wFname = (wchar_t*)g_utf8_to_utf16 (fname.c_str(), -1, NULL, NULL, NULL);
- WIN32_FILE_ATTRIBUTE_DATA fileAttr;
- bool success = GetFileAttributesExW(wFname, GetFileExInfoStandard, &fileAttr);
- g_free(wFname);
- if (success) {
- // Just need the low file size, since RAWs are never that large
- Glib::ustring fileID = Glib::ustring::compose ("%1-%2-%3-%4", fileAttr.nFileSizeLow, fileAttr.ftCreationTime.dwHighDateTime, fileAttr.ftCreationTime.dwLowDateTime, fname );
- return Glib::Checksum::compute_checksum (Glib::Checksum::CHECKSUM_MD5, fileID);
+ std::unique_ptr wfname (reinterpret_cast(g_utf8_to_utf16 (fname.c_str (), -1, NULL, NULL, NULL)), g_free);
+
+ WIN32_FILE_ATTRIBUTE_DATA fileAttr;
+ if (GetFileAttributesExW (wfname.get (), GetFileExInfoStandard, &fileAttr)) {
+ // We use name, size and creation time to identify a file.
+ const auto identifier = Glib::ustring::compose ("%1-%2-%3-%4", fileAttr.nFileSizeLow, fileAttr.ftCreationTime.dwHighDateTime, fileAttr.ftCreationTime.dwLowDateTime, fname);
+ return Glib::Checksum::compute_checksum (Glib::Checksum::CHECKSUM_MD5, identifier);
}
#else
- // Least common denominator: file name + size to identify a file
- Glib::RefPtr info = safe_query_file_info (file);
- if (info) {
- return Glib::Checksum::compute_checksum (Glib::Checksum::CHECKSUM_MD5, Glib::ustring::compose ("%1%2", fname, info->get_size()));
- }
+ try
+ {
+
+ if (auto info = file->query_info ()) {
+ // We only use name and size to identify a file.
+ const auto identifier = Glib::ustring::compose ("%1%2", fname, info->get_size ());
+ return Glib::Checksum::compute_checksum (Glib::Checksum::CHECKSUM_MD5, identifier);
+ }
+
+ } catch(Gio::Error&) {}
#endif
+
}
- return "";
+ return {};
}
-Glib::ustring CacheManager::getCacheFileName (const Glib::ustring& subdir, const Glib::ustring& fname, const Glib::ustring& md5)
+Glib::ustring CacheManager::getCacheFileName (const Glib::ustring& subDir,
+ const Glib::ustring& fname,
+ const Glib::ustring& fext,
+ const Glib::ustring& md5) const
{
-
- Glib::ustring cfn = Glib::build_filename (baseDir, subdir);
- Glib::ustring cname = Glib::path_get_basename (fname) + "." + md5;
- return Glib::build_filename (cfn, cname);
+ const auto dirName = Glib::build_filename (baseDir, subDir);
+ const auto baseName = Glib::path_get_basename (fname) + "." + md5;
+ return Glib::build_filename (dirName, baseName + fext);
}
-void CacheManager::applyCacheSizeLimitation ()
+void CacheManager::applyCacheSizeLimitation () const
{
+ using FNameMTime = std::pair;
+ std::vector files;
- // TODO: Improve this, it just blindly deletes image without looking at create time or something to keep the current ones
- std::vector flist;
- Glib::ustring dataDir = Glib::build_filename (baseDir, "data");
- Glib::RefPtr dir = Gio::File::create_for_path (dataDir);
+ try {
- safe_build_file_list (dir, flist);
+ const auto dirName = Glib::build_filename (baseDir, "data");
+ const auto dir = Gio::File::create_for_path (dirName);
- if (flist.size() > options.maxCacheEntries) {
- std::sort (flist.begin(), flist.end());
+ auto enumerator = dir->enumerate_children ();
- while (flist.size() > options.maxCacheEntries) {
- safe_g_remove (Glib::build_filename (Glib::build_filename (baseDir, "data"), flist.front().fname) + ".txt");
- safe_g_remove (Glib::build_filename (Glib::build_filename (baseDir, "images"), flist.front().fname) + ".rtti");
- safe_g_remove (Glib::build_filename (Glib::build_filename (baseDir, "images"), flist.front().fname) + ".cust16");
- safe_g_remove (Glib::build_filename (Glib::build_filename (baseDir, "images"), flist.front().fname) + ".cust");
- safe_g_remove (Glib::build_filename (Glib::build_filename (baseDir, "images"), flist.front().fname) + ".jpg");
- safe_g_remove (Glib::build_filename (Glib::build_filename (baseDir, "aehistograms"), flist.front().fname));
- safe_g_remove (Glib::build_filename (Glib::build_filename (baseDir, "embprofiles"), flist.front().fname) + ".icc");
- // safe_g_remove (Glib::build_filename (Glib::build_filename (baseDir, "profiles"), flist.front().fname) + paramFileExtension);
- flist.erase (flist.begin());
+ while (auto file = enumerator->next_file ()) {
+ files.emplace_back (file->get_name (), file->modification_time ());
}
+
+ } catch (Glib::Exception&) {}
+
+ if (files.size () <= options.maxCacheEntries) {
+ return;
+ }
+
+ std::sort (files.begin (), files.end (), [] (const FNameMTime& lhs, const FNameMTime& rhs)
+ {
+ return lhs.second < rhs.second;
+ });
+
+ auto cacheEntries = files.size ();
+
+ for (auto entry = files.begin(); cacheEntries-- > options.maxCacheEntries; ++entry) {
+
+ const auto& fname = entry->first;
+
+ deleteFiles (fname, getMD5 (fname), true, false);
}
}
diff --git a/rtgui/cachemanager.h b/rtgui/cachemanager.h
index 159964104..4460204cc 100644
--- a/rtgui/cachemanager.h
+++ b/rtgui/cachemanager.h
@@ -21,56 +21,55 @@
#include
#include