diff --git a/rtdata/dcpprofiles/FUJIFILM X-S1.dcp b/rtdata/dcpprofiles/FUJIFILM X-S1.dcp
new file mode 100644
index 000000000..2df794b21
Binary files /dev/null and b/rtdata/dcpprofiles/FUJIFILM X-S1.dcp differ
diff --git a/rtdata/dcpprofiles/NIKON COOLPIX P7800.dcp b/rtdata/dcpprofiles/NIKON COOLPIX P7800.dcp
new file mode 100644
index 000000000..5361e35d4
Binary files /dev/null and b/rtdata/dcpprofiles/NIKON COOLPIX P7800.dcp differ
diff --git a/rtdata/dcpprofiles/NIKON D750.dcp b/rtdata/dcpprofiles/NIKON D750.dcp
index 86a676b3e..94cc493d3 100644
Binary files a/rtdata/dcpprofiles/NIKON D750.dcp and b/rtdata/dcpprofiles/NIKON D750.dcp differ
diff --git a/rtdata/dcpprofiles/NIKON D80.dcp b/rtdata/dcpprofiles/NIKON D80.dcp
index 965c358aa..d8e49bbe2 100644
Binary files a/rtdata/dcpprofiles/NIKON D80.dcp and b/rtdata/dcpprofiles/NIKON D80.dcp differ
diff --git a/rtdata/dcpprofiles/NIKON D800E.dcp b/rtdata/dcpprofiles/NIKON D800E.dcp
new file mode 100644
index 000000000..ffd7cc2af
Binary files /dev/null and b/rtdata/dcpprofiles/NIKON D800E.dcp differ
diff --git a/rtdata/dcpprofiles/NIKON D810.dcp b/rtdata/dcpprofiles/NIKON D810.dcp
index 2a32a1376..5558c2b2d 100644
Binary files a/rtdata/dcpprofiles/NIKON D810.dcp and b/rtdata/dcpprofiles/NIKON D810.dcp differ
diff --git a/rtdata/dcpprofiles/Nikon D800.dcp b/rtdata/dcpprofiles/Nikon D800.dcp
deleted file mode 100644
index c0a4a5586..000000000
Binary files a/rtdata/dcpprofiles/Nikon D800.dcp and /dev/null differ
diff --git a/rtdata/dcpprofiles/OLYMPUS E-510.dcp b/rtdata/dcpprofiles/OLYMPUS E-510.dcp
new file mode 100644
index 000000000..4361f13f8
Binary files /dev/null and b/rtdata/dcpprofiles/OLYMPUS E-510.dcp differ
diff --git a/rtdata/dcpprofiles/OLYMPUS E-M10.dcp b/rtdata/dcpprofiles/OLYMPUS E-M10.dcp
index d10459c83..8d1b6413e 100644
Binary files a/rtdata/dcpprofiles/OLYMPUS E-M10.dcp and b/rtdata/dcpprofiles/OLYMPUS E-M10.dcp differ
diff --git a/rtdata/dcpprofiles/OLYMPUS E-M1MarkII.dcp b/rtdata/dcpprofiles/OLYMPUS E-M1MarkII.dcp
index f32d01302..15cb8679f 100644
Binary files a/rtdata/dcpprofiles/OLYMPUS E-M1MarkII.dcp and b/rtdata/dcpprofiles/OLYMPUS E-M1MarkII.dcp differ
diff --git a/rtdata/dcpprofiles/Olympus E-510.dcp b/rtdata/dcpprofiles/Olympus E-510.dcp
deleted file mode 100644
index 14de9a405..000000000
Binary files a/rtdata/dcpprofiles/Olympus E-510.dcp and /dev/null differ
diff --git a/rtdata/dcpprofiles/PENTAX K-5 II.dcp b/rtdata/dcpprofiles/PENTAX K-5 II.dcp
index 307a40689..3c61743ec 100644
Binary files a/rtdata/dcpprofiles/PENTAX K-5 II.dcp and b/rtdata/dcpprofiles/PENTAX K-5 II.dcp differ
diff --git a/rtdata/dcpprofiles/PENTAX K-5.dcp b/rtdata/dcpprofiles/PENTAX K-5.dcp
index c3e496fab..b4efc37d1 100644
Binary files a/rtdata/dcpprofiles/PENTAX K-5.dcp and b/rtdata/dcpprofiles/PENTAX K-5.dcp differ
diff --git a/rtdata/dcpprofiles/PENTAX K10D.dcp b/rtdata/dcpprofiles/PENTAX K10D.dcp
index 1e688e2aa..367678690 100644
Binary files a/rtdata/dcpprofiles/PENTAX K10D.dcp and b/rtdata/dcpprofiles/PENTAX K10D.dcp differ
diff --git a/rtdata/dcpprofiles/Panasonic DC-TZ90.dcp b/rtdata/dcpprofiles/Panasonic DC-TZ90.dcp
deleted file mode 100644
index 2a3abfaed..000000000
Binary files a/rtdata/dcpprofiles/Panasonic DC-TZ90.dcp and /dev/null differ
diff --git a/rtdata/dcpprofiles/Panasonic DC-TZ91.dcp b/rtdata/dcpprofiles/Panasonic DC-TZ91.dcp
index 2a3abfaed..b645987cf 100644
Binary files a/rtdata/dcpprofiles/Panasonic DC-TZ91.dcp and b/rtdata/dcpprofiles/Panasonic DC-TZ91.dcp differ
diff --git a/rtdata/dcpprofiles/Panasonic DC-TZ92.dcp b/rtdata/dcpprofiles/Panasonic DC-TZ92.dcp
deleted file mode 100644
index 2a3abfaed..000000000
Binary files a/rtdata/dcpprofiles/Panasonic DC-TZ92.dcp and /dev/null differ
diff --git a/rtdata/dcpprofiles/Panasonic DC-TZ93.dcp b/rtdata/dcpprofiles/Panasonic DC-TZ93.dcp
deleted file mode 100644
index 2a3abfaed..000000000
Binary files a/rtdata/dcpprofiles/Panasonic DC-TZ93.dcp and /dev/null differ
diff --git a/rtdata/dcpprofiles/Panasonic DMC-GX85.dcp b/rtdata/dcpprofiles/Panasonic DMC-GX85.dcp
index 82d722a8c..84cb7a321 100644
Binary files a/rtdata/dcpprofiles/Panasonic DMC-GX85.dcp and b/rtdata/dcpprofiles/Panasonic DMC-GX85.dcp differ
diff --git a/rtdata/dcpprofiles/RICOH PENTAX K-1.dcp b/rtdata/dcpprofiles/RICOH PENTAX K-1.dcp
index 278c86d5a..6d33b63f2 100644
Binary files a/rtdata/dcpprofiles/RICOH PENTAX K-1.dcp and b/rtdata/dcpprofiles/RICOH PENTAX K-1.dcp differ
diff --git a/rtdata/dcpprofiles/RICOH PENTAX K-3.dcp b/rtdata/dcpprofiles/RICOH PENTAX K-3.dcp
index f04e0b2ad..0e2273cb2 100644
Binary files a/rtdata/dcpprofiles/RICOH PENTAX K-3.dcp and b/rtdata/dcpprofiles/RICOH PENTAX K-3.dcp differ
diff --git a/rtdata/dcpprofiles/SONY DSLR-A580.dcp b/rtdata/dcpprofiles/SONY DSLR-A580.dcp
index 73576c892..cf81687a5 100644
Binary files a/rtdata/dcpprofiles/SONY DSLR-A580.dcp and b/rtdata/dcpprofiles/SONY DSLR-A580.dcp differ
diff --git a/rtdata/dcpprofiles/SONY ILCE-6000.dcp b/rtdata/dcpprofiles/SONY ILCE-6000.dcp
index d0d1c3ae5..3832c514d 100644
Binary files a/rtdata/dcpprofiles/SONY ILCE-6000.dcp and b/rtdata/dcpprofiles/SONY ILCE-6000.dcp differ
diff --git a/rtdata/dcpprofiles/SONY ILCE-7M2.dcp b/rtdata/dcpprofiles/SONY ILCE-7M2.dcp
index 38740bad7..fc0627d2a 100644
Binary files a/rtdata/dcpprofiles/SONY ILCE-7M2.dcp and b/rtdata/dcpprofiles/SONY ILCE-7M2.dcp differ
diff --git a/rtdata/dcpprofiles/SONY ILCE-7M3.dcp b/rtdata/dcpprofiles/SONY ILCE-7M3.dcp
index 9cf6783ea..b736c1281 100644
Binary files a/rtdata/dcpprofiles/SONY ILCE-7M3.dcp and b/rtdata/dcpprofiles/SONY ILCE-7M3.dcp differ
diff --git a/rtdata/dcpprofiles/SONY ILCE-7RM3.dcp b/rtdata/dcpprofiles/SONY ILCE-7RM3.dcp
index f213959e7..5237dfc75 100644
Binary files a/rtdata/dcpprofiles/SONY ILCE-7RM3.dcp and b/rtdata/dcpprofiles/SONY ILCE-7RM3.dcp differ
diff --git a/rtdata/dcpprofiles/SONY SLT-A99V.dcp b/rtdata/dcpprofiles/SONY SLT-A99V.dcp
index 94a0767ed..a91d01a42 100644
Binary files a/rtdata/dcpprofiles/SONY SLT-A99V.dcp and b/rtdata/dcpprofiles/SONY SLT-A99V.dcp differ
diff --git a/rtdata/dcpprofiles/YI TECHNOLOGY M1.dcp b/rtdata/dcpprofiles/YI TECHNOLOGY M1.dcp
index d21ace365..c27af7614 100644
Binary files a/rtdata/dcpprofiles/YI TECHNOLOGY M1.dcp and b/rtdata/dcpprofiles/YI TECHNOLOGY M1.dcp differ
diff --git a/rtdata/dcpprofiles/camera_model_aliases.json b/rtdata/dcpprofiles/camera_model_aliases.json
index 66297a853..30586d6d5 100644
--- a/rtdata/dcpprofiles/camera_model_aliases.json
+++ b/rtdata/dcpprofiles/camera_model_aliases.json
@@ -20,8 +20,10 @@
"MINOLTA DYNAX 5D": ["Minolta Maxxum 5D", "Minolta Alpha 5D", "Minolta Alpha Sweet"],
"MINOLTA DYNAX 7D": ["Minolta Maxxum 7D", "Minolta Alpha 7D"],
+ "NIKON D800E": ["NIKON D800"],
+
"Panasonic DC-FZ82": ["Panasonic DMC-FZ80", "Panasonic DMC-FZ85"],
- "Panasonic DC-TZ90": ["Panasonic DC-ZS70", "Panasonic DC-FZ91", "Panasonic DC-FZ92", "Panasonic DC-FZ93"],
+ "Panasonic DC-TZ91": ["Panasonic DC-TZ90", "Panasonic DC-TZ92", "Panasonic DC-TZ93", "Panasonic DC-ZS70"],
"Panasonic DMC-G8": ["Panasonic DMC-G80", "Panasonic DMC-G81", "Panasonic DMC-G85"],
"Panasonic DMC-LX15": ["Panasonic DMC-LX9", "Panasonic DMC-LX10"],
"Panasonic DC-TZ100": ["Panasonic DC-ZS100", "Panasonic DC-ZS110", "Panasonic DC-TZ101", "Panasonic DC-TZ110"],
diff --git a/rtdata/languages/Catala b/rtdata/languages/Catala
index 37f412e96..2611dd522 100644
--- a/rtdata/languages/Catala
+++ b/rtdata/languages/Catala
@@ -967,6 +967,7 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: -
!DYNPROFILEEDITOR_PROFILE;Processing Profile
!EDIT_OBJECT_TOOLTIP;Displays a widget on the preview window which lets you adjust this tool.
!EDIT_PIPETTE_TOOLTIP;To add an adjustment point to the curve, hold the Ctrl key while left-clicking the desired spot in the image preview.\nTo adjust the point, hold the Ctrl key while left-clicking the corresponding area in the preview, then let go of Ctrl (unless you desire fine control) and while still holding the left mouse button move the mouse up or down to move that point up or down in the curve.
+!EXIFFILTER_IMAGETYPE;Image type
!EXIFPANEL_SHOWALL;Show all
!EXPORT_BYPASS;Processing steps to bypass
!EXPORT_BYPASS_EQUALIZER;Bypass Wavelet Levels
@@ -1317,7 +1318,7 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: -
!HISTORY_MSG_491;White Balance
!HISTORY_MSG_492;RGB Curves
!HISTORY_MSG_493;L*a*b* Adjustments
-!HISTORY_MSG_CLAMPOOG;Out-of-gamut colours clipping
+!HISTORY_MSG_CLAMPOOG;Out-of-gamut color clipping
!HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction
!HISTORY_MSG_HISTMATCHING;Auto-Matched Tone Curve
!HISTORY_MSG_LOCALCONTRAST_AMOUNT;Local Contrast - Amount
@@ -1796,7 +1797,7 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: -
!TP_DISTORTION_AUTO_TIP;Automatically corrects lens distortion in raw files by matching it against the embedded JPEG image if one exists and has had its lens disortion auto-corrected by the camera.
!TP_EPD_GAMMA;Gamma
!TP_EPD_TOOLTIP;Tone mapping is possible in L*a*b* mode (standard) and CIECAM02 mode.\n\nWhen in L*a*b* mode, tone mapping can also be used on the residual image of the Wavelet Levels tool.\n\nTo engage CIECAM02 tone mapping mode enable the following settings:\n1. CIECAM02\n2. Algorithm="Brightness + Colorfulness (QM)"\n3. "Tone mapping using CIECAM02 brightness (Q)"
-!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colours
+!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colors
!TP_EXPOSURE_HISTMATCHING;Auto-Matched Tone Curve
!TP_EXPOSURE_HISTMATCHING_TOOLTIP;Automatically adjust sliders and curves (except exposure compensation) to match the look of the embedded JPEG thumbnail.
!TP_EXPOSURE_TCMODE_LUMINANCE;Luminance
@@ -1909,53 +1910,34 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: -
!TP_RAW_MONO;Mono
!TP_RAW_NONE;None (Shows sensor pattern)
!TP_RAW_PIXELSHIFT;Pixel Shift
-!TP_RAW_PIXELSHIFTADAPTIVE;Adaptive detection
!TP_RAW_PIXELSHIFTBLUR;Blur motion mask
-!TP_RAW_PIXELSHIFTEPERISO;ISO adaption
-!TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;The default value of 0 should work fine for base ISO.\nIncrease the value to improve motion detection for higher ISO.\nIncrease in small steps and watch the motion mask while increasing.
+!TP_RAW_PIXELSHIFTEPERISO;Sensitivity
+!TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;The default value of 0 should work fine for base ISO.\nHigher values increase sensitivity of motion detection.\nChange in small steps and watch the motion mask while changing.\nIncrease sensitivity for underexposed or high ISO images.
!TP_RAW_PIXELSHIFTEQUALBRIGHT;Equalize brightness of frames
!TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL;Equalize per channel
!TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL_TOOLTIP;Enabled: Equalize the RGB channels individually.\nDisabled: Use same equalization factor for all channels.
-!TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;Equalize the brightness of the frames to the brightness of the selected frame.\nIf there are overexposed areas in the frames select the brightest frame to avoid magenta colour cast in overexposed areas or enable motion correction.
-!TP_RAW_PIXELSHIFTEXP0;Experimental
+!TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;Equalize the brightness of the frames to the brightness of the selected frame.\nIf there are overexposed areas in the frames select the brightest frame to avoid magenta color cast in overexposed areas or enable motion correction.
!TP_RAW_PIXELSHIFTGREEN;Check green channel for motion
!TP_RAW_PIXELSHIFTHOLEFILL;Fill holes in motion mask
!TP_RAW_PIXELSHIFTHOLEFILL_TOOLTIP;Fill holes in motion mask
!TP_RAW_PIXELSHIFTLMMSE;Use LMMSE for moving parts
!TP_RAW_PIXELSHIFTLMMSE_TOOLTIP;Use LMMSE instead of AMaZE for areas of motion.\nUseful for high ISO images.
-!TP_RAW_PIXELSHIFTMASKTHRESHOLD;3x3 new threshold
!TP_RAW_PIXELSHIFTMEDIAN;Use median for moving parts
-!TP_RAW_PIXELSHIFTMEDIAN3;Exclude selected frame from median
-!TP_RAW_PIXELSHIFTMEDIAN3_TOOLTIP;Excludes selected frame from median.\nUseful if moving objects overlap in frame 2 and 3
!TP_RAW_PIXELSHIFTMEDIAN_TOOLTIP;Use median of all frames instead of selected frame for regions with motion.\nRemoves objects which are at different places in all frames.\nGives motion effect on slow moving (overlapping) objects.
!TP_RAW_PIXELSHIFTMM_AUTO;Automatic
!TP_RAW_PIXELSHIFTMM_CUSTOM;Custom
!TP_RAW_PIXELSHIFTMM_OFF;Off
-!TP_RAW_PIXELSHIFTMOTION;Motion detection level (deprecated)
-!TP_RAW_PIXELSHIFTMOTIONCORRECTION;Green motion correction size
!TP_RAW_PIXELSHIFTMOTIONMETHOD;Motion Correction
!TP_RAW_PIXELSHIFTMOTION_TOOLTIP;0 means no motion detection.\n1 - 99 means motion will be detected according to this value. Increase value to increase detection rate.\n100 means the AMaZE-demosaiced frame will be used.
-!TP_RAW_PIXELSHIFTNONGREENAMAZE;Check red/blue AMaZE
!TP_RAW_PIXELSHIFTNONGREENCROSS;Check red/blue channels for motion
-!TP_RAW_PIXELSHIFTNONGREENCROSS2;Check green AMaZE
-!TP_RAW_PIXELSHIFTNONGREENHORIZONTAL;Check red/blue horizontal
-!TP_RAW_PIXELSHIFTNONGREENVERTICAL;Check red/blue vertical
-!TP_RAW_PIXELSHIFTNREADISO;nRead
-!TP_RAW_PIXELSHIFTONEGREEN;Use one green instead of average
-!TP_RAW_PIXELSHIFTONEGREEN_TOOLTIP;Use one green instead of averaging two greens for regions without motion.
-!TP_RAW_PIXELSHIFTPRNU;PRNU (%)
-!TP_RAW_PIXELSHIFTREDBLUEWEIGHT;Red&Blue weight
!TP_RAW_PIXELSHIFTSHOWMOTION;Show motion mask
!TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY;Show only motion mask
!TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY_TOOLTIP;Shows the motion mask without the image.
-!TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Overlays the image with a mask showing the regions with motion.
+!TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Overlays the image with a green mask showing the regions with motion.
!TP_RAW_PIXELSHIFTSIGMA;Blur radius
!TP_RAW_PIXELSHIFTSIGMA_TOOLTIP;The default radius of 1.0 usually fits well for base ISO.\nIncrease the value for high ISO shots, 5.0 is a good starting point.\nWatch the motion mask while changing the value.
!TP_RAW_PIXELSHIFTSMOOTH;Smooth transitions
!TP_RAW_PIXELSHIFTSMOOTH_TOOLTIP;Smooth transitions between areas with motion and areas without.\nSet to 0 to disable transition smoothing.\nSet to 1 to either get the AMaZE/LMMSE result of the selected frame (depending on whether "Use LMMSE" is selected), or the median of all four frames if "Use median" is selected.
-!TP_RAW_PIXELSHIFTSTDDEVFACTORBLUE;StdDev factor Blue
-!TP_RAW_PIXELSHIFTSTDDEVFACTORGREEN;StdDev factor Green
-!TP_RAW_PIXELSHIFTSTDDEVFACTORRED;StdDev factor Red
!TP_RAW_RCD;RCD
!TP_RAW_SENSOR_BAYER_LABEL;Sensor with Bayer Matrix
!TP_RAW_SENSOR_XTRANS_DMETHOD_TOOLTIP;3-pass gives best results (recommended for low ISO images).\n1-pass is almost undistinguishable from 3-pass for high ISO images and is faster.
@@ -2128,7 +2110,7 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: -
!TP_WAVELET_EDGESENSI;Edge sensitivity
!TP_WAVELET_EDGREINF_TOOLTIP;Reinforce or reduce the action of the first level, do the opposite to the second level, and leave the rest unchanged.
!TP_WAVELET_EDGTHRESH;Detail
-!TP_WAVELET_EDGTHRESH_TOOLTIP;Change the repartition between the first levels and the others. The higher the threshold the more the action is centred on the first levels. Be careful with negative values, they increase the action of high levels and can introduce artifacts.
+!TP_WAVELET_EDGTHRESH_TOOLTIP;Change the repartition between the first levels and the others. The higher the threshold the more the action is centered on the first levels. Be careful with negative values, they increase the action of high levels and can introduce artifacts.
!TP_WAVELET_EDRAD;Radius
!TP_WAVELET_EDRAD_TOOLTIP;This radius adjustment is very different from those in other sharpening tools. Its value is compared to each level through a complex function. In this sense, a value of zero still has an effect.
!TP_WAVELET_EDSL;Threshold Sliders
diff --git a/rtdata/languages/Chinese (Simplified) b/rtdata/languages/Chinese (Simplified)
index 6036d27f0..4a574e97c 100644
--- a/rtdata/languages/Chinese (Simplified)
+++ b/rtdata/languages/Chinese (Simplified)
@@ -1035,6 +1035,7 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: -
!CURVEEDITOR_EDITPOINT_HINT;Enable edition of node in/out values.\n\nRight-click on a node to select it.\nRight-click on empty space to de-select the node.
!EDIT_OBJECT_TOOLTIP;Displays a widget on the preview window which lets you adjust this tool.
!EDIT_PIPETTE_TOOLTIP;To add an adjustment point to the curve, hold the Ctrl key while left-clicking the desired spot in the image preview.\nTo adjust the point, hold the Ctrl key while left-clicking the corresponding area in the preview, then let go of Ctrl (unless you desire fine control) and while still holding the left mouse button move the mouse up or down to move that point up or down in the curve.
+!EXIFFILTER_IMAGETYPE;Image type
!EXIFPANEL_SHOWALL;Show all
!EXPORT_BYPASS;Processing steps to bypass
!EXPORT_BYPASS_RAW_DCB_ENHANCE;Bypass [raw] DCB Enhancement Steps
@@ -1427,7 +1428,7 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: -
!HISTORY_MSG_491;White Balance
!HISTORY_MSG_492;RGB Curves
!HISTORY_MSG_493;L*a*b* Adjustments
-!HISTORY_MSG_CLAMPOOG;Out-of-gamut colours clipping
+!HISTORY_MSG_CLAMPOOG;Out-of-gamut color clipping
!HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction
!HISTORY_MSG_HISTMATCHING;Auto-Matched Tone Curve
!HISTORY_MSG_LOCALCONTRAST_AMOUNT;Local Contrast - Amount
@@ -1747,7 +1748,7 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: -
!TP_EPD_REWEIGHTINGITERATES;Reweighting iterates
!TP_EPD_TOOLTIP;Tone mapping is possible in L*a*b* mode (standard) and CIECAM02 mode.\n\nWhen in L*a*b* mode, tone mapping can also be used on the residual image of the Wavelet Levels tool.\n\nTo engage CIECAM02 tone mapping mode enable the following settings:\n1. CIECAM02\n2. Algorithm="Brightness + Colorfulness (QM)"\n3. "Tone mapping using CIECAM02 brightness (Q)"
!TP_EXPOSURE_AUTOLEVELS_TIP;Toggles execution of Auto Levels to automatically set Exposure slider values based on an image analysis.\nEnables Highlight Reconstruction if necessary.
-!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colours
+!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colors
!TP_EXPOSURE_CLIP_TIP;The fraction of pixels to be clipped in Auto Levels operation.
!TP_EXPOSURE_HISTMATCHING;Auto-Matched Tone Curve
!TP_EXPOSURE_HISTMATCHING_TOOLTIP;Automatically adjust sliders and curves (except exposure compensation) to match the look of the embedded JPEG thumbnail.
@@ -1887,53 +1888,34 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: -
!TP_RAW_MONO;Mono
!TP_RAW_NONE;None (Shows sensor pattern)
!TP_RAW_PIXELSHIFT;Pixel Shift
-!TP_RAW_PIXELSHIFTADAPTIVE;Adaptive detection
!TP_RAW_PIXELSHIFTBLUR;Blur motion mask
-!TP_RAW_PIXELSHIFTEPERISO;ISO adaption
-!TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;The default value of 0 should work fine for base ISO.\nIncrease the value to improve motion detection for higher ISO.\nIncrease in small steps and watch the motion mask while increasing.
+!TP_RAW_PIXELSHIFTEPERISO;Sensitivity
+!TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;The default value of 0 should work fine for base ISO.\nHigher values increase sensitivity of motion detection.\nChange in small steps and watch the motion mask while changing.\nIncrease sensitivity for underexposed or high ISO images.
!TP_RAW_PIXELSHIFTEQUALBRIGHT;Equalize brightness of frames
!TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL;Equalize per channel
!TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL_TOOLTIP;Enabled: Equalize the RGB channels individually.\nDisabled: Use same equalization factor for all channels.
-!TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;Equalize the brightness of the frames to the brightness of the selected frame.\nIf there are overexposed areas in the frames select the brightest frame to avoid magenta colour cast in overexposed areas or enable motion correction.
-!TP_RAW_PIXELSHIFTEXP0;Experimental
+!TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;Equalize the brightness of the frames to the brightness of the selected frame.\nIf there are overexposed areas in the frames select the brightest frame to avoid magenta color cast in overexposed areas or enable motion correction.
!TP_RAW_PIXELSHIFTGREEN;Check green channel for motion
!TP_RAW_PIXELSHIFTHOLEFILL;Fill holes in motion mask
!TP_RAW_PIXELSHIFTHOLEFILL_TOOLTIP;Fill holes in motion mask
!TP_RAW_PIXELSHIFTLMMSE;Use LMMSE for moving parts
!TP_RAW_PIXELSHIFTLMMSE_TOOLTIP;Use LMMSE instead of AMaZE for areas of motion.\nUseful for high ISO images.
-!TP_RAW_PIXELSHIFTMASKTHRESHOLD;3x3 new threshold
!TP_RAW_PIXELSHIFTMEDIAN;Use median for moving parts
-!TP_RAW_PIXELSHIFTMEDIAN3;Exclude selected frame from median
-!TP_RAW_PIXELSHIFTMEDIAN3_TOOLTIP;Excludes selected frame from median.\nUseful if moving objects overlap in frame 2 and 3
!TP_RAW_PIXELSHIFTMEDIAN_TOOLTIP;Use median of all frames instead of selected frame for regions with motion.\nRemoves objects which are at different places in all frames.\nGives motion effect on slow moving (overlapping) objects.
!TP_RAW_PIXELSHIFTMM_AUTO;Automatic
!TP_RAW_PIXELSHIFTMM_CUSTOM;Custom
!TP_RAW_PIXELSHIFTMM_OFF;Off
-!TP_RAW_PIXELSHIFTMOTION;Motion detection level (deprecated)
-!TP_RAW_PIXELSHIFTMOTIONCORRECTION;Green motion correction size
!TP_RAW_PIXELSHIFTMOTIONMETHOD;Motion Correction
!TP_RAW_PIXELSHIFTMOTION_TOOLTIP;0 means no motion detection.\n1 - 99 means motion will be detected according to this value. Increase value to increase detection rate.\n100 means the AMaZE-demosaiced frame will be used.
-!TP_RAW_PIXELSHIFTNONGREENAMAZE;Check red/blue AMaZE
!TP_RAW_PIXELSHIFTNONGREENCROSS;Check red/blue channels for motion
-!TP_RAW_PIXELSHIFTNONGREENCROSS2;Check green AMaZE
-!TP_RAW_PIXELSHIFTNONGREENHORIZONTAL;Check red/blue horizontal
-!TP_RAW_PIXELSHIFTNONGREENVERTICAL;Check red/blue vertical
-!TP_RAW_PIXELSHIFTNREADISO;nRead
-!TP_RAW_PIXELSHIFTONEGREEN;Use one green instead of average
-!TP_RAW_PIXELSHIFTONEGREEN_TOOLTIP;Use one green instead of averaging two greens for regions without motion.
-!TP_RAW_PIXELSHIFTPRNU;PRNU (%)
-!TP_RAW_PIXELSHIFTREDBLUEWEIGHT;Red&Blue weight
!TP_RAW_PIXELSHIFTSHOWMOTION;Show motion mask
!TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY;Show only motion mask
!TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY_TOOLTIP;Shows the motion mask without the image.
-!TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Overlays the image with a mask showing the regions with motion.
+!TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Overlays the image with a green mask showing the regions with motion.
!TP_RAW_PIXELSHIFTSIGMA;Blur radius
!TP_RAW_PIXELSHIFTSIGMA_TOOLTIP;The default radius of 1.0 usually fits well for base ISO.\nIncrease the value for high ISO shots, 5.0 is a good starting point.\nWatch the motion mask while changing the value.
!TP_RAW_PIXELSHIFTSMOOTH;Smooth transitions
!TP_RAW_PIXELSHIFTSMOOTH_TOOLTIP;Smooth transitions between areas with motion and areas without.\nSet to 0 to disable transition smoothing.\nSet to 1 to either get the AMaZE/LMMSE result of the selected frame (depending on whether "Use LMMSE" is selected), or the median of all four frames if "Use median" is selected.
-!TP_RAW_PIXELSHIFTSTDDEVFACTORBLUE;StdDev factor Blue
-!TP_RAW_PIXELSHIFTSTDDEVFACTORGREEN;StdDev factor Green
-!TP_RAW_PIXELSHIFTSTDDEVFACTORRED;StdDev factor Red
!TP_RAW_RCD;RCD
!TP_RAW_SENSOR_BAYER_LABEL;Sensor with Bayer Matrix
!TP_RAW_SENSOR_XTRANS_DMETHOD_TOOLTIP;3-pass gives best results (recommended for low ISO images).\n1-pass is almost undistinguishable from 3-pass for high ISO images and is faster.
@@ -2123,7 +2105,7 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: -
!TP_WAVELET_EDGESENSI;Edge sensitivity
!TP_WAVELET_EDGREINF_TOOLTIP;Reinforce or reduce the action of the first level, do the opposite to the second level, and leave the rest unchanged.
!TP_WAVELET_EDGTHRESH;Detail
-!TP_WAVELET_EDGTHRESH_TOOLTIP;Change the repartition between the first levels and the others. The higher the threshold the more the action is centred on the first levels. Be careful with negative values, they increase the action of high levels and can introduce artifacts.
+!TP_WAVELET_EDGTHRESH_TOOLTIP;Change the repartition between the first levels and the others. The higher the threshold the more the action is centered on the first levels. Be careful with negative values, they increase the action of high levels and can introduce artifacts.
!TP_WAVELET_EDRAD;Radius
!TP_WAVELET_EDRAD_TOOLTIP;This radius adjustment is very different from those in other sharpening tools. Its value is compared to each level through a complex function. In this sense, a value of zero still has an effect.
!TP_WAVELET_EDSL;Threshold Sliders
diff --git a/rtdata/languages/Chinese (Traditional) b/rtdata/languages/Chinese (Traditional)
index a99e52675..65e4f047a 100644
--- a/rtdata/languages/Chinese (Traditional)
+++ b/rtdata/languages/Chinese (Traditional)
@@ -466,6 +466,7 @@ TP_WBALANCE_TEMPERATURE;色溫
!EDIT_PIPETTE_TOOLTIP;To add an adjustment point to the curve, hold the Ctrl key while left-clicking the desired spot in the image preview.\nTo adjust the point, hold the Ctrl key while left-clicking the corresponding area in the preview, then let go of Ctrl (unless you desire fine control) and while still holding the left mouse button move the mouse up or down to move that point up or down in the curve.
!EXIFFILTER_EXPOSURECOMPENSATION;Exposure compensation (EV)
!EXIFFILTER_FILETYPE;File type
+!EXIFFILTER_IMAGETYPE;Image type
!EXIFFILTER_METADATAFILTER;Enable metadata filters
!EXIFPANEL_SHOWALL;Show all
!EXPORT_BYPASS;Processing steps to bypass
@@ -979,7 +980,7 @@ TP_WBALANCE_TEMPERATURE;色溫
!HISTORY_MSG_491;White Balance
!HISTORY_MSG_492;RGB Curves
!HISTORY_MSG_493;L*a*b* Adjustments
-!HISTORY_MSG_CLAMPOOG;Out-of-gamut colours clipping
+!HISTORY_MSG_CLAMPOOG;Out-of-gamut color clipping
!HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction
!HISTORY_MSG_HISTMATCHING;Auto-Matched Tone Curve
!HISTORY_MSG_LOCALCONTRAST_AMOUNT;Local Contrast - Amount
@@ -1623,7 +1624,7 @@ TP_WBALANCE_TEMPERATURE;色溫
!TP_EPD_STRENGTH;Strength
!TP_EPD_TOOLTIP;Tone mapping is possible in L*a*b* mode (standard) and CIECAM02 mode.\n\nWhen in L*a*b* mode, tone mapping can also be used on the residual image of the Wavelet Levels tool.\n\nTo engage CIECAM02 tone mapping mode enable the following settings:\n1. CIECAM02\n2. Algorithm="Brightness + Colorfulness (QM)"\n3. "Tone mapping using CIECAM02 brightness (Q)"
!TP_EXPOSURE_AUTOLEVELS_TIP;Toggles execution of Auto Levels to automatically set Exposure slider values based on an image analysis.\nEnables Highlight Reconstruction if necessary.
-!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colours
+!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colors
!TP_EXPOSURE_CLIP_TIP;The fraction of pixels to be clipped in Auto Levels operation.
!TP_EXPOSURE_COMPRHIGHLIGHTSTHRESHOLD;Highlight compression threshold
!TP_EXPOSURE_CURVEEDITOR1;Tone curve 1
@@ -1835,53 +1836,34 @@ TP_WBALANCE_TEMPERATURE;色溫
!TP_RAW_MONO;Mono
!TP_RAW_NONE;None (Shows sensor pattern)
!TP_RAW_PIXELSHIFT;Pixel Shift
-!TP_RAW_PIXELSHIFTADAPTIVE;Adaptive detection
!TP_RAW_PIXELSHIFTBLUR;Blur motion mask
-!TP_RAW_PIXELSHIFTEPERISO;ISO adaption
-!TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;The default value of 0 should work fine for base ISO.\nIncrease the value to improve motion detection for higher ISO.\nIncrease in small steps and watch the motion mask while increasing.
+!TP_RAW_PIXELSHIFTEPERISO;Sensitivity
+!TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;The default value of 0 should work fine for base ISO.\nHigher values increase sensitivity of motion detection.\nChange in small steps and watch the motion mask while changing.\nIncrease sensitivity for underexposed or high ISO images.
!TP_RAW_PIXELSHIFTEQUALBRIGHT;Equalize brightness of frames
!TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL;Equalize per channel
!TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL_TOOLTIP;Enabled: Equalize the RGB channels individually.\nDisabled: Use same equalization factor for all channels.
-!TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;Equalize the brightness of the frames to the brightness of the selected frame.\nIf there are overexposed areas in the frames select the brightest frame to avoid magenta colour cast in overexposed areas or enable motion correction.
-!TP_RAW_PIXELSHIFTEXP0;Experimental
+!TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;Equalize the brightness of the frames to the brightness of the selected frame.\nIf there are overexposed areas in the frames select the brightest frame to avoid magenta color cast in overexposed areas or enable motion correction.
!TP_RAW_PIXELSHIFTGREEN;Check green channel for motion
!TP_RAW_PIXELSHIFTHOLEFILL;Fill holes in motion mask
!TP_RAW_PIXELSHIFTHOLEFILL_TOOLTIP;Fill holes in motion mask
!TP_RAW_PIXELSHIFTLMMSE;Use LMMSE for moving parts
!TP_RAW_PIXELSHIFTLMMSE_TOOLTIP;Use LMMSE instead of AMaZE for areas of motion.\nUseful for high ISO images.
-!TP_RAW_PIXELSHIFTMASKTHRESHOLD;3x3 new threshold
!TP_RAW_PIXELSHIFTMEDIAN;Use median for moving parts
-!TP_RAW_PIXELSHIFTMEDIAN3;Exclude selected frame from median
-!TP_RAW_PIXELSHIFTMEDIAN3_TOOLTIP;Excludes selected frame from median.\nUseful if moving objects overlap in frame 2 and 3
!TP_RAW_PIXELSHIFTMEDIAN_TOOLTIP;Use median of all frames instead of selected frame for regions with motion.\nRemoves objects which are at different places in all frames.\nGives motion effect on slow moving (overlapping) objects.
!TP_RAW_PIXELSHIFTMM_AUTO;Automatic
!TP_RAW_PIXELSHIFTMM_CUSTOM;Custom
!TP_RAW_PIXELSHIFTMM_OFF;Off
-!TP_RAW_PIXELSHIFTMOTION;Motion detection level (deprecated)
-!TP_RAW_PIXELSHIFTMOTIONCORRECTION;Green motion correction size
!TP_RAW_PIXELSHIFTMOTIONMETHOD;Motion Correction
!TP_RAW_PIXELSHIFTMOTION_TOOLTIP;0 means no motion detection.\n1 - 99 means motion will be detected according to this value. Increase value to increase detection rate.\n100 means the AMaZE-demosaiced frame will be used.
-!TP_RAW_PIXELSHIFTNONGREENAMAZE;Check red/blue AMaZE
!TP_RAW_PIXELSHIFTNONGREENCROSS;Check red/blue channels for motion
-!TP_RAW_PIXELSHIFTNONGREENCROSS2;Check green AMaZE
-!TP_RAW_PIXELSHIFTNONGREENHORIZONTAL;Check red/blue horizontal
-!TP_RAW_PIXELSHIFTNONGREENVERTICAL;Check red/blue vertical
-!TP_RAW_PIXELSHIFTNREADISO;nRead
-!TP_RAW_PIXELSHIFTONEGREEN;Use one green instead of average
-!TP_RAW_PIXELSHIFTONEGREEN_TOOLTIP;Use one green instead of averaging two greens for regions without motion.
-!TP_RAW_PIXELSHIFTPRNU;PRNU (%)
-!TP_RAW_PIXELSHIFTREDBLUEWEIGHT;Red&Blue weight
!TP_RAW_PIXELSHIFTSHOWMOTION;Show motion mask
!TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY;Show only motion mask
!TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY_TOOLTIP;Shows the motion mask without the image.
-!TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Overlays the image with a mask showing the regions with motion.
+!TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Overlays the image with a green mask showing the regions with motion.
!TP_RAW_PIXELSHIFTSIGMA;Blur radius
!TP_RAW_PIXELSHIFTSIGMA_TOOLTIP;The default radius of 1.0 usually fits well for base ISO.\nIncrease the value for high ISO shots, 5.0 is a good starting point.\nWatch the motion mask while changing the value.
!TP_RAW_PIXELSHIFTSMOOTH;Smooth transitions
!TP_RAW_PIXELSHIFTSMOOTH_TOOLTIP;Smooth transitions between areas with motion and areas without.\nSet to 0 to disable transition smoothing.\nSet to 1 to either get the AMaZE/LMMSE result of the selected frame (depending on whether "Use LMMSE" is selected), or the median of all four frames if "Use median" is selected.
-!TP_RAW_PIXELSHIFTSTDDEVFACTORBLUE;StdDev factor Blue
-!TP_RAW_PIXELSHIFTSTDDEVFACTORGREEN;StdDev factor Green
-!TP_RAW_PIXELSHIFTSTDDEVFACTORRED;StdDev factor Red
!TP_RAW_RCD;RCD
!TP_RAW_SENSOR_BAYER_LABEL;Sensor with Bayer Matrix
!TP_RAW_SENSOR_XTRANS_DMETHOD_TOOLTIP;3-pass gives best results (recommended for low ISO images).\n1-pass is almost undistinguishable from 3-pass for high ISO images and is faster.
@@ -2093,7 +2075,7 @@ TP_WBALANCE_TEMPERATURE;色溫
!TP_WAVELET_EDGESENSI;Edge sensitivity
!TP_WAVELET_EDGREINF_TOOLTIP;Reinforce or reduce the action of the first level, do the opposite to the second level, and leave the rest unchanged.
!TP_WAVELET_EDGTHRESH;Detail
-!TP_WAVELET_EDGTHRESH_TOOLTIP;Change the repartition between the first levels and the others. The higher the threshold the more the action is centred on the first levels. Be careful with negative values, they increase the action of high levels and can introduce artifacts.
+!TP_WAVELET_EDGTHRESH_TOOLTIP;Change the repartition between the first levels and the others. The higher the threshold the more the action is centered on the first levels. Be careful with negative values, they increase the action of high levels and can introduce artifacts.
!TP_WAVELET_EDRAD;Radius
!TP_WAVELET_EDRAD_TOOLTIP;This radius adjustment is very different from those in other sharpening tools. Its value is compared to each level through a complex function. In this sense, a value of zero still has an effect.
!TP_WAVELET_EDSL;Threshold Sliders
diff --git a/rtdata/languages/Czech b/rtdata/languages/Czech
index dff255aa1..a84a0f0e8 100644
--- a/rtdata/languages/Czech
+++ b/rtdata/languages/Czech
@@ -40,7 +40,7 @@
#39 2017-07-21 updated by mkyral
#40 2017-12-13 updated by mkyral
#41 2018-03-03 updated by mkyral
-
+#42 2018-04-28 updated by mkyral
ABOUT_TAB_BUILD;Verze
ABOUT_TAB_CREDITS;Zásluhy
ABOUT_TAB_LICENSE;Licence
@@ -95,6 +95,7 @@ EXIFFILTER_CAMERA;Fotoaparát
EXIFFILTER_EXPOSURECOMPENSATION;Kompenzace expozice (EV)
EXIFFILTER_FILETYPE;Typ souboru
EXIFFILTER_FOCALLEN;Ohnisková vzdálenost
+EXIFFILTER_IMAGETYPE;Typ obrázku
EXIFFILTER_ISO;ISO
EXIFFILTER_LENS;Objektiv
EXIFFILTER_METADATAFILTER;Povolit filtr metadat
@@ -572,8 +573,8 @@ HISTORY_MSG_284;Barevné tónování - Aut. ochrana nasycení
HISTORY_MSG_285;Redukce šumu - Medián - Metoda
HISTORY_MSG_286;Redukce šumu - Medián - Typ
HISTORY_MSG_287;Redukce šumu - Medián - Průchody
-HISTORY_MSG_288;Flat Field - kontrola oříznutí
-HISTORY_MSG_289;Flat Field - kontrola oříznutí - Auto
+HISTORY_MSG_288;Flat-Field - kontrola oříznutí
+HISTORY_MSG_289;Flat-Field - kontrola oříznutí - Auto
HISTORY_MSG_290;Úroveň černé - Červená
HISTORY_MSG_291;Úroveň černé - Zelená 1
HISTORY_MSG_292;Úroveň černé - Modrá
@@ -762,14 +763,17 @@ HISTORY_MSG_490;HDR TM - Míra
HISTORY_MSG_491;Vyvážení bílé
HISTORY_MSG_492;RGB křivky
HISTORY_MSG_493;L*a*b* úpravy
+HISTORY_MSG_CLAMPOOG;Oříznutí barvy mimo gamut
HISTORY_MSG_COLORTONING_LABGRID_VALUE;Barevné tónování - Korekce barev
-HISTORY_MSG_HISTMATCHING;Automaticky nalezená Tónová křivka
+HISTORY_MSG_HISTMATCHING;Automaticky přizpůsobená Tónová křivka
HISTORY_MSG_LOCALCONTRAST_AMOUNT;Místní kontrast - Míra
HISTORY_MSG_LOCALCONTRAST_DARKNESS;Místní kontrast - Tmavé
HISTORY_MSG_LOCALCONTRAST_ENABLED;Místní kontrast
HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Místní kontrast - Světlé
HISTORY_MSG_LOCALCONTRAST_RADIUS;Místní kontrast - Poloměr
HISTORY_MSG_METADATA_MODE;Režim kopírování metadat
+HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Směr filtru linkového rušení
+HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;Filtr PDAF linek
HISTORY_MSG_TM_FATTAL_ANCHOR;HDR TM - Kotva
HISTORY_NEWSNAPSHOT;Přidat
HISTORY_NEWSNAPSHOT_TOOLTIP;Zkratka: Alt-s
@@ -862,13 +866,13 @@ MAIN_TAB_COLOR;Barvy
MAIN_TAB_COLOR_TOOLTIP;Zkratka: Alt-c
MAIN_TAB_DETAIL;Detaily
MAIN_TAB_DETAIL_TOOLTIP;Zkratka: Alt-d
-MAIN_TAB_DEVELOP; Dávková editace
+MAIN_TAB_DEVELOP; Dávková editace
MAIN_TAB_EXIF;Exif
-MAIN_TAB_EXPORT; Rychlý export
+MAIN_TAB_EXPORT; Rychlý export
MAIN_TAB_EXPOSURE;Expozice
MAIN_TAB_EXPOSURE_TOOLTIP;Zkratka: Alt-e
-MAIN_TAB_FILTER; Filtr
-MAIN_TAB_INSPECT; Prohlížení
+MAIN_TAB_FILTER; Filtr
+MAIN_TAB_INSPECT; Prohlížení
MAIN_TAB_IPTC;IPTC
MAIN_TAB_METADATA;Metadata
MAIN_TAB_METADATA_TOOLTIP;Zkratka: Alt-m
@@ -1008,10 +1012,6 @@ PREFERENCES_CACHECLEARTHUMBS;Vymazat náhledy
PREFERENCES_CACHEMAXENTRIES;Maximální počet záznamů v mezipaměti
PREFERENCES_CACHEOPTS;Vlastnosti mezipaměti
PREFERENCES_CACHETHUMBHEIGHT;Maximální výška náhledu
-PREFERENCES_CIEART;CIECAM02 optimalizace
-PREFERENCES_CIEART_FRAME;CIECAM02 - Specifická nastavení
-PREFERENCES_CIEART_LABEL;Použít jednoduchou přesnost místo dvojnásobné
-PREFERENCES_CIEART_TOOLTIP;Pokud je povoleno, budou pro CIECAM02 výpočty použita reálná čísla s jednoduchou přesností místo čísel s dvojnásobnou přesností. Tím se dosáhne mírného zrychlení výpočtů za cenu nepatrné ztráty kvality.
PREFERENCES_CLIPPINGIND;Indikace oříznutí
PREFERENCES_CLUTSCACHE;Mezipaměť HaldCLUT
PREFERENCES_CLUTSCACHE_LABEL;Maximální počet přednačtených CLUTů
@@ -1194,6 +1194,10 @@ PREFERENCES_TAB_IMPROC;Zpracování obrázku
PREFERENCES_TAB_PERFORMANCE;Výkon a kvalita
PREFERENCES_TAB_SOUND;Zvuky
PREFERENCES_THEME;Vzhled
+PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Vložený JPEG náhled
+PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Obrázek k zobrazení
+PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutrální vykreslení raw
+PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Vložený JPEG náhled pokud je v plné velikosti, jinak neutrální raw
PREFERENCES_TIMAX;Vysoký
PREFERENCES_TINB;Počet dlaždic
PREFERENCES_TISTD;Běžný
@@ -1363,7 +1367,7 @@ TP_COLORAPP_ADAPTSCENE;Absolutní jas scény
TP_COLORAPP_ADAPTSCENE_TOOLTIP;Absolutní jas scény prostředí (cd/m²).\n 1) Vypočítáno z Exifu:\nRychlost závěrky - citlivost - clona - expoziční korekce fotoaparátu.\n 2) Vypočítáno z hodnoty raw bílého bodu a expoziční kompenzace Rawtherapee.
TP_COLORAPP_ADAPTVIEWING;Absolutní jas prohlížení (cd/m²)
TP_COLORAPP_ADAPTVIEWING_TOOLTIP;Absolutní jas prostředí prohlížení\n(obvykle 16cd/m²).
-TP_COLORAPP_ADAP_AUTO_TOOLTIP;Pokud je povoleno (doporučeno), RawTherapee vypočítá optimální hodnotu z Exif dat.\nPokud si přejete zadat hodnotu ručně, nejprve zrušte zatržení tohoto pole.
+TP_COLORAPP_ADAP_AUTO_TOOLTIP;Pokud je povoleno (doporučeno), RawTherapee vypočítá optimální hodnotu z Exif dat.\nPokud si přejete zadat hodnotu ručně, nejprve zrušte zatržení tohoto pole.
TP_COLORAPP_ALGO;Algoritmus
TP_COLORAPP_ALGO_ALL;Vše
TP_COLORAPP_ALGO_JC;Světlost + Barevnost (JC)
@@ -1371,7 +1375,7 @@ TP_COLORAPP_ALGO_JS;Světlost + Nasycení (JS)
TP_COLORAPP_ALGO_QM;Jas a pestrobarevnost (QM)
TP_COLORAPP_ALGO_TOOLTIP;Umožňuje vybrat mezi podmnožinou nebo všemi parametry.
TP_COLORAPP_BADPIXSL;Filtr vypálených/mrtvých pixelů
-TP_COLORAPP_BADPIXSL_TOOLTIP;Potlačení vypálených/mrtvých (jasně zabarvených) pixelů.\n0 = Bez efektu\n1 = Medián\n2 = Gaussův.\nPopřípadě obrázek upravte tak, aby jste se vyhnuli velmi tmavým stínům.\n\nTyto artefakty vznikají díky omezením CIECAM02.
+TP_COLORAPP_BADPIXSL_TOOLTIP;Potlačení vypálených/mrtvých (jasně zabarvených) pixelů.\n0 = Bez efektu\n1 = Medián\n2 = Gaussův.\nPopřípadě obrázek upravte tak, aby jste se vyhnuli velmi tmavým stínům.\n\nTyto artefakty vznikají díky omezením CIECAM02.
TP_COLORAPP_BRIGHT;Jas (O)
TP_COLORAPP_BRIGHT_TOOLTIP;Jas v CIECAM02 bere v potaz svítivost bílé a rozdíly jasů mezi L*a*b* a RGB.
TP_COLORAPP_CHROMA;Barevnost (C)
@@ -1437,7 +1441,7 @@ TP_COLORAPP_WBCAM;WB [RT+CAT02] + [výstup]
TP_COLORAPP_WBRT;WB [RT] + [výstup]
TP_COLORAPP_YB;Yb% (střední jas)
TP_COLORAPP_YBSCENE;Yb% (střední jas)
-TP_COLORAPP_YBSCENE_TOOLTIP;Pokud je povolena automatika, Yb je vypočteno ze střední hodnoty jasu aktuálního obrázku
+TP_COLORAPP_YBSCENE_TOOLTIP;Pokud je povolena automatika, Yb je vypočteno ze střední hodnoty jasu aktuálního obrázku
TP_COLORTONING_AB;o C/L
TP_COLORTONING_AUTOSAT;Automaticky
TP_COLORTONING_BALANCE;Vyvážené
@@ -1585,6 +1589,7 @@ TP_EXPOSURE_AUTOLEVELS;Automatické úrovně
TP_EXPOSURE_AUTOLEVELS_TIP;Přepne provedení Automatické úrovně na automatickou sadu hodnot parametrů založených na analýze obrázku\nPokud to je nezbytné, povolí rekonstrukci světel.
TP_EXPOSURE_BLACKLEVEL;Černá
TP_EXPOSURE_BRIGHTNESS;Světlost
+TP_EXPOSURE_CLAMPOOG;Oříznout barvy mimo gamut
TP_EXPOSURE_CLIP;Oříznutí %
TP_EXPOSURE_CLIP_TIP;Podíl klipujících bodů v automatických operacích úrovní.
TP_EXPOSURE_COMPRHIGHLIGHTS;Komprese světel
@@ -1595,7 +1600,7 @@ TP_EXPOSURE_CURVEEDITOR1;Tónová křivka 1
TP_EXPOSURE_CURVEEDITOR2;Tónová křivka 2
TP_EXPOSURE_CURVEEDITOR2_TOOLTIP;Podívejte se prosím na článek "Exposure > Tone Curves" na RawPedii, kde se můžete naučit. jak pomocí dvou tónových křivek dosáhnout ten nejlepší výsledek.
TP_EXPOSURE_EXPCOMP;Kompenzace expozice
-TP_EXPOSURE_HISTMATCHING;Automaticky nalezená Tónová křivka
+TP_EXPOSURE_HISTMATCHING;Automaticky přizpůsobená Tónová křivka
TP_EXPOSURE_HISTMATCHING_TOOLTIP;Automatické nastavení posuvníků a křivek (kromě kompenzace expozice) tak, aby bylo dosaženo co největší shody s vloženým Jpeg náhledem.
TP_EXPOSURE_LABEL;Expozice
TP_EXPOSURE_SATURATION;Nasycení
@@ -1763,7 +1768,14 @@ TP_PREPROCESS_HOTPIXFILT;Filtr vypálených pixelů
TP_PREPROCESS_HOTPIXFILT_TOOLTIP;Zkusí potlačit vypálené pixely.
TP_PREPROCESS_LABEL;Předzpracování
TP_PREPROCESS_LINEDENOISE;Filtrovat linkové rušení
+TP_PREPROCESS_LINEDENOISE_DIRECTION;Směr
+TP_PREPROCESS_LINEDENOISE_DIRECTION_BOTH;Oba
+TP_PREPROCESS_LINEDENOISE_DIRECTION_HORIZONTAL;Vodorovně
+TP_PREPROCESS_LINEDENOISE_DIRECTION_PDAF_LINES;Vodorovně pouze PDAF řádky
+TP_PREPROCESS_LINEDENOISE_DIRECTION_VERTICAL;Svisle
TP_PREPROCESS_NO_FOUND;Nic nenalezeno
+TP_PREPROCESS_PDAFLINESFILTER;Filtr PDAF linek
+TP_PREPROCESS_PDAFLINESFILTER_TOOLTIP;Pokusí se potlačit proužkový šum způsobený PDAF pixely na sensoru, vznikající na některých bezzrcadlovkách Sony v některých scénách se záblesky v protisvětle.
TP_PRSHARPENING_LABEL;Doostření po změně velikosti
TP_PRSHARPENING_TOOLTIP;Obrázek po zmenšení doostří. Funguje pouze pokud je použita "Lanczos" metoda zmenšení. Náhled výsledku není v tomto nástroji možný. Podívejte se do RawPedie pro návod k použití.
TP_RAWCACORR_AUTO;Automatická korekce
@@ -1809,53 +1821,34 @@ TP_RAW_LMMSE_TOOLTIP;Přidá gamu (krok 1) - přidá mediány (kroky 2, až 4) a
TP_RAW_MONO;Mono
TP_RAW_NONE;Žádná (zobrazí strukturu senzoru)
TP_RAW_PIXELSHIFT;Pixel Shift
-TP_RAW_PIXELSHIFTADAPTIVE;Přizpůsobivá detekce
TP_RAW_PIXELSHIFTBLUR;Maska pohybové neostrosti
-TP_RAW_PIXELSHIFTEPERISO;Přizpůsobení ISO
-TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;Výchozí hodnota 0 by měla dostačovat pro základní hodnoty ISO.\nDetekci pohybu na vyšších hodnotách ISO vylepšíte navýšením této hodnoty.\nZvyšujte po malých krocích a sledujte přitom masku pohybu.
+TP_RAW_PIXELSHIFTEPERISO;Citlivost
+TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;Výchozí hodnota 0 by měla dostatečně fungovat pro základní hodnoty ISO.\nDetekci pohybu na vyšších hodnotách ISO vylepšíte navýšením této hodnoty.\nZvyšujte po malých krocích a sledujte přitom masku pohybu.\nPro podexponované nebo obrázky s vysokým ISO zvyšte citlivost.
TP_RAW_PIXELSHIFTEQUALBRIGHT;Vyrovnat jas snímků
TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL;Korekce po kanálech
TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL_TOOLTIP;Zapnuto: Nezávislá korekce jednotlivých RGB kanálů.\nVypnuto: Použije se stejná hodnota pro všechny kanály.
TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;Vyrovná jas ostatních snímků podle jasu vybraného snímku.\nPokud jsou ve snímku přeexponované oblasti, vyberte jasnější snímek abyste zamezili výskytu purpurové barvy v přeexponovaných oblastech nebo povolte korekci pohybu.
-TP_RAW_PIXELSHIFTEXP0;Testovací
TP_RAW_PIXELSHIFTGREEN;Kontrolovat zelený kanál na pohyb
TP_RAW_PIXELSHIFTHOLEFILL;Vyplnit díry v masce pohybu
TP_RAW_PIXELSHIFTHOLEFILL_TOOLTIP;Vyplnit díry v masce pohybu
TP_RAW_PIXELSHIFTLMMSE;Použít LMMSE pro části s pohybem
TP_RAW_PIXELSHIFTLMMSE_TOOLTIP;Pro oblasti s pohybem použít LMMSE namísto AMaZE.\nUžitečné pro fotografie s vysokým ISO.
-TP_RAW_PIXELSHIFTMASKTHRESHOLD;3x3 nový práh
TP_RAW_PIXELSHIFTMEDIAN;Použít medián pro části s pohybem
-TP_RAW_PIXELSHIFTMEDIAN3;Vyjmout vybraný snímek z mediánu
-TP_RAW_PIXELSHIFTMEDIAN3_TOOLTIP;Vyjme vybraný snímek z mediánu.\nUžitečné, pokud se pohybující se objekty překrývají jen ve druhém a třetím.
TP_RAW_PIXELSHIFTMEDIAN_TOOLTIP;Pro oblasti s pohybem použijte medián všech snímků namísto vybraného.\nOdstraní objekty, které jsou na všech snímcích na různých místech.\nVytvoří efekt pohybu pro pomalu se pohybující (překrývající se) objekty.
TP_RAW_PIXELSHIFTMM_AUTO;Automatická
TP_RAW_PIXELSHIFTMM_CUSTOM;Vlastní
TP_RAW_PIXELSHIFTMM_OFF;Vypnuto
-TP_RAW_PIXELSHIFTMOTION;Úroveň kontroly pohybu (zastaralé)
-TP_RAW_PIXELSHIFTMOTIONCORRECTION;Míra korekce pohybu v zelené
TP_RAW_PIXELSHIFTMOTIONMETHOD;Korekce pohybu
TP_RAW_PIXELSHIFTMOTION_TOOLTIP;0 znamená bez detekce pohybu.\n1 - 99 znamená, že pohybu bude detekován dle této hodnoty. Pro zvýšení míry detekce použijte vyšší hodnotu.\n100 znamená, že bude použito AMaZE demozajkování snímku.
-TP_RAW_PIXELSHIFTNONGREENAMAZE;Kontrolovat červené/modré AMaZE
TP_RAW_PIXELSHIFTNONGREENCROSS;Kontrolovat pohyb v červeném a modrém kanálu
-TP_RAW_PIXELSHIFTNONGREENCROSS2;Kontrolovat zelené AMaZE
-TP_RAW_PIXELSHIFTNONGREENHORIZONTAL;Kontrolovat červenou/modrou vodorovně
-TP_RAW_PIXELSHIFTNONGREENVERTICAL;Kontrolovat červenou/modrou svisle
-TP_RAW_PIXELSHIFTNREADISO;nRead
-TP_RAW_PIXELSHIFTONEGREEN;Použít jednu zelenou místo průměru
-TP_RAW_PIXELSHIFTONEGREEN_TOOLTIP;V oblastech bez pohybu použije jednu zelenou namísto zprůměrování obou zelených.
-TP_RAW_PIXELSHIFTPRNU;PRNU (%)
-TP_RAW_PIXELSHIFTREDBLUEWEIGHT;Váha červené a modré
TP_RAW_PIXELSHIFTSHOWMOTION;Ukázat masku pohybu
TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY;Ukázat pouze masku pohybu
TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY_TOOLTIP;Ukázat masku pohybu bez obrázku.
-TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Překryje obrázek maskou, která ukazuje oblasti s pohybem.
+TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Překryje obrázek zelenou maskou, která ukazuje oblasti s pohybem.
TP_RAW_PIXELSHIFTSIGMA;Poloměr rozostření
TP_RAW_PIXELSHIFTSIGMA_TOOLTIP;Výchozí poloměr 1,0 většinou velmi dobře funguje pro základní ISO.\nU snímků s vysokým ISO poloměr zvětšete. Hodnota 5,0 je dobrým výchozím bodem.\nBěhem změny hodnoty sledujte masku pohybu.
TP_RAW_PIXELSHIFTSMOOTH;Hladké přechody
TP_RAW_PIXELSHIFTSMOOTH_TOOLTIP;Vyhlazení přechodů mezi oblastmi s pohybem a bez pohybu.\nNastavte na 0 pro vypnutí vyhlazování přechodů.\nNastavte na 1 pro získání AMaZE/LMMSE výsledku pro vybraný snímek (závisí na tom, zda je vybrána volba "Použít LMMSE") nebo mediánu všech čtyř snímků (pokud je vybrána volba "Použít medián").
-TP_RAW_PIXELSHIFTSTDDEVFACTORBLUE;StdDev faktor modrý
-TP_RAW_PIXELSHIFTSTDDEVFACTORGREEN;StdDev faktor zelený
-TP_RAW_PIXELSHIFTSTDDEVFACTORRED;StdDev faktor červený
TP_RAW_RCD;RCD
TP_RAW_SENSOR_BAYER_LABEL;Snímač s Bayerovou maskou
TP_RAW_SENSOR_XTRANS_DMETHOD_TOOLTIP;Tří průchodová dává lepší výsledky (doporučeno pro fotky s nízkým ISO).\nJednoprůchodová je téměř k nerozeznání od tří průchodové pro vysoké ISO a je rychlejší.
@@ -2243,23 +2236,3 @@ ZOOMPANEL_ZOOMFITCROPSCREEN;Přizpůsobit ořez obrazovce\nZkratka: f
ZOOMPANEL_ZOOMFITSCREEN;Přizpůsobit celý obrázek obrazovce\nZkratka: Alt-f
ZOOMPANEL_ZOOMIN;Přiblížit\nZkratka: +
ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: -
-
-!!!!!!!!!!!!!!!!!!!!!!!!!
-! Untranslated keys follow; remove the ! prefix after an entry is translated.
-!!!!!!!!!!!!!!!!!!!!!!!!!
-
-!HISTORY_MSG_CLAMPOOG;Out-of-gamut colours clipping
-!HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction
-!HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
-!PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview
-!PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show
-!PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering
-!PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise
-!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colours
-!TP_PREPROCESS_LINEDENOISE_DIRECTION;Direction
-!TP_PREPROCESS_LINEDENOISE_DIRECTION_BOTH;Both
-!TP_PREPROCESS_LINEDENOISE_DIRECTION_HORIZONTAL;Horizontal
-!TP_PREPROCESS_LINEDENOISE_DIRECTION_PDAF_LINES;Horizontal only on PDAF rows
-!TP_PREPROCESS_LINEDENOISE_DIRECTION_VERTICAL;Vertical
-!TP_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
-!TP_PREPROCESS_PDAFLINESFILTER_TOOLTIP;Tries to suppress stripe noise caused by on-sensor PDAF pixels, occurring with some Sony mirrorless cameras on some backlit scenes with visible flare.
diff --git a/rtdata/languages/Dansk b/rtdata/languages/Dansk
index 5fe1f6e6e..052e105b4 100644
--- a/rtdata/languages/Dansk
+++ b/rtdata/languages/Dansk
@@ -459,6 +459,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!EDIT_PIPETTE_TOOLTIP;To add an adjustment point to the curve, hold the Ctrl key while left-clicking the desired spot in the image preview.\nTo adjust the point, hold the Ctrl key while left-clicking the corresponding area in the preview, then let go of Ctrl (unless you desire fine control) and while still holding the left mouse button move the mouse up or down to move that point up or down in the curve.
!EXIFFILTER_EXPOSURECOMPENSATION;Exposure compensation (EV)
!EXIFFILTER_FILETYPE;File type
+!EXIFFILTER_IMAGETYPE;Image type
!EXIFFILTER_METADATAFILTER;Enable metadata filters
!EXIFPANEL_SHOWALL;Show all
!EXPORT_BYPASS;Processing steps to bypass
@@ -975,7 +976,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!HISTORY_MSG_491;White Balance
!HISTORY_MSG_492;RGB Curves
!HISTORY_MSG_493;L*a*b* Adjustments
-!HISTORY_MSG_CLAMPOOG;Out-of-gamut colours clipping
+!HISTORY_MSG_CLAMPOOG;Out-of-gamut color clipping
!HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction
!HISTORY_MSG_HISTMATCHING;Auto-Matched Tone Curve
!HISTORY_MSG_LOCALCONTRAST_AMOUNT;Local Contrast - Amount
@@ -1621,7 +1622,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!TP_EPD_STRENGTH;Strength
!TP_EPD_TOOLTIP;Tone mapping is possible in L*a*b* mode (standard) and CIECAM02 mode.\n\nWhen in L*a*b* mode, tone mapping can also be used on the residual image of the Wavelet Levels tool.\n\nTo engage CIECAM02 tone mapping mode enable the following settings:\n1. CIECAM02\n2. Algorithm="Brightness + Colorfulness (QM)"\n3. "Tone mapping using CIECAM02 brightness (Q)"
!TP_EXPOSURE_AUTOLEVELS_TIP;Toggles execution of Auto Levels to automatically set Exposure slider values based on an image analysis.\nEnables Highlight Reconstruction if necessary.
-!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colours
+!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colors
!TP_EXPOSURE_CLIP_TIP;The fraction of pixels to be clipped in Auto Levels operation.
!TP_EXPOSURE_COMPRHIGHLIGHTSTHRESHOLD;Highlight compression threshold
!TP_EXPOSURE_CURVEEDITOR1;Tone curve 1
@@ -1831,53 +1832,34 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!TP_RAW_MONO;Mono
!TP_RAW_NONE;None (Shows sensor pattern)
!TP_RAW_PIXELSHIFT;Pixel Shift
-!TP_RAW_PIXELSHIFTADAPTIVE;Adaptive detection
!TP_RAW_PIXELSHIFTBLUR;Blur motion mask
-!TP_RAW_PIXELSHIFTEPERISO;ISO adaption
-!TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;The default value of 0 should work fine for base ISO.\nIncrease the value to improve motion detection for higher ISO.\nIncrease in small steps and watch the motion mask while increasing.
+!TP_RAW_PIXELSHIFTEPERISO;Sensitivity
+!TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;The default value of 0 should work fine for base ISO.\nHigher values increase sensitivity of motion detection.\nChange in small steps and watch the motion mask while changing.\nIncrease sensitivity for underexposed or high ISO images.
!TP_RAW_PIXELSHIFTEQUALBRIGHT;Equalize brightness of frames
!TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL;Equalize per channel
!TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL_TOOLTIP;Enabled: Equalize the RGB channels individually.\nDisabled: Use same equalization factor for all channels.
-!TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;Equalize the brightness of the frames to the brightness of the selected frame.\nIf there are overexposed areas in the frames select the brightest frame to avoid magenta colour cast in overexposed areas or enable motion correction.
-!TP_RAW_PIXELSHIFTEXP0;Experimental
+!TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;Equalize the brightness of the frames to the brightness of the selected frame.\nIf there are overexposed areas in the frames select the brightest frame to avoid magenta color cast in overexposed areas or enable motion correction.
!TP_RAW_PIXELSHIFTGREEN;Check green channel for motion
!TP_RAW_PIXELSHIFTHOLEFILL;Fill holes in motion mask
!TP_RAW_PIXELSHIFTHOLEFILL_TOOLTIP;Fill holes in motion mask
!TP_RAW_PIXELSHIFTLMMSE;Use LMMSE for moving parts
!TP_RAW_PIXELSHIFTLMMSE_TOOLTIP;Use LMMSE instead of AMaZE for areas of motion.\nUseful for high ISO images.
-!TP_RAW_PIXELSHIFTMASKTHRESHOLD;3x3 new threshold
!TP_RAW_PIXELSHIFTMEDIAN;Use median for moving parts
-!TP_RAW_PIXELSHIFTMEDIAN3;Exclude selected frame from median
-!TP_RAW_PIXELSHIFTMEDIAN3_TOOLTIP;Excludes selected frame from median.\nUseful if moving objects overlap in frame 2 and 3
!TP_RAW_PIXELSHIFTMEDIAN_TOOLTIP;Use median of all frames instead of selected frame for regions with motion.\nRemoves objects which are at different places in all frames.\nGives motion effect on slow moving (overlapping) objects.
!TP_RAW_PIXELSHIFTMM_AUTO;Automatic
!TP_RAW_PIXELSHIFTMM_CUSTOM;Custom
!TP_RAW_PIXELSHIFTMM_OFF;Off
-!TP_RAW_PIXELSHIFTMOTION;Motion detection level (deprecated)
-!TP_RAW_PIXELSHIFTMOTIONCORRECTION;Green motion correction size
!TP_RAW_PIXELSHIFTMOTIONMETHOD;Motion Correction
!TP_RAW_PIXELSHIFTMOTION_TOOLTIP;0 means no motion detection.\n1 - 99 means motion will be detected according to this value. Increase value to increase detection rate.\n100 means the AMaZE-demosaiced frame will be used.
-!TP_RAW_PIXELSHIFTNONGREENAMAZE;Check red/blue AMaZE
!TP_RAW_PIXELSHIFTNONGREENCROSS;Check red/blue channels for motion
-!TP_RAW_PIXELSHIFTNONGREENCROSS2;Check green AMaZE
-!TP_RAW_PIXELSHIFTNONGREENHORIZONTAL;Check red/blue horizontal
-!TP_RAW_PIXELSHIFTNONGREENVERTICAL;Check red/blue vertical
-!TP_RAW_PIXELSHIFTNREADISO;nRead
-!TP_RAW_PIXELSHIFTONEGREEN;Use one green instead of average
-!TP_RAW_PIXELSHIFTONEGREEN_TOOLTIP;Use one green instead of averaging two greens for regions without motion.
-!TP_RAW_PIXELSHIFTPRNU;PRNU (%)
-!TP_RAW_PIXELSHIFTREDBLUEWEIGHT;Red&Blue weight
!TP_RAW_PIXELSHIFTSHOWMOTION;Show motion mask
!TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY;Show only motion mask
!TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY_TOOLTIP;Shows the motion mask without the image.
-!TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Overlays the image with a mask showing the regions with motion.
+!TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Overlays the image with a green mask showing the regions with motion.
!TP_RAW_PIXELSHIFTSIGMA;Blur radius
!TP_RAW_PIXELSHIFTSIGMA_TOOLTIP;The default radius of 1.0 usually fits well for base ISO.\nIncrease the value for high ISO shots, 5.0 is a good starting point.\nWatch the motion mask while changing the value.
!TP_RAW_PIXELSHIFTSMOOTH;Smooth transitions
!TP_RAW_PIXELSHIFTSMOOTH_TOOLTIP;Smooth transitions between areas with motion and areas without.\nSet to 0 to disable transition smoothing.\nSet to 1 to either get the AMaZE/LMMSE result of the selected frame (depending on whether "Use LMMSE" is selected), or the median of all four frames if "Use median" is selected.
-!TP_RAW_PIXELSHIFTSTDDEVFACTORBLUE;StdDev factor Blue
-!TP_RAW_PIXELSHIFTSTDDEVFACTORGREEN;StdDev factor Green
-!TP_RAW_PIXELSHIFTSTDDEVFACTORRED;StdDev factor Red
!TP_RAW_RCD;RCD
!TP_RAW_SENSOR_BAYER_LABEL;Sensor with Bayer Matrix
!TP_RAW_SENSOR_XTRANS_DMETHOD_TOOLTIP;3-pass gives best results (recommended for low ISO images).\n1-pass is almost undistinguishable from 3-pass for high ISO images and is faster.
@@ -2092,7 +2074,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!TP_WAVELET_EDGESENSI;Edge sensitivity
!TP_WAVELET_EDGREINF_TOOLTIP;Reinforce or reduce the action of the first level, do the opposite to the second level, and leave the rest unchanged.
!TP_WAVELET_EDGTHRESH;Detail
-!TP_WAVELET_EDGTHRESH_TOOLTIP;Change the repartition between the first levels and the others. The higher the threshold the more the action is centred on the first levels. Be careful with negative values, they increase the action of high levels and can introduce artifacts.
+!TP_WAVELET_EDGTHRESH_TOOLTIP;Change the repartition between the first levels and the others. The higher the threshold the more the action is centered on the first levels. Be careful with negative values, they increase the action of high levels and can introduce artifacts.
!TP_WAVELET_EDRAD;Radius
!TP_WAVELET_EDRAD_TOOLTIP;This radius adjustment is very different from those in other sharpening tools. Its value is compared to each level through a complex function. In this sense, a value of zero still has an effect.
!TP_WAVELET_EDSL;Threshold Sliders
diff --git a/rtdata/languages/Deutsch b/rtdata/languages/Deutsch
index 2c2ff878f..b823f4b13 100644
--- a/rtdata/languages/Deutsch
+++ b/rtdata/languages/Deutsch
@@ -54,6 +54,7 @@
#53 26.02.2018 Erweiterung (TooWaBoo) RT 5.3
#54 30.03.2018 Erweiterung (TooWaBoo) RT 5.4
#55 06.04.2018 Erweiterung (TooWaBoo) RT 5.4
+#56 27.04.2018 Erweiterung (TooWaBoo) RT 5.4
ABOUT_TAB_BUILD;Version
ABOUT_TAB_CREDITS;Danksagungen
@@ -776,7 +777,7 @@ HISTORY_MSG_490;(HDR-Dynamikkompression)\nIntensität
HISTORY_MSG_491;(Weißabgleich)
HISTORY_MSG_492;(RGB-Kurven)
HISTORY_MSG_493;(L*a*b*)
-HISTORY_MSG_CLAMPOOG;(Belichtung) - Farben\nauf den Farbraum\nbeschränken
+HISTORY_MSG_CLAMPOOG;(Belichtung) - Farben\nauf Farbraum beschränken
HISTORY_MSG_COLORTONING_LABGRID_VALUE;(Farbanpassungen)\nL*a*b* - Farbkorrektur
HISTORY_MSG_HISTMATCHING;(Belichtung)\nAuto-Tonwertkurve
HISTORY_MSG_LOCALCONTRAST_AMOUNT;(Lokaler Kontrast)\nIntensität
@@ -1611,7 +1612,7 @@ TP_EXPOSURE_AUTOLEVELS;Auto
TP_EXPOSURE_AUTOLEVELS_TIP;Automatische Belichtungseinstellung\nbasierend auf Bildanalyse.
TP_EXPOSURE_BLACKLEVEL;Schwarzwert
TP_EXPOSURE_BRIGHTNESS;Helligkeit
-TP_EXPOSURE_CLAMPOOG;Farben auf den Farbraum beschränken
+TP_EXPOSURE_CLAMPOOG;Farben auf Farbraum beschränken
TP_EXPOSURE_CLIP;Clip %:
TP_EXPOSURE_CLIP_TIP;Anteil der Pixel, die sich bei automatischer\nBelichtungseinstellung im Bereich der\nSpitzlichter und Schatten befinden sollen.
TP_EXPOSURE_COMPRHIGHLIGHTS;Lichterkompression
@@ -1845,8 +1846,6 @@ TP_RAW_NONE;Keine
TP_RAW_PIXELSHIFT;Pixel Shift
TP_RAW_PIXELSHIFTADAPTIVE;Adaptive Erkennung
TP_RAW_PIXELSHIFTBLUR;Unschärfebewegungsmaske
-TP_RAW_PIXELSHIFTEPERISO;ISO-Anpassung
-TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;Der Standardwert (0.0) empfiehlt sich für die Basis-ISO.\nErhöhen Sie den Wert, um die Bewegungserkennung für höhere ISO-Werte zu verbessern.\nErhöhen Sie den Wert nur in kleinen Schritten und achten Sie dabei auf die Bewegungsmaske.
TP_RAW_PIXELSHIFTEQUALBRIGHT;Frame-Helligkeit angleichen
TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL;Ausgleich pro Kanal
TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL_TOOLTIP;EIN: Individueller Ausgleich der RGB-Kanäle.\nAUS: Identischer Ausgleichsfaktor für alle Kanäle.
@@ -1882,7 +1881,6 @@ TP_RAW_PIXELSHIFTREDBLUEWEIGHT;Red&Blue weight
TP_RAW_PIXELSHIFTSHOWMOTION;Bewegungsmaske anzeigen
TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY;Nur Maske anzeigen
TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY_TOOLTIP;Zeigt die Bewegungsmaske ohne Bild.
-TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Überlagert das Bild mit einer Maske um die\nBereiche mit Bewegung hervorzuheben.
TP_RAW_PIXELSHIFTSIGMA;Unschärferadius
TP_RAW_PIXELSHIFTSIGMA_TOOLTIP;Der Standard-Radius von 1,0 passt in der Regel für die Basis-ISO.\nErhöhen Sie den Wert für High-ISO-Aufnahmen, 5,0 ist ein guter\nAusgangspunkt für High-ISO-Aufnahmen. Achten Sie auf die\nBewegungsmaske, während Sie den Wert ändern.
TP_RAW_PIXELSHIFTSMOOTH;Weicher Übergang
@@ -2278,3 +2276,11 @@ ZOOMPANEL_ZOOMFITSCREEN;An Bildschirm anpassen\nTaste: Alt + f
ZOOMPANEL_ZOOMIN;Hineinzoomen\nTaste: +
ZOOMPANEL_ZOOMOUT;Herauszoomen\nTaste: -
+!!!!!!!!!!!!!!!!!!!!!!!!!
+! Untranslated keys follow; remove the ! prefix after an entry is translated.
+!!!!!!!!!!!!!!!!!!!!!!!!!
+
+EXIFFILTER_IMAGETYPE;Bildtyp
+TP_RAW_PIXELSHIFTEPERISO;Empfindlichkeit
+TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;Der Standardwert 0 wird für die Basis-ISO empfohlen.\nHöhere Werte erhöhen die Empfindlichkeit der Bewegungserkennung.\nVerändern Sie den Wert in kleinen Schritten und beobachten Sie die\nBewegungsmaske. Erhöhen Sie die Empfindlichkeit für unterbelichtete\noder High-ISO-Bilder.
+TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Überlagert das Bild mit einer grünen Maske,\num die Bewegungsbereiche hervorzuheben.
diff --git a/rtdata/languages/English (UK) b/rtdata/languages/English (UK)
index 4b79450b5..0fe095d56 100644
--- a/rtdata/languages/English (UK)
+++ b/rtdata/languages/English (UK)
@@ -22,6 +22,7 @@ HISTORY_MSG_258;CT - Colour curve
HISTORY_MSG_322;W - Gamut - Avoid colour shift
HISTORY_MSG_385;W - Residual - Colour Balance
HISTORY_MSG_419;Retinex - Colour space
+HISTORY_MSG_CLAMPOOG;Out-of-gamut colour clipping
HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Colour correction
MAIN_TAB_COLOR;Colour
MAIN_TOOLTIP_BACKCOLOR0;Background colour of the preview: Theme-based\nShortcut: 9
@@ -81,6 +82,7 @@ TP_DIRPYREQUALIZER_ALGO;Skin Colour Range
TP_DIRPYREQUALIZER_ALGO_TOOLTIP;Fine: closer to the colours of the skin, minimizing the action on other colours\nLarge: avoid more artifacts.
TP_DIRPYREQUALIZER_TOOLTIP;Attempts to reduce artifacts in the transitions between skin colours (hue, chroma, luma) and the rest of the image.
TP_EPD_TOOLTIP;Tone mapping is possible in L*a*b* mode (standard) and CIECAM02 mode.\n\nWhen in L*a*b* mode, tone mapping can also be used on the residual image of the Wavelet Levels tool.\n\nTo engage CIECAM02 tone mapping mode enable the following settings:\n1. CIECAM02\n2. Algorithm="Brightness + Colourfulness (QM)"\n3. "Tone mapping using CIECAM02 brightness (Q)"
+TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colours
TP_FLATFIELD_CLIPCONTROL_TOOLTIP;Clip control avoids clipped highlights caused by applying the flat field. If there are already clipped highlights before applying the flat field, clip control can lead to colour cast.
TP_GRADIENT_CENTER;Centre
TP_GRADIENT_CENTER_X;Centre X
@@ -97,6 +99,7 @@ TP_LABCURVE_AVOIDCOLORSHIFT_TOOLTIP;Fit colours into gamut of the working colour
TP_PCVIGNETTE_FEATHER_TOOLTIP;Feathering:\n0 = corners only,\n50 = halfway to centre,\n100 = to centre.
TP_PFCURVE_CURVEEDITOR_CH_TOOLTIP;Controls defringe strength by colour.\nHigher = more,\nLower = less.
TP_RAW_FALSECOLOR;False colour suppression steps
+TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;Equalize the brightness of the frames to the brightness of the selected frame.\nIf there are overexposed areas in the frames select the brightest frame to avoid magenta colour cast in overexposed areas or enable motion correction.
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 colour.
TP_VIBRANCE_AVOIDCOLORSHIFT;Avoid colour shift
TP_VIGNETTING_CENTER;Centre
@@ -106,6 +109,7 @@ TP_WAVELET_AVOID;Avoid colour shift
TP_WAVELET_CBENAB;Toning and Colour Balance
TP_WAVELET_CB_TOOLTIP;For strong values product colour-toning by combining it or not with levels decomposition 'toning'\nFor low values you can change the white balance of the background (sky, ...) without changing that of the front plane, generally more contrasted
TP_WAVELET_CHRO_TOOLTIP;Sets the wavelet level which will be the threshold between saturated and pastel colours.\n1-x: saturated\nx-9: pastel\n\nIf the value exceeds the amount of wavelet levels you are using then it will be ignored.
+TP_WAVELET_EDGTHRESH_TOOLTIP;Change the repartition between the first levels and the others. The higher the threshold the more the action is centreed on the first levels. Be careful with negative values, they increase the action of high levels and can introduce artifacts.
TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "white balance" by modulating the blue/red balance.\nThis can be useful when shooting conditions:\na) are far from the standard illuminant (e.g. underwater),\nb) are far from conditions where calibrations were performed,\nc) where the matrices or ICC profiles are unsuitable.
!!!!!!!!!!!!!!!!!!!!!!!!!
@@ -166,6 +170,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh
!EXIFFILTER_EXPOSURECOMPENSATION;Exposure compensation (EV)
!EXIFFILTER_FILETYPE;File type
!EXIFFILTER_FOCALLEN;Focal length
+!EXIFFILTER_IMAGETYPE;Image type
!EXIFFILTER_ISO;ISO
!EXIFFILTER_LENS;Lens
!EXIFFILTER_METADATAFILTER;Enable metadata filters
@@ -809,7 +814,6 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh
!HISTORY_MSG_491;White Balance
!HISTORY_MSG_492;RGB Curves
!HISTORY_MSG_493;L*a*b* Adjustments
-!HISTORY_MSG_CLAMPOOG;Out-of-gamut colours clipping
!HISTORY_MSG_HISTMATCHING;Auto-Matched Tone Curve
!HISTORY_MSG_LOCALCONTRAST_AMOUNT;Local Contrast - Amount
!HISTORY_MSG_LOCALCONTRAST_DARKNESS;Local Contrast - Darkness
@@ -1576,7 +1580,6 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh
!TP_EXPOSURE_AUTOLEVELS_TIP;Toggles execution of Auto Levels to automatically set Exposure slider values based on an image analysis.\nEnables Highlight Reconstruction if necessary.
!TP_EXPOSURE_BLACKLEVEL;Black
!TP_EXPOSURE_BRIGHTNESS;Lightness
-!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colours
!TP_EXPOSURE_CLIP;Clip %
!TP_EXPOSURE_CLIP_TIP;The fraction of pixels to be clipped in Auto Levels operation.
!TP_EXPOSURE_COMPRHIGHLIGHTS;Highlight compression
@@ -1792,53 +1795,33 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh
!TP_RAW_MONO;Mono
!TP_RAW_NONE;None (Shows sensor pattern)
!TP_RAW_PIXELSHIFT;Pixel Shift
-!TP_RAW_PIXELSHIFTADAPTIVE;Adaptive detection
!TP_RAW_PIXELSHIFTBLUR;Blur motion mask
-!TP_RAW_PIXELSHIFTEPERISO;ISO adaption
-!TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;The default value of 0 should work fine for base ISO.\nIncrease the value to improve motion detection for higher ISO.\nIncrease in small steps and watch the motion mask while increasing.
+!TP_RAW_PIXELSHIFTEPERISO;Sensitivity
+!TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;The default value of 0 should work fine for base ISO.\nHigher values increase sensitivity of motion detection.\nChange in small steps and watch the motion mask while changing.\nIncrease sensitivity for underexposed or high ISO images.
!TP_RAW_PIXELSHIFTEQUALBRIGHT;Equalize brightness of frames
!TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL;Equalize per channel
!TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL_TOOLTIP;Enabled: Equalize the RGB channels individually.\nDisabled: Use same equalization factor for all channels.
-!TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;Equalize the brightness of the frames to the brightness of the selected frame.\nIf there are overexposed areas in the frames select the brightest frame to avoid magenta colour cast in overexposed areas or enable motion correction.
-!TP_RAW_PIXELSHIFTEXP0;Experimental
!TP_RAW_PIXELSHIFTGREEN;Check green channel for motion
!TP_RAW_PIXELSHIFTHOLEFILL;Fill holes in motion mask
!TP_RAW_PIXELSHIFTHOLEFILL_TOOLTIP;Fill holes in motion mask
!TP_RAW_PIXELSHIFTLMMSE;Use LMMSE for moving parts
!TP_RAW_PIXELSHIFTLMMSE_TOOLTIP;Use LMMSE instead of AMaZE for areas of motion.\nUseful for high ISO images.
-!TP_RAW_PIXELSHIFTMASKTHRESHOLD;3x3 new threshold
!TP_RAW_PIXELSHIFTMEDIAN;Use median for moving parts
-!TP_RAW_PIXELSHIFTMEDIAN3;Exclude selected frame from median
-!TP_RAW_PIXELSHIFTMEDIAN3_TOOLTIP;Excludes selected frame from median.\nUseful if moving objects overlap in frame 2 and 3
!TP_RAW_PIXELSHIFTMEDIAN_TOOLTIP;Use median of all frames instead of selected frame for regions with motion.\nRemoves objects which are at different places in all frames.\nGives motion effect on slow moving (overlapping) objects.
!TP_RAW_PIXELSHIFTMM_AUTO;Automatic
!TP_RAW_PIXELSHIFTMM_CUSTOM;Custom
!TP_RAW_PIXELSHIFTMM_OFF;Off
-!TP_RAW_PIXELSHIFTMOTION;Motion detection level (deprecated)
-!TP_RAW_PIXELSHIFTMOTIONCORRECTION;Green motion correction size
!TP_RAW_PIXELSHIFTMOTIONMETHOD;Motion Correction
!TP_RAW_PIXELSHIFTMOTION_TOOLTIP;0 means no motion detection.\n1 - 99 means motion will be detected according to this value. Increase value to increase detection rate.\n100 means the AMaZE-demosaiced frame will be used.
-!TP_RAW_PIXELSHIFTNONGREENAMAZE;Check red/blue AMaZE
!TP_RAW_PIXELSHIFTNONGREENCROSS;Check red/blue channels for motion
-!TP_RAW_PIXELSHIFTNONGREENCROSS2;Check green AMaZE
-!TP_RAW_PIXELSHIFTNONGREENHORIZONTAL;Check red/blue horizontal
-!TP_RAW_PIXELSHIFTNONGREENVERTICAL;Check red/blue vertical
-!TP_RAW_PIXELSHIFTNREADISO;nRead
-!TP_RAW_PIXELSHIFTONEGREEN;Use one green instead of average
-!TP_RAW_PIXELSHIFTONEGREEN_TOOLTIP;Use one green instead of averaging two greens for regions without motion.
-!TP_RAW_PIXELSHIFTPRNU;PRNU (%)
-!TP_RAW_PIXELSHIFTREDBLUEWEIGHT;Red&Blue weight
!TP_RAW_PIXELSHIFTSHOWMOTION;Show motion mask
!TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY;Show only motion mask
!TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY_TOOLTIP;Shows the motion mask without the image.
-!TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Overlays the image with a mask showing the regions with motion.
+!TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Overlays the image with a green mask showing the regions with motion.
!TP_RAW_PIXELSHIFTSIGMA;Blur radius
!TP_RAW_PIXELSHIFTSIGMA_TOOLTIP;The default radius of 1.0 usually fits well for base ISO.\nIncrease the value for high ISO shots, 5.0 is a good starting point.\nWatch the motion mask while changing the value.
!TP_RAW_PIXELSHIFTSMOOTH;Smooth transitions
!TP_RAW_PIXELSHIFTSMOOTH_TOOLTIP;Smooth transitions between areas with motion and areas without.\nSet to 0 to disable transition smoothing.\nSet to 1 to either get the AMaZE/LMMSE result of the selected frame (depending on whether "Use LMMSE" is selected), or the median of all four frames if "Use median" is selected.
-!TP_RAW_PIXELSHIFTSTDDEVFACTORBLUE;StdDev factor Blue
-!TP_RAW_PIXELSHIFTSTDDEVFACTORGREEN;StdDev factor Green
-!TP_RAW_PIXELSHIFTSTDDEVFACTORRED;StdDev factor Red
!TP_RAW_RCD;RCD
!TP_RAW_SENSOR_BAYER_LABEL;Sensor with Bayer Matrix
!TP_RAW_SENSOR_XTRANS_DMETHOD_TOOLTIP;3-pass gives best results (recommended for low ISO images).\n1-pass is almost undistinguishable from 3-pass for high ISO images and is faster.
@@ -2078,7 +2061,6 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh
!TP_WAVELET_EDGESENSI;Edge sensitivity
!TP_WAVELET_EDGREINF_TOOLTIP;Reinforce or reduce the action of the first level, do the opposite to the second level, and leave the rest unchanged.
!TP_WAVELET_EDGTHRESH;Detail
-!TP_WAVELET_EDGTHRESH_TOOLTIP;Change the repartition between the first levels and the others. The higher the threshold the more the action is centred on the first levels. Be careful with negative values, they increase the action of high levels and can introduce artifacts.
!TP_WAVELET_EDRAD;Radius
!TP_WAVELET_EDRAD_TOOLTIP;This radius adjustment is very different from those in other sharpening tools. Its value is compared to each level through a complex function. In this sense, a value of zero still has an effect.
!TP_WAVELET_EDSL;Threshold Sliders
diff --git a/rtdata/languages/English (US) b/rtdata/languages/English (US)
index f905a0489..20d3821e8 100644
--- a/rtdata/languages/English (US)
+++ b/rtdata/languages/English (US)
@@ -57,6 +57,7 @@
!EXIFFILTER_EXPOSURECOMPENSATION;Exposure compensation (EV)
!EXIFFILTER_FILETYPE;File type
!EXIFFILTER_FOCALLEN;Focal length
+!EXIFFILTER_IMAGETYPE;Image type
!EXIFFILTER_ISO;ISO
!EXIFFILTER_LENS;Lens
!EXIFFILTER_METADATAFILTER;Enable metadata filters
@@ -724,7 +725,7 @@
!HISTORY_MSG_491;White Balance
!HISTORY_MSG_492;RGB Curves
!HISTORY_MSG_493;L*a*b* Adjustments
-!HISTORY_MSG_CLAMPOOG;Out-of-gamut colours clipping
+!HISTORY_MSG_CLAMPOOG;Out-of-gamut color clipping
!HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction
!HISTORY_MSG_HISTMATCHING;Auto-Matched Tone Curve
!HISTORY_MSG_LOCALCONTRAST_AMOUNT;Local Contrast - Amount
@@ -1550,7 +1551,7 @@
!TP_EXPOSURE_AUTOLEVELS_TIP;Toggles execution of Auto Levels to automatically set Exposure slider values based on an image analysis.\nEnables Highlight Reconstruction if necessary.
!TP_EXPOSURE_BLACKLEVEL;Black
!TP_EXPOSURE_BRIGHTNESS;Lightness
-!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colours
+!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colors
!TP_EXPOSURE_CLIP;Clip %
!TP_EXPOSURE_CLIP_TIP;The fraction of pixels to be clipped in Auto Levels operation.
!TP_EXPOSURE_COMPRHIGHLIGHTS;Highlight compression
@@ -1782,53 +1783,34 @@
!TP_RAW_MONO;Mono
!TP_RAW_NONE;None (Shows sensor pattern)
!TP_RAW_PIXELSHIFT;Pixel Shift
-!TP_RAW_PIXELSHIFTADAPTIVE;Adaptive detection
!TP_RAW_PIXELSHIFTBLUR;Blur motion mask
-!TP_RAW_PIXELSHIFTEPERISO;ISO adaption
-!TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;The default value of 0 should work fine for base ISO.\nIncrease the value to improve motion detection for higher ISO.\nIncrease in small steps and watch the motion mask while increasing.
+!TP_RAW_PIXELSHIFTEPERISO;Sensitivity
+!TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;The default value of 0 should work fine for base ISO.\nHigher values increase sensitivity of motion detection.\nChange in small steps and watch the motion mask while changing.\nIncrease sensitivity for underexposed or high ISO images.
!TP_RAW_PIXELSHIFTEQUALBRIGHT;Equalize brightness of frames
!TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL;Equalize per channel
!TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL_TOOLTIP;Enabled: Equalize the RGB channels individually.\nDisabled: Use same equalization factor for all channels.
-!TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;Equalize the brightness of the frames to the brightness of the selected frame.\nIf there are overexposed areas in the frames select the brightest frame to avoid magenta colour cast in overexposed areas or enable motion correction.
-!TP_RAW_PIXELSHIFTEXP0;Experimental
+!TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;Equalize the brightness of the frames to the brightness of the selected frame.\nIf there are overexposed areas in the frames select the brightest frame to avoid magenta color cast in overexposed areas or enable motion correction.
!TP_RAW_PIXELSHIFTGREEN;Check green channel for motion
!TP_RAW_PIXELSHIFTHOLEFILL;Fill holes in motion mask
!TP_RAW_PIXELSHIFTHOLEFILL_TOOLTIP;Fill holes in motion mask
!TP_RAW_PIXELSHIFTLMMSE;Use LMMSE for moving parts
!TP_RAW_PIXELSHIFTLMMSE_TOOLTIP;Use LMMSE instead of AMaZE for areas of motion.\nUseful for high ISO images.
-!TP_RAW_PIXELSHIFTMASKTHRESHOLD;3x3 new threshold
!TP_RAW_PIXELSHIFTMEDIAN;Use median for moving parts
-!TP_RAW_PIXELSHIFTMEDIAN3;Exclude selected frame from median
-!TP_RAW_PIXELSHIFTMEDIAN3_TOOLTIP;Excludes selected frame from median.\nUseful if moving objects overlap in frame 2 and 3
!TP_RAW_PIXELSHIFTMEDIAN_TOOLTIP;Use median of all frames instead of selected frame for regions with motion.\nRemoves objects which are at different places in all frames.\nGives motion effect on slow moving (overlapping) objects.
!TP_RAW_PIXELSHIFTMM_AUTO;Automatic
!TP_RAW_PIXELSHIFTMM_CUSTOM;Custom
!TP_RAW_PIXELSHIFTMM_OFF;Off
-!TP_RAW_PIXELSHIFTMOTION;Motion detection level (deprecated)
-!TP_RAW_PIXELSHIFTMOTIONCORRECTION;Green motion correction size
!TP_RAW_PIXELSHIFTMOTIONMETHOD;Motion Correction
!TP_RAW_PIXELSHIFTMOTION_TOOLTIP;0 means no motion detection.\n1 - 99 means motion will be detected according to this value. Increase value to increase detection rate.\n100 means the AMaZE-demosaiced frame will be used.
-!TP_RAW_PIXELSHIFTNONGREENAMAZE;Check red/blue AMaZE
!TP_RAW_PIXELSHIFTNONGREENCROSS;Check red/blue channels for motion
-!TP_RAW_PIXELSHIFTNONGREENCROSS2;Check green AMaZE
-!TP_RAW_PIXELSHIFTNONGREENHORIZONTAL;Check red/blue horizontal
-!TP_RAW_PIXELSHIFTNONGREENVERTICAL;Check red/blue vertical
-!TP_RAW_PIXELSHIFTNREADISO;nRead
-!TP_RAW_PIXELSHIFTONEGREEN;Use one green instead of average
-!TP_RAW_PIXELSHIFTONEGREEN_TOOLTIP;Use one green instead of averaging two greens for regions without motion.
-!TP_RAW_PIXELSHIFTPRNU;PRNU (%)
-!TP_RAW_PIXELSHIFTREDBLUEWEIGHT;Red&Blue weight
!TP_RAW_PIXELSHIFTSHOWMOTION;Show motion mask
!TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY;Show only motion mask
!TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY_TOOLTIP;Shows the motion mask without the image.
-!TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Overlays the image with a mask showing the regions with motion.
+!TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Overlays the image with a green mask showing the regions with motion.
!TP_RAW_PIXELSHIFTSIGMA;Blur radius
!TP_RAW_PIXELSHIFTSIGMA_TOOLTIP;The default radius of 1.0 usually fits well for base ISO.\nIncrease the value for high ISO shots, 5.0 is a good starting point.\nWatch the motion mask while changing the value.
!TP_RAW_PIXELSHIFTSMOOTH;Smooth transitions
!TP_RAW_PIXELSHIFTSMOOTH_TOOLTIP;Smooth transitions between areas with motion and areas without.\nSet to 0 to disable transition smoothing.\nSet to 1 to either get the AMaZE/LMMSE result of the selected frame (depending on whether "Use LMMSE" is selected), or the median of all four frames if "Use median" is selected.
-!TP_RAW_PIXELSHIFTSTDDEVFACTORBLUE;StdDev factor Blue
-!TP_RAW_PIXELSHIFTSTDDEVFACTORGREEN;StdDev factor Green
-!TP_RAW_PIXELSHIFTSTDDEVFACTORRED;StdDev factor Red
!TP_RAW_RCD;RCD
!TP_RAW_SENSOR_BAYER_LABEL;Sensor with Bayer Matrix
!TP_RAW_SENSOR_XTRANS_DMETHOD_TOOLTIP;3-pass gives best results (recommended for low ISO images).\n1-pass is almost undistinguishable from 3-pass for high ISO images and is faster.
@@ -2077,7 +2059,7 @@
!TP_WAVELET_EDGESENSI;Edge sensitivity
!TP_WAVELET_EDGREINF_TOOLTIP;Reinforce or reduce the action of the first level, do the opposite to the second level, and leave the rest unchanged.
!TP_WAVELET_EDGTHRESH;Detail
-!TP_WAVELET_EDGTHRESH_TOOLTIP;Change the repartition between the first levels and the others. The higher the threshold the more the action is centred on the first levels. Be careful with negative values, they increase the action of high levels and can introduce artifacts.
+!TP_WAVELET_EDGTHRESH_TOOLTIP;Change the repartition between the first levels and the others. The higher the threshold the more the action is centered on the first levels. Be careful with negative values, they increase the action of high levels and can introduce artifacts.
!TP_WAVELET_EDRAD;Radius
!TP_WAVELET_EDRAD_TOOLTIP;This radius adjustment is very different from those in other sharpening tools. Its value is compared to each level through a complex function. In this sense, a value of zero still has an effect.
!TP_WAVELET_EDSL;Threshold Sliders
diff --git a/rtdata/languages/Espanol b/rtdata/languages/Espanol
index b11ebaedf..e33eb335a 100644
--- a/rtdata/languages/Espanol
+++ b/rtdata/languages/Espanol
@@ -1501,6 +1501,7 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nAtajo: -
!DYNPROFILEEDITOR_NEW;New
!DYNPROFILEEDITOR_NEW_RULE;New Dynamic Profile Rule
!DYNPROFILEEDITOR_PROFILE;Processing Profile
+!EXIFFILTER_IMAGETYPE;Image type
!EXIFPANEL_SHOWALL;Show all
!EXPORT_BYPASS;Processing steps to bypass
!EXPORT_BYPASS_EQUALIZER;Bypass Wavelet Levels
@@ -1708,7 +1709,7 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nAtajo: -
!HISTORY_MSG_491;White Balance
!HISTORY_MSG_492;RGB Curves
!HISTORY_MSG_493;L*a*b* Adjustments
-!HISTORY_MSG_CLAMPOOG;Out-of-gamut colours clipping
+!HISTORY_MSG_CLAMPOOG;Out-of-gamut color clipping
!HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction
!HISTORY_MSG_HISTMATCHING;Auto-Matched Tone Curve
!HISTORY_MSG_LOCALCONTRAST_AMOUNT;Local Contrast - Amount
@@ -1932,7 +1933,7 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nAtajo: -
!TP_DIRPYREQUALIZER_ARTIF;Reduce artifacts
!TP_DISTORTION_AUTO_TIP;Automatically corrects lens distortion in raw files by matching it against the embedded JPEG image if one exists and has had its lens disortion auto-corrected by the camera.
!TP_EPD_GAMMA;Gamma
-!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colours
+!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colors
!TP_EXPOSURE_HISTMATCHING;Auto-Matched Tone Curve
!TP_EXPOSURE_HISTMATCHING_TOOLTIP;Automatically adjust sliders and curves (except exposure compensation) to match the look of the embedded JPEG thumbnail.
!TP_EXPOSURE_TCMODE_LUMINANCE;Luminance
@@ -1987,53 +1988,34 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nAtajo: -
!TP_RAW_MONO;Mono
!TP_RAW_NONE;None (Shows sensor pattern)
!TP_RAW_PIXELSHIFT;Pixel Shift
-!TP_RAW_PIXELSHIFTADAPTIVE;Adaptive detection
!TP_RAW_PIXELSHIFTBLUR;Blur motion mask
-!TP_RAW_PIXELSHIFTEPERISO;ISO adaption
-!TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;The default value of 0 should work fine for base ISO.\nIncrease the value to improve motion detection for higher ISO.\nIncrease in small steps and watch the motion mask while increasing.
+!TP_RAW_PIXELSHIFTEPERISO;Sensitivity
+!TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;The default value of 0 should work fine for base ISO.\nHigher values increase sensitivity of motion detection.\nChange in small steps and watch the motion mask while changing.\nIncrease sensitivity for underexposed or high ISO images.
!TP_RAW_PIXELSHIFTEQUALBRIGHT;Equalize brightness of frames
!TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL;Equalize per channel
!TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL_TOOLTIP;Enabled: Equalize the RGB channels individually.\nDisabled: Use same equalization factor for all channels.
-!TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;Equalize the brightness of the frames to the brightness of the selected frame.\nIf there are overexposed areas in the frames select the brightest frame to avoid magenta colour cast in overexposed areas or enable motion correction.
-!TP_RAW_PIXELSHIFTEXP0;Experimental
+!TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;Equalize the brightness of the frames to the brightness of the selected frame.\nIf there are overexposed areas in the frames select the brightest frame to avoid magenta color cast in overexposed areas or enable motion correction.
!TP_RAW_PIXELSHIFTGREEN;Check green channel for motion
!TP_RAW_PIXELSHIFTHOLEFILL;Fill holes in motion mask
!TP_RAW_PIXELSHIFTHOLEFILL_TOOLTIP;Fill holes in motion mask
!TP_RAW_PIXELSHIFTLMMSE;Use LMMSE for moving parts
!TP_RAW_PIXELSHIFTLMMSE_TOOLTIP;Use LMMSE instead of AMaZE for areas of motion.\nUseful for high ISO images.
-!TP_RAW_PIXELSHIFTMASKTHRESHOLD;3x3 new threshold
!TP_RAW_PIXELSHIFTMEDIAN;Use median for moving parts
-!TP_RAW_PIXELSHIFTMEDIAN3;Exclude selected frame from median
-!TP_RAW_PIXELSHIFTMEDIAN3_TOOLTIP;Excludes selected frame from median.\nUseful if moving objects overlap in frame 2 and 3
!TP_RAW_PIXELSHIFTMEDIAN_TOOLTIP;Use median of all frames instead of selected frame for regions with motion.\nRemoves objects which are at different places in all frames.\nGives motion effect on slow moving (overlapping) objects.
!TP_RAW_PIXELSHIFTMM_AUTO;Automatic
!TP_RAW_PIXELSHIFTMM_CUSTOM;Custom
!TP_RAW_PIXELSHIFTMM_OFF;Off
-!TP_RAW_PIXELSHIFTMOTION;Motion detection level (deprecated)
-!TP_RAW_PIXELSHIFTMOTIONCORRECTION;Green motion correction size
!TP_RAW_PIXELSHIFTMOTIONMETHOD;Motion Correction
!TP_RAW_PIXELSHIFTMOTION_TOOLTIP;0 means no motion detection.\n1 - 99 means motion will be detected according to this value. Increase value to increase detection rate.\n100 means the AMaZE-demosaiced frame will be used.
-!TP_RAW_PIXELSHIFTNONGREENAMAZE;Check red/blue AMaZE
!TP_RAW_PIXELSHIFTNONGREENCROSS;Check red/blue channels for motion
-!TP_RAW_PIXELSHIFTNONGREENCROSS2;Check green AMaZE
-!TP_RAW_PIXELSHIFTNONGREENHORIZONTAL;Check red/blue horizontal
-!TP_RAW_PIXELSHIFTNONGREENVERTICAL;Check red/blue vertical
-!TP_RAW_PIXELSHIFTNREADISO;nRead
-!TP_RAW_PIXELSHIFTONEGREEN;Use one green instead of average
-!TP_RAW_PIXELSHIFTONEGREEN_TOOLTIP;Use one green instead of averaging two greens for regions without motion.
-!TP_RAW_PIXELSHIFTPRNU;PRNU (%)
-!TP_RAW_PIXELSHIFTREDBLUEWEIGHT;Red&Blue weight
!TP_RAW_PIXELSHIFTSHOWMOTION;Show motion mask
!TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY;Show only motion mask
!TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY_TOOLTIP;Shows the motion mask without the image.
-!TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Overlays the image with a mask showing the regions with motion.
+!TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Overlays the image with a green mask showing the regions with motion.
!TP_RAW_PIXELSHIFTSIGMA;Blur radius
!TP_RAW_PIXELSHIFTSIGMA_TOOLTIP;The default radius of 1.0 usually fits well for base ISO.\nIncrease the value for high ISO shots, 5.0 is a good starting point.\nWatch the motion mask while changing the value.
!TP_RAW_PIXELSHIFTSMOOTH;Smooth transitions
!TP_RAW_PIXELSHIFTSMOOTH_TOOLTIP;Smooth transitions between areas with motion and areas without.\nSet to 0 to disable transition smoothing.\nSet to 1 to either get the AMaZE/LMMSE result of the selected frame (depending on whether "Use LMMSE" is selected), or the median of all four frames if "Use median" is selected.
-!TP_RAW_PIXELSHIFTSTDDEVFACTORBLUE;StdDev factor Blue
-!TP_RAW_PIXELSHIFTSTDDEVFACTORGREEN;StdDev factor Green
-!TP_RAW_PIXELSHIFTSTDDEVFACTORRED;StdDev factor Red
!TP_RAW_RCD;RCD
!TP_RAW_VNG4;VNG4
!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL
@@ -2199,7 +2181,7 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nAtajo: -
!TP_WAVELET_EDGESENSI;Edge sensitivity
!TP_WAVELET_EDGREINF_TOOLTIP;Reinforce or reduce the action of the first level, do the opposite to the second level, and leave the rest unchanged.
!TP_WAVELET_EDGTHRESH;Detail
-!TP_WAVELET_EDGTHRESH_TOOLTIP;Change the repartition between the first levels and the others. The higher the threshold the more the action is centred on the first levels. Be careful with negative values, they increase the action of high levels and can introduce artifacts.
+!TP_WAVELET_EDGTHRESH_TOOLTIP;Change the repartition between the first levels and the others. The higher the threshold the more the action is centered on the first levels. Be careful with negative values, they increase the action of high levels and can introduce artifacts.
!TP_WAVELET_EDRAD;Radius
!TP_WAVELET_EDRAD_TOOLTIP;This radius adjustment is very different from those in other sharpening tools. Its value is compared to each level through a complex function. In this sense, a value of zero still has an effect.
!TP_WAVELET_EDSL;Threshold Sliders
diff --git a/rtdata/languages/Euskara b/rtdata/languages/Euskara
index 35d1d73d5..e2db15959 100644
--- a/rtdata/languages/Euskara
+++ b/rtdata/languages/Euskara
@@ -459,6 +459,7 @@ TP_WBALANCE_TEMPERATURE;Tenperatura
!EDIT_PIPETTE_TOOLTIP;To add an adjustment point to the curve, hold the Ctrl key while left-clicking the desired spot in the image preview.\nTo adjust the point, hold the Ctrl key while left-clicking the corresponding area in the preview, then let go of Ctrl (unless you desire fine control) and while still holding the left mouse button move the mouse up or down to move that point up or down in the curve.
!EXIFFILTER_EXPOSURECOMPENSATION;Exposure compensation (EV)
!EXIFFILTER_FILETYPE;File type
+!EXIFFILTER_IMAGETYPE;Image type
!EXIFFILTER_METADATAFILTER;Enable metadata filters
!EXIFPANEL_SHOWALL;Show all
!EXPORT_BYPASS;Processing steps to bypass
@@ -975,7 +976,7 @@ TP_WBALANCE_TEMPERATURE;Tenperatura
!HISTORY_MSG_491;White Balance
!HISTORY_MSG_492;RGB Curves
!HISTORY_MSG_493;L*a*b* Adjustments
-!HISTORY_MSG_CLAMPOOG;Out-of-gamut colours clipping
+!HISTORY_MSG_CLAMPOOG;Out-of-gamut color clipping
!HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction
!HISTORY_MSG_HISTMATCHING;Auto-Matched Tone Curve
!HISTORY_MSG_LOCALCONTRAST_AMOUNT;Local Contrast - Amount
@@ -1621,7 +1622,7 @@ TP_WBALANCE_TEMPERATURE;Tenperatura
!TP_EPD_STRENGTH;Strength
!TP_EPD_TOOLTIP;Tone mapping is possible in L*a*b* mode (standard) and CIECAM02 mode.\n\nWhen in L*a*b* mode, tone mapping can also be used on the residual image of the Wavelet Levels tool.\n\nTo engage CIECAM02 tone mapping mode enable the following settings:\n1. CIECAM02\n2. Algorithm="Brightness + Colorfulness (QM)"\n3. "Tone mapping using CIECAM02 brightness (Q)"
!TP_EXPOSURE_AUTOLEVELS_TIP;Toggles execution of Auto Levels to automatically set Exposure slider values based on an image analysis.\nEnables Highlight Reconstruction if necessary.
-!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colours
+!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colors
!TP_EXPOSURE_CLIP_TIP;The fraction of pixels to be clipped in Auto Levels operation.
!TP_EXPOSURE_COMPRHIGHLIGHTSTHRESHOLD;Highlight compression threshold
!TP_EXPOSURE_CURVEEDITOR1;Tone curve 1
@@ -1831,53 +1832,34 @@ TP_WBALANCE_TEMPERATURE;Tenperatura
!TP_RAW_MONO;Mono
!TP_RAW_NONE;None (Shows sensor pattern)
!TP_RAW_PIXELSHIFT;Pixel Shift
-!TP_RAW_PIXELSHIFTADAPTIVE;Adaptive detection
!TP_RAW_PIXELSHIFTBLUR;Blur motion mask
-!TP_RAW_PIXELSHIFTEPERISO;ISO adaption
-!TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;The default value of 0 should work fine for base ISO.\nIncrease the value to improve motion detection for higher ISO.\nIncrease in small steps and watch the motion mask while increasing.
+!TP_RAW_PIXELSHIFTEPERISO;Sensitivity
+!TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;The default value of 0 should work fine for base ISO.\nHigher values increase sensitivity of motion detection.\nChange in small steps and watch the motion mask while changing.\nIncrease sensitivity for underexposed or high ISO images.
!TP_RAW_PIXELSHIFTEQUALBRIGHT;Equalize brightness of frames
!TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL;Equalize per channel
!TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL_TOOLTIP;Enabled: Equalize the RGB channels individually.\nDisabled: Use same equalization factor for all channels.
-!TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;Equalize the brightness of the frames to the brightness of the selected frame.\nIf there are overexposed areas in the frames select the brightest frame to avoid magenta colour cast in overexposed areas or enable motion correction.
-!TP_RAW_PIXELSHIFTEXP0;Experimental
+!TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;Equalize the brightness of the frames to the brightness of the selected frame.\nIf there are overexposed areas in the frames select the brightest frame to avoid magenta color cast in overexposed areas or enable motion correction.
!TP_RAW_PIXELSHIFTGREEN;Check green channel for motion
!TP_RAW_PIXELSHIFTHOLEFILL;Fill holes in motion mask
!TP_RAW_PIXELSHIFTHOLEFILL_TOOLTIP;Fill holes in motion mask
!TP_RAW_PIXELSHIFTLMMSE;Use LMMSE for moving parts
!TP_RAW_PIXELSHIFTLMMSE_TOOLTIP;Use LMMSE instead of AMaZE for areas of motion.\nUseful for high ISO images.
-!TP_RAW_PIXELSHIFTMASKTHRESHOLD;3x3 new threshold
!TP_RAW_PIXELSHIFTMEDIAN;Use median for moving parts
-!TP_RAW_PIXELSHIFTMEDIAN3;Exclude selected frame from median
-!TP_RAW_PIXELSHIFTMEDIAN3_TOOLTIP;Excludes selected frame from median.\nUseful if moving objects overlap in frame 2 and 3
!TP_RAW_PIXELSHIFTMEDIAN_TOOLTIP;Use median of all frames instead of selected frame for regions with motion.\nRemoves objects which are at different places in all frames.\nGives motion effect on slow moving (overlapping) objects.
!TP_RAW_PIXELSHIFTMM_AUTO;Automatic
!TP_RAW_PIXELSHIFTMM_CUSTOM;Custom
!TP_RAW_PIXELSHIFTMM_OFF;Off
-!TP_RAW_PIXELSHIFTMOTION;Motion detection level (deprecated)
-!TP_RAW_PIXELSHIFTMOTIONCORRECTION;Green motion correction size
!TP_RAW_PIXELSHIFTMOTIONMETHOD;Motion Correction
!TP_RAW_PIXELSHIFTMOTION_TOOLTIP;0 means no motion detection.\n1 - 99 means motion will be detected according to this value. Increase value to increase detection rate.\n100 means the AMaZE-demosaiced frame will be used.
-!TP_RAW_PIXELSHIFTNONGREENAMAZE;Check red/blue AMaZE
!TP_RAW_PIXELSHIFTNONGREENCROSS;Check red/blue channels for motion
-!TP_RAW_PIXELSHIFTNONGREENCROSS2;Check green AMaZE
-!TP_RAW_PIXELSHIFTNONGREENHORIZONTAL;Check red/blue horizontal
-!TP_RAW_PIXELSHIFTNONGREENVERTICAL;Check red/blue vertical
-!TP_RAW_PIXELSHIFTNREADISO;nRead
-!TP_RAW_PIXELSHIFTONEGREEN;Use one green instead of average
-!TP_RAW_PIXELSHIFTONEGREEN_TOOLTIP;Use one green instead of averaging two greens for regions without motion.
-!TP_RAW_PIXELSHIFTPRNU;PRNU (%)
-!TP_RAW_PIXELSHIFTREDBLUEWEIGHT;Red&Blue weight
!TP_RAW_PIXELSHIFTSHOWMOTION;Show motion mask
!TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY;Show only motion mask
!TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY_TOOLTIP;Shows the motion mask without the image.
-!TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Overlays the image with a mask showing the regions with motion.
+!TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Overlays the image with a green mask showing the regions with motion.
!TP_RAW_PIXELSHIFTSIGMA;Blur radius
!TP_RAW_PIXELSHIFTSIGMA_TOOLTIP;The default radius of 1.0 usually fits well for base ISO.\nIncrease the value for high ISO shots, 5.0 is a good starting point.\nWatch the motion mask while changing the value.
!TP_RAW_PIXELSHIFTSMOOTH;Smooth transitions
!TP_RAW_PIXELSHIFTSMOOTH_TOOLTIP;Smooth transitions between areas with motion and areas without.\nSet to 0 to disable transition smoothing.\nSet to 1 to either get the AMaZE/LMMSE result of the selected frame (depending on whether "Use LMMSE" is selected), or the median of all four frames if "Use median" is selected.
-!TP_RAW_PIXELSHIFTSTDDEVFACTORBLUE;StdDev factor Blue
-!TP_RAW_PIXELSHIFTSTDDEVFACTORGREEN;StdDev factor Green
-!TP_RAW_PIXELSHIFTSTDDEVFACTORRED;StdDev factor Red
!TP_RAW_RCD;RCD
!TP_RAW_SENSOR_BAYER_LABEL;Sensor with Bayer Matrix
!TP_RAW_SENSOR_XTRANS_DMETHOD_TOOLTIP;3-pass gives best results (recommended for low ISO images).\n1-pass is almost undistinguishable from 3-pass for high ISO images and is faster.
@@ -2092,7 +2074,7 @@ TP_WBALANCE_TEMPERATURE;Tenperatura
!TP_WAVELET_EDGESENSI;Edge sensitivity
!TP_WAVELET_EDGREINF_TOOLTIP;Reinforce or reduce the action of the first level, do the opposite to the second level, and leave the rest unchanged.
!TP_WAVELET_EDGTHRESH;Detail
-!TP_WAVELET_EDGTHRESH_TOOLTIP;Change the repartition between the first levels and the others. The higher the threshold the more the action is centred on the first levels. Be careful with negative values, they increase the action of high levels and can introduce artifacts.
+!TP_WAVELET_EDGTHRESH_TOOLTIP;Change the repartition between the first levels and the others. The higher the threshold the more the action is centered on the first levels. Be careful with negative values, they increase the action of high levels and can introduce artifacts.
!TP_WAVELET_EDRAD;Radius
!TP_WAVELET_EDRAD_TOOLTIP;This radius adjustment is very different from those in other sharpening tools. Its value is compared to each level through a complex function. In this sense, a value of zero still has an effect.
!TP_WAVELET_EDSL;Threshold Sliders
diff --git a/rtdata/languages/Francais b/rtdata/languages/Francais
index ba2101d3b..1553c0347 100644
--- a/rtdata/languages/Francais
+++ b/rtdata/languages/Francais
@@ -1776,8 +1776,6 @@ TP_RAW_NONE;Aucun (montre ce que voit le capteur)
TP_RAW_PIXELSHIFT;Pixel Shift
TP_RAW_PIXELSHIFTADAPTIVE;Détection adaptative
TP_RAW_PIXELSHIFTBLUR;Flouter le masque de mouvement
-TP_RAW_PIXELSHIFTEPERISO;Adaptation ISO
-TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;La valeur par défaut de 0 devrait bien fonctionner pour l'ISO de base.\nAugmenter la valeur pour améliorer la détection de mouvement pour les ISO plus haut.\nAugmentez par petit incrément et vérifier le masque de mouvement à chaque itération.
TP_RAW_PIXELSHIFTEQUALBRIGHT;Égaliser la luminosité des sous-images
TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL;Égaliser par canal
TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL_TOOLTIP;Activé: Égalise les canaux RVB individuellement.\nDésactivé: Utilise le même facteur d'égalisation pour tous les canaux.
@@ -1813,7 +1811,6 @@ TP_RAW_PIXELSHIFTREDBLUEWEIGHT;Poid Rouge&Bleu
TP_RAW_PIXELSHIFTSHOWMOTION;Voir le masque de mouvement
TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY;Voir uniquement le masque
TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY_TOOLTIP;Affiche le masque sans l'image.
-TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Superpose sur l'image le masque montrant les zones avec mouvement.
TP_RAW_PIXELSHIFTSIGMA;Rayon de floutage
TP_RAW_PIXELSHIFTSIGMA_TOOLTIP;Le rayon par défaut de 1.0 fonctionne généralement bien pour l'ISO de base.\nAugmentez cette valeur pour les images de haut ISO, 5.0 est un bon point de départ.\nContrôlez le masque de mouvement à chaque nouvelle valeur.
TP_RAW_PIXELSHIFTSMOOTH;Adoucir les transitions
@@ -2213,14 +2210,15 @@ ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: -
! Untranslated keys follow; remove the ! prefix after an entry is translated.
!!!!!!!!!!!!!!!!!!!!!!!!!
-!HISTORY_MSG_CLAMPOOG;Out-of-gamut colours clipping
+!EXIFFILTER_IMAGETYPE;Image type
+!HISTORY_MSG_CLAMPOOG;Out-of-gamut color clipping
!HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction
!HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview
!PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show
!PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering
!PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise
-!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colours
+!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colors
!TP_PREPROCESS_LINEDENOISE_DIRECTION;Direction
!TP_PREPROCESS_LINEDENOISE_DIRECTION_BOTH;Both
!TP_PREPROCESS_LINEDENOISE_DIRECTION_HORIZONTAL;Horizontal
@@ -2228,3 +2226,6 @@ ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: -
!TP_PREPROCESS_LINEDENOISE_DIRECTION_VERTICAL;Vertical
!TP_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!TP_PREPROCESS_PDAFLINESFILTER_TOOLTIP;Tries to suppress stripe noise caused by on-sensor PDAF pixels, occurring with some Sony mirrorless cameras on some backlit scenes with visible flare.
+!TP_RAW_PIXELSHIFTEPERISO;Sensitivity
+!TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;The default value of 0 should work fine for base ISO.\nHigher values increase sensitivity of motion detection.\nChange in small steps and watch the motion mask while changing.\nIncrease sensitivity for underexposed or high ISO images.
+!TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Overlays the image with a green mask showing the regions with motion.
diff --git a/rtdata/languages/Greek b/rtdata/languages/Greek
index 50a948806..2cd1ffc72 100644
--- a/rtdata/languages/Greek
+++ b/rtdata/languages/Greek
@@ -458,6 +458,7 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία
!EDIT_PIPETTE_TOOLTIP;To add an adjustment point to the curve, hold the Ctrl key while left-clicking the desired spot in the image preview.\nTo adjust the point, hold the Ctrl key while left-clicking the corresponding area in the preview, then let go of Ctrl (unless you desire fine control) and while still holding the left mouse button move the mouse up or down to move that point up or down in the curve.
!EXIFFILTER_EXPOSURECOMPENSATION;Exposure compensation (EV)
!EXIFFILTER_FILETYPE;File type
+!EXIFFILTER_IMAGETYPE;Image type
!EXIFFILTER_METADATAFILTER;Enable metadata filters
!EXIFPANEL_SHOWALL;Show all
!EXPORT_BYPASS;Processing steps to bypass
@@ -974,7 +975,7 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία
!HISTORY_MSG_491;White Balance
!HISTORY_MSG_492;RGB Curves
!HISTORY_MSG_493;L*a*b* Adjustments
-!HISTORY_MSG_CLAMPOOG;Out-of-gamut colours clipping
+!HISTORY_MSG_CLAMPOOG;Out-of-gamut color clipping
!HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction
!HISTORY_MSG_HISTMATCHING;Auto-Matched Tone Curve
!HISTORY_MSG_LOCALCONTRAST_AMOUNT;Local Contrast - Amount
@@ -1620,7 +1621,7 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία
!TP_EPD_STRENGTH;Strength
!TP_EPD_TOOLTIP;Tone mapping is possible in L*a*b* mode (standard) and CIECAM02 mode.\n\nWhen in L*a*b* mode, tone mapping can also be used on the residual image of the Wavelet Levels tool.\n\nTo engage CIECAM02 tone mapping mode enable the following settings:\n1. CIECAM02\n2. Algorithm="Brightness + Colorfulness (QM)"\n3. "Tone mapping using CIECAM02 brightness (Q)"
!TP_EXPOSURE_AUTOLEVELS_TIP;Toggles execution of Auto Levels to automatically set Exposure slider values based on an image analysis.\nEnables Highlight Reconstruction if necessary.
-!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colours
+!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colors
!TP_EXPOSURE_CLIP_TIP;The fraction of pixels to be clipped in Auto Levels operation.
!TP_EXPOSURE_COMPRHIGHLIGHTSTHRESHOLD;Highlight compression threshold
!TP_EXPOSURE_CURVEEDITOR1;Tone curve 1
@@ -1830,53 +1831,34 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία
!TP_RAW_MONO;Mono
!TP_RAW_NONE;None (Shows sensor pattern)
!TP_RAW_PIXELSHIFT;Pixel Shift
-!TP_RAW_PIXELSHIFTADAPTIVE;Adaptive detection
!TP_RAW_PIXELSHIFTBLUR;Blur motion mask
-!TP_RAW_PIXELSHIFTEPERISO;ISO adaption
-!TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;The default value of 0 should work fine for base ISO.\nIncrease the value to improve motion detection for higher ISO.\nIncrease in small steps and watch the motion mask while increasing.
+!TP_RAW_PIXELSHIFTEPERISO;Sensitivity
+!TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;The default value of 0 should work fine for base ISO.\nHigher values increase sensitivity of motion detection.\nChange in small steps and watch the motion mask while changing.\nIncrease sensitivity for underexposed or high ISO images.
!TP_RAW_PIXELSHIFTEQUALBRIGHT;Equalize brightness of frames
!TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL;Equalize per channel
!TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL_TOOLTIP;Enabled: Equalize the RGB channels individually.\nDisabled: Use same equalization factor for all channels.
-!TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;Equalize the brightness of the frames to the brightness of the selected frame.\nIf there are overexposed areas in the frames select the brightest frame to avoid magenta colour cast in overexposed areas or enable motion correction.
-!TP_RAW_PIXELSHIFTEXP0;Experimental
+!TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;Equalize the brightness of the frames to the brightness of the selected frame.\nIf there are overexposed areas in the frames select the brightest frame to avoid magenta color cast in overexposed areas or enable motion correction.
!TP_RAW_PIXELSHIFTGREEN;Check green channel for motion
!TP_RAW_PIXELSHIFTHOLEFILL;Fill holes in motion mask
!TP_RAW_PIXELSHIFTHOLEFILL_TOOLTIP;Fill holes in motion mask
!TP_RAW_PIXELSHIFTLMMSE;Use LMMSE for moving parts
!TP_RAW_PIXELSHIFTLMMSE_TOOLTIP;Use LMMSE instead of AMaZE for areas of motion.\nUseful for high ISO images.
-!TP_RAW_PIXELSHIFTMASKTHRESHOLD;3x3 new threshold
!TP_RAW_PIXELSHIFTMEDIAN;Use median for moving parts
-!TP_RAW_PIXELSHIFTMEDIAN3;Exclude selected frame from median
-!TP_RAW_PIXELSHIFTMEDIAN3_TOOLTIP;Excludes selected frame from median.\nUseful if moving objects overlap in frame 2 and 3
!TP_RAW_PIXELSHIFTMEDIAN_TOOLTIP;Use median of all frames instead of selected frame for regions with motion.\nRemoves objects which are at different places in all frames.\nGives motion effect on slow moving (overlapping) objects.
!TP_RAW_PIXELSHIFTMM_AUTO;Automatic
!TP_RAW_PIXELSHIFTMM_CUSTOM;Custom
!TP_RAW_PIXELSHIFTMM_OFF;Off
-!TP_RAW_PIXELSHIFTMOTION;Motion detection level (deprecated)
-!TP_RAW_PIXELSHIFTMOTIONCORRECTION;Green motion correction size
!TP_RAW_PIXELSHIFTMOTIONMETHOD;Motion Correction
!TP_RAW_PIXELSHIFTMOTION_TOOLTIP;0 means no motion detection.\n1 - 99 means motion will be detected according to this value. Increase value to increase detection rate.\n100 means the AMaZE-demosaiced frame will be used.
-!TP_RAW_PIXELSHIFTNONGREENAMAZE;Check red/blue AMaZE
!TP_RAW_PIXELSHIFTNONGREENCROSS;Check red/blue channels for motion
-!TP_RAW_PIXELSHIFTNONGREENCROSS2;Check green AMaZE
-!TP_RAW_PIXELSHIFTNONGREENHORIZONTAL;Check red/blue horizontal
-!TP_RAW_PIXELSHIFTNONGREENVERTICAL;Check red/blue vertical
-!TP_RAW_PIXELSHIFTNREADISO;nRead
-!TP_RAW_PIXELSHIFTONEGREEN;Use one green instead of average
-!TP_RAW_PIXELSHIFTONEGREEN_TOOLTIP;Use one green instead of averaging two greens for regions without motion.
-!TP_RAW_PIXELSHIFTPRNU;PRNU (%)
-!TP_RAW_PIXELSHIFTREDBLUEWEIGHT;Red&Blue weight
!TP_RAW_PIXELSHIFTSHOWMOTION;Show motion mask
!TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY;Show only motion mask
!TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY_TOOLTIP;Shows the motion mask without the image.
-!TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Overlays the image with a mask showing the regions with motion.
+!TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Overlays the image with a green mask showing the regions with motion.
!TP_RAW_PIXELSHIFTSIGMA;Blur radius
!TP_RAW_PIXELSHIFTSIGMA_TOOLTIP;The default radius of 1.0 usually fits well for base ISO.\nIncrease the value for high ISO shots, 5.0 is a good starting point.\nWatch the motion mask while changing the value.
!TP_RAW_PIXELSHIFTSMOOTH;Smooth transitions
!TP_RAW_PIXELSHIFTSMOOTH_TOOLTIP;Smooth transitions between areas with motion and areas without.\nSet to 0 to disable transition smoothing.\nSet to 1 to either get the AMaZE/LMMSE result of the selected frame (depending on whether "Use LMMSE" is selected), or the median of all four frames if "Use median" is selected.
-!TP_RAW_PIXELSHIFTSTDDEVFACTORBLUE;StdDev factor Blue
-!TP_RAW_PIXELSHIFTSTDDEVFACTORGREEN;StdDev factor Green
-!TP_RAW_PIXELSHIFTSTDDEVFACTORRED;StdDev factor Red
!TP_RAW_RCD;RCD
!TP_RAW_SENSOR_BAYER_LABEL;Sensor with Bayer Matrix
!TP_RAW_SENSOR_XTRANS_DMETHOD_TOOLTIP;3-pass gives best results (recommended for low ISO images).\n1-pass is almost undistinguishable from 3-pass for high ISO images and is faster.
@@ -2091,7 +2073,7 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία
!TP_WAVELET_EDGESENSI;Edge sensitivity
!TP_WAVELET_EDGREINF_TOOLTIP;Reinforce or reduce the action of the first level, do the opposite to the second level, and leave the rest unchanged.
!TP_WAVELET_EDGTHRESH;Detail
-!TP_WAVELET_EDGTHRESH_TOOLTIP;Change the repartition between the first levels and the others. The higher the threshold the more the action is centred on the first levels. Be careful with negative values, they increase the action of high levels and can introduce artifacts.
+!TP_WAVELET_EDGTHRESH_TOOLTIP;Change the repartition between the first levels and the others. The higher the threshold the more the action is centered on the first levels. Be careful with negative values, they increase the action of high levels and can introduce artifacts.
!TP_WAVELET_EDRAD;Radius
!TP_WAVELET_EDRAD_TOOLTIP;This radius adjustment is very different from those in other sharpening tools. Its value is compared to each level through a complex function. In this sense, a value of zero still has an effect.
!TP_WAVELET_EDSL;Threshold Sliders
diff --git a/rtdata/languages/Hebrew b/rtdata/languages/Hebrew
index 1b58e5ea4..2462da2a0 100644
--- a/rtdata/languages/Hebrew
+++ b/rtdata/languages/Hebrew
@@ -459,6 +459,7 @@ TP_WBALANCE_TEMPERATURE;מידת חום
!EDIT_PIPETTE_TOOLTIP;To add an adjustment point to the curve, hold the Ctrl key while left-clicking the desired spot in the image preview.\nTo adjust the point, hold the Ctrl key while left-clicking the corresponding area in the preview, then let go of Ctrl (unless you desire fine control) and while still holding the left mouse button move the mouse up or down to move that point up or down in the curve.
!EXIFFILTER_EXPOSURECOMPENSATION;Exposure compensation (EV)
!EXIFFILTER_FILETYPE;File type
+!EXIFFILTER_IMAGETYPE;Image type
!EXIFFILTER_METADATAFILTER;Enable metadata filters
!EXIFPANEL_SHOWALL;Show all
!EXPORT_BYPASS;Processing steps to bypass
@@ -975,7 +976,7 @@ TP_WBALANCE_TEMPERATURE;מידת חום
!HISTORY_MSG_491;White Balance
!HISTORY_MSG_492;RGB Curves
!HISTORY_MSG_493;L*a*b* Adjustments
-!HISTORY_MSG_CLAMPOOG;Out-of-gamut colours clipping
+!HISTORY_MSG_CLAMPOOG;Out-of-gamut color clipping
!HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction
!HISTORY_MSG_HISTMATCHING;Auto-Matched Tone Curve
!HISTORY_MSG_LOCALCONTRAST_AMOUNT;Local Contrast - Amount
@@ -1621,7 +1622,7 @@ TP_WBALANCE_TEMPERATURE;מידת חום
!TP_EPD_STRENGTH;Strength
!TP_EPD_TOOLTIP;Tone mapping is possible in L*a*b* mode (standard) and CIECAM02 mode.\n\nWhen in L*a*b* mode, tone mapping can also be used on the residual image of the Wavelet Levels tool.\n\nTo engage CIECAM02 tone mapping mode enable the following settings:\n1. CIECAM02\n2. Algorithm="Brightness + Colorfulness (QM)"\n3. "Tone mapping using CIECAM02 brightness (Q)"
!TP_EXPOSURE_AUTOLEVELS_TIP;Toggles execution of Auto Levels to automatically set Exposure slider values based on an image analysis.\nEnables Highlight Reconstruction if necessary.
-!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colours
+!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colors
!TP_EXPOSURE_CLIP_TIP;The fraction of pixels to be clipped in Auto Levels operation.
!TP_EXPOSURE_COMPRHIGHLIGHTSTHRESHOLD;Highlight compression threshold
!TP_EXPOSURE_CURVEEDITOR1;Tone curve 1
@@ -1831,53 +1832,34 @@ TP_WBALANCE_TEMPERATURE;מידת חום
!TP_RAW_MONO;Mono
!TP_RAW_NONE;None (Shows sensor pattern)
!TP_RAW_PIXELSHIFT;Pixel Shift
-!TP_RAW_PIXELSHIFTADAPTIVE;Adaptive detection
!TP_RAW_PIXELSHIFTBLUR;Blur motion mask
-!TP_RAW_PIXELSHIFTEPERISO;ISO adaption
-!TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;The default value of 0 should work fine for base ISO.\nIncrease the value to improve motion detection for higher ISO.\nIncrease in small steps and watch the motion mask while increasing.
+!TP_RAW_PIXELSHIFTEPERISO;Sensitivity
+!TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;The default value of 0 should work fine for base ISO.\nHigher values increase sensitivity of motion detection.\nChange in small steps and watch the motion mask while changing.\nIncrease sensitivity for underexposed or high ISO images.
!TP_RAW_PIXELSHIFTEQUALBRIGHT;Equalize brightness of frames
!TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL;Equalize per channel
!TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL_TOOLTIP;Enabled: Equalize the RGB channels individually.\nDisabled: Use same equalization factor for all channels.
-!TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;Equalize the brightness of the frames to the brightness of the selected frame.\nIf there are overexposed areas in the frames select the brightest frame to avoid magenta colour cast in overexposed areas or enable motion correction.
-!TP_RAW_PIXELSHIFTEXP0;Experimental
+!TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;Equalize the brightness of the frames to the brightness of the selected frame.\nIf there are overexposed areas in the frames select the brightest frame to avoid magenta color cast in overexposed areas or enable motion correction.
!TP_RAW_PIXELSHIFTGREEN;Check green channel for motion
!TP_RAW_PIXELSHIFTHOLEFILL;Fill holes in motion mask
!TP_RAW_PIXELSHIFTHOLEFILL_TOOLTIP;Fill holes in motion mask
!TP_RAW_PIXELSHIFTLMMSE;Use LMMSE for moving parts
!TP_RAW_PIXELSHIFTLMMSE_TOOLTIP;Use LMMSE instead of AMaZE for areas of motion.\nUseful for high ISO images.
-!TP_RAW_PIXELSHIFTMASKTHRESHOLD;3x3 new threshold
!TP_RAW_PIXELSHIFTMEDIAN;Use median for moving parts
-!TP_RAW_PIXELSHIFTMEDIAN3;Exclude selected frame from median
-!TP_RAW_PIXELSHIFTMEDIAN3_TOOLTIP;Excludes selected frame from median.\nUseful if moving objects overlap in frame 2 and 3
!TP_RAW_PIXELSHIFTMEDIAN_TOOLTIP;Use median of all frames instead of selected frame for regions with motion.\nRemoves objects which are at different places in all frames.\nGives motion effect on slow moving (overlapping) objects.
!TP_RAW_PIXELSHIFTMM_AUTO;Automatic
!TP_RAW_PIXELSHIFTMM_CUSTOM;Custom
!TP_RAW_PIXELSHIFTMM_OFF;Off
-!TP_RAW_PIXELSHIFTMOTION;Motion detection level (deprecated)
-!TP_RAW_PIXELSHIFTMOTIONCORRECTION;Green motion correction size
!TP_RAW_PIXELSHIFTMOTIONMETHOD;Motion Correction
!TP_RAW_PIXELSHIFTMOTION_TOOLTIP;0 means no motion detection.\n1 - 99 means motion will be detected according to this value. Increase value to increase detection rate.\n100 means the AMaZE-demosaiced frame will be used.
-!TP_RAW_PIXELSHIFTNONGREENAMAZE;Check red/blue AMaZE
!TP_RAW_PIXELSHIFTNONGREENCROSS;Check red/blue channels for motion
-!TP_RAW_PIXELSHIFTNONGREENCROSS2;Check green AMaZE
-!TP_RAW_PIXELSHIFTNONGREENHORIZONTAL;Check red/blue horizontal
-!TP_RAW_PIXELSHIFTNONGREENVERTICAL;Check red/blue vertical
-!TP_RAW_PIXELSHIFTNREADISO;nRead
-!TP_RAW_PIXELSHIFTONEGREEN;Use one green instead of average
-!TP_RAW_PIXELSHIFTONEGREEN_TOOLTIP;Use one green instead of averaging two greens for regions without motion.
-!TP_RAW_PIXELSHIFTPRNU;PRNU (%)
-!TP_RAW_PIXELSHIFTREDBLUEWEIGHT;Red&Blue weight
!TP_RAW_PIXELSHIFTSHOWMOTION;Show motion mask
!TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY;Show only motion mask
!TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY_TOOLTIP;Shows the motion mask without the image.
-!TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Overlays the image with a mask showing the regions with motion.
+!TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Overlays the image with a green mask showing the regions with motion.
!TP_RAW_PIXELSHIFTSIGMA;Blur radius
!TP_RAW_PIXELSHIFTSIGMA_TOOLTIP;The default radius of 1.0 usually fits well for base ISO.\nIncrease the value for high ISO shots, 5.0 is a good starting point.\nWatch the motion mask while changing the value.
!TP_RAW_PIXELSHIFTSMOOTH;Smooth transitions
!TP_RAW_PIXELSHIFTSMOOTH_TOOLTIP;Smooth transitions between areas with motion and areas without.\nSet to 0 to disable transition smoothing.\nSet to 1 to either get the AMaZE/LMMSE result of the selected frame (depending on whether "Use LMMSE" is selected), or the median of all four frames if "Use median" is selected.
-!TP_RAW_PIXELSHIFTSTDDEVFACTORBLUE;StdDev factor Blue
-!TP_RAW_PIXELSHIFTSTDDEVFACTORGREEN;StdDev factor Green
-!TP_RAW_PIXELSHIFTSTDDEVFACTORRED;StdDev factor Red
!TP_RAW_RCD;RCD
!TP_RAW_SENSOR_BAYER_LABEL;Sensor with Bayer Matrix
!TP_RAW_SENSOR_XTRANS_DMETHOD_TOOLTIP;3-pass gives best results (recommended for low ISO images).\n1-pass is almost undistinguishable from 3-pass for high ISO images and is faster.
@@ -2092,7 +2074,7 @@ TP_WBALANCE_TEMPERATURE;מידת חום
!TP_WAVELET_EDGESENSI;Edge sensitivity
!TP_WAVELET_EDGREINF_TOOLTIP;Reinforce or reduce the action of the first level, do the opposite to the second level, and leave the rest unchanged.
!TP_WAVELET_EDGTHRESH;Detail
-!TP_WAVELET_EDGTHRESH_TOOLTIP;Change the repartition between the first levels and the others. The higher the threshold the more the action is centred on the first levels. Be careful with negative values, they increase the action of high levels and can introduce artifacts.
+!TP_WAVELET_EDGTHRESH_TOOLTIP;Change the repartition between the first levels and the others. The higher the threshold the more the action is centered on the first levels. Be careful with negative values, they increase the action of high levels and can introduce artifacts.
!TP_WAVELET_EDRAD;Radius
!TP_WAVELET_EDRAD_TOOLTIP;This radius adjustment is very different from those in other sharpening tools. Its value is compared to each level through a complex function. In this sense, a value of zero still has an effect.
!TP_WAVELET_EDSL;Threshold Sliders
diff --git a/rtdata/languages/Italiano b/rtdata/languages/Italiano
index 3290d1996..0a99dad51 100644
--- a/rtdata/languages/Italiano
+++ b/rtdata/languages/Italiano
@@ -1336,6 +1336,7 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: -
!DYNPROFILEEDITOR_NEW;New
!DYNPROFILEEDITOR_NEW_RULE;New Dynamic Profile Rule
!DYNPROFILEEDITOR_PROFILE;Processing Profile
+!EXIFFILTER_IMAGETYPE;Image type
!EXIFPANEL_SHOWALL;Show all
!EXPORT_BYPASS;Processing steps to bypass
!EXPORT_BYPASS_EQUALIZER;Bypass Wavelet Levels
@@ -1583,7 +1584,7 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: -
!HISTORY_MSG_491;White Balance
!HISTORY_MSG_492;RGB Curves
!HISTORY_MSG_493;L*a*b* Adjustments
-!HISTORY_MSG_CLAMPOOG;Out-of-gamut colours clipping
+!HISTORY_MSG_CLAMPOOG;Out-of-gamut color clipping
!HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction
!HISTORY_MSG_HISTMATCHING;Auto-Matched Tone Curve
!HISTORY_MSG_LOCALCONTRAST_AMOUNT;Local Contrast - Amount
@@ -1852,7 +1853,7 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: -
!TP_DIRPYREQUALIZER_ARTIF;Reduce artifacts
!TP_DISTORTION_AUTO_TIP;Automatically corrects lens distortion in raw files by matching it against the embedded JPEG image if one exists and has had its lens disortion auto-corrected by the camera.
!TP_EPD_GAMMA;Gamma
-!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colours
+!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colors
!TP_EXPOSURE_HISTMATCHING;Auto-Matched Tone Curve
!TP_EXPOSURE_HISTMATCHING_TOOLTIP;Automatically adjust sliders and curves (except exposure compensation) to match the look of the embedded JPEG thumbnail.
!TP_EXPOSURE_TCMODE_LUMINANCE;Luminance
@@ -1925,53 +1926,34 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: -
!TP_RAW_MONO;Mono
!TP_RAW_NONE;None (Shows sensor pattern)
!TP_RAW_PIXELSHIFT;Pixel Shift
-!TP_RAW_PIXELSHIFTADAPTIVE;Adaptive detection
!TP_RAW_PIXELSHIFTBLUR;Blur motion mask
-!TP_RAW_PIXELSHIFTEPERISO;ISO adaption
-!TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;The default value of 0 should work fine for base ISO.\nIncrease the value to improve motion detection for higher ISO.\nIncrease in small steps and watch the motion mask while increasing.
+!TP_RAW_PIXELSHIFTEPERISO;Sensitivity
+!TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;The default value of 0 should work fine for base ISO.\nHigher values increase sensitivity of motion detection.\nChange in small steps and watch the motion mask while changing.\nIncrease sensitivity for underexposed or high ISO images.
!TP_RAW_PIXELSHIFTEQUALBRIGHT;Equalize brightness of frames
!TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL;Equalize per channel
!TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL_TOOLTIP;Enabled: Equalize the RGB channels individually.\nDisabled: Use same equalization factor for all channels.
-!TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;Equalize the brightness of the frames to the brightness of the selected frame.\nIf there are overexposed areas in the frames select the brightest frame to avoid magenta colour cast in overexposed areas or enable motion correction.
-!TP_RAW_PIXELSHIFTEXP0;Experimental
+!TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;Equalize the brightness of the frames to the brightness of the selected frame.\nIf there are overexposed areas in the frames select the brightest frame to avoid magenta color cast in overexposed areas or enable motion correction.
!TP_RAW_PIXELSHIFTGREEN;Check green channel for motion
!TP_RAW_PIXELSHIFTHOLEFILL;Fill holes in motion mask
!TP_RAW_PIXELSHIFTHOLEFILL_TOOLTIP;Fill holes in motion mask
!TP_RAW_PIXELSHIFTLMMSE;Use LMMSE for moving parts
!TP_RAW_PIXELSHIFTLMMSE_TOOLTIP;Use LMMSE instead of AMaZE for areas of motion.\nUseful for high ISO images.
-!TP_RAW_PIXELSHIFTMASKTHRESHOLD;3x3 new threshold
!TP_RAW_PIXELSHIFTMEDIAN;Use median for moving parts
-!TP_RAW_PIXELSHIFTMEDIAN3;Exclude selected frame from median
-!TP_RAW_PIXELSHIFTMEDIAN3_TOOLTIP;Excludes selected frame from median.\nUseful if moving objects overlap in frame 2 and 3
!TP_RAW_PIXELSHIFTMEDIAN_TOOLTIP;Use median of all frames instead of selected frame for regions with motion.\nRemoves objects which are at different places in all frames.\nGives motion effect on slow moving (overlapping) objects.
!TP_RAW_PIXELSHIFTMM_AUTO;Automatic
!TP_RAW_PIXELSHIFTMM_CUSTOM;Custom
!TP_RAW_PIXELSHIFTMM_OFF;Off
-!TP_RAW_PIXELSHIFTMOTION;Motion detection level (deprecated)
-!TP_RAW_PIXELSHIFTMOTIONCORRECTION;Green motion correction size
!TP_RAW_PIXELSHIFTMOTIONMETHOD;Motion Correction
!TP_RAW_PIXELSHIFTMOTION_TOOLTIP;0 means no motion detection.\n1 - 99 means motion will be detected according to this value. Increase value to increase detection rate.\n100 means the AMaZE-demosaiced frame will be used.
-!TP_RAW_PIXELSHIFTNONGREENAMAZE;Check red/blue AMaZE
!TP_RAW_PIXELSHIFTNONGREENCROSS;Check red/blue channels for motion
-!TP_RAW_PIXELSHIFTNONGREENCROSS2;Check green AMaZE
-!TP_RAW_PIXELSHIFTNONGREENHORIZONTAL;Check red/blue horizontal
-!TP_RAW_PIXELSHIFTNONGREENVERTICAL;Check red/blue vertical
-!TP_RAW_PIXELSHIFTNREADISO;nRead
-!TP_RAW_PIXELSHIFTONEGREEN;Use one green instead of average
-!TP_RAW_PIXELSHIFTONEGREEN_TOOLTIP;Use one green instead of averaging two greens for regions without motion.
-!TP_RAW_PIXELSHIFTPRNU;PRNU (%)
-!TP_RAW_PIXELSHIFTREDBLUEWEIGHT;Red&Blue weight
!TP_RAW_PIXELSHIFTSHOWMOTION;Show motion mask
!TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY;Show only motion mask
!TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY_TOOLTIP;Shows the motion mask without the image.
-!TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Overlays the image with a mask showing the regions with motion.
+!TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Overlays the image with a green mask showing the regions with motion.
!TP_RAW_PIXELSHIFTSIGMA;Blur radius
!TP_RAW_PIXELSHIFTSIGMA_TOOLTIP;The default radius of 1.0 usually fits well for base ISO.\nIncrease the value for high ISO shots, 5.0 is a good starting point.\nWatch the motion mask while changing the value.
!TP_RAW_PIXELSHIFTSMOOTH;Smooth transitions
!TP_RAW_PIXELSHIFTSMOOTH_TOOLTIP;Smooth transitions between areas with motion and areas without.\nSet to 0 to disable transition smoothing.\nSet to 1 to either get the AMaZE/LMMSE result of the selected frame (depending on whether "Use LMMSE" is selected), or the median of all four frames if "Use median" is selected.
-!TP_RAW_PIXELSHIFTSTDDEVFACTORBLUE;StdDev factor Blue
-!TP_RAW_PIXELSHIFTSTDDEVFACTORGREEN;StdDev factor Green
-!TP_RAW_PIXELSHIFTSTDDEVFACTORRED;StdDev factor Red
!TP_RAW_RCD;RCD
!TP_RAW_SENSOR_BAYER_LABEL;Sensor with Bayer Matrix
!TP_RAW_SENSOR_XTRANS_DMETHOD_TOOLTIP;3-pass gives best results (recommended for low ISO images).\n1-pass is almost undistinguishable from 3-pass for high ISO images and is faster.
@@ -2140,7 +2122,7 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: -
!TP_WAVELET_EDGESENSI;Edge sensitivity
!TP_WAVELET_EDGREINF_TOOLTIP;Reinforce or reduce the action of the first level, do the opposite to the second level, and leave the rest unchanged.
!TP_WAVELET_EDGTHRESH;Detail
-!TP_WAVELET_EDGTHRESH_TOOLTIP;Change the repartition between the first levels and the others. The higher the threshold the more the action is centred on the first levels. Be careful with negative values, they increase the action of high levels and can introduce artifacts.
+!TP_WAVELET_EDGTHRESH_TOOLTIP;Change the repartition between the first levels and the others. The higher the threshold the more the action is centered on the first levels. Be careful with negative values, they increase the action of high levels and can introduce artifacts.
!TP_WAVELET_EDRAD;Radius
!TP_WAVELET_EDRAD_TOOLTIP;This radius adjustment is very different from those in other sharpening tools. Its value is compared to each level through a complex function. In this sense, a value of zero still has an effect.
!TP_WAVELET_EDSL;Threshold Sliders
diff --git a/rtdata/languages/Japanese b/rtdata/languages/Japanese
index 698085d57..10aba8461 100644
--- a/rtdata/languages/Japanese
+++ b/rtdata/languages/Japanese
@@ -1866,6 +1866,7 @@ ZOOMPANEL_ZOOMOUT;ズームアウト\nショートカット: -
!DYNPROFILEEDITOR_NEW;New
!DYNPROFILEEDITOR_NEW_RULE;New Dynamic Profile Rule
!DYNPROFILEEDITOR_PROFILE;Processing Profile
+!EXIFFILTER_IMAGETYPE;Image type
!EXIFPANEL_SHOWALL;Show all
!EXPORT_BYPASS;Processing steps to bypass
!EXPORT_PIPELINE;Processing pipeline
@@ -1954,7 +1955,7 @@ ZOOMPANEL_ZOOMOUT;ズームアウト\nショートカット: -
!HISTORY_MSG_491;White Balance
!HISTORY_MSG_492;RGB Curves
!HISTORY_MSG_493;L*a*b* Adjustments
-!HISTORY_MSG_CLAMPOOG;Out-of-gamut colours clipping
+!HISTORY_MSG_CLAMPOOG;Out-of-gamut color clipping
!HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction
!HISTORY_MSG_HISTMATCHING;Auto-Matched Tone Curve
!HISTORY_MSG_LOCALCONTRAST_AMOUNT;Local Contrast - Amount
@@ -2085,7 +2086,7 @@ ZOOMPANEL_ZOOMOUT;ズームアウト\nショートカット: -
!TP_DIRPYRDENOISE_TYPE_7X7;7×7
!TP_DIRPYRDENOISE_TYPE_9X9;9×9
!TP_DISTORTION_AUTO_TIP;Automatically corrects lens distortion in raw files by matching it against the embedded JPEG image if one exists and has had its lens disortion auto-corrected by the camera.
-!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colours
+!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colors
!TP_EXPOSURE_HISTMATCHING;Auto-Matched Tone Curve
!TP_EXPOSURE_HISTMATCHING_TOOLTIP;Automatically adjust sliders and curves (except exposure compensation) to match the look of the embedded JPEG thumbnail.
!TP_FILMSIMULATION_SLOWPARSEDIR;RawTherapee is configured to look for Hald CLUT images, which are used for the Film Simulation tool, in a folder which is taking too long to load.\nGo to Preferences > Image Processing > Film Simulation\nto see which folder is being used. You should either point RawTherapee to a folder which contains only Hald CLUT images and nothing more, or to an empty folder if you don't want to use the Film Simulation tool.\n\nRead the Film Simulation article in RawPedia for more information.\n\nDo you want to cancel the scan now?
@@ -2125,53 +2126,34 @@ ZOOMPANEL_ZOOMOUT;ズームアウト\nショートカット: -
!TP_RAW_MONO;Mono
!TP_RAW_NONE;None (Shows sensor pattern)
!TP_RAW_PIXELSHIFT;Pixel Shift
-!TP_RAW_PIXELSHIFTADAPTIVE;Adaptive detection
!TP_RAW_PIXELSHIFTBLUR;Blur motion mask
-!TP_RAW_PIXELSHIFTEPERISO;ISO adaption
-!TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;The default value of 0 should work fine for base ISO.\nIncrease the value to improve motion detection for higher ISO.\nIncrease in small steps and watch the motion mask while increasing.
+!TP_RAW_PIXELSHIFTEPERISO;Sensitivity
+!TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;The default value of 0 should work fine for base ISO.\nHigher values increase sensitivity of motion detection.\nChange in small steps and watch the motion mask while changing.\nIncrease sensitivity for underexposed or high ISO images.
!TP_RAW_PIXELSHIFTEQUALBRIGHT;Equalize brightness of frames
!TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL;Equalize per channel
!TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL_TOOLTIP;Enabled: Equalize the RGB channels individually.\nDisabled: Use same equalization factor for all channels.
-!TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;Equalize the brightness of the frames to the brightness of the selected frame.\nIf there are overexposed areas in the frames select the brightest frame to avoid magenta colour cast in overexposed areas or enable motion correction.
-!TP_RAW_PIXELSHIFTEXP0;Experimental
+!TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;Equalize the brightness of the frames to the brightness of the selected frame.\nIf there are overexposed areas in the frames select the brightest frame to avoid magenta color cast in overexposed areas or enable motion correction.
!TP_RAW_PIXELSHIFTGREEN;Check green channel for motion
!TP_RAW_PIXELSHIFTHOLEFILL;Fill holes in motion mask
!TP_RAW_PIXELSHIFTHOLEFILL_TOOLTIP;Fill holes in motion mask
!TP_RAW_PIXELSHIFTLMMSE;Use LMMSE for moving parts
!TP_RAW_PIXELSHIFTLMMSE_TOOLTIP;Use LMMSE instead of AMaZE for areas of motion.\nUseful for high ISO images.
-!TP_RAW_PIXELSHIFTMASKTHRESHOLD;3x3 new threshold
!TP_RAW_PIXELSHIFTMEDIAN;Use median for moving parts
-!TP_RAW_PIXELSHIFTMEDIAN3;Exclude selected frame from median
-!TP_RAW_PIXELSHIFTMEDIAN3_TOOLTIP;Excludes selected frame from median.\nUseful if moving objects overlap in frame 2 and 3
!TP_RAW_PIXELSHIFTMEDIAN_TOOLTIP;Use median of all frames instead of selected frame for regions with motion.\nRemoves objects which are at different places in all frames.\nGives motion effect on slow moving (overlapping) objects.
!TP_RAW_PIXELSHIFTMM_AUTO;Automatic
!TP_RAW_PIXELSHIFTMM_CUSTOM;Custom
!TP_RAW_PIXELSHIFTMM_OFF;Off
-!TP_RAW_PIXELSHIFTMOTION;Motion detection level (deprecated)
-!TP_RAW_PIXELSHIFTMOTIONCORRECTION;Green motion correction size
!TP_RAW_PIXELSHIFTMOTIONMETHOD;Motion Correction
!TP_RAW_PIXELSHIFTMOTION_TOOLTIP;0 means no motion detection.\n1 - 99 means motion will be detected according to this value. Increase value to increase detection rate.\n100 means the AMaZE-demosaiced frame will be used.
-!TP_RAW_PIXELSHIFTNONGREENAMAZE;Check red/blue AMaZE
!TP_RAW_PIXELSHIFTNONGREENCROSS;Check red/blue channels for motion
-!TP_RAW_PIXELSHIFTNONGREENCROSS2;Check green AMaZE
-!TP_RAW_PIXELSHIFTNONGREENHORIZONTAL;Check red/blue horizontal
-!TP_RAW_PIXELSHIFTNONGREENVERTICAL;Check red/blue vertical
-!TP_RAW_PIXELSHIFTNREADISO;nRead
-!TP_RAW_PIXELSHIFTONEGREEN;Use one green instead of average
-!TP_RAW_PIXELSHIFTONEGREEN_TOOLTIP;Use one green instead of averaging two greens for regions without motion.
-!TP_RAW_PIXELSHIFTPRNU;PRNU (%)
-!TP_RAW_PIXELSHIFTREDBLUEWEIGHT;Red&Blue weight
!TP_RAW_PIXELSHIFTSHOWMOTION;Show motion mask
!TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY;Show only motion mask
!TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY_TOOLTIP;Shows the motion mask without the image.
-!TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Overlays the image with a mask showing the regions with motion.
+!TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Overlays the image with a green mask showing the regions with motion.
!TP_RAW_PIXELSHIFTSIGMA;Blur radius
!TP_RAW_PIXELSHIFTSIGMA_TOOLTIP;The default radius of 1.0 usually fits well for base ISO.\nIncrease the value for high ISO shots, 5.0 is a good starting point.\nWatch the motion mask while changing the value.
!TP_RAW_PIXELSHIFTSMOOTH;Smooth transitions
!TP_RAW_PIXELSHIFTSMOOTH_TOOLTIP;Smooth transitions between areas with motion and areas without.\nSet to 0 to disable transition smoothing.\nSet to 1 to either get the AMaZE/LMMSE result of the selected frame (depending on whether "Use LMMSE" is selected), or the median of all four frames if "Use median" is selected.
-!TP_RAW_PIXELSHIFTSTDDEVFACTORBLUE;StdDev factor Blue
-!TP_RAW_PIXELSHIFTSTDDEVFACTORGREEN;StdDev factor Green
-!TP_RAW_PIXELSHIFTSTDDEVFACTORRED;StdDev factor Red
!TP_RAW_RCD;RCD
!TP_RAW_VNG4;VNG4
!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL
diff --git a/rtdata/languages/Latvian b/rtdata/languages/Latvian
index 6366d76f4..41c2230f7 100644
--- a/rtdata/languages/Latvian
+++ b/rtdata/languages/Latvian
@@ -459,6 +459,7 @@ TP_WBALANCE_TEMPERATURE;Temperatūra
!EDIT_PIPETTE_TOOLTIP;To add an adjustment point to the curve, hold the Ctrl key while left-clicking the desired spot in the image preview.\nTo adjust the point, hold the Ctrl key while left-clicking the corresponding area in the preview, then let go of Ctrl (unless you desire fine control) and while still holding the left mouse button move the mouse up or down to move that point up or down in the curve.
!EXIFFILTER_EXPOSURECOMPENSATION;Exposure compensation (EV)
!EXIFFILTER_FILETYPE;File type
+!EXIFFILTER_IMAGETYPE;Image type
!EXIFFILTER_METADATAFILTER;Enable metadata filters
!EXIFPANEL_SHOWALL;Show all
!EXPORT_BYPASS;Processing steps to bypass
@@ -975,7 +976,7 @@ TP_WBALANCE_TEMPERATURE;Temperatūra
!HISTORY_MSG_491;White Balance
!HISTORY_MSG_492;RGB Curves
!HISTORY_MSG_493;L*a*b* Adjustments
-!HISTORY_MSG_CLAMPOOG;Out-of-gamut colours clipping
+!HISTORY_MSG_CLAMPOOG;Out-of-gamut color clipping
!HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction
!HISTORY_MSG_HISTMATCHING;Auto-Matched Tone Curve
!HISTORY_MSG_LOCALCONTRAST_AMOUNT;Local Contrast - Amount
@@ -1621,7 +1622,7 @@ TP_WBALANCE_TEMPERATURE;Temperatūra
!TP_EPD_STRENGTH;Strength
!TP_EPD_TOOLTIP;Tone mapping is possible in L*a*b* mode (standard) and CIECAM02 mode.\n\nWhen in L*a*b* mode, tone mapping can also be used on the residual image of the Wavelet Levels tool.\n\nTo engage CIECAM02 tone mapping mode enable the following settings:\n1. CIECAM02\n2. Algorithm="Brightness + Colorfulness (QM)"\n3. "Tone mapping using CIECAM02 brightness (Q)"
!TP_EXPOSURE_AUTOLEVELS_TIP;Toggles execution of Auto Levels to automatically set Exposure slider values based on an image analysis.\nEnables Highlight Reconstruction if necessary.
-!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colours
+!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colors
!TP_EXPOSURE_CLIP_TIP;The fraction of pixels to be clipped in Auto Levels operation.
!TP_EXPOSURE_COMPRHIGHLIGHTSTHRESHOLD;Highlight compression threshold
!TP_EXPOSURE_CURVEEDITOR1;Tone curve 1
@@ -1831,53 +1832,34 @@ TP_WBALANCE_TEMPERATURE;Temperatūra
!TP_RAW_MONO;Mono
!TP_RAW_NONE;None (Shows sensor pattern)
!TP_RAW_PIXELSHIFT;Pixel Shift
-!TP_RAW_PIXELSHIFTADAPTIVE;Adaptive detection
!TP_RAW_PIXELSHIFTBLUR;Blur motion mask
-!TP_RAW_PIXELSHIFTEPERISO;ISO adaption
-!TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;The default value of 0 should work fine for base ISO.\nIncrease the value to improve motion detection for higher ISO.\nIncrease in small steps and watch the motion mask while increasing.
+!TP_RAW_PIXELSHIFTEPERISO;Sensitivity
+!TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;The default value of 0 should work fine for base ISO.\nHigher values increase sensitivity of motion detection.\nChange in small steps and watch the motion mask while changing.\nIncrease sensitivity for underexposed or high ISO images.
!TP_RAW_PIXELSHIFTEQUALBRIGHT;Equalize brightness of frames
!TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL;Equalize per channel
!TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL_TOOLTIP;Enabled: Equalize the RGB channels individually.\nDisabled: Use same equalization factor for all channels.
-!TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;Equalize the brightness of the frames to the brightness of the selected frame.\nIf there are overexposed areas in the frames select the brightest frame to avoid magenta colour cast in overexposed areas or enable motion correction.
-!TP_RAW_PIXELSHIFTEXP0;Experimental
+!TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;Equalize the brightness of the frames to the brightness of the selected frame.\nIf there are overexposed areas in the frames select the brightest frame to avoid magenta color cast in overexposed areas or enable motion correction.
!TP_RAW_PIXELSHIFTGREEN;Check green channel for motion
!TP_RAW_PIXELSHIFTHOLEFILL;Fill holes in motion mask
!TP_RAW_PIXELSHIFTHOLEFILL_TOOLTIP;Fill holes in motion mask
!TP_RAW_PIXELSHIFTLMMSE;Use LMMSE for moving parts
!TP_RAW_PIXELSHIFTLMMSE_TOOLTIP;Use LMMSE instead of AMaZE for areas of motion.\nUseful for high ISO images.
-!TP_RAW_PIXELSHIFTMASKTHRESHOLD;3x3 new threshold
!TP_RAW_PIXELSHIFTMEDIAN;Use median for moving parts
-!TP_RAW_PIXELSHIFTMEDIAN3;Exclude selected frame from median
-!TP_RAW_PIXELSHIFTMEDIAN3_TOOLTIP;Excludes selected frame from median.\nUseful if moving objects overlap in frame 2 and 3
!TP_RAW_PIXELSHIFTMEDIAN_TOOLTIP;Use median of all frames instead of selected frame for regions with motion.\nRemoves objects which are at different places in all frames.\nGives motion effect on slow moving (overlapping) objects.
!TP_RAW_PIXELSHIFTMM_AUTO;Automatic
!TP_RAW_PIXELSHIFTMM_CUSTOM;Custom
!TP_RAW_PIXELSHIFTMM_OFF;Off
-!TP_RAW_PIXELSHIFTMOTION;Motion detection level (deprecated)
-!TP_RAW_PIXELSHIFTMOTIONCORRECTION;Green motion correction size
!TP_RAW_PIXELSHIFTMOTIONMETHOD;Motion Correction
!TP_RAW_PIXELSHIFTMOTION_TOOLTIP;0 means no motion detection.\n1 - 99 means motion will be detected according to this value. Increase value to increase detection rate.\n100 means the AMaZE-demosaiced frame will be used.
-!TP_RAW_PIXELSHIFTNONGREENAMAZE;Check red/blue AMaZE
!TP_RAW_PIXELSHIFTNONGREENCROSS;Check red/blue channels for motion
-!TP_RAW_PIXELSHIFTNONGREENCROSS2;Check green AMaZE
-!TP_RAW_PIXELSHIFTNONGREENHORIZONTAL;Check red/blue horizontal
-!TP_RAW_PIXELSHIFTNONGREENVERTICAL;Check red/blue vertical
-!TP_RAW_PIXELSHIFTNREADISO;nRead
-!TP_RAW_PIXELSHIFTONEGREEN;Use one green instead of average
-!TP_RAW_PIXELSHIFTONEGREEN_TOOLTIP;Use one green instead of averaging two greens for regions without motion.
-!TP_RAW_PIXELSHIFTPRNU;PRNU (%)
-!TP_RAW_PIXELSHIFTREDBLUEWEIGHT;Red&Blue weight
!TP_RAW_PIXELSHIFTSHOWMOTION;Show motion mask
!TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY;Show only motion mask
!TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY_TOOLTIP;Shows the motion mask without the image.
-!TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Overlays the image with a mask showing the regions with motion.
+!TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Overlays the image with a green mask showing the regions with motion.
!TP_RAW_PIXELSHIFTSIGMA;Blur radius
!TP_RAW_PIXELSHIFTSIGMA_TOOLTIP;The default radius of 1.0 usually fits well for base ISO.\nIncrease the value for high ISO shots, 5.0 is a good starting point.\nWatch the motion mask while changing the value.
!TP_RAW_PIXELSHIFTSMOOTH;Smooth transitions
!TP_RAW_PIXELSHIFTSMOOTH_TOOLTIP;Smooth transitions between areas with motion and areas without.\nSet to 0 to disable transition smoothing.\nSet to 1 to either get the AMaZE/LMMSE result of the selected frame (depending on whether "Use LMMSE" is selected), or the median of all four frames if "Use median" is selected.
-!TP_RAW_PIXELSHIFTSTDDEVFACTORBLUE;StdDev factor Blue
-!TP_RAW_PIXELSHIFTSTDDEVFACTORGREEN;StdDev factor Green
-!TP_RAW_PIXELSHIFTSTDDEVFACTORRED;StdDev factor Red
!TP_RAW_RCD;RCD
!TP_RAW_SENSOR_BAYER_LABEL;Sensor with Bayer Matrix
!TP_RAW_SENSOR_XTRANS_DMETHOD_TOOLTIP;3-pass gives best results (recommended for low ISO images).\n1-pass is almost undistinguishable from 3-pass for high ISO images and is faster.
@@ -2092,7 +2074,7 @@ TP_WBALANCE_TEMPERATURE;Temperatūra
!TP_WAVELET_EDGESENSI;Edge sensitivity
!TP_WAVELET_EDGREINF_TOOLTIP;Reinforce or reduce the action of the first level, do the opposite to the second level, and leave the rest unchanged.
!TP_WAVELET_EDGTHRESH;Detail
-!TP_WAVELET_EDGTHRESH_TOOLTIP;Change the repartition between the first levels and the others. The higher the threshold the more the action is centred on the first levels. Be careful with negative values, they increase the action of high levels and can introduce artifacts.
+!TP_WAVELET_EDGTHRESH_TOOLTIP;Change the repartition between the first levels and the others. The higher the threshold the more the action is centered on the first levels. Be careful with negative values, they increase the action of high levels and can introduce artifacts.
!TP_WAVELET_EDRAD;Radius
!TP_WAVELET_EDRAD_TOOLTIP;This radius adjustment is very different from those in other sharpening tools. Its value is compared to each level through a complex function. In this sense, a value of zero still has an effect.
!TP_WAVELET_EDSL;Threshold Sliders
diff --git a/rtdata/languages/Magyar b/rtdata/languages/Magyar
index ef3f8d4d8..a23542b45 100644
--- a/rtdata/languages/Magyar
+++ b/rtdata/languages/Magyar
@@ -885,6 +885,7 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés -
!DYNPROFILEEDITOR_PROFILE;Processing Profile
!EDIT_OBJECT_TOOLTIP;Displays a widget on the preview window which lets you adjust this tool.
!EDIT_PIPETTE_TOOLTIP;To add an adjustment point to the curve, hold the Ctrl key while left-clicking the desired spot in the image preview.\nTo adjust the point, hold the Ctrl key while left-clicking the corresponding area in the preview, then let go of Ctrl (unless you desire fine control) and while still holding the left mouse button move the mouse up or down to move that point up or down in the curve.
+!EXIFFILTER_IMAGETYPE;Image type
!EXIFPANEL_SHOWALL;Show all
!EXPORT_BYPASS;Processing steps to bypass
!EXPORT_BYPASS_EQUALIZER;Bypass Wavelet Levels
@@ -1248,7 +1249,7 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés -
!HISTORY_MSG_491;White Balance
!HISTORY_MSG_492;RGB Curves
!HISTORY_MSG_493;L*a*b* Adjustments
-!HISTORY_MSG_CLAMPOOG;Out-of-gamut colours clipping
+!HISTORY_MSG_CLAMPOOG;Out-of-gamut color clipping
!HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction
!HISTORY_MSG_HISTMATCHING;Auto-Matched Tone Curve
!HISTORY_MSG_LOCALCONTRAST_AMOUNT;Local Contrast - Amount
@@ -1749,7 +1750,7 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés -
!TP_DISTORTION_AUTO_TIP;Automatically corrects lens distortion in raw files by matching it against the embedded JPEG image if one exists and has had its lens disortion auto-corrected by the camera.
!TP_EPD_GAMMA;Gamma
!TP_EPD_TOOLTIP;Tone mapping is possible in L*a*b* mode (standard) and CIECAM02 mode.\n\nWhen in L*a*b* mode, tone mapping can also be used on the residual image of the Wavelet Levels tool.\n\nTo engage CIECAM02 tone mapping mode enable the following settings:\n1. CIECAM02\n2. Algorithm="Brightness + Colorfulness (QM)"\n3. "Tone mapping using CIECAM02 brightness (Q)"
-!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colours
+!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colors
!TP_EXPOSURE_CURVEEDITOR1;Tone curve 1
!TP_EXPOSURE_CURVEEDITOR2;Tone curve 2
!TP_EXPOSURE_CURVEEDITOR2_TOOLTIP;Please refer to the "Exposure > Tone Curves" RawPedia article to learn how to achieve the best results by using two tone curves.
@@ -1902,53 +1903,34 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés -
!TP_RAW_MONO;Mono
!TP_RAW_NONE;None (Shows sensor pattern)
!TP_RAW_PIXELSHIFT;Pixel Shift
-!TP_RAW_PIXELSHIFTADAPTIVE;Adaptive detection
!TP_RAW_PIXELSHIFTBLUR;Blur motion mask
-!TP_RAW_PIXELSHIFTEPERISO;ISO adaption
-!TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;The default value of 0 should work fine for base ISO.\nIncrease the value to improve motion detection for higher ISO.\nIncrease in small steps and watch the motion mask while increasing.
+!TP_RAW_PIXELSHIFTEPERISO;Sensitivity
+!TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;The default value of 0 should work fine for base ISO.\nHigher values increase sensitivity of motion detection.\nChange in small steps and watch the motion mask while changing.\nIncrease sensitivity for underexposed or high ISO images.
!TP_RAW_PIXELSHIFTEQUALBRIGHT;Equalize brightness of frames
!TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL;Equalize per channel
!TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL_TOOLTIP;Enabled: Equalize the RGB channels individually.\nDisabled: Use same equalization factor for all channels.
-!TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;Equalize the brightness of the frames to the brightness of the selected frame.\nIf there are overexposed areas in the frames select the brightest frame to avoid magenta colour cast in overexposed areas or enable motion correction.
-!TP_RAW_PIXELSHIFTEXP0;Experimental
+!TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;Equalize the brightness of the frames to the brightness of the selected frame.\nIf there are overexposed areas in the frames select the brightest frame to avoid magenta color cast in overexposed areas or enable motion correction.
!TP_RAW_PIXELSHIFTGREEN;Check green channel for motion
!TP_RAW_PIXELSHIFTHOLEFILL;Fill holes in motion mask
!TP_RAW_PIXELSHIFTHOLEFILL_TOOLTIP;Fill holes in motion mask
!TP_RAW_PIXELSHIFTLMMSE;Use LMMSE for moving parts
!TP_RAW_PIXELSHIFTLMMSE_TOOLTIP;Use LMMSE instead of AMaZE for areas of motion.\nUseful for high ISO images.
-!TP_RAW_PIXELSHIFTMASKTHRESHOLD;3x3 new threshold
!TP_RAW_PIXELSHIFTMEDIAN;Use median for moving parts
-!TP_RAW_PIXELSHIFTMEDIAN3;Exclude selected frame from median
-!TP_RAW_PIXELSHIFTMEDIAN3_TOOLTIP;Excludes selected frame from median.\nUseful if moving objects overlap in frame 2 and 3
!TP_RAW_PIXELSHIFTMEDIAN_TOOLTIP;Use median of all frames instead of selected frame for regions with motion.\nRemoves objects which are at different places in all frames.\nGives motion effect on slow moving (overlapping) objects.
!TP_RAW_PIXELSHIFTMM_AUTO;Automatic
!TP_RAW_PIXELSHIFTMM_CUSTOM;Custom
!TP_RAW_PIXELSHIFTMM_OFF;Off
-!TP_RAW_PIXELSHIFTMOTION;Motion detection level (deprecated)
-!TP_RAW_PIXELSHIFTMOTIONCORRECTION;Green motion correction size
!TP_RAW_PIXELSHIFTMOTIONMETHOD;Motion Correction
!TP_RAW_PIXELSHIFTMOTION_TOOLTIP;0 means no motion detection.\n1 - 99 means motion will be detected according to this value. Increase value to increase detection rate.\n100 means the AMaZE-demosaiced frame will be used.
-!TP_RAW_PIXELSHIFTNONGREENAMAZE;Check red/blue AMaZE
!TP_RAW_PIXELSHIFTNONGREENCROSS;Check red/blue channels for motion
-!TP_RAW_PIXELSHIFTNONGREENCROSS2;Check green AMaZE
-!TP_RAW_PIXELSHIFTNONGREENHORIZONTAL;Check red/blue horizontal
-!TP_RAW_PIXELSHIFTNONGREENVERTICAL;Check red/blue vertical
-!TP_RAW_PIXELSHIFTNREADISO;nRead
-!TP_RAW_PIXELSHIFTONEGREEN;Use one green instead of average
-!TP_RAW_PIXELSHIFTONEGREEN_TOOLTIP;Use one green instead of averaging two greens for regions without motion.
-!TP_RAW_PIXELSHIFTPRNU;PRNU (%)
-!TP_RAW_PIXELSHIFTREDBLUEWEIGHT;Red&Blue weight
!TP_RAW_PIXELSHIFTSHOWMOTION;Show motion mask
!TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY;Show only motion mask
!TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY_TOOLTIP;Shows the motion mask without the image.
-!TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Overlays the image with a mask showing the regions with motion.
+!TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Overlays the image with a green mask showing the regions with motion.
!TP_RAW_PIXELSHIFTSIGMA;Blur radius
!TP_RAW_PIXELSHIFTSIGMA_TOOLTIP;The default radius of 1.0 usually fits well for base ISO.\nIncrease the value for high ISO shots, 5.0 is a good starting point.\nWatch the motion mask while changing the value.
!TP_RAW_PIXELSHIFTSMOOTH;Smooth transitions
!TP_RAW_PIXELSHIFTSMOOTH_TOOLTIP;Smooth transitions between areas with motion and areas without.\nSet to 0 to disable transition smoothing.\nSet to 1 to either get the AMaZE/LMMSE result of the selected frame (depending on whether "Use LMMSE" is selected), or the median of all four frames if "Use median" is selected.
-!TP_RAW_PIXELSHIFTSTDDEVFACTORBLUE;StdDev factor Blue
-!TP_RAW_PIXELSHIFTSTDDEVFACTORGREEN;StdDev factor Green
-!TP_RAW_PIXELSHIFTSTDDEVFACTORRED;StdDev factor Red
!TP_RAW_RCD;RCD
!TP_RAW_SENSOR_BAYER_LABEL;Sensor with Bayer Matrix
!TP_RAW_SENSOR_XTRANS_DMETHOD_TOOLTIP;3-pass gives best results (recommended for low ISO images).\n1-pass is almost undistinguishable from 3-pass for high ISO images and is faster.
@@ -2131,7 +2113,7 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés -
!TP_WAVELET_EDGESENSI;Edge sensitivity
!TP_WAVELET_EDGREINF_TOOLTIP;Reinforce or reduce the action of the first level, do the opposite to the second level, and leave the rest unchanged.
!TP_WAVELET_EDGTHRESH;Detail
-!TP_WAVELET_EDGTHRESH_TOOLTIP;Change the repartition between the first levels and the others. The higher the threshold the more the action is centred on the first levels. Be careful with negative values, they increase the action of high levels and can introduce artifacts.
+!TP_WAVELET_EDGTHRESH_TOOLTIP;Change the repartition between the first levels and the others. The higher the threshold the more the action is centered on the first levels. Be careful with negative values, they increase the action of high levels and can introduce artifacts.
!TP_WAVELET_EDRAD;Radius
!TP_WAVELET_EDRAD_TOOLTIP;This radius adjustment is very different from those in other sharpening tools. Its value is compared to each level through a complex function. In this sense, a value of zero still has an effect.
!TP_WAVELET_EDSL;Threshold Sliders
diff --git a/rtdata/languages/Nederlands b/rtdata/languages/Nederlands
index 873fd9f62..a5956f132 100644
--- a/rtdata/languages/Nederlands
+++ b/rtdata/languages/Nederlands
@@ -1690,8 +1690,6 @@ TP_RAW_NONE;Geen (Toont sensor patroon)
TP_RAW_PIXELSHIFT;Pixel Verschuiven
TP_RAW_PIXELSHIFTADAPTIVE;Adaptieve detectie
TP_RAW_PIXELSHIFTBLUR;Vervaag bewegingsmasker
-TP_RAW_PIXELSHIFTEPERISO;ISO toepassing
-TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;De standaard waarde (0.0) werkt goed voor normale ISO.\nVergroot de waarde om de bewegingsdetectie te verbeteren voor hogere ISO.\nVergroot in kleine stappen en bekijk het bewegingsmasker tijdens het verhogen.
TP_RAW_PIXELSHIFTEQUALBRIGHT;Balanseer de helderheid van de frames
TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;Balanseer de helderheid van de frames t.o.v. de helderheid van het geslecteerde frame.\nAls er overbelichte gebieden zijn in de frames, selecteer dan het helderste frame om een magenta kleurzweem te vermijden of selecteer bewegingsorrectie.
TP_RAW_PIXELSHIFTEXP0;Experimenteel
@@ -1723,7 +1721,6 @@ TP_RAW_PIXELSHIFTREDBLUEWEIGHT;Rood&Blauw gewicht
TP_RAW_PIXELSHIFTSHOWMOTION;Toon beweging
TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY;Toon alleen masker
TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY_TOOLTIP;Toont het bewegingsmasker zonder de afbeelding
-TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Maakt een doorzichtig masker dat de gebieden toont met beweging
TP_RAW_PIXELSHIFTSIGMA;Vervagen straal
TP_RAW_PIXELSHIFTSIGMA_TOOLTIP;De standaard straal van 1.0 is goed voor normale ISO. Verhoog de waarde voor hogere ISO.\n5.0 is een goed startpunt voor hoge ISO afbeeldingen.\nControleer het bewegingsmasker bij het veranderen van de waarde.
TP_RAW_PIXELSHIFTSMOOTH;Zachte overgang
@@ -2119,6 +2116,7 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: -
!BATCHQUEUE_STARTSTOPHINT;Start or stop processing the images in the queue.\n\nShortcut: Ctrl+s
!DONT_SHOW_AGAIN;Don't show this message again.
+!EXIFFILTER_IMAGETYPE;Image type
!EXIFPANEL_SHOWALL;Show all
!GENERAL_SLIDER;Slider
!GIMP_PLUGIN_INFO;Welcome to the RawTherapee GIMP plugin!\nOnce you are done editing, simply close the main RawTherapee window and the image will be automatically imported in GIMP.
@@ -2146,7 +2144,7 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: -
!HISTORY_MSG_491;White Balance
!HISTORY_MSG_492;RGB Curves
!HISTORY_MSG_493;L*a*b* Adjustments
-!HISTORY_MSG_CLAMPOOG;Out-of-gamut colours clipping
+!HISTORY_MSG_CLAMPOOG;Out-of-gamut color clipping
!HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction
!HISTORY_MSG_HISTMATCHING;Auto-Matched Tone Curve
!HISTORY_MSG_LOCALCONTRAST_AMOUNT;Local Contrast - Amount
@@ -2215,7 +2213,7 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: -
!TP_COLORTONING_LABGRID_VALUES;HL: a=%1 b=%2\nS: a=%3 b=%4
!TP_DIRPYRDENOISE_CHROMINANCE_CURVE_TOOLTIP;Increase (multiply) the value of all chrominance sliders.\nThis curve lets you adjust the strength of chromatic noise reduction as a function of chromaticity, for instance to increase the action in areas of low saturation and to decrease it in those of high saturation.
!TP_DIRPYRDENOISE_LABEL;Noise Reduction
-!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colours
+!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colors
!TP_EXPOSURE_HISTMATCHING;Auto-Matched Tone Curve
!TP_EXPOSURE_HISTMATCHING_TOOLTIP;Automatically adjust sliders and curves (except exposure compensation) to match the look of the embedded JPEG thumbnail.
!TP_LOCALCONTRAST_AMOUNT;Amount
@@ -2235,10 +2233,11 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: -
!TP_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
!TP_PREPROCESS_PDAFLINESFILTER_TOOLTIP;Tries to suppress stripe noise caused by on-sensor PDAF pixels, occurring with some Sony mirrorless cameras on some backlit scenes with visible flare.
!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel).\n\nWhen using any demosaicing method other than Pixel Shift, this selects which sub-image is used.\n\nWhen using the Pixel Shift demosaicing method on a Pixel Shift raw, all sub-images are used, and this selects which sub-image should be used for moving parts.
+!TP_RAW_PIXELSHIFTEPERISO;Sensitivity
+!TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;The default value of 0 should work fine for base ISO.\nHigher values increase sensitivity of motion detection.\nChange in small steps and watch the motion mask while changing.\nIncrease sensitivity for underexposed or high ISO images.
!TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL;Equalize per channel
!TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL_TOOLTIP;Enabled: Equalize the RGB channels individually.\nDisabled: Use same equalization factor for all channels.
-!TP_RAW_PIXELSHIFTONEGREEN;Use one green instead of average
-!TP_RAW_PIXELSHIFTONEGREEN_TOOLTIP;Use one green instead of averaging two greens for regions without motion.
+!TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Overlays the image with a green mask showing the regions with motion.
!TP_RAW_RCD;RCD
!TP_RETINEX_GAINOFFS;Gain and Offset (brightness)
!TP_RETINEX_GAINTRANSMISSION;Gain transmission
diff --git a/rtdata/languages/Norsk BM b/rtdata/languages/Norsk BM
index e7f4834fa..f93b65fd5 100644
--- a/rtdata/languages/Norsk BM
+++ b/rtdata/languages/Norsk BM
@@ -458,6 +458,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!EDIT_PIPETTE_TOOLTIP;To add an adjustment point to the curve, hold the Ctrl key while left-clicking the desired spot in the image preview.\nTo adjust the point, hold the Ctrl key while left-clicking the corresponding area in the preview, then let go of Ctrl (unless you desire fine control) and while still holding the left mouse button move the mouse up or down to move that point up or down in the curve.
!EXIFFILTER_EXPOSURECOMPENSATION;Exposure compensation (EV)
!EXIFFILTER_FILETYPE;File type
+!EXIFFILTER_IMAGETYPE;Image type
!EXIFFILTER_METADATAFILTER;Enable metadata filters
!EXIFPANEL_SHOWALL;Show all
!EXPORT_BYPASS;Processing steps to bypass
@@ -974,7 +975,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!HISTORY_MSG_491;White Balance
!HISTORY_MSG_492;RGB Curves
!HISTORY_MSG_493;L*a*b* Adjustments
-!HISTORY_MSG_CLAMPOOG;Out-of-gamut colours clipping
+!HISTORY_MSG_CLAMPOOG;Out-of-gamut color clipping
!HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction
!HISTORY_MSG_HISTMATCHING;Auto-Matched Tone Curve
!HISTORY_MSG_LOCALCONTRAST_AMOUNT;Local Contrast - Amount
@@ -1620,7 +1621,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!TP_EPD_STRENGTH;Strength
!TP_EPD_TOOLTIP;Tone mapping is possible in L*a*b* mode (standard) and CIECAM02 mode.\n\nWhen in L*a*b* mode, tone mapping can also be used on the residual image of the Wavelet Levels tool.\n\nTo engage CIECAM02 tone mapping mode enable the following settings:\n1. CIECAM02\n2. Algorithm="Brightness + Colorfulness (QM)"\n3. "Tone mapping using CIECAM02 brightness (Q)"
!TP_EXPOSURE_AUTOLEVELS_TIP;Toggles execution of Auto Levels to automatically set Exposure slider values based on an image analysis.\nEnables Highlight Reconstruction if necessary.
-!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colours
+!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colors
!TP_EXPOSURE_CLIP_TIP;The fraction of pixels to be clipped in Auto Levels operation.
!TP_EXPOSURE_COMPRHIGHLIGHTSTHRESHOLD;Highlight compression threshold
!TP_EXPOSURE_CURVEEDITOR1;Tone curve 1
@@ -1830,53 +1831,34 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!TP_RAW_MONO;Mono
!TP_RAW_NONE;None (Shows sensor pattern)
!TP_RAW_PIXELSHIFT;Pixel Shift
-!TP_RAW_PIXELSHIFTADAPTIVE;Adaptive detection
!TP_RAW_PIXELSHIFTBLUR;Blur motion mask
-!TP_RAW_PIXELSHIFTEPERISO;ISO adaption
-!TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;The default value of 0 should work fine for base ISO.\nIncrease the value to improve motion detection for higher ISO.\nIncrease in small steps and watch the motion mask while increasing.
+!TP_RAW_PIXELSHIFTEPERISO;Sensitivity
+!TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;The default value of 0 should work fine for base ISO.\nHigher values increase sensitivity of motion detection.\nChange in small steps and watch the motion mask while changing.\nIncrease sensitivity for underexposed or high ISO images.
!TP_RAW_PIXELSHIFTEQUALBRIGHT;Equalize brightness of frames
!TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL;Equalize per channel
!TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL_TOOLTIP;Enabled: Equalize the RGB channels individually.\nDisabled: Use same equalization factor for all channels.
-!TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;Equalize the brightness of the frames to the brightness of the selected frame.\nIf there are overexposed areas in the frames select the brightest frame to avoid magenta colour cast in overexposed areas or enable motion correction.
-!TP_RAW_PIXELSHIFTEXP0;Experimental
+!TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;Equalize the brightness of the frames to the brightness of the selected frame.\nIf there are overexposed areas in the frames select the brightest frame to avoid magenta color cast in overexposed areas or enable motion correction.
!TP_RAW_PIXELSHIFTGREEN;Check green channel for motion
!TP_RAW_PIXELSHIFTHOLEFILL;Fill holes in motion mask
!TP_RAW_PIXELSHIFTHOLEFILL_TOOLTIP;Fill holes in motion mask
!TP_RAW_PIXELSHIFTLMMSE;Use LMMSE for moving parts
!TP_RAW_PIXELSHIFTLMMSE_TOOLTIP;Use LMMSE instead of AMaZE for areas of motion.\nUseful for high ISO images.
-!TP_RAW_PIXELSHIFTMASKTHRESHOLD;3x3 new threshold
!TP_RAW_PIXELSHIFTMEDIAN;Use median for moving parts
-!TP_RAW_PIXELSHIFTMEDIAN3;Exclude selected frame from median
-!TP_RAW_PIXELSHIFTMEDIAN3_TOOLTIP;Excludes selected frame from median.\nUseful if moving objects overlap in frame 2 and 3
!TP_RAW_PIXELSHIFTMEDIAN_TOOLTIP;Use median of all frames instead of selected frame for regions with motion.\nRemoves objects which are at different places in all frames.\nGives motion effect on slow moving (overlapping) objects.
!TP_RAW_PIXELSHIFTMM_AUTO;Automatic
!TP_RAW_PIXELSHIFTMM_CUSTOM;Custom
!TP_RAW_PIXELSHIFTMM_OFF;Off
-!TP_RAW_PIXELSHIFTMOTION;Motion detection level (deprecated)
-!TP_RAW_PIXELSHIFTMOTIONCORRECTION;Green motion correction size
!TP_RAW_PIXELSHIFTMOTIONMETHOD;Motion Correction
!TP_RAW_PIXELSHIFTMOTION_TOOLTIP;0 means no motion detection.\n1 - 99 means motion will be detected according to this value. Increase value to increase detection rate.\n100 means the AMaZE-demosaiced frame will be used.
-!TP_RAW_PIXELSHIFTNONGREENAMAZE;Check red/blue AMaZE
!TP_RAW_PIXELSHIFTNONGREENCROSS;Check red/blue channels for motion
-!TP_RAW_PIXELSHIFTNONGREENCROSS2;Check green AMaZE
-!TP_RAW_PIXELSHIFTNONGREENHORIZONTAL;Check red/blue horizontal
-!TP_RAW_PIXELSHIFTNONGREENVERTICAL;Check red/blue vertical
-!TP_RAW_PIXELSHIFTNREADISO;nRead
-!TP_RAW_PIXELSHIFTONEGREEN;Use one green instead of average
-!TP_RAW_PIXELSHIFTONEGREEN_TOOLTIP;Use one green instead of averaging two greens for regions without motion.
-!TP_RAW_PIXELSHIFTPRNU;PRNU (%)
-!TP_RAW_PIXELSHIFTREDBLUEWEIGHT;Red&Blue weight
!TP_RAW_PIXELSHIFTSHOWMOTION;Show motion mask
!TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY;Show only motion mask
!TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY_TOOLTIP;Shows the motion mask without the image.
-!TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Overlays the image with a mask showing the regions with motion.
+!TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Overlays the image with a green mask showing the regions with motion.
!TP_RAW_PIXELSHIFTSIGMA;Blur radius
!TP_RAW_PIXELSHIFTSIGMA_TOOLTIP;The default radius of 1.0 usually fits well for base ISO.\nIncrease the value for high ISO shots, 5.0 is a good starting point.\nWatch the motion mask while changing the value.
!TP_RAW_PIXELSHIFTSMOOTH;Smooth transitions
!TP_RAW_PIXELSHIFTSMOOTH_TOOLTIP;Smooth transitions between areas with motion and areas without.\nSet to 0 to disable transition smoothing.\nSet to 1 to either get the AMaZE/LMMSE result of the selected frame (depending on whether "Use LMMSE" is selected), or the median of all four frames if "Use median" is selected.
-!TP_RAW_PIXELSHIFTSTDDEVFACTORBLUE;StdDev factor Blue
-!TP_RAW_PIXELSHIFTSTDDEVFACTORGREEN;StdDev factor Green
-!TP_RAW_PIXELSHIFTSTDDEVFACTORRED;StdDev factor Red
!TP_RAW_RCD;RCD
!TP_RAW_SENSOR_BAYER_LABEL;Sensor with Bayer Matrix
!TP_RAW_SENSOR_XTRANS_DMETHOD_TOOLTIP;3-pass gives best results (recommended for low ISO images).\n1-pass is almost undistinguishable from 3-pass for high ISO images and is faster.
@@ -2091,7 +2073,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur
!TP_WAVELET_EDGESENSI;Edge sensitivity
!TP_WAVELET_EDGREINF_TOOLTIP;Reinforce or reduce the action of the first level, do the opposite to the second level, and leave the rest unchanged.
!TP_WAVELET_EDGTHRESH;Detail
-!TP_WAVELET_EDGTHRESH_TOOLTIP;Change the repartition between the first levels and the others. The higher the threshold the more the action is centred on the first levels. Be careful with negative values, they increase the action of high levels and can introduce artifacts.
+!TP_WAVELET_EDGTHRESH_TOOLTIP;Change the repartition between the first levels and the others. The higher the threshold the more the action is centered on the first levels. Be careful with negative values, they increase the action of high levels and can introduce artifacts.
!TP_WAVELET_EDRAD;Radius
!TP_WAVELET_EDRAD_TOOLTIP;This radius adjustment is very different from those in other sharpening tools. Its value is compared to each level through a complex function. In this sense, a value of zero still has an effect.
!TP_WAVELET_EDSL;Threshold Sliders
diff --git a/rtdata/languages/Polish b/rtdata/languages/Polish
index 1eba82f34..45233ef89 100644
--- a/rtdata/languages/Polish
+++ b/rtdata/languages/Polish
@@ -1459,6 +1459,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: -
!DYNPROFILEEDITOR_NEW;New
!DYNPROFILEEDITOR_NEW_RULE;New Dynamic Profile Rule
!DYNPROFILEEDITOR_PROFILE;Processing Profile
+!EXIFFILTER_IMAGETYPE;Image type
!EXIFPANEL_SHOWALL;Show all
!EXPORT_BYPASS;Processing steps to bypass
!EXPORT_BYPASS_EQUALIZER;Bypass Wavelet Levels
@@ -1665,7 +1666,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: -
!HISTORY_MSG_491;White Balance
!HISTORY_MSG_492;RGB Curves
!HISTORY_MSG_493;L*a*b* Adjustments
-!HISTORY_MSG_CLAMPOOG;Out-of-gamut colours clipping
+!HISTORY_MSG_CLAMPOOG;Out-of-gamut color clipping
!HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction
!HISTORY_MSG_HISTMATCHING;Auto-Matched Tone Curve
!HISTORY_MSG_LOCALCONTRAST_AMOUNT;Local Contrast - Amount
@@ -1880,7 +1881,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: -
!TP_DIRPYREQUALIZER_ARTIF;Reduce artifacts
!TP_DISTORTION_AUTO_TIP;Automatically corrects lens distortion in raw files by matching it against the embedded JPEG image if one exists and has had its lens disortion auto-corrected by the camera.
!TP_EPD_GAMMA;Gamma
-!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colours
+!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colors
!TP_EXPOSURE_HISTMATCHING;Auto-Matched Tone Curve
!TP_EXPOSURE_HISTMATCHING_TOOLTIP;Automatically adjust sliders and curves (except exposure compensation) to match the look of the embedded JPEG thumbnail.
!TP_EXPOSURE_TCMODE_LUMINANCE;Luminance
@@ -1934,53 +1935,34 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: -
!TP_RAW_MONO;Mono
!TP_RAW_NONE;None (Shows sensor pattern)
!TP_RAW_PIXELSHIFT;Pixel Shift
-!TP_RAW_PIXELSHIFTADAPTIVE;Adaptive detection
!TP_RAW_PIXELSHIFTBLUR;Blur motion mask
-!TP_RAW_PIXELSHIFTEPERISO;ISO adaption
-!TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;The default value of 0 should work fine for base ISO.\nIncrease the value to improve motion detection for higher ISO.\nIncrease in small steps and watch the motion mask while increasing.
+!TP_RAW_PIXELSHIFTEPERISO;Sensitivity
+!TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;The default value of 0 should work fine for base ISO.\nHigher values increase sensitivity of motion detection.\nChange in small steps and watch the motion mask while changing.\nIncrease sensitivity for underexposed or high ISO images.
!TP_RAW_PIXELSHIFTEQUALBRIGHT;Equalize brightness of frames
!TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL;Equalize per channel
!TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL_TOOLTIP;Enabled: Equalize the RGB channels individually.\nDisabled: Use same equalization factor for all channels.
-!TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;Equalize the brightness of the frames to the brightness of the selected frame.\nIf there are overexposed areas in the frames select the brightest frame to avoid magenta colour cast in overexposed areas or enable motion correction.
-!TP_RAW_PIXELSHIFTEXP0;Experimental
+!TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;Equalize the brightness of the frames to the brightness of the selected frame.\nIf there are overexposed areas in the frames select the brightest frame to avoid magenta color cast in overexposed areas or enable motion correction.
!TP_RAW_PIXELSHIFTGREEN;Check green channel for motion
!TP_RAW_PIXELSHIFTHOLEFILL;Fill holes in motion mask
!TP_RAW_PIXELSHIFTHOLEFILL_TOOLTIP;Fill holes in motion mask
!TP_RAW_PIXELSHIFTLMMSE;Use LMMSE for moving parts
!TP_RAW_PIXELSHIFTLMMSE_TOOLTIP;Use LMMSE instead of AMaZE for areas of motion.\nUseful for high ISO images.
-!TP_RAW_PIXELSHIFTMASKTHRESHOLD;3x3 new threshold
!TP_RAW_PIXELSHIFTMEDIAN;Use median for moving parts
-!TP_RAW_PIXELSHIFTMEDIAN3;Exclude selected frame from median
-!TP_RAW_PIXELSHIFTMEDIAN3_TOOLTIP;Excludes selected frame from median.\nUseful if moving objects overlap in frame 2 and 3
!TP_RAW_PIXELSHIFTMEDIAN_TOOLTIP;Use median of all frames instead of selected frame for regions with motion.\nRemoves objects which are at different places in all frames.\nGives motion effect on slow moving (overlapping) objects.
!TP_RAW_PIXELSHIFTMM_AUTO;Automatic
!TP_RAW_PIXELSHIFTMM_CUSTOM;Custom
!TP_RAW_PIXELSHIFTMM_OFF;Off
-!TP_RAW_PIXELSHIFTMOTION;Motion detection level (deprecated)
-!TP_RAW_PIXELSHIFTMOTIONCORRECTION;Green motion correction size
!TP_RAW_PIXELSHIFTMOTIONMETHOD;Motion Correction
!TP_RAW_PIXELSHIFTMOTION_TOOLTIP;0 means no motion detection.\n1 - 99 means motion will be detected according to this value. Increase value to increase detection rate.\n100 means the AMaZE-demosaiced frame will be used.
-!TP_RAW_PIXELSHIFTNONGREENAMAZE;Check red/blue AMaZE
!TP_RAW_PIXELSHIFTNONGREENCROSS;Check red/blue channels for motion
-!TP_RAW_PIXELSHIFTNONGREENCROSS2;Check green AMaZE
-!TP_RAW_PIXELSHIFTNONGREENHORIZONTAL;Check red/blue horizontal
-!TP_RAW_PIXELSHIFTNONGREENVERTICAL;Check red/blue vertical
-!TP_RAW_PIXELSHIFTNREADISO;nRead
-!TP_RAW_PIXELSHIFTONEGREEN;Use one green instead of average
-!TP_RAW_PIXELSHIFTONEGREEN_TOOLTIP;Use one green instead of averaging two greens for regions without motion.
-!TP_RAW_PIXELSHIFTPRNU;PRNU (%)
-!TP_RAW_PIXELSHIFTREDBLUEWEIGHT;Red&Blue weight
!TP_RAW_PIXELSHIFTSHOWMOTION;Show motion mask
!TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY;Show only motion mask
!TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY_TOOLTIP;Shows the motion mask without the image.
-!TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Overlays the image with a mask showing the regions with motion.
+!TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Overlays the image with a green mask showing the regions with motion.
!TP_RAW_PIXELSHIFTSIGMA;Blur radius
!TP_RAW_PIXELSHIFTSIGMA_TOOLTIP;The default radius of 1.0 usually fits well for base ISO.\nIncrease the value for high ISO shots, 5.0 is a good starting point.\nWatch the motion mask while changing the value.
!TP_RAW_PIXELSHIFTSMOOTH;Smooth transitions
!TP_RAW_PIXELSHIFTSMOOTH_TOOLTIP;Smooth transitions between areas with motion and areas without.\nSet to 0 to disable transition smoothing.\nSet to 1 to either get the AMaZE/LMMSE result of the selected frame (depending on whether "Use LMMSE" is selected), or the median of all four frames if "Use median" is selected.
-!TP_RAW_PIXELSHIFTSTDDEVFACTORBLUE;StdDev factor Blue
-!TP_RAW_PIXELSHIFTSTDDEVFACTORGREEN;StdDev factor Green
-!TP_RAW_PIXELSHIFTSTDDEVFACTORRED;StdDev factor Red
!TP_RAW_RCD;RCD
!TP_RAW_VNG4;VNG4
!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL
@@ -2146,7 +2128,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: -
!TP_WAVELET_EDGESENSI;Edge sensitivity
!TP_WAVELET_EDGREINF_TOOLTIP;Reinforce or reduce the action of the first level, do the opposite to the second level, and leave the rest unchanged.
!TP_WAVELET_EDGTHRESH;Detail
-!TP_WAVELET_EDGTHRESH_TOOLTIP;Change the repartition between the first levels and the others. The higher the threshold the more the action is centred on the first levels. Be careful with negative values, they increase the action of high levels and can introduce artifacts.
+!TP_WAVELET_EDGTHRESH_TOOLTIP;Change the repartition between the first levels and the others. The higher the threshold the more the action is centered on the first levels. Be careful with negative values, they increase the action of high levels and can introduce artifacts.
!TP_WAVELET_EDRAD;Radius
!TP_WAVELET_EDRAD_TOOLTIP;This radius adjustment is very different from those in other sharpening tools. Its value is compared to each level through a complex function. In this sense, a value of zero still has an effect.
!TP_WAVELET_EDSL;Threshold Sliders
diff --git a/rtdata/languages/Polish (Latin Characters) b/rtdata/languages/Polish (Latin Characters)
index ffd011933..11aa2b399 100644
--- a/rtdata/languages/Polish (Latin Characters)
+++ b/rtdata/languages/Polish (Latin Characters)
@@ -1459,6 +1459,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrot: -
!DYNPROFILEEDITOR_NEW;New
!DYNPROFILEEDITOR_NEW_RULE;New Dynamic Profile Rule
!DYNPROFILEEDITOR_PROFILE;Processing Profile
+!EXIFFILTER_IMAGETYPE;Image type
!EXIFPANEL_SHOWALL;Show all
!EXPORT_BYPASS;Processing steps to bypass
!EXPORT_BYPASS_EQUALIZER;Bypass Wavelet Levels
@@ -1665,7 +1666,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrot: -
!HISTORY_MSG_491;White Balance
!HISTORY_MSG_492;RGB Curves
!HISTORY_MSG_493;L*a*b* Adjustments
-!HISTORY_MSG_CLAMPOOG;Out-of-gamut colours clipping
+!HISTORY_MSG_CLAMPOOG;Out-of-gamut color clipping
!HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction
!HISTORY_MSG_HISTMATCHING;Auto-Matched Tone Curve
!HISTORY_MSG_LOCALCONTRAST_AMOUNT;Local Contrast - Amount
@@ -1880,7 +1881,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrot: -
!TP_DIRPYREQUALIZER_ARTIF;Reduce artifacts
!TP_DISTORTION_AUTO_TIP;Automatically corrects lens distortion in raw files by matching it against the embedded JPEG image if one exists and has had its lens disortion auto-corrected by the camera.
!TP_EPD_GAMMA;Gamma
-!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colours
+!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colors
!TP_EXPOSURE_HISTMATCHING;Auto-Matched Tone Curve
!TP_EXPOSURE_HISTMATCHING_TOOLTIP;Automatically adjust sliders and curves (except exposure compensation) to match the look of the embedded JPEG thumbnail.
!TP_EXPOSURE_TCMODE_LUMINANCE;Luminance
@@ -1934,53 +1935,34 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrot: -
!TP_RAW_MONO;Mono
!TP_RAW_NONE;None (Shows sensor pattern)
!TP_RAW_PIXELSHIFT;Pixel Shift
-!TP_RAW_PIXELSHIFTADAPTIVE;Adaptive detection
!TP_RAW_PIXELSHIFTBLUR;Blur motion mask
-!TP_RAW_PIXELSHIFTEPERISO;ISO adaption
-!TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;The default value of 0 should work fine for base ISO.\nIncrease the value to improve motion detection for higher ISO.\nIncrease in small steps and watch the motion mask while increasing.
+!TP_RAW_PIXELSHIFTEPERISO;Sensitivity
+!TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;The default value of 0 should work fine for base ISO.\nHigher values increase sensitivity of motion detection.\nChange in small steps and watch the motion mask while changing.\nIncrease sensitivity for underexposed or high ISO images.
!TP_RAW_PIXELSHIFTEQUALBRIGHT;Equalize brightness of frames
!TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL;Equalize per channel
!TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL_TOOLTIP;Enabled: Equalize the RGB channels individually.\nDisabled: Use same equalization factor for all channels.
-!TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;Equalize the brightness of the frames to the brightness of the selected frame.\nIf there are overexposed areas in the frames select the brightest frame to avoid magenta colour cast in overexposed areas or enable motion correction.
-!TP_RAW_PIXELSHIFTEXP0;Experimental
+!TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;Equalize the brightness of the frames to the brightness of the selected frame.\nIf there are overexposed areas in the frames select the brightest frame to avoid magenta color cast in overexposed areas or enable motion correction.
!TP_RAW_PIXELSHIFTGREEN;Check green channel for motion
!TP_RAW_PIXELSHIFTHOLEFILL;Fill holes in motion mask
!TP_RAW_PIXELSHIFTHOLEFILL_TOOLTIP;Fill holes in motion mask
!TP_RAW_PIXELSHIFTLMMSE;Use LMMSE for moving parts
!TP_RAW_PIXELSHIFTLMMSE_TOOLTIP;Use LMMSE instead of AMaZE for areas of motion.\nUseful for high ISO images.
-!TP_RAW_PIXELSHIFTMASKTHRESHOLD;3x3 new threshold
!TP_RAW_PIXELSHIFTMEDIAN;Use median for moving parts
-!TP_RAW_PIXELSHIFTMEDIAN3;Exclude selected frame from median
-!TP_RAW_PIXELSHIFTMEDIAN3_TOOLTIP;Excludes selected frame from median.\nUseful if moving objects overlap in frame 2 and 3
!TP_RAW_PIXELSHIFTMEDIAN_TOOLTIP;Use median of all frames instead of selected frame for regions with motion.\nRemoves objects which are at different places in all frames.\nGives motion effect on slow moving (overlapping) objects.
!TP_RAW_PIXELSHIFTMM_AUTO;Automatic
!TP_RAW_PIXELSHIFTMM_CUSTOM;Custom
!TP_RAW_PIXELSHIFTMM_OFF;Off
-!TP_RAW_PIXELSHIFTMOTION;Motion detection level (deprecated)
-!TP_RAW_PIXELSHIFTMOTIONCORRECTION;Green motion correction size
!TP_RAW_PIXELSHIFTMOTIONMETHOD;Motion Correction
!TP_RAW_PIXELSHIFTMOTION_TOOLTIP;0 means no motion detection.\n1 - 99 means motion will be detected according to this value. Increase value to increase detection rate.\n100 means the AMaZE-demosaiced frame will be used.
-!TP_RAW_PIXELSHIFTNONGREENAMAZE;Check red/blue AMaZE
!TP_RAW_PIXELSHIFTNONGREENCROSS;Check red/blue channels for motion
-!TP_RAW_PIXELSHIFTNONGREENCROSS2;Check green AMaZE
-!TP_RAW_PIXELSHIFTNONGREENHORIZONTAL;Check red/blue horizontal
-!TP_RAW_PIXELSHIFTNONGREENVERTICAL;Check red/blue vertical
-!TP_RAW_PIXELSHIFTNREADISO;nRead
-!TP_RAW_PIXELSHIFTONEGREEN;Use one green instead of average
-!TP_RAW_PIXELSHIFTONEGREEN_TOOLTIP;Use one green instead of averaging two greens for regions without motion.
-!TP_RAW_PIXELSHIFTPRNU;PRNU (%)
-!TP_RAW_PIXELSHIFTREDBLUEWEIGHT;Red&Blue weight
!TP_RAW_PIXELSHIFTSHOWMOTION;Show motion mask
!TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY;Show only motion mask
!TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY_TOOLTIP;Shows the motion mask without the image.
-!TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Overlays the image with a mask showing the regions with motion.
+!TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Overlays the image with a green mask showing the regions with motion.
!TP_RAW_PIXELSHIFTSIGMA;Blur radius
!TP_RAW_PIXELSHIFTSIGMA_TOOLTIP;The default radius of 1.0 usually fits well for base ISO.\nIncrease the value for high ISO shots, 5.0 is a good starting point.\nWatch the motion mask while changing the value.
!TP_RAW_PIXELSHIFTSMOOTH;Smooth transitions
!TP_RAW_PIXELSHIFTSMOOTH_TOOLTIP;Smooth transitions between areas with motion and areas without.\nSet to 0 to disable transition smoothing.\nSet to 1 to either get the AMaZE/LMMSE result of the selected frame (depending on whether "Use LMMSE" is selected), or the median of all four frames if "Use median" is selected.
-!TP_RAW_PIXELSHIFTSTDDEVFACTORBLUE;StdDev factor Blue
-!TP_RAW_PIXELSHIFTSTDDEVFACTORGREEN;StdDev factor Green
-!TP_RAW_PIXELSHIFTSTDDEVFACTORRED;StdDev factor Red
!TP_RAW_RCD;RCD
!TP_RAW_VNG4;VNG4
!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL
@@ -2146,7 +2128,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrot: -
!TP_WAVELET_EDGESENSI;Edge sensitivity
!TP_WAVELET_EDGREINF_TOOLTIP;Reinforce or reduce the action of the first level, do the opposite to the second level, and leave the rest unchanged.
!TP_WAVELET_EDGTHRESH;Detail
-!TP_WAVELET_EDGTHRESH_TOOLTIP;Change the repartition between the first levels and the others. The higher the threshold the more the action is centred on the first levels. Be careful with negative values, they increase the action of high levels and can introduce artifacts.
+!TP_WAVELET_EDGTHRESH_TOOLTIP;Change the repartition between the first levels and the others. The higher the threshold the more the action is centered on the first levels. Be careful with negative values, they increase the action of high levels and can introduce artifacts.
!TP_WAVELET_EDRAD;Radius
!TP_WAVELET_EDRAD_TOOLTIP;This radius adjustment is very different from those in other sharpening tools. Its value is compared to each level through a complex function. In this sense, a value of zero still has an effect.
!TP_WAVELET_EDSL;Threshold Sliders
diff --git a/rtdata/languages/Portugues (Brasil) b/rtdata/languages/Portugues (Brasil)
index 14252533a..8c75ccd6c 100644
--- a/rtdata/languages/Portugues (Brasil)
+++ b/rtdata/languages/Portugues (Brasil)
@@ -812,7 +812,8 @@ MAIN_MSG_CANNOTSTARTEDITOR;Não é possível iniciar o editor.
! Untranslated keys follow; remove the ! prefix after an entry is translated.
!!!!!!!!!!!!!!!!!!!!!!!!!
-!HISTORY_MSG_CLAMPOOG;Out-of-gamut colours clipping
+!EXIFFILTER_IMAGETYPE;Image type
+!HISTORY_MSG_CLAMPOOG;Out-of-gamut color clipping
!MAIN_MSG_CANNOTSTARTEDITOR_SECONDARY;Please set the correct path in Preferences.
!MAIN_MSG_EMPTYFILENAME;Filename unspecified!
!MAIN_MSG_IMAGEUNPROCESSED;This command requires all selected images to be queue-processed first.
@@ -1552,7 +1553,7 @@ MAIN_MSG_CANNOTSTARTEDITOR;Não é possível iniciar o editor.
!TP_EXPOSURE_AUTOLEVELS_TIP;Toggles execution of Auto Levels to automatically set Exposure slider values based on an image analysis.\nEnables Highlight Reconstruction if necessary.
!TP_EXPOSURE_BLACKLEVEL;Black
!TP_EXPOSURE_BRIGHTNESS;Lightness
-!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colours
+!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colors
!TP_EXPOSURE_CLIP;Clip %
!TP_EXPOSURE_CLIP_TIP;The fraction of pixels to be clipped in Auto Levels operation.
!TP_EXPOSURE_COMPRHIGHLIGHTS;Highlight compression
@@ -1784,53 +1785,34 @@ MAIN_MSG_CANNOTSTARTEDITOR;Não é possível iniciar o editor.
!TP_RAW_MONO;Mono
!TP_RAW_NONE;None (Shows sensor pattern)
!TP_RAW_PIXELSHIFT;Pixel Shift
-!TP_RAW_PIXELSHIFTADAPTIVE;Adaptive detection
!TP_RAW_PIXELSHIFTBLUR;Blur motion mask
-!TP_RAW_PIXELSHIFTEPERISO;ISO adaption
-!TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;The default value of 0 should work fine for base ISO.\nIncrease the value to improve motion detection for higher ISO.\nIncrease in small steps and watch the motion mask while increasing.
+!TP_RAW_PIXELSHIFTEPERISO;Sensitivity
+!TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;The default value of 0 should work fine for base ISO.\nHigher values increase sensitivity of motion detection.\nChange in small steps and watch the motion mask while changing.\nIncrease sensitivity for underexposed or high ISO images.
!TP_RAW_PIXELSHIFTEQUALBRIGHT;Equalize brightness of frames
!TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL;Equalize per channel
!TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL_TOOLTIP;Enabled: Equalize the RGB channels individually.\nDisabled: Use same equalization factor for all channels.
-!TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;Equalize the brightness of the frames to the brightness of the selected frame.\nIf there are overexposed areas in the frames select the brightest frame to avoid magenta colour cast in overexposed areas or enable motion correction.
-!TP_RAW_PIXELSHIFTEXP0;Experimental
+!TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;Equalize the brightness of the frames to the brightness of the selected frame.\nIf there are overexposed areas in the frames select the brightest frame to avoid magenta color cast in overexposed areas or enable motion correction.
!TP_RAW_PIXELSHIFTGREEN;Check green channel for motion
!TP_RAW_PIXELSHIFTHOLEFILL;Fill holes in motion mask
!TP_RAW_PIXELSHIFTHOLEFILL_TOOLTIP;Fill holes in motion mask
!TP_RAW_PIXELSHIFTLMMSE;Use LMMSE for moving parts
!TP_RAW_PIXELSHIFTLMMSE_TOOLTIP;Use LMMSE instead of AMaZE for areas of motion.\nUseful for high ISO images.
-!TP_RAW_PIXELSHIFTMASKTHRESHOLD;3x3 new threshold
!TP_RAW_PIXELSHIFTMEDIAN;Use median for moving parts
-!TP_RAW_PIXELSHIFTMEDIAN3;Exclude selected frame from median
-!TP_RAW_PIXELSHIFTMEDIAN3_TOOLTIP;Excludes selected frame from median.\nUseful if moving objects overlap in frame 2 and 3
!TP_RAW_PIXELSHIFTMEDIAN_TOOLTIP;Use median of all frames instead of selected frame for regions with motion.\nRemoves objects which are at different places in all frames.\nGives motion effect on slow moving (overlapping) objects.
!TP_RAW_PIXELSHIFTMM_AUTO;Automatic
!TP_RAW_PIXELSHIFTMM_CUSTOM;Custom
!TP_RAW_PIXELSHIFTMM_OFF;Off
-!TP_RAW_PIXELSHIFTMOTION;Motion detection level (deprecated)
-!TP_RAW_PIXELSHIFTMOTIONCORRECTION;Green motion correction size
!TP_RAW_PIXELSHIFTMOTIONMETHOD;Motion Correction
!TP_RAW_PIXELSHIFTMOTION_TOOLTIP;0 means no motion detection.\n1 - 99 means motion will be detected according to this value. Increase value to increase detection rate.\n100 means the AMaZE-demosaiced frame will be used.
-!TP_RAW_PIXELSHIFTNONGREENAMAZE;Check red/blue AMaZE
!TP_RAW_PIXELSHIFTNONGREENCROSS;Check red/blue channels for motion
-!TP_RAW_PIXELSHIFTNONGREENCROSS2;Check green AMaZE
-!TP_RAW_PIXELSHIFTNONGREENHORIZONTAL;Check red/blue horizontal
-!TP_RAW_PIXELSHIFTNONGREENVERTICAL;Check red/blue vertical
-!TP_RAW_PIXELSHIFTNREADISO;nRead
-!TP_RAW_PIXELSHIFTONEGREEN;Use one green instead of average
-!TP_RAW_PIXELSHIFTONEGREEN_TOOLTIP;Use one green instead of averaging two greens for regions without motion.
-!TP_RAW_PIXELSHIFTPRNU;PRNU (%)
-!TP_RAW_PIXELSHIFTREDBLUEWEIGHT;Red&Blue weight
!TP_RAW_PIXELSHIFTSHOWMOTION;Show motion mask
!TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY;Show only motion mask
!TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY_TOOLTIP;Shows the motion mask without the image.
-!TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Overlays the image with a mask showing the regions with motion.
+!TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Overlays the image with a green mask showing the regions with motion.
!TP_RAW_PIXELSHIFTSIGMA;Blur radius
!TP_RAW_PIXELSHIFTSIGMA_TOOLTIP;The default radius of 1.0 usually fits well for base ISO.\nIncrease the value for high ISO shots, 5.0 is a good starting point.\nWatch the motion mask while changing the value.
!TP_RAW_PIXELSHIFTSMOOTH;Smooth transitions
!TP_RAW_PIXELSHIFTSMOOTH_TOOLTIP;Smooth transitions between areas with motion and areas without.\nSet to 0 to disable transition smoothing.\nSet to 1 to either get the AMaZE/LMMSE result of the selected frame (depending on whether "Use LMMSE" is selected), or the median of all four frames if "Use median" is selected.
-!TP_RAW_PIXELSHIFTSTDDEVFACTORBLUE;StdDev factor Blue
-!TP_RAW_PIXELSHIFTSTDDEVFACTORGREEN;StdDev factor Green
-!TP_RAW_PIXELSHIFTSTDDEVFACTORRED;StdDev factor Red
!TP_RAW_RCD;RCD
!TP_RAW_SENSOR_BAYER_LABEL;Sensor with Bayer Matrix
!TP_RAW_SENSOR_XTRANS_DMETHOD_TOOLTIP;3-pass gives best results (recommended for low ISO images).\n1-pass is almost undistinguishable from 3-pass for high ISO images and is faster.
@@ -2079,7 +2061,7 @@ MAIN_MSG_CANNOTSTARTEDITOR;Não é possível iniciar o editor.
!TP_WAVELET_EDGESENSI;Edge sensitivity
!TP_WAVELET_EDGREINF_TOOLTIP;Reinforce or reduce the action of the first level, do the opposite to the second level, and leave the rest unchanged.
!TP_WAVELET_EDGTHRESH;Detail
-!TP_WAVELET_EDGTHRESH_TOOLTIP;Change the repartition between the first levels and the others. The higher the threshold the more the action is centred on the first levels. Be careful with negative values, they increase the action of high levels and can introduce artifacts.
+!TP_WAVELET_EDGTHRESH_TOOLTIP;Change the repartition between the first levels and the others. The higher the threshold the more the action is centered on the first levels. Be careful with negative values, they increase the action of high levels and can introduce artifacts.
!TP_WAVELET_EDRAD;Radius
!TP_WAVELET_EDRAD_TOOLTIP;This radius adjustment is very different from those in other sharpening tools. Its value is compared to each level through a complex function. In this sense, a value of zero still has an effect.
!TP_WAVELET_EDSL;Threshold Sliders
diff --git a/rtdata/languages/Russian b/rtdata/languages/Russian
index 15ea8238b..8a3ddb35e 100644
--- a/rtdata/languages/Russian
+++ b/rtdata/languages/Russian
@@ -1420,6 +1420,7 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: -
!CURVEEDITOR_EDITPOINT_HINT;Enable edition of node in/out values.\n\nRight-click on a node to select it.\nRight-click on empty space to de-select the node.
!EDIT_OBJECT_TOOLTIP;Displays a widget on the preview window which lets you adjust this tool.
!EDIT_PIPETTE_TOOLTIP;To add an adjustment point to the curve, hold the Ctrl key while left-clicking the desired spot in the image preview.\nTo adjust the point, hold the Ctrl key while left-clicking the corresponding area in the preview, then let go of Ctrl (unless you desire fine control) and while still holding the left mouse button move the mouse up or down to move that point up or down in the curve.
+!EXIFFILTER_IMAGETYPE;Image type
!EXIFPANEL_SHOWALL;Show all
!EXPORT_BYPASS;Processing steps to bypass
!EXPORT_BYPASS_EQUALIZER;Bypass Wavelet Levels
@@ -1650,7 +1651,7 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: -
!HISTORY_MSG_485;Lens Correction
!HISTORY_MSG_486;Lens Correction - Camera
!HISTORY_MSG_487;Lens Correction - Lens
-!HISTORY_MSG_CLAMPOOG;Out-of-gamut colours clipping
+!HISTORY_MSG_CLAMPOOG;Out-of-gamut color clipping
!HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction
!HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction
!HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter
@@ -1899,7 +1900,7 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: -
!TP_DIRPYREQUALIZER_SKIN_TOOLTIP;At -100 skin-tones are targetted.\nAt 0 all tones are treated equally.\nAt +100 skin-tones are protected while all other tones are affected.
!TP_DIRPYREQUALIZER_TOOLTIP;Attempts to reduce artifacts in the transitions between skin colors (hue, chroma, luma) and the rest of the image.
!TP_DISTORTION_AUTO_TIP;Automatically corrects lens distortion in raw files by matching it against the embedded JPEG image if one exists and has had its lens disortion auto-corrected by the camera.
-!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colours
+!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colors
!TP_EXPOS_BLACKPOINT_LABEL;Raw Black Points
!TP_EXPOS_WHITEPOINT_LABEL;Raw White Points
!TP_FILMSIMULATION_SLOWPARSEDIR;RawTherapee is configured to look for Hald CLUT images, which are used for the Film Simulation tool, in a folder which is taking too long to load.\nGo to Preferences > Image Processing > Film Simulation\nto see which folder is being used. You should either point RawTherapee to a folder which contains only Hald CLUT images and nothing more, or to an empty folder if you don't want to use the Film Simulation tool.\n\nRead the Film Simulation article in RawPedia for more information.\n\nDo you want to cancel the scan now?
@@ -1942,53 +1943,34 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: -
!TP_RAW_3PASSBEST;3-Pass (Best)
!TP_RAW_IMAGENUM;Sub-image
!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel).\n\nWhen using any demosaicing method other than Pixel Shift, this selects which sub-image is used.\n\nWhen using the Pixel Shift demosaicing method on a Pixel Shift raw, all sub-images are used, and this selects which sub-image should be used for moving parts.
-!TP_RAW_PIXELSHIFTADAPTIVE;Adaptive detection
!TP_RAW_PIXELSHIFTBLUR;Blur motion mask
-!TP_RAW_PIXELSHIFTEPERISO;ISO adaption
-!TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;The default value of 0 should work fine for base ISO.\nIncrease the value to improve motion detection for higher ISO.\nIncrease in small steps and watch the motion mask while increasing.
+!TP_RAW_PIXELSHIFTEPERISO;Sensitivity
+!TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;The default value of 0 should work fine for base ISO.\nHigher values increase sensitivity of motion detection.\nChange in small steps and watch the motion mask while changing.\nIncrease sensitivity for underexposed or high ISO images.
!TP_RAW_PIXELSHIFTEQUALBRIGHT;Equalize brightness of frames
!TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL;Equalize per channel
!TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL_TOOLTIP;Enabled: Equalize the RGB channels individually.\nDisabled: Use same equalization factor for all channels.
-!TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;Equalize the brightness of the frames to the brightness of the selected frame.\nIf there are overexposed areas in the frames select the brightest frame to avoid magenta colour cast in overexposed areas or enable motion correction.
-!TP_RAW_PIXELSHIFTEXP0;Experimental
+!TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;Equalize the brightness of the frames to the brightness of the selected frame.\nIf there are overexposed areas in the frames select the brightest frame to avoid magenta color cast in overexposed areas or enable motion correction.
!TP_RAW_PIXELSHIFTGREEN;Check green channel for motion
!TP_RAW_PIXELSHIFTHOLEFILL;Fill holes in motion mask
!TP_RAW_PIXELSHIFTHOLEFILL_TOOLTIP;Fill holes in motion mask
!TP_RAW_PIXELSHIFTLMMSE;Use LMMSE for moving parts
!TP_RAW_PIXELSHIFTLMMSE_TOOLTIP;Use LMMSE instead of AMaZE for areas of motion.\nUseful for high ISO images.
-!TP_RAW_PIXELSHIFTMASKTHRESHOLD;3x3 new threshold
!TP_RAW_PIXELSHIFTMEDIAN;Use median for moving parts
-!TP_RAW_PIXELSHIFTMEDIAN3;Exclude selected frame from median
-!TP_RAW_PIXELSHIFTMEDIAN3_TOOLTIP;Excludes selected frame from median.\nUseful if moving objects overlap in frame 2 and 3
!TP_RAW_PIXELSHIFTMEDIAN_TOOLTIP;Use median of all frames instead of selected frame for regions with motion.\nRemoves objects which are at different places in all frames.\nGives motion effect on slow moving (overlapping) objects.
!TP_RAW_PIXELSHIFTMM_AUTO;Automatic
!TP_RAW_PIXELSHIFTMM_CUSTOM;Custom
!TP_RAW_PIXELSHIFTMM_OFF;Off
-!TP_RAW_PIXELSHIFTMOTION;Motion detection level (deprecated)
-!TP_RAW_PIXELSHIFTMOTIONCORRECTION;Green motion correction size
!TP_RAW_PIXELSHIFTMOTIONMETHOD;Motion Correction
!TP_RAW_PIXELSHIFTMOTION_TOOLTIP;0 means no motion detection.\n1 - 99 means motion will be detected according to this value. Increase value to increase detection rate.\n100 means the AMaZE-demosaiced frame will be used.
-!TP_RAW_PIXELSHIFTNONGREENAMAZE;Check red/blue AMaZE
!TP_RAW_PIXELSHIFTNONGREENCROSS;Check red/blue channels for motion
-!TP_RAW_PIXELSHIFTNONGREENCROSS2;Check green AMaZE
-!TP_RAW_PIXELSHIFTNONGREENHORIZONTAL;Check red/blue horizontal
-!TP_RAW_PIXELSHIFTNONGREENVERTICAL;Check red/blue vertical
-!TP_RAW_PIXELSHIFTNREADISO;nRead
-!TP_RAW_PIXELSHIFTONEGREEN;Use one green instead of average
-!TP_RAW_PIXELSHIFTONEGREEN_TOOLTIP;Use one green instead of averaging two greens for regions without motion.
-!TP_RAW_PIXELSHIFTPRNU;PRNU (%)
-!TP_RAW_PIXELSHIFTREDBLUEWEIGHT;Red&Blue weight
!TP_RAW_PIXELSHIFTSHOWMOTION;Show motion mask
!TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY;Show only motion mask
!TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY_TOOLTIP;Shows the motion mask without the image.
-!TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Overlays the image with a mask showing the regions with motion.
+!TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Overlays the image with a green mask showing the regions with motion.
!TP_RAW_PIXELSHIFTSIGMA;Blur radius
!TP_RAW_PIXELSHIFTSIGMA_TOOLTIP;The default radius of 1.0 usually fits well for base ISO.\nIncrease the value for high ISO shots, 5.0 is a good starting point.\nWatch the motion mask while changing the value.
!TP_RAW_PIXELSHIFTSMOOTH;Smooth transitions
!TP_RAW_PIXELSHIFTSMOOTH_TOOLTIP;Smooth transitions between areas with motion and areas without.\nSet to 0 to disable transition smoothing.\nSet to 1 to either get the AMaZE/LMMSE result of the selected frame (depending on whether "Use LMMSE" is selected), or the median of all four frames if "Use median" is selected.
-!TP_RAW_PIXELSHIFTSTDDEVFACTORBLUE;StdDev factor Blue
-!TP_RAW_PIXELSHIFTSTDDEVFACTORGREEN;StdDev factor Green
-!TP_RAW_PIXELSHIFTSTDDEVFACTORRED;StdDev factor Red
!TP_RAW_SENSOR_XTRANS_DMETHOD_TOOLTIP;3-pass gives best results (recommended for low ISO images).\n1-pass is almost undistinguishable from 3-pass for high ISO images and is faster.
!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL
!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b*
@@ -2146,7 +2128,7 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: -
!TP_WAVELET_EDGESENSI;Edge sensitivity
!TP_WAVELET_EDGREINF_TOOLTIP;Reinforce or reduce the action of the first level, do the opposite to the second level, and leave the rest unchanged.
!TP_WAVELET_EDGTHRESH;Detail
-!TP_WAVELET_EDGTHRESH_TOOLTIP;Change the repartition between the first levels and the others. The higher the threshold the more the action is centred on the first levels. Be careful with negative values, they increase the action of high levels and can introduce artifacts.
+!TP_WAVELET_EDGTHRESH_TOOLTIP;Change the repartition between the first levels and the others. The higher the threshold the more the action is centered on the first levels. Be careful with negative values, they increase the action of high levels and can introduce artifacts.
!TP_WAVELET_EDRAD;Radius
!TP_WAVELET_EDRAD_TOOLTIP;This radius adjustment is very different from those in other sharpening tools. Its value is compared to each level through a complex function. In this sense, a value of zero still has an effect.
!TP_WAVELET_EDSL;Threshold Sliders
diff --git a/rtdata/languages/Serbian (Cyrilic Characters) b/rtdata/languages/Serbian (Cyrilic Characters)
index 5825f774e..190cfd0fc 100644
--- a/rtdata/languages/Serbian (Cyrilic Characters)
+++ b/rtdata/languages/Serbian (Cyrilic Characters)
@@ -1296,6 +1296,7 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике -
!DYNPROFILEEDITOR_PROFILE;Processing Profile
!EDIT_OBJECT_TOOLTIP;Displays a widget on the preview window which lets you adjust this tool.
!EDIT_PIPETTE_TOOLTIP;To add an adjustment point to the curve, hold the Ctrl key while left-clicking the desired spot in the image preview.\nTo adjust the point, hold the Ctrl key while left-clicking the corresponding area in the preview, then let go of Ctrl (unless you desire fine control) and while still holding the left mouse button move the mouse up or down to move that point up or down in the curve.
+!EXIFFILTER_IMAGETYPE;Image type
!EXIFPANEL_SHOWALL;Show all
!EXPORT_BYPASS;Processing steps to bypass
!EXPORT_BYPASS_EQUALIZER;Bypass Wavelet Levels
@@ -1559,7 +1560,7 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике -
!HISTORY_MSG_491;White Balance
!HISTORY_MSG_492;RGB Curves
!HISTORY_MSG_493;L*a*b* Adjustments
-!HISTORY_MSG_CLAMPOOG;Out-of-gamut colours clipping
+!HISTORY_MSG_CLAMPOOG;Out-of-gamut color clipping
!HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction
!HISTORY_MSG_HISTMATCHING;Auto-Matched Tone Curve
!HISTORY_MSG_LOCALCONTRAST_AMOUNT;Local Contrast - Amount
@@ -1852,7 +1853,7 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике -
!TP_DIRPYREQUALIZER_TOOLTIP;Attempts to reduce artifacts in the transitions between skin colors (hue, chroma, luma) and the rest of the image.
!TP_DISTORTION_AUTO_TIP;Automatically corrects lens distortion in raw files by matching it against the embedded JPEG image if one exists and has had its lens disortion auto-corrected by the camera.
!TP_EPD_GAMMA;Gamma
-!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colours
+!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colors
!TP_EXPOSURE_HISTMATCHING;Auto-Matched Tone Curve
!TP_EXPOSURE_HISTMATCHING_TOOLTIP;Automatically adjust sliders and curves (except exposure compensation) to match the look of the embedded JPEG thumbnail.
!TP_EXPOSURE_TCMODE_LUMINANCE;Luminance
@@ -1926,53 +1927,34 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике -
!TP_RAW_MONO;Mono
!TP_RAW_NONE;None (Shows sensor pattern)
!TP_RAW_PIXELSHIFT;Pixel Shift
-!TP_RAW_PIXELSHIFTADAPTIVE;Adaptive detection
!TP_RAW_PIXELSHIFTBLUR;Blur motion mask
-!TP_RAW_PIXELSHIFTEPERISO;ISO adaption
-!TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;The default value of 0 should work fine for base ISO.\nIncrease the value to improve motion detection for higher ISO.\nIncrease in small steps and watch the motion mask while increasing.
+!TP_RAW_PIXELSHIFTEPERISO;Sensitivity
+!TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;The default value of 0 should work fine for base ISO.\nHigher values increase sensitivity of motion detection.\nChange in small steps and watch the motion mask while changing.\nIncrease sensitivity for underexposed or high ISO images.
!TP_RAW_PIXELSHIFTEQUALBRIGHT;Equalize brightness of frames
!TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL;Equalize per channel
!TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL_TOOLTIP;Enabled: Equalize the RGB channels individually.\nDisabled: Use same equalization factor for all channels.
-!TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;Equalize the brightness of the frames to the brightness of the selected frame.\nIf there are overexposed areas in the frames select the brightest frame to avoid magenta colour cast in overexposed areas or enable motion correction.
-!TP_RAW_PIXELSHIFTEXP0;Experimental
+!TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;Equalize the brightness of the frames to the brightness of the selected frame.\nIf there are overexposed areas in the frames select the brightest frame to avoid magenta color cast in overexposed areas or enable motion correction.
!TP_RAW_PIXELSHIFTGREEN;Check green channel for motion
!TP_RAW_PIXELSHIFTHOLEFILL;Fill holes in motion mask
!TP_RAW_PIXELSHIFTHOLEFILL_TOOLTIP;Fill holes in motion mask
!TP_RAW_PIXELSHIFTLMMSE;Use LMMSE for moving parts
!TP_RAW_PIXELSHIFTLMMSE_TOOLTIP;Use LMMSE instead of AMaZE for areas of motion.\nUseful for high ISO images.
-!TP_RAW_PIXELSHIFTMASKTHRESHOLD;3x3 new threshold
!TP_RAW_PIXELSHIFTMEDIAN;Use median for moving parts
-!TP_RAW_PIXELSHIFTMEDIAN3;Exclude selected frame from median
-!TP_RAW_PIXELSHIFTMEDIAN3_TOOLTIP;Excludes selected frame from median.\nUseful if moving objects overlap in frame 2 and 3
!TP_RAW_PIXELSHIFTMEDIAN_TOOLTIP;Use median of all frames instead of selected frame for regions with motion.\nRemoves objects which are at different places in all frames.\nGives motion effect on slow moving (overlapping) objects.
!TP_RAW_PIXELSHIFTMM_AUTO;Automatic
!TP_RAW_PIXELSHIFTMM_CUSTOM;Custom
!TP_RAW_PIXELSHIFTMM_OFF;Off
-!TP_RAW_PIXELSHIFTMOTION;Motion detection level (deprecated)
-!TP_RAW_PIXELSHIFTMOTIONCORRECTION;Green motion correction size
!TP_RAW_PIXELSHIFTMOTIONMETHOD;Motion Correction
!TP_RAW_PIXELSHIFTMOTION_TOOLTIP;0 means no motion detection.\n1 - 99 means motion will be detected according to this value. Increase value to increase detection rate.\n100 means the AMaZE-demosaiced frame will be used.
-!TP_RAW_PIXELSHIFTNONGREENAMAZE;Check red/blue AMaZE
!TP_RAW_PIXELSHIFTNONGREENCROSS;Check red/blue channels for motion
-!TP_RAW_PIXELSHIFTNONGREENCROSS2;Check green AMaZE
-!TP_RAW_PIXELSHIFTNONGREENHORIZONTAL;Check red/blue horizontal
-!TP_RAW_PIXELSHIFTNONGREENVERTICAL;Check red/blue vertical
-!TP_RAW_PIXELSHIFTNREADISO;nRead
-!TP_RAW_PIXELSHIFTONEGREEN;Use one green instead of average
-!TP_RAW_PIXELSHIFTONEGREEN_TOOLTIP;Use one green instead of averaging two greens for regions without motion.
-!TP_RAW_PIXELSHIFTPRNU;PRNU (%)
-!TP_RAW_PIXELSHIFTREDBLUEWEIGHT;Red&Blue weight
!TP_RAW_PIXELSHIFTSHOWMOTION;Show motion mask
!TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY;Show only motion mask
!TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY_TOOLTIP;Shows the motion mask without the image.
-!TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Overlays the image with a mask showing the regions with motion.
+!TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Overlays the image with a green mask showing the regions with motion.
!TP_RAW_PIXELSHIFTSIGMA;Blur radius
!TP_RAW_PIXELSHIFTSIGMA_TOOLTIP;The default radius of 1.0 usually fits well for base ISO.\nIncrease the value for high ISO shots, 5.0 is a good starting point.\nWatch the motion mask while changing the value.
!TP_RAW_PIXELSHIFTSMOOTH;Smooth transitions
!TP_RAW_PIXELSHIFTSMOOTH_TOOLTIP;Smooth transitions between areas with motion and areas without.\nSet to 0 to disable transition smoothing.\nSet to 1 to either get the AMaZE/LMMSE result of the selected frame (depending on whether "Use LMMSE" is selected), or the median of all four frames if "Use median" is selected.
-!TP_RAW_PIXELSHIFTSTDDEVFACTORBLUE;StdDev factor Blue
-!TP_RAW_PIXELSHIFTSTDDEVFACTORGREEN;StdDev factor Green
-!TP_RAW_PIXELSHIFTSTDDEVFACTORRED;StdDev factor Red
!TP_RAW_RCD;RCD
!TP_RAW_SENSOR_BAYER_LABEL;Sensor with Bayer Matrix
!TP_RAW_SENSOR_XTRANS_DMETHOD_TOOLTIP;3-pass gives best results (recommended for low ISO images).\n1-pass is almost undistinguishable from 3-pass for high ISO images and is faster.
@@ -2141,7 +2123,7 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике -
!TP_WAVELET_EDGESENSI;Edge sensitivity
!TP_WAVELET_EDGREINF_TOOLTIP;Reinforce or reduce the action of the first level, do the opposite to the second level, and leave the rest unchanged.
!TP_WAVELET_EDGTHRESH;Detail
-!TP_WAVELET_EDGTHRESH_TOOLTIP;Change the repartition between the first levels and the others. The higher the threshold the more the action is centred on the first levels. Be careful with negative values, they increase the action of high levels and can introduce artifacts.
+!TP_WAVELET_EDGTHRESH_TOOLTIP;Change the repartition between the first levels and the others. The higher the threshold the more the action is centered on the first levels. Be careful with negative values, they increase the action of high levels and can introduce artifacts.
!TP_WAVELET_EDRAD;Radius
!TP_WAVELET_EDRAD_TOOLTIP;This radius adjustment is very different from those in other sharpening tools. Its value is compared to each level through a complex function. In this sense, a value of zero still has an effect.
!TP_WAVELET_EDSL;Threshold Sliders
diff --git a/rtdata/languages/Serbian (Latin Characters) b/rtdata/languages/Serbian (Latin Characters)
index 545e6b7a5..31100e861 100644
--- a/rtdata/languages/Serbian (Latin Characters)
+++ b/rtdata/languages/Serbian (Latin Characters)
@@ -1296,6 +1296,7 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike -
!DYNPROFILEEDITOR_PROFILE;Processing Profile
!EDIT_OBJECT_TOOLTIP;Displays a widget on the preview window which lets you adjust this tool.
!EDIT_PIPETTE_TOOLTIP;To add an adjustment point to the curve, hold the Ctrl key while left-clicking the desired spot in the image preview.\nTo adjust the point, hold the Ctrl key while left-clicking the corresponding area in the preview, then let go of Ctrl (unless you desire fine control) and while still holding the left mouse button move the mouse up or down to move that point up or down in the curve.
+!EXIFFILTER_IMAGETYPE;Image type
!EXIFPANEL_SHOWALL;Show all
!EXPORT_BYPASS;Processing steps to bypass
!EXPORT_BYPASS_EQUALIZER;Bypass Wavelet Levels
@@ -1559,7 +1560,7 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike -
!HISTORY_MSG_491;White Balance
!HISTORY_MSG_492;RGB Curves
!HISTORY_MSG_493;L*a*b* Adjustments
-!HISTORY_MSG_CLAMPOOG;Out-of-gamut colours clipping
+!HISTORY_MSG_CLAMPOOG;Out-of-gamut color clipping
!HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction
!HISTORY_MSG_HISTMATCHING;Auto-Matched Tone Curve
!HISTORY_MSG_LOCALCONTRAST_AMOUNT;Local Contrast - Amount
@@ -1852,7 +1853,7 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike -
!TP_DIRPYREQUALIZER_TOOLTIP;Attempts to reduce artifacts in the transitions between skin colors (hue, chroma, luma) and the rest of the image.
!TP_DISTORTION_AUTO_TIP;Automatically corrects lens distortion in raw files by matching it against the embedded JPEG image if one exists and has had its lens disortion auto-corrected by the camera.
!TP_EPD_GAMMA;Gamma
-!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colours
+!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colors
!TP_EXPOSURE_HISTMATCHING;Auto-Matched Tone Curve
!TP_EXPOSURE_HISTMATCHING_TOOLTIP;Automatically adjust sliders and curves (except exposure compensation) to match the look of the embedded JPEG thumbnail.
!TP_EXPOSURE_TCMODE_LUMINANCE;Luminance
@@ -1926,53 +1927,34 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike -
!TP_RAW_MONO;Mono
!TP_RAW_NONE;None (Shows sensor pattern)
!TP_RAW_PIXELSHIFT;Pixel Shift
-!TP_RAW_PIXELSHIFTADAPTIVE;Adaptive detection
!TP_RAW_PIXELSHIFTBLUR;Blur motion mask
-!TP_RAW_PIXELSHIFTEPERISO;ISO adaption
-!TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;The default value of 0 should work fine for base ISO.\nIncrease the value to improve motion detection for higher ISO.\nIncrease in small steps and watch the motion mask while increasing.
+!TP_RAW_PIXELSHIFTEPERISO;Sensitivity
+!TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;The default value of 0 should work fine for base ISO.\nHigher values increase sensitivity of motion detection.\nChange in small steps and watch the motion mask while changing.\nIncrease sensitivity for underexposed or high ISO images.
!TP_RAW_PIXELSHIFTEQUALBRIGHT;Equalize brightness of frames
!TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL;Equalize per channel
!TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL_TOOLTIP;Enabled: Equalize the RGB channels individually.\nDisabled: Use same equalization factor for all channels.
-!TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;Equalize the brightness of the frames to the brightness of the selected frame.\nIf there are overexposed areas in the frames select the brightest frame to avoid magenta colour cast in overexposed areas or enable motion correction.
-!TP_RAW_PIXELSHIFTEXP0;Experimental
+!TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;Equalize the brightness of the frames to the brightness of the selected frame.\nIf there are overexposed areas in the frames select the brightest frame to avoid magenta color cast in overexposed areas or enable motion correction.
!TP_RAW_PIXELSHIFTGREEN;Check green channel for motion
!TP_RAW_PIXELSHIFTHOLEFILL;Fill holes in motion mask
!TP_RAW_PIXELSHIFTHOLEFILL_TOOLTIP;Fill holes in motion mask
!TP_RAW_PIXELSHIFTLMMSE;Use LMMSE for moving parts
!TP_RAW_PIXELSHIFTLMMSE_TOOLTIP;Use LMMSE instead of AMaZE for areas of motion.\nUseful for high ISO images.
-!TP_RAW_PIXELSHIFTMASKTHRESHOLD;3x3 new threshold
!TP_RAW_PIXELSHIFTMEDIAN;Use median for moving parts
-!TP_RAW_PIXELSHIFTMEDIAN3;Exclude selected frame from median
-!TP_RAW_PIXELSHIFTMEDIAN3_TOOLTIP;Excludes selected frame from median.\nUseful if moving objects overlap in frame 2 and 3
!TP_RAW_PIXELSHIFTMEDIAN_TOOLTIP;Use median of all frames instead of selected frame for regions with motion.\nRemoves objects which are at different places in all frames.\nGives motion effect on slow moving (overlapping) objects.
!TP_RAW_PIXELSHIFTMM_AUTO;Automatic
!TP_RAW_PIXELSHIFTMM_CUSTOM;Custom
!TP_RAW_PIXELSHIFTMM_OFF;Off
-!TP_RAW_PIXELSHIFTMOTION;Motion detection level (deprecated)
-!TP_RAW_PIXELSHIFTMOTIONCORRECTION;Green motion correction size
!TP_RAW_PIXELSHIFTMOTIONMETHOD;Motion Correction
!TP_RAW_PIXELSHIFTMOTION_TOOLTIP;0 means no motion detection.\n1 - 99 means motion will be detected according to this value. Increase value to increase detection rate.\n100 means the AMaZE-demosaiced frame will be used.
-!TP_RAW_PIXELSHIFTNONGREENAMAZE;Check red/blue AMaZE
!TP_RAW_PIXELSHIFTNONGREENCROSS;Check red/blue channels for motion
-!TP_RAW_PIXELSHIFTNONGREENCROSS2;Check green AMaZE
-!TP_RAW_PIXELSHIFTNONGREENHORIZONTAL;Check red/blue horizontal
-!TP_RAW_PIXELSHIFTNONGREENVERTICAL;Check red/blue vertical
-!TP_RAW_PIXELSHIFTNREADISO;nRead
-!TP_RAW_PIXELSHIFTONEGREEN;Use one green instead of average
-!TP_RAW_PIXELSHIFTONEGREEN_TOOLTIP;Use one green instead of averaging two greens for regions without motion.
-!TP_RAW_PIXELSHIFTPRNU;PRNU (%)
-!TP_RAW_PIXELSHIFTREDBLUEWEIGHT;Red&Blue weight
!TP_RAW_PIXELSHIFTSHOWMOTION;Show motion mask
!TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY;Show only motion mask
!TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY_TOOLTIP;Shows the motion mask without the image.
-!TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Overlays the image with a mask showing the regions with motion.
+!TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Overlays the image with a green mask showing the regions with motion.
!TP_RAW_PIXELSHIFTSIGMA;Blur radius
!TP_RAW_PIXELSHIFTSIGMA_TOOLTIP;The default radius of 1.0 usually fits well for base ISO.\nIncrease the value for high ISO shots, 5.0 is a good starting point.\nWatch the motion mask while changing the value.
!TP_RAW_PIXELSHIFTSMOOTH;Smooth transitions
!TP_RAW_PIXELSHIFTSMOOTH_TOOLTIP;Smooth transitions between areas with motion and areas without.\nSet to 0 to disable transition smoothing.\nSet to 1 to either get the AMaZE/LMMSE result of the selected frame (depending on whether "Use LMMSE" is selected), or the median of all four frames if "Use median" is selected.
-!TP_RAW_PIXELSHIFTSTDDEVFACTORBLUE;StdDev factor Blue
-!TP_RAW_PIXELSHIFTSTDDEVFACTORGREEN;StdDev factor Green
-!TP_RAW_PIXELSHIFTSTDDEVFACTORRED;StdDev factor Red
!TP_RAW_RCD;RCD
!TP_RAW_SENSOR_BAYER_LABEL;Sensor with Bayer Matrix
!TP_RAW_SENSOR_XTRANS_DMETHOD_TOOLTIP;3-pass gives best results (recommended for low ISO images).\n1-pass is almost undistinguishable from 3-pass for high ISO images and is faster.
@@ -2141,7 +2123,7 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike -
!TP_WAVELET_EDGESENSI;Edge sensitivity
!TP_WAVELET_EDGREINF_TOOLTIP;Reinforce or reduce the action of the first level, do the opposite to the second level, and leave the rest unchanged.
!TP_WAVELET_EDGTHRESH;Detail
-!TP_WAVELET_EDGTHRESH_TOOLTIP;Change the repartition between the first levels and the others. The higher the threshold the more the action is centred on the first levels. Be careful with negative values, they increase the action of high levels and can introduce artifacts.
+!TP_WAVELET_EDGTHRESH_TOOLTIP;Change the repartition between the first levels and the others. The higher the threshold the more the action is centered on the first levels. Be careful with negative values, they increase the action of high levels and can introduce artifacts.
!TP_WAVELET_EDRAD;Radius
!TP_WAVELET_EDRAD_TOOLTIP;This radius adjustment is very different from those in other sharpening tools. Its value is compared to each level through a complex function. In this sense, a value of zero still has an effect.
!TP_WAVELET_EDSL;Threshold Sliders
diff --git a/rtdata/languages/Slovak b/rtdata/languages/Slovak
index 74675cf07..bac66f92e 100644
--- a/rtdata/languages/Slovak
+++ b/rtdata/languages/Slovak
@@ -539,6 +539,7 @@ ZOOMPANEL_ZOOMOUT;Oddialiť -
!EDIT_PIPETTE_TOOLTIP;To add an adjustment point to the curve, hold the Ctrl key while left-clicking the desired spot in the image preview.\nTo adjust the point, hold the Ctrl key while left-clicking the corresponding area in the preview, then let go of Ctrl (unless you desire fine control) and while still holding the left mouse button move the mouse up or down to move that point up or down in the curve.
!EXIFFILTER_EXPOSURECOMPENSATION;Exposure compensation (EV)
!EXIFFILTER_FILETYPE;File type
+!EXIFFILTER_IMAGETYPE;Image type
!EXIFPANEL_SHOWALL;Show all
!EXPORT_BYPASS;Processing steps to bypass
!EXPORT_BYPASS_ALL;Select / Unselect All
@@ -1037,7 +1038,7 @@ ZOOMPANEL_ZOOMOUT;Oddialiť -
!HISTORY_MSG_491;White Balance
!HISTORY_MSG_492;RGB Curves
!HISTORY_MSG_493;L*a*b* Adjustments
-!HISTORY_MSG_CLAMPOOG;Out-of-gamut colours clipping
+!HISTORY_MSG_CLAMPOOG;Out-of-gamut color clipping
!HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction
!HISTORY_MSG_HISTMATCHING;Auto-Matched Tone Curve
!HISTORY_MSG_LOCALCONTRAST_AMOUNT;Local Contrast - Amount
@@ -1650,7 +1651,7 @@ ZOOMPANEL_ZOOMOUT;Oddialiť -
!TP_EPD_STRENGTH;Strength
!TP_EPD_TOOLTIP;Tone mapping is possible in L*a*b* mode (standard) and CIECAM02 mode.\n\nWhen in L*a*b* mode, tone mapping can also be used on the residual image of the Wavelet Levels tool.\n\nTo engage CIECAM02 tone mapping mode enable the following settings:\n1. CIECAM02\n2. Algorithm="Brightness + Colorfulness (QM)"\n3. "Tone mapping using CIECAM02 brightness (Q)"
!TP_EXPOSURE_AUTOLEVELS_TIP;Toggles execution of Auto Levels to automatically set Exposure slider values based on an image analysis.\nEnables Highlight Reconstruction if necessary.
-!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colours
+!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colors
!TP_EXPOSURE_CLIP_TIP;The fraction of pixels to be clipped in Auto Levels operation.
!TP_EXPOSURE_COMPRHIGHLIGHTSTHRESHOLD;Highlight compression threshold
!TP_EXPOSURE_CURVEEDITOR1;Tone curve 1
@@ -1843,53 +1844,34 @@ ZOOMPANEL_ZOOMOUT;Oddialiť -
!TP_RAW_MONO;Mono
!TP_RAW_NONE;None (Shows sensor pattern)
!TP_RAW_PIXELSHIFT;Pixel Shift
-!TP_RAW_PIXELSHIFTADAPTIVE;Adaptive detection
!TP_RAW_PIXELSHIFTBLUR;Blur motion mask
-!TP_RAW_PIXELSHIFTEPERISO;ISO adaption
-!TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;The default value of 0 should work fine for base ISO.\nIncrease the value to improve motion detection for higher ISO.\nIncrease in small steps and watch the motion mask while increasing.
+!TP_RAW_PIXELSHIFTEPERISO;Sensitivity
+!TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;The default value of 0 should work fine for base ISO.\nHigher values increase sensitivity of motion detection.\nChange in small steps and watch the motion mask while changing.\nIncrease sensitivity for underexposed or high ISO images.
!TP_RAW_PIXELSHIFTEQUALBRIGHT;Equalize brightness of frames
!TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL;Equalize per channel
!TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL_TOOLTIP;Enabled: Equalize the RGB channels individually.\nDisabled: Use same equalization factor for all channels.
-!TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;Equalize the brightness of the frames to the brightness of the selected frame.\nIf there are overexposed areas in the frames select the brightest frame to avoid magenta colour cast in overexposed areas or enable motion correction.
-!TP_RAW_PIXELSHIFTEXP0;Experimental
+!TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;Equalize the brightness of the frames to the brightness of the selected frame.\nIf there are overexposed areas in the frames select the brightest frame to avoid magenta color cast in overexposed areas or enable motion correction.
!TP_RAW_PIXELSHIFTGREEN;Check green channel for motion
!TP_RAW_PIXELSHIFTHOLEFILL;Fill holes in motion mask
!TP_RAW_PIXELSHIFTHOLEFILL_TOOLTIP;Fill holes in motion mask
!TP_RAW_PIXELSHIFTLMMSE;Use LMMSE for moving parts
!TP_RAW_PIXELSHIFTLMMSE_TOOLTIP;Use LMMSE instead of AMaZE for areas of motion.\nUseful for high ISO images.
-!TP_RAW_PIXELSHIFTMASKTHRESHOLD;3x3 new threshold
!TP_RAW_PIXELSHIFTMEDIAN;Use median for moving parts
-!TP_RAW_PIXELSHIFTMEDIAN3;Exclude selected frame from median
-!TP_RAW_PIXELSHIFTMEDIAN3_TOOLTIP;Excludes selected frame from median.\nUseful if moving objects overlap in frame 2 and 3
!TP_RAW_PIXELSHIFTMEDIAN_TOOLTIP;Use median of all frames instead of selected frame for regions with motion.\nRemoves objects which are at different places in all frames.\nGives motion effect on slow moving (overlapping) objects.
!TP_RAW_PIXELSHIFTMM_AUTO;Automatic
!TP_RAW_PIXELSHIFTMM_CUSTOM;Custom
!TP_RAW_PIXELSHIFTMM_OFF;Off
-!TP_RAW_PIXELSHIFTMOTION;Motion detection level (deprecated)
-!TP_RAW_PIXELSHIFTMOTIONCORRECTION;Green motion correction size
!TP_RAW_PIXELSHIFTMOTIONMETHOD;Motion Correction
!TP_RAW_PIXELSHIFTMOTION_TOOLTIP;0 means no motion detection.\n1 - 99 means motion will be detected according to this value. Increase value to increase detection rate.\n100 means the AMaZE-demosaiced frame will be used.
-!TP_RAW_PIXELSHIFTNONGREENAMAZE;Check red/blue AMaZE
!TP_RAW_PIXELSHIFTNONGREENCROSS;Check red/blue channels for motion
-!TP_RAW_PIXELSHIFTNONGREENCROSS2;Check green AMaZE
-!TP_RAW_PIXELSHIFTNONGREENHORIZONTAL;Check red/blue horizontal
-!TP_RAW_PIXELSHIFTNONGREENVERTICAL;Check red/blue vertical
-!TP_RAW_PIXELSHIFTNREADISO;nRead
-!TP_RAW_PIXELSHIFTONEGREEN;Use one green instead of average
-!TP_RAW_PIXELSHIFTONEGREEN_TOOLTIP;Use one green instead of averaging two greens for regions without motion.
-!TP_RAW_PIXELSHIFTPRNU;PRNU (%)
-!TP_RAW_PIXELSHIFTREDBLUEWEIGHT;Red&Blue weight
!TP_RAW_PIXELSHIFTSHOWMOTION;Show motion mask
!TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY;Show only motion mask
!TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY_TOOLTIP;Shows the motion mask without the image.
-!TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Overlays the image with a mask showing the regions with motion.
+!TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Overlays the image with a green mask showing the regions with motion.
!TP_RAW_PIXELSHIFTSIGMA;Blur radius
!TP_RAW_PIXELSHIFTSIGMA_TOOLTIP;The default radius of 1.0 usually fits well for base ISO.\nIncrease the value for high ISO shots, 5.0 is a good starting point.\nWatch the motion mask while changing the value.
!TP_RAW_PIXELSHIFTSMOOTH;Smooth transitions
!TP_RAW_PIXELSHIFTSMOOTH_TOOLTIP;Smooth transitions between areas with motion and areas without.\nSet to 0 to disable transition smoothing.\nSet to 1 to either get the AMaZE/LMMSE result of the selected frame (depending on whether "Use LMMSE" is selected), or the median of all four frames if "Use median" is selected.
-!TP_RAW_PIXELSHIFTSTDDEVFACTORBLUE;StdDev factor Blue
-!TP_RAW_PIXELSHIFTSTDDEVFACTORGREEN;StdDev factor Green
-!TP_RAW_PIXELSHIFTSTDDEVFACTORRED;StdDev factor Red
!TP_RAW_RCD;RCD
!TP_RAW_SENSOR_BAYER_LABEL;Sensor with Bayer Matrix
!TP_RAW_SENSOR_XTRANS_DMETHOD_TOOLTIP;3-pass gives best results (recommended for low ISO images).\n1-pass is almost undistinguishable from 3-pass for high ISO images and is faster.
@@ -2101,7 +2083,7 @@ ZOOMPANEL_ZOOMOUT;Oddialiť -
!TP_WAVELET_EDGESENSI;Edge sensitivity
!TP_WAVELET_EDGREINF_TOOLTIP;Reinforce or reduce the action of the first level, do the opposite to the second level, and leave the rest unchanged.
!TP_WAVELET_EDGTHRESH;Detail
-!TP_WAVELET_EDGTHRESH_TOOLTIP;Change the repartition between the first levels and the others. The higher the threshold the more the action is centred on the first levels. Be careful with negative values, they increase the action of high levels and can introduce artifacts.
+!TP_WAVELET_EDGTHRESH_TOOLTIP;Change the repartition between the first levels and the others. The higher the threshold the more the action is centered on the first levels. Be careful with negative values, they increase the action of high levels and can introduce artifacts.
!TP_WAVELET_EDRAD;Radius
!TP_WAVELET_EDRAD_TOOLTIP;This radius adjustment is very different from those in other sharpening tools. Its value is compared to each level through a complex function. In this sense, a value of zero still has an effect.
!TP_WAVELET_EDSL;Threshold Sliders
diff --git a/rtdata/languages/Suomi b/rtdata/languages/Suomi
index e42409753..3d5ba7edd 100644
--- a/rtdata/languages/Suomi
+++ b/rtdata/languages/Suomi
@@ -460,6 +460,7 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K]
!EDIT_PIPETTE_TOOLTIP;To add an adjustment point to the curve, hold the Ctrl key while left-clicking the desired spot in the image preview.\nTo adjust the point, hold the Ctrl key while left-clicking the corresponding area in the preview, then let go of Ctrl (unless you desire fine control) and while still holding the left mouse button move the mouse up or down to move that point up or down in the curve.
!EXIFFILTER_EXPOSURECOMPENSATION;Exposure compensation (EV)
!EXIFFILTER_FILETYPE;File type
+!EXIFFILTER_IMAGETYPE;Image type
!EXIFFILTER_METADATAFILTER;Enable metadata filters
!EXIFPANEL_SHOWALL;Show all
!EXPORT_BYPASS;Processing steps to bypass
@@ -976,7 +977,7 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K]
!HISTORY_MSG_491;White Balance
!HISTORY_MSG_492;RGB Curves
!HISTORY_MSG_493;L*a*b* Adjustments
-!HISTORY_MSG_CLAMPOOG;Out-of-gamut colours clipping
+!HISTORY_MSG_CLAMPOOG;Out-of-gamut color clipping
!HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction
!HISTORY_MSG_HISTMATCHING;Auto-Matched Tone Curve
!HISTORY_MSG_LOCALCONTRAST_AMOUNT;Local Contrast - Amount
@@ -1621,7 +1622,7 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K]
!TP_EPD_STRENGTH;Strength
!TP_EPD_TOOLTIP;Tone mapping is possible in L*a*b* mode (standard) and CIECAM02 mode.\n\nWhen in L*a*b* mode, tone mapping can also be used on the residual image of the Wavelet Levels tool.\n\nTo engage CIECAM02 tone mapping mode enable the following settings:\n1. CIECAM02\n2. Algorithm="Brightness + Colorfulness (QM)"\n3. "Tone mapping using CIECAM02 brightness (Q)"
!TP_EXPOSURE_AUTOLEVELS_TIP;Toggles execution of Auto Levels to automatically set Exposure slider values based on an image analysis.\nEnables Highlight Reconstruction if necessary.
-!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colours
+!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colors
!TP_EXPOSURE_CLIP_TIP;The fraction of pixels to be clipped in Auto Levels operation.
!TP_EXPOSURE_COMPRHIGHLIGHTSTHRESHOLD;Highlight compression threshold
!TP_EXPOSURE_CURVEEDITOR1;Tone curve 1
@@ -1831,53 +1832,34 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K]
!TP_RAW_MONO;Mono
!TP_RAW_NONE;None (Shows sensor pattern)
!TP_RAW_PIXELSHIFT;Pixel Shift
-!TP_RAW_PIXELSHIFTADAPTIVE;Adaptive detection
!TP_RAW_PIXELSHIFTBLUR;Blur motion mask
-!TP_RAW_PIXELSHIFTEPERISO;ISO adaption
-!TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;The default value of 0 should work fine for base ISO.\nIncrease the value to improve motion detection for higher ISO.\nIncrease in small steps and watch the motion mask while increasing.
+!TP_RAW_PIXELSHIFTEPERISO;Sensitivity
+!TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;The default value of 0 should work fine for base ISO.\nHigher values increase sensitivity of motion detection.\nChange in small steps and watch the motion mask while changing.\nIncrease sensitivity for underexposed or high ISO images.
!TP_RAW_PIXELSHIFTEQUALBRIGHT;Equalize brightness of frames
!TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL;Equalize per channel
!TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL_TOOLTIP;Enabled: Equalize the RGB channels individually.\nDisabled: Use same equalization factor for all channels.
-!TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;Equalize the brightness of the frames to the brightness of the selected frame.\nIf there are overexposed areas in the frames select the brightest frame to avoid magenta colour cast in overexposed areas or enable motion correction.
-!TP_RAW_PIXELSHIFTEXP0;Experimental
+!TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;Equalize the brightness of the frames to the brightness of the selected frame.\nIf there are overexposed areas in the frames select the brightest frame to avoid magenta color cast in overexposed areas or enable motion correction.
!TP_RAW_PIXELSHIFTGREEN;Check green channel for motion
!TP_RAW_PIXELSHIFTHOLEFILL;Fill holes in motion mask
!TP_RAW_PIXELSHIFTHOLEFILL_TOOLTIP;Fill holes in motion mask
!TP_RAW_PIXELSHIFTLMMSE;Use LMMSE for moving parts
!TP_RAW_PIXELSHIFTLMMSE_TOOLTIP;Use LMMSE instead of AMaZE for areas of motion.\nUseful for high ISO images.
-!TP_RAW_PIXELSHIFTMASKTHRESHOLD;3x3 new threshold
!TP_RAW_PIXELSHIFTMEDIAN;Use median for moving parts
-!TP_RAW_PIXELSHIFTMEDIAN3;Exclude selected frame from median
-!TP_RAW_PIXELSHIFTMEDIAN3_TOOLTIP;Excludes selected frame from median.\nUseful if moving objects overlap in frame 2 and 3
!TP_RAW_PIXELSHIFTMEDIAN_TOOLTIP;Use median of all frames instead of selected frame for regions with motion.\nRemoves objects which are at different places in all frames.\nGives motion effect on slow moving (overlapping) objects.
!TP_RAW_PIXELSHIFTMM_AUTO;Automatic
!TP_RAW_PIXELSHIFTMM_CUSTOM;Custom
!TP_RAW_PIXELSHIFTMM_OFF;Off
-!TP_RAW_PIXELSHIFTMOTION;Motion detection level (deprecated)
-!TP_RAW_PIXELSHIFTMOTIONCORRECTION;Green motion correction size
!TP_RAW_PIXELSHIFTMOTIONMETHOD;Motion Correction
!TP_RAW_PIXELSHIFTMOTION_TOOLTIP;0 means no motion detection.\n1 - 99 means motion will be detected according to this value. Increase value to increase detection rate.\n100 means the AMaZE-demosaiced frame will be used.
-!TP_RAW_PIXELSHIFTNONGREENAMAZE;Check red/blue AMaZE
!TP_RAW_PIXELSHIFTNONGREENCROSS;Check red/blue channels for motion
-!TP_RAW_PIXELSHIFTNONGREENCROSS2;Check green AMaZE
-!TP_RAW_PIXELSHIFTNONGREENHORIZONTAL;Check red/blue horizontal
-!TP_RAW_PIXELSHIFTNONGREENVERTICAL;Check red/blue vertical
-!TP_RAW_PIXELSHIFTNREADISO;nRead
-!TP_RAW_PIXELSHIFTONEGREEN;Use one green instead of average
-!TP_RAW_PIXELSHIFTONEGREEN_TOOLTIP;Use one green instead of averaging two greens for regions without motion.
-!TP_RAW_PIXELSHIFTPRNU;PRNU (%)
-!TP_RAW_PIXELSHIFTREDBLUEWEIGHT;Red&Blue weight
!TP_RAW_PIXELSHIFTSHOWMOTION;Show motion mask
!TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY;Show only motion mask
!TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY_TOOLTIP;Shows the motion mask without the image.
-!TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Overlays the image with a mask showing the regions with motion.
+!TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Overlays the image with a green mask showing the regions with motion.
!TP_RAW_PIXELSHIFTSIGMA;Blur radius
!TP_RAW_PIXELSHIFTSIGMA_TOOLTIP;The default radius of 1.0 usually fits well for base ISO.\nIncrease the value for high ISO shots, 5.0 is a good starting point.\nWatch the motion mask while changing the value.
!TP_RAW_PIXELSHIFTSMOOTH;Smooth transitions
!TP_RAW_PIXELSHIFTSMOOTH_TOOLTIP;Smooth transitions between areas with motion and areas without.\nSet to 0 to disable transition smoothing.\nSet to 1 to either get the AMaZE/LMMSE result of the selected frame (depending on whether "Use LMMSE" is selected), or the median of all four frames if "Use median" is selected.
-!TP_RAW_PIXELSHIFTSTDDEVFACTORBLUE;StdDev factor Blue
-!TP_RAW_PIXELSHIFTSTDDEVFACTORGREEN;StdDev factor Green
-!TP_RAW_PIXELSHIFTSTDDEVFACTORRED;StdDev factor Red
!TP_RAW_RCD;RCD
!TP_RAW_SENSOR_BAYER_LABEL;Sensor with Bayer Matrix
!TP_RAW_SENSOR_XTRANS_DMETHOD_TOOLTIP;3-pass gives best results (recommended for low ISO images).\n1-pass is almost undistinguishable from 3-pass for high ISO images and is faster.
@@ -2092,7 +2074,7 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K]
!TP_WAVELET_EDGESENSI;Edge sensitivity
!TP_WAVELET_EDGREINF_TOOLTIP;Reinforce or reduce the action of the first level, do the opposite to the second level, and leave the rest unchanged.
!TP_WAVELET_EDGTHRESH;Detail
-!TP_WAVELET_EDGTHRESH_TOOLTIP;Change the repartition between the first levels and the others. The higher the threshold the more the action is centred on the first levels. Be careful with negative values, they increase the action of high levels and can introduce artifacts.
+!TP_WAVELET_EDGTHRESH_TOOLTIP;Change the repartition between the first levels and the others. The higher the threshold the more the action is centered on the first levels. Be careful with negative values, they increase the action of high levels and can introduce artifacts.
!TP_WAVELET_EDRAD;Radius
!TP_WAVELET_EDRAD_TOOLTIP;This radius adjustment is very different from those in other sharpening tools. Its value is compared to each level through a complex function. In this sense, a value of zero still has an effect.
!TP_WAVELET_EDSL;Threshold Sliders
diff --git a/rtdata/languages/Swedish b/rtdata/languages/Swedish
index 784aaab44..28da5cb35 100644
--- a/rtdata/languages/Swedish
+++ b/rtdata/languages/Swedish
@@ -1875,6 +1875,7 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: -
!DYNPROFILEEDITOR_NEW;New
!DYNPROFILEEDITOR_NEW_RULE;New Dynamic Profile Rule
!DYNPROFILEEDITOR_PROFILE;Processing Profile
+!EXIFFILTER_IMAGETYPE;Image type
!EXIFPANEL_SHOWALL;Show all
!EXPORT_BYPASS;Processing steps to bypass
!EXPORT_PIPELINE;Processing pipeline
@@ -1945,7 +1946,7 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: -
!HISTORY_MSG_491;White Balance
!HISTORY_MSG_492;RGB Curves
!HISTORY_MSG_493;L*a*b* Adjustments
-!HISTORY_MSG_CLAMPOOG;Out-of-gamut colours clipping
+!HISTORY_MSG_CLAMPOOG;Out-of-gamut color clipping
!HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction
!HISTORY_MSG_HISTMATCHING;Auto-Matched Tone Curve
!HISTORY_MSG_LOCALCONTRAST_AMOUNT;Local Contrast - Amount
@@ -2075,7 +2076,7 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: -
!TP_DIRPYRDENOISE_MEDIAN_TYPE_TOOLTIP;Apply a median filter of the desired window size. The larger the window's size, the longer it takes.\n\n3×3 soft: treats 5 pixels in a 3×3 pixel window.\n3×3: treats 9 pixels in a 3×3 pixel window.\n5×5 soft: treats 13 pixels in a 5×5 pixel window.\n5×5: treats 25 pixels in a 5×5 pixel window.\n7×7: treats 49 pixels in a 7×7 pixel window.\n9×9: treats 81 pixels in a 9×9 pixel window.\n\nSometimes it is possible to achieve higher quality running several iterations with a smaller window size than one iteration with a larger one.
!TP_DIRPYREQUALIZER_HUESKIN_TOOLTIP;This pyramid is for the upper part, so far as the algorithm at its maximum efficiency.\nTo the lower part, the transition zones.\nIf you need to move the area significantly to the left or right - or if there are artifacts: the white balance is incorrect\nYou can slightly reduce the zone to prevent the rest of the image is affected.
!TP_DISTORTION_AUTO_TIP;Automatically corrects lens distortion in raw files by matching it against the embedded JPEG image if one exists and has had its lens disortion auto-corrected by the camera.
-!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colours
+!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colors
!TP_EXPOSURE_HISTMATCHING;Auto-Matched Tone Curve
!TP_EXPOSURE_HISTMATCHING_TOOLTIP;Automatically adjust sliders and curves (except exposure compensation) to match the look of the embedded JPEG thumbnail.
!TP_FLATFIELD_CLIPCONTROL;Clip control
@@ -2116,53 +2117,34 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: -
!TP_RAW_MONO;Mono
!TP_RAW_NONE;None (Shows sensor pattern)
!TP_RAW_PIXELSHIFT;Pixel Shift
-!TP_RAW_PIXELSHIFTADAPTIVE;Adaptive detection
!TP_RAW_PIXELSHIFTBLUR;Blur motion mask
-!TP_RAW_PIXELSHIFTEPERISO;ISO adaption
-!TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;The default value of 0 should work fine for base ISO.\nIncrease the value to improve motion detection for higher ISO.\nIncrease in small steps and watch the motion mask while increasing.
+!TP_RAW_PIXELSHIFTEPERISO;Sensitivity
+!TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;The default value of 0 should work fine for base ISO.\nHigher values increase sensitivity of motion detection.\nChange in small steps and watch the motion mask while changing.\nIncrease sensitivity for underexposed or high ISO images.
!TP_RAW_PIXELSHIFTEQUALBRIGHT;Equalize brightness of frames
!TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL;Equalize per channel
!TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL_TOOLTIP;Enabled: Equalize the RGB channels individually.\nDisabled: Use same equalization factor for all channels.
-!TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;Equalize the brightness of the frames to the brightness of the selected frame.\nIf there are overexposed areas in the frames select the brightest frame to avoid magenta colour cast in overexposed areas or enable motion correction.
-!TP_RAW_PIXELSHIFTEXP0;Experimental
+!TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;Equalize the brightness of the frames to the brightness of the selected frame.\nIf there are overexposed areas in the frames select the brightest frame to avoid magenta color cast in overexposed areas or enable motion correction.
!TP_RAW_PIXELSHIFTGREEN;Check green channel for motion
!TP_RAW_PIXELSHIFTHOLEFILL;Fill holes in motion mask
!TP_RAW_PIXELSHIFTHOLEFILL_TOOLTIP;Fill holes in motion mask
!TP_RAW_PIXELSHIFTLMMSE;Use LMMSE for moving parts
!TP_RAW_PIXELSHIFTLMMSE_TOOLTIP;Use LMMSE instead of AMaZE for areas of motion.\nUseful for high ISO images.
-!TP_RAW_PIXELSHIFTMASKTHRESHOLD;3x3 new threshold
!TP_RAW_PIXELSHIFTMEDIAN;Use median for moving parts
-!TP_RAW_PIXELSHIFTMEDIAN3;Exclude selected frame from median
-!TP_RAW_PIXELSHIFTMEDIAN3_TOOLTIP;Excludes selected frame from median.\nUseful if moving objects overlap in frame 2 and 3
!TP_RAW_PIXELSHIFTMEDIAN_TOOLTIP;Use median of all frames instead of selected frame for regions with motion.\nRemoves objects which are at different places in all frames.\nGives motion effect on slow moving (overlapping) objects.
!TP_RAW_PIXELSHIFTMM_AUTO;Automatic
!TP_RAW_PIXELSHIFTMM_CUSTOM;Custom
!TP_RAW_PIXELSHIFTMM_OFF;Off
-!TP_RAW_PIXELSHIFTMOTION;Motion detection level (deprecated)
-!TP_RAW_PIXELSHIFTMOTIONCORRECTION;Green motion correction size
!TP_RAW_PIXELSHIFTMOTIONMETHOD;Motion Correction
!TP_RAW_PIXELSHIFTMOTION_TOOLTIP;0 means no motion detection.\n1 - 99 means motion will be detected according to this value. Increase value to increase detection rate.\n100 means the AMaZE-demosaiced frame will be used.
-!TP_RAW_PIXELSHIFTNONGREENAMAZE;Check red/blue AMaZE
!TP_RAW_PIXELSHIFTNONGREENCROSS;Check red/blue channels for motion
-!TP_RAW_PIXELSHIFTNONGREENCROSS2;Check green AMaZE
-!TP_RAW_PIXELSHIFTNONGREENHORIZONTAL;Check red/blue horizontal
-!TP_RAW_PIXELSHIFTNONGREENVERTICAL;Check red/blue vertical
-!TP_RAW_PIXELSHIFTNREADISO;nRead
-!TP_RAW_PIXELSHIFTONEGREEN;Use one green instead of average
-!TP_RAW_PIXELSHIFTONEGREEN_TOOLTIP;Use one green instead of averaging two greens for regions without motion.
-!TP_RAW_PIXELSHIFTPRNU;PRNU (%)
-!TP_RAW_PIXELSHIFTREDBLUEWEIGHT;Red&Blue weight
!TP_RAW_PIXELSHIFTSHOWMOTION;Show motion mask
!TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY;Show only motion mask
!TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY_TOOLTIP;Shows the motion mask without the image.
-!TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Overlays the image with a mask showing the regions with motion.
+!TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Overlays the image with a green mask showing the regions with motion.
!TP_RAW_PIXELSHIFTSIGMA;Blur radius
!TP_RAW_PIXELSHIFTSIGMA_TOOLTIP;The default radius of 1.0 usually fits well for base ISO.\nIncrease the value for high ISO shots, 5.0 is a good starting point.\nWatch the motion mask while changing the value.
!TP_RAW_PIXELSHIFTSMOOTH;Smooth transitions
!TP_RAW_PIXELSHIFTSMOOTH_TOOLTIP;Smooth transitions between areas with motion and areas without.\nSet to 0 to disable transition smoothing.\nSet to 1 to either get the AMaZE/LMMSE result of the selected frame (depending on whether "Use LMMSE" is selected), or the median of all four frames if "Use median" is selected.
-!TP_RAW_PIXELSHIFTSTDDEVFACTORBLUE;StdDev factor Blue
-!TP_RAW_PIXELSHIFTSTDDEVFACTORGREEN;StdDev factor Green
-!TP_RAW_PIXELSHIFTSTDDEVFACTORRED;StdDev factor Red
!TP_RAW_RCD;RCD
!TP_RAW_VNG4;VNG4
!TP_RETINEX_CONTEDIT_MAP;Mask equalizer
@@ -2203,7 +2185,7 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: -
!TP_WAVELET_EDGEDETECTTHR;Threshold low (noise)
!TP_WAVELET_EDGEDETECTTHR2;Threshold high (detection)
!TP_WAVELET_EDGREINF_TOOLTIP;Reinforce or reduce the action of the first level, do the opposite to the second level, and leave the rest unchanged.
-!TP_WAVELET_EDGTHRESH_TOOLTIP;Change the repartition between the first levels and the others. The higher the threshold the more the action is centred on the first levels. Be careful with negative values, they increase the action of high levels and can introduce artifacts.
+!TP_WAVELET_EDGTHRESH_TOOLTIP;Change the repartition between the first levels and the others. The higher the threshold the more the action is centered on the first levels. Be careful with negative values, they increase the action of high levels and can introduce artifacts.
!TP_WAVELET_EDRAD_TOOLTIP;This radius adjustment is very different from those in other sharpening tools. Its value is compared to each level through a complex function. In this sense, a value of zero still has an effect.
!TP_WAVELET_HIGHLIGHT;Highlight luminance range
!TP_WAVELET_HS1;Whole luminance range
diff --git a/rtdata/languages/Turkish b/rtdata/languages/Turkish
index 2dab021f9..e6aaa5643 100644
--- a/rtdata/languages/Turkish
+++ b/rtdata/languages/Turkish
@@ -459,6 +459,7 @@ TP_WBALANCE_TEMPERATURE;Isı
!EDIT_PIPETTE_TOOLTIP;To add an adjustment point to the curve, hold the Ctrl key while left-clicking the desired spot in the image preview.\nTo adjust the point, hold the Ctrl key while left-clicking the corresponding area in the preview, then let go of Ctrl (unless you desire fine control) and while still holding the left mouse button move the mouse up or down to move that point up or down in the curve.
!EXIFFILTER_EXPOSURECOMPENSATION;Exposure compensation (EV)
!EXIFFILTER_FILETYPE;File type
+!EXIFFILTER_IMAGETYPE;Image type
!EXIFFILTER_METADATAFILTER;Enable metadata filters
!EXIFPANEL_SHOWALL;Show all
!EXPORT_BYPASS;Processing steps to bypass
@@ -975,7 +976,7 @@ TP_WBALANCE_TEMPERATURE;Isı
!HISTORY_MSG_491;White Balance
!HISTORY_MSG_492;RGB Curves
!HISTORY_MSG_493;L*a*b* Adjustments
-!HISTORY_MSG_CLAMPOOG;Out-of-gamut colours clipping
+!HISTORY_MSG_CLAMPOOG;Out-of-gamut color clipping
!HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction
!HISTORY_MSG_HISTMATCHING;Auto-Matched Tone Curve
!HISTORY_MSG_LOCALCONTRAST_AMOUNT;Local Contrast - Amount
@@ -1620,7 +1621,7 @@ TP_WBALANCE_TEMPERATURE;Isı
!TP_EPD_STRENGTH;Strength
!TP_EPD_TOOLTIP;Tone mapping is possible in L*a*b* mode (standard) and CIECAM02 mode.\n\nWhen in L*a*b* mode, tone mapping can also be used on the residual image of the Wavelet Levels tool.\n\nTo engage CIECAM02 tone mapping mode enable the following settings:\n1. CIECAM02\n2. Algorithm="Brightness + Colorfulness (QM)"\n3. "Tone mapping using CIECAM02 brightness (Q)"
!TP_EXPOSURE_AUTOLEVELS_TIP;Toggles execution of Auto Levels to automatically set Exposure slider values based on an image analysis.\nEnables Highlight Reconstruction if necessary.
-!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colours
+!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colors
!TP_EXPOSURE_CLIP_TIP;The fraction of pixels to be clipped in Auto Levels operation.
!TP_EXPOSURE_COMPRHIGHLIGHTSTHRESHOLD;Highlight compression threshold
!TP_EXPOSURE_CURVEEDITOR1;Tone curve 1
@@ -1830,53 +1831,34 @@ TP_WBALANCE_TEMPERATURE;Isı
!TP_RAW_MONO;Mono
!TP_RAW_NONE;None (Shows sensor pattern)
!TP_RAW_PIXELSHIFT;Pixel Shift
-!TP_RAW_PIXELSHIFTADAPTIVE;Adaptive detection
!TP_RAW_PIXELSHIFTBLUR;Blur motion mask
-!TP_RAW_PIXELSHIFTEPERISO;ISO adaption
-!TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;The default value of 0 should work fine for base ISO.\nIncrease the value to improve motion detection for higher ISO.\nIncrease in small steps and watch the motion mask while increasing.
+!TP_RAW_PIXELSHIFTEPERISO;Sensitivity
+!TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;The default value of 0 should work fine for base ISO.\nHigher values increase sensitivity of motion detection.\nChange in small steps and watch the motion mask while changing.\nIncrease sensitivity for underexposed or high ISO images.
!TP_RAW_PIXELSHIFTEQUALBRIGHT;Equalize brightness of frames
!TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL;Equalize per channel
!TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL_TOOLTIP;Enabled: Equalize the RGB channels individually.\nDisabled: Use same equalization factor for all channels.
-!TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;Equalize the brightness of the frames to the brightness of the selected frame.\nIf there are overexposed areas in the frames select the brightest frame to avoid magenta colour cast in overexposed areas or enable motion correction.
-!TP_RAW_PIXELSHIFTEXP0;Experimental
+!TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;Equalize the brightness of the frames to the brightness of the selected frame.\nIf there are overexposed areas in the frames select the brightest frame to avoid magenta color cast in overexposed areas or enable motion correction.
!TP_RAW_PIXELSHIFTGREEN;Check green channel for motion
!TP_RAW_PIXELSHIFTHOLEFILL;Fill holes in motion mask
!TP_RAW_PIXELSHIFTHOLEFILL_TOOLTIP;Fill holes in motion mask
!TP_RAW_PIXELSHIFTLMMSE;Use LMMSE for moving parts
!TP_RAW_PIXELSHIFTLMMSE_TOOLTIP;Use LMMSE instead of AMaZE for areas of motion.\nUseful for high ISO images.
-!TP_RAW_PIXELSHIFTMASKTHRESHOLD;3x3 new threshold
!TP_RAW_PIXELSHIFTMEDIAN;Use median for moving parts
-!TP_RAW_PIXELSHIFTMEDIAN3;Exclude selected frame from median
-!TP_RAW_PIXELSHIFTMEDIAN3_TOOLTIP;Excludes selected frame from median.\nUseful if moving objects overlap in frame 2 and 3
!TP_RAW_PIXELSHIFTMEDIAN_TOOLTIP;Use median of all frames instead of selected frame for regions with motion.\nRemoves objects which are at different places in all frames.\nGives motion effect on slow moving (overlapping) objects.
!TP_RAW_PIXELSHIFTMM_AUTO;Automatic
!TP_RAW_PIXELSHIFTMM_CUSTOM;Custom
!TP_RAW_PIXELSHIFTMM_OFF;Off
-!TP_RAW_PIXELSHIFTMOTION;Motion detection level (deprecated)
-!TP_RAW_PIXELSHIFTMOTIONCORRECTION;Green motion correction size
!TP_RAW_PIXELSHIFTMOTIONMETHOD;Motion Correction
!TP_RAW_PIXELSHIFTMOTION_TOOLTIP;0 means no motion detection.\n1 - 99 means motion will be detected according to this value. Increase value to increase detection rate.\n100 means the AMaZE-demosaiced frame will be used.
-!TP_RAW_PIXELSHIFTNONGREENAMAZE;Check red/blue AMaZE
!TP_RAW_PIXELSHIFTNONGREENCROSS;Check red/blue channels for motion
-!TP_RAW_PIXELSHIFTNONGREENCROSS2;Check green AMaZE
-!TP_RAW_PIXELSHIFTNONGREENHORIZONTAL;Check red/blue horizontal
-!TP_RAW_PIXELSHIFTNONGREENVERTICAL;Check red/blue vertical
-!TP_RAW_PIXELSHIFTNREADISO;nRead
-!TP_RAW_PIXELSHIFTONEGREEN;Use one green instead of average
-!TP_RAW_PIXELSHIFTONEGREEN_TOOLTIP;Use one green instead of averaging two greens for regions without motion.
-!TP_RAW_PIXELSHIFTPRNU;PRNU (%)
-!TP_RAW_PIXELSHIFTREDBLUEWEIGHT;Red&Blue weight
!TP_RAW_PIXELSHIFTSHOWMOTION;Show motion mask
!TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY;Show only motion mask
!TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY_TOOLTIP;Shows the motion mask without the image.
-!TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Overlays the image with a mask showing the regions with motion.
+!TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Overlays the image with a green mask showing the regions with motion.
!TP_RAW_PIXELSHIFTSIGMA;Blur radius
!TP_RAW_PIXELSHIFTSIGMA_TOOLTIP;The default radius of 1.0 usually fits well for base ISO.\nIncrease the value for high ISO shots, 5.0 is a good starting point.\nWatch the motion mask while changing the value.
!TP_RAW_PIXELSHIFTSMOOTH;Smooth transitions
!TP_RAW_PIXELSHIFTSMOOTH_TOOLTIP;Smooth transitions between areas with motion and areas without.\nSet to 0 to disable transition smoothing.\nSet to 1 to either get the AMaZE/LMMSE result of the selected frame (depending on whether "Use LMMSE" is selected), or the median of all four frames if "Use median" is selected.
-!TP_RAW_PIXELSHIFTSTDDEVFACTORBLUE;StdDev factor Blue
-!TP_RAW_PIXELSHIFTSTDDEVFACTORGREEN;StdDev factor Green
-!TP_RAW_PIXELSHIFTSTDDEVFACTORRED;StdDev factor Red
!TP_RAW_RCD;RCD
!TP_RAW_SENSOR_BAYER_LABEL;Sensor with Bayer Matrix
!TP_RAW_SENSOR_XTRANS_DMETHOD_TOOLTIP;3-pass gives best results (recommended for low ISO images).\n1-pass is almost undistinguishable from 3-pass for high ISO images and is faster.
@@ -2091,7 +2073,7 @@ TP_WBALANCE_TEMPERATURE;Isı
!TP_WAVELET_EDGESENSI;Edge sensitivity
!TP_WAVELET_EDGREINF_TOOLTIP;Reinforce or reduce the action of the first level, do the opposite to the second level, and leave the rest unchanged.
!TP_WAVELET_EDGTHRESH;Detail
-!TP_WAVELET_EDGTHRESH_TOOLTIP;Change the repartition between the first levels and the others. The higher the threshold the more the action is centred on the first levels. Be careful with negative values, they increase the action of high levels and can introduce artifacts.
+!TP_WAVELET_EDGTHRESH_TOOLTIP;Change the repartition between the first levels and the others. The higher the threshold the more the action is centered on the first levels. Be careful with negative values, they increase the action of high levels and can introduce artifacts.
!TP_WAVELET_EDRAD;Radius
!TP_WAVELET_EDRAD_TOOLTIP;This radius adjustment is very different from those in other sharpening tools. Its value is compared to each level through a complex function. In this sense, a value of zero still has an effect.
!TP_WAVELET_EDSL;Threshold Sliders
diff --git a/rtdata/languages/default b/rtdata/languages/default
index 38cfd5763..a50b89443 100644
--- a/rtdata/languages/default
+++ b/rtdata/languages/default
@@ -56,6 +56,7 @@ EXIFFILTER_CAMERA;Camera
EXIFFILTER_EXPOSURECOMPENSATION;Exposure compensation (EV)
EXIFFILTER_FILETYPE;File type
EXIFFILTER_FOCALLEN;Focal length
+EXIFFILTER_IMAGETYPE;Image type
EXIFFILTER_ISO;ISO
EXIFFILTER_LENS;Lens
EXIFFILTER_METADATAFILTER;Enable metadata filters
@@ -739,8 +740,7 @@ HISTORY_MSG_490;HDR TM - Amount
HISTORY_MSG_491;White Balance
HISTORY_MSG_492;RGB Curves
HISTORY_MSG_493;L*a*b* Adjustments
-
-HISTORY_MSG_CLAMPOOG;Out-of-gamut colours clipping
+HISTORY_MSG_CLAMPOOG;Out-of-gamut color clipping
HISTORY_MSG_LOCLOCX;Local - Right
HISTORY_MSG_LOCCENTER;Local - Center
HISTORY_MSG_LOCDEGRE;Local - Deg
@@ -1688,7 +1688,7 @@ TP_EXPOSURE_AUTOLEVELS;Auto Levels
TP_EXPOSURE_AUTOLEVELS_TIP;Toggles execution of Auto Levels to automatically set Exposure slider values based on an image analysis.\nEnables Highlight Reconstruction if necessary.
TP_EXPOSURE_BLACKLEVEL;Black
TP_EXPOSURE_BRIGHTNESS;Lightness
-TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colours
+TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colors
TP_EXPOSURE_CLIP;Clip %
TP_EXPOSURE_CLIP_TIP;The fraction of pixels to be clipped in Auto Levels operation.
TP_EXPOSURE_COMPRHIGHLIGHTS;Highlight compression
@@ -2040,53 +2040,34 @@ TP_RAW_LMMSE_TOOLTIP;Adds gamma (step 1), median (steps 2-4) and refinement (ste
TP_RAW_MONO;Mono
TP_RAW_NONE;None (Shows sensor pattern)
TP_RAW_PIXELSHIFT;Pixel Shift
-TP_RAW_PIXELSHIFTADAPTIVE;Adaptive detection
TP_RAW_PIXELSHIFTBLUR;Blur motion mask
-TP_RAW_PIXELSHIFTEPERISO;ISO adaption
-TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;The default value of 0 should work fine for base ISO.\nIncrease the value to improve motion detection for higher ISO.\nIncrease in small steps and watch the motion mask while increasing.
+TP_RAW_PIXELSHIFTEPERISO;Sensitivity
+TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;The default value of 0 should work fine for base ISO.\nHigher values increase sensitivity of motion detection.\nChange in small steps and watch the motion mask while changing.\nIncrease sensitivity for underexposed or high ISO images.
TP_RAW_PIXELSHIFTEQUALBRIGHT;Equalize brightness of frames
TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL;Equalize per channel
TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL_TOOLTIP;Enabled: Equalize the RGB channels individually.\nDisabled: Use same equalization factor for all channels.
-TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;Equalize the brightness of the frames to the brightness of the selected frame.\nIf there are overexposed areas in the frames select the brightest frame to avoid magenta colour cast in overexposed areas or enable motion correction.
-TP_RAW_PIXELSHIFTEXP0;Experimental
+TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;Equalize the brightness of the frames to the brightness of the selected frame.\nIf there are overexposed areas in the frames select the brightest frame to avoid magenta color cast in overexposed areas or enable motion correction.
TP_RAW_PIXELSHIFTGREEN;Check green channel for motion
TP_RAW_PIXELSHIFTHOLEFILL;Fill holes in motion mask
TP_RAW_PIXELSHIFTHOLEFILL_TOOLTIP;Fill holes in motion mask
TP_RAW_PIXELSHIFTLMMSE;Use LMMSE for moving parts
TP_RAW_PIXELSHIFTLMMSE_TOOLTIP;Use LMMSE instead of AMaZE for areas of motion.\nUseful for high ISO images.
-TP_RAW_PIXELSHIFTMASKTHRESHOLD;3x3 new threshold
TP_RAW_PIXELSHIFTMEDIAN;Use median for moving parts
-TP_RAW_PIXELSHIFTMEDIAN3;Exclude selected frame from median
-TP_RAW_PIXELSHIFTMEDIAN3_TOOLTIP;Excludes selected frame from median.\nUseful if moving objects overlap in frame 2 and 3
TP_RAW_PIXELSHIFTMEDIAN_TOOLTIP;Use median of all frames instead of selected frame for regions with motion.\nRemoves objects which are at different places in all frames.\nGives motion effect on slow moving (overlapping) objects.
TP_RAW_PIXELSHIFTMM_AUTO;Automatic
TP_RAW_PIXELSHIFTMM_CUSTOM;Custom
TP_RAW_PIXELSHIFTMM_OFF;Off
-TP_RAW_PIXELSHIFTMOTION;Motion detection level (deprecated)
-TP_RAW_PIXELSHIFTMOTIONCORRECTION;Green motion correction size
TP_RAW_PIXELSHIFTMOTIONMETHOD;Motion Correction
TP_RAW_PIXELSHIFTMOTION_TOOLTIP;0 means no motion detection.\n1 - 99 means motion will be detected according to this value. Increase value to increase detection rate.\n100 means the AMaZE-demosaiced frame will be used.
-TP_RAW_PIXELSHIFTNONGREENAMAZE;Check red/blue AMaZE
TP_RAW_PIXELSHIFTNONGREENCROSS;Check red/blue channels for motion
-TP_RAW_PIXELSHIFTNONGREENCROSS2;Check green AMaZE
-TP_RAW_PIXELSHIFTNONGREENHORIZONTAL;Check red/blue horizontal
-TP_RAW_PIXELSHIFTNONGREENVERTICAL;Check red/blue vertical
-TP_RAW_PIXELSHIFTNREADISO;nRead
-TP_RAW_PIXELSHIFTONEGREEN;Use one green instead of average
-TP_RAW_PIXELSHIFTONEGREEN_TOOLTIP;Use one green instead of averaging two greens for regions without motion.
-TP_RAW_PIXELSHIFTPRNU;PRNU (%)
-TP_RAW_PIXELSHIFTREDBLUEWEIGHT;Red&Blue weight
TP_RAW_PIXELSHIFTSHOWMOTION;Show motion mask
TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY;Show only motion mask
TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY_TOOLTIP;Shows the motion mask without the image.
-TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Overlays the image with a mask showing the regions with motion.
+TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Overlays the image with a green mask showing the regions with motion.
TP_RAW_PIXELSHIFTSIGMA;Blur radius
TP_RAW_PIXELSHIFTSIGMA_TOOLTIP;The default radius of 1.0 usually fits well for base ISO.\nIncrease the value for high ISO shots, 5.0 is a good starting point.\nWatch the motion mask while changing the value.
TP_RAW_PIXELSHIFTSMOOTH;Smooth transitions
TP_RAW_PIXELSHIFTSMOOTH_TOOLTIP;Smooth transitions between areas with motion and areas without.\nSet to 0 to disable transition smoothing.\nSet to 1 to either get the AMaZE/LMMSE result of the selected frame (depending on whether "Use LMMSE" is selected), or the median of all four frames if "Use median" is selected.
-TP_RAW_PIXELSHIFTSTDDEVFACTORBLUE;StdDev factor Blue
-TP_RAW_PIXELSHIFTSTDDEVFACTORGREEN;StdDev factor Green
-TP_RAW_PIXELSHIFTSTDDEVFACTORRED;StdDev factor Red
TP_RAW_RCD;RCD
TP_RAW_SENSOR_BAYER_LABEL;Sensor with Bayer Matrix
TP_RAW_SENSOR_XTRANS_DMETHOD_TOOLTIP;3-pass gives best results (recommended for low ISO images).\n1-pass is almost undistinguishable from 3-pass for high ISO images and is faster.
@@ -2335,7 +2316,7 @@ TP_WAVELET_EDGEDETECT_TOOLTIP;Moving the slider to the right increases edge sens
TP_WAVELET_EDGESENSI;Edge sensitivity
TP_WAVELET_EDGREINF_TOOLTIP;Reinforce or reduce the action of the first level, do the opposite to the second level, and leave the rest unchanged.
TP_WAVELET_EDGTHRESH;Detail
-TP_WAVELET_EDGTHRESH_TOOLTIP;Change the repartition between the first levels and the others. The higher the threshold the more the action is centred on the first levels. Be careful with negative values, they increase the action of high levels and can introduce artifacts.
+TP_WAVELET_EDGTHRESH_TOOLTIP;Change the repartition between the first levels and the others. The higher the threshold the more the action is centered on the first levels. Be careful with negative values, they increase the action of high levels and can introduce artifacts.
TP_WAVELET_EDRAD;Radius
TP_WAVELET_EDRAD_TOOLTIP;This radius adjustment is very different from those in other sharpening tools. Its value is compared to each level through a complex function. In this sense, a value of zero still has an effect.
TP_WAVELET_EDSL;Threshold Sliders
diff --git a/rtdata/profiles/Pixel Shift/PS ISO High.pp3 b/rtdata/profiles/Pixel Shift/PS ISO High.pp3
index 2c9927e93..87af3febd 100644
--- a/rtdata/profiles/Pixel Shift/PS ISO High.pp3
+++ b/rtdata/profiles/Pixel Shift/PS ISO High.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=5.0-r1-gtk3-503-g9e1fc78
-Version=326
+AppVersion=5.4
+Version=332
[RAW]
CA=true
diff --git a/rtdata/profiles/Pixel Shift/PS ISO Low.pp3 b/rtdata/profiles/Pixel Shift/PS ISO Low.pp3
index cbf2e6c74..62374cb69 100644
--- a/rtdata/profiles/Pixel Shift/PS ISO Low.pp3
+++ b/rtdata/profiles/Pixel Shift/PS ISO Low.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=5.0-r1-gtk3-503-g9e1fc78
-Version=326
+AppVersion=5.4
+Version=332
[Sharpening]
Enabled=true
diff --git a/rtdata/profiles/Pixel Shift/PS ISO Medium.pp3 b/rtdata/profiles/Pixel Shift/PS ISO Medium.pp3
index 2c83094c2..16463b1b0 100644
--- a/rtdata/profiles/Pixel Shift/PS ISO Medium.pp3
+++ b/rtdata/profiles/Pixel Shift/PS ISO Medium.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=5.0-r1-gtk3-503-g9e1fc78
-Version=326
+AppVersion=5.4
+Version=332
[RAW]
CA=true
diff --git a/rtdata/profiles/Pixel Shift/PS No Motion.pp3 b/rtdata/profiles/Pixel Shift/PS No Motion.pp3
index 7a73881a1..8f0cce13b 100644
--- a/rtdata/profiles/Pixel Shift/PS No Motion.pp3
+++ b/rtdata/profiles/Pixel Shift/PS No Motion.pp3
@@ -1,6 +1,6 @@
[Version]
-AppVersion=5.0-r1-gtk3-503-g9e1fc78
-Version=326
+AppVersion=5.4
+Version=332
[Sharpening]
Enabled=true
diff --git a/rtengine/CMakeLists.txt b/rtengine/CMakeLists.txt
index b3932bcef..a14027233 100644
--- a/rtengine/CMakeLists.txt
+++ b/rtengine/CMakeLists.txt
@@ -121,6 +121,8 @@ set(RTENGINESOURCEFILES
histmatching.cc
pdaflinesfilter.cc
gamutwarning.cc
+ ipshadowshighlights.cc
+ xtrans_demosaic.cc
)
if(LENSFUN_HAS_LOAD_DIRECTORY)
diff --git a/rtengine/LUT.h b/rtengine/LUT.h
index c0a63037a..15ae988e3 100644
--- a/rtengine/LUT.h
+++ b/rtengine/LUT.h
@@ -74,8 +74,9 @@
// Bit representations of flags
enum {
- LUT_CLIP_BELOW = 1 << 0,
- LUT_CLIP_ABOVE = 1 << 1
+ LUT_CLIP_OFF, // LUT does not clip input values
+ LUT_CLIP_BELOW, // LUT clips input values at lower bound
+ LUT_CLIP_ABOVE // LUT clips input values at upper bound
};
template
@@ -111,7 +112,7 @@ public:
/// The user have to handle it itself, even if some method can (re)initialize it
bool dirty;
- LUT(int s, int flags = 0xfffffff)
+ LUT(int s, int flags = LUT_CLIP_BELOW | LUT_CLIP_ABOVE, bool initZero = false)
{
#ifndef NDEBUG
@@ -137,8 +138,11 @@ public:
sizeiv = _mm_set1_epi32( (int)(size - 1) );
sizev = F2V( size - 1 );
#endif
+ if (initZero) {
+ clear();
+ }
}
- void operator ()(int s, int flags = 0xfffffff)
+ void operator ()(int s, int flags = LUT_CLIP_BELOW | LUT_CLIP_ABOVE, bool initZero = false)
{
#ifndef NDEBUG
@@ -167,6 +171,10 @@ public:
sizeiv = _mm_set1_epi32( (int)(size - 1) );
sizev = F2V( size - 1 );
#endif
+ if (initZero) {
+ clear();
+ }
+
}
LUT()
@@ -616,7 +624,7 @@ public:
}
// share the buffer with another LUT, handy for same data but different clip flags
- void share(const LUT &source, int flags = 0xfffffff)
+ void share(const LUT &source, int flags = LUT_CLIP_BELOW | LUT_CLIP_ABOVE)
{
if (owner && data) {
delete[] data;
diff --git a/rtengine/camconst.json b/rtengine/camconst.json
index cfe7412d8..35cb524a1 100644
--- a/rtengine/camconst.json
+++ b/rtengine/camconst.json
@@ -2004,6 +2004,11 @@ Camera constants:
"ranges": { "white": 4080 } // nominal at ISO200 4094
},
+ {
+ "make_model": [ "PENTAX K-S1" ],
+ "raw_crop": [ 0, 0, -8, 0 ]
+ },
+
{ // Quality B, Intemediate ISO samples missing, Pentax_DNG WLtags are after BL sutraction and not valid
"make_model": [ "RICOH PENTAX K-70", "PENTAX K-70" ],
//"dcraw_matrix": [ 8050,-2061,-1264,-4359,12953,1515,-1096,1965,6075 ], // PENTAX DNG D65
diff --git a/rtengine/dcraw.cc b/rtengine/dcraw.cc
index afe54200a..05f1a32a2 100644
--- a/rtengine/dcraw.cc
+++ b/rtengine/dcraw.cc
@@ -24,6 +24,8 @@
/*RT*/#define DJGPP
/*RT*/#include "jpeg.h"
+#include
+#include
#include "opthelper.h"
/*
@@ -9095,7 +9097,7 @@ void CLASS identify()
filters = 0;
simple_coeff(0);
adobe_coeff (make, model);
- } else if (!strcmp(make,"Canon") && tiff_bps == 15) {
+ } else if (!strcmp(make,"Canon") && tiff_bps == 15) { // Canon mRaw/sRaw
switch (width) {
case 3344: width -= 66;
case 3872: width -= 6;
@@ -9104,9 +9106,27 @@ void CLASS identify()
SWAP(height,width);
SWAP(raw_height,raw_width);
}
- if (width == 7200 && height == 3888) {
- raw_width = width = 6480;
- raw_height = height = 4320;
+
+ if(std::fabs(static_cast(width) / height - 1.5f) > 0.02f) {
+ // wrong image dimensions. Calculate correct dimensions. width / height should be close to 1.5
+ std::vector> dimensions;
+
+ int size = width * height;
+ int newHeight = sqrt(size / 1.48f);
+ while (--newHeight && std::fabs(static_cast(size) / (newHeight * newHeight) - 1.5f) <= 0.02f) {
+ if(size % newHeight == 0) {
+ dimensions.emplace_back(std::fabs(static_cast(size) / (newHeight * newHeight) - 1.5f), newHeight);
+ }
+ }
+ // find ratio closest to 1.5
+ float val = 1.f;
+ while(!dimensions.empty()) {
+ if(dimensions.back().first < val) {
+ raw_height = height = dimensions.back().second;
+ raw_width = width = size / raw_height;
+ }
+ dimensions.pop_back();
+ }
}
filters = 0;
tiff_samples = colors = 3;
diff --git a/rtengine/dcrop.cc b/rtengine/dcrop.cc
index 6bdca6e7e..9c9d6adb4 100644
--- a/rtengine/dcrop.cc
+++ b/rtengine/dcrop.cc
@@ -52,7 +52,7 @@ extern const Settings* settings;
Crop::Crop(ImProcCoordinator* parent, EditDataProvider *editDataProvider, bool isDetailWindow)
: PipetteBuffer(editDataProvider), origCrop(nullptr), laboCrop(nullptr), labnCrop(nullptr), reservCrop(nullptr),
- cropImg(nullptr), cbuf_real(nullptr), cshmap(nullptr), shbuf_real(nullptr), transCrop(nullptr), cieCrop(nullptr), cbuffer(nullptr), shbuffer(nullptr),
+ cropImg (nullptr), cbuf_real (nullptr), shbuf_real(nullptr), transCrop (nullptr), cieCrop (nullptr), cbuffer (nullptr), shbuffer(nullptr),
updating(false), newUpdatePending(false), skip(10),
cropx(0), cropy(0), cropw(-1), croph(-1),
trafx(0), trafy(0), trafw(-1), trafh(-1),
@@ -817,47 +817,13 @@ void Crop::update(int todo)
}
- // blurmap for shadow & highlights
- if ((todo & M_BLURMAP) && params.sh.enabled) {
- double radius = sqrt(double (skips(parent->fw, skip) * skips(parent->fw, skip) + skips(parent->fh, skip) * skips(parent->fh, skip))) / 2.0;
- double shradius = params.sh.radius;
-
- if (!params.sh.hq) {
- shradius *= radius / 1800.0;
- }
-
- if (!cshmap) {
- cshmap = new SHMap(cropw, croph, true);
- }
-
- cshmap->update(baseCrop, shradius, parent->ipf.lumimul, params.sh.hq, skip);
-
- if (parent->shmap->min_f < 65535.f) { // don't call forceStat with wrong values
- cshmap->forceStat(parent->shmap->max_f, parent->shmap->min_f, parent->shmap->avg);
- }
- }
-
-
- // shadows & highlights & tone curve & convert to cielab
- /*int xref,yref;
- xref=000;yref=000;
- if (colortest && cropw>115 && croph>115)
- for(int j=1;j<5;j++){
- xref+=j*30;yref+=j*30;
- if (settings->verbose) printf("before rgbProc RGB Xr%i Yr%i Skip=%d R=%f G=%f B=%f gamma=%f \n",xref,yref,skip,
- baseCrop->r[(int)(xref/skip)][(int)(yref/skip)]/256,
- baseCrop->g[(int)(xref/skip)][(int)(yref/skip)]/256,
- baseCrop->b[(int)(xref/skip)][(int)(yref/skip)]/256,
- parent->imgsrc->getGamma());
- }*/
-
if (todo & M_RGBCURVE) {
double rrm, ggm, bbm;
DCPProfile::ApplyState as;
DCPProfile *dcpProf = parent->imgsrc->getDCP(params.icm, as);
LUTu histToneCurve;
- parent->ipf.rgbProc(baseCrop, laboCrop, this, parent->hltonecurve, parent->shtonecurve, parent->tonecurve, cshmap,
+ parent->ipf.rgbProc (baseCrop, laboCrop, this, parent->hltonecurve, parent->shtonecurve, parent->tonecurve,
params.toneCurve.saturation, parent->rCurve, parent->gCurve, parent->bCurve, parent->colourToningSatLimit, parent->colourToningSatLimitOpacity, parent->ctColorCurve, parent->ctOpacityCurve, parent->opautili, parent->clToningcurve, parent->cl2Toningcurve,
parent->customToneCurve1, parent->customToneCurve2, parent->beforeToneCurveBW, parent->afterToneCurveBW, rrm, ggm, bbm,
parent->bwAutoR, parent->bwAutoG, parent->bwAutoB, dcpProf, as, histToneCurve);
@@ -2079,11 +2045,6 @@ void Crop::freeAll()
shbuffer = nullptr;
}
- if (cshmap) {
- delete cshmap;
- cshmap = nullptr;
- }
-
PipetteBuffer::flush();
}
@@ -2157,8 +2118,6 @@ bool Crop::setCropSizes(int rcx, int rcy, int rcw, int rch, int skip, bool inter
orw = bw;
orh = bh;
- ProcParams& params = parent->params;
-
parent->ipf.transCoord(parent->fw, parent->fh, bx1, by1, bw, bh, orx, ory, orw, orh);
if (check_need_larger_crop_for_lcp_distortion(parent->fw, parent->fh, orx, ory, orw, orh, parent->params)) {
@@ -2294,11 +2253,6 @@ bool Crop::setCropSizes(int rcx, int rcy, int rcw, int rch, int skip, bool inter
delete [] shbuf_real;
}
- if (cshmap) {
- delete cshmap;
- cshmap = nullptr;
- }
-
cbuffer = new float*[croph];
cbuf_real = new float[(croph + 2)*cropw];
@@ -2313,10 +2267,6 @@ bool Crop::setCropSizes(int rcx, int rcy, int rcw, int rch, int skip, bool inter
shbuffer[i] = shbuf_real + cropw * i + cropw;
}
- if (params.sh.enabled) {
- cshmap = new SHMap(cropw, croph, true);
- }
-
if (editType == ET_PIPETTE) {
PipetteBuffer::resize(cropw, croph);
} else if (PipetteBuffer::bufferCreated()) {
diff --git a/rtengine/dcrop.h b/rtengine/dcrop.h
index defec852d..fcfb8f555 100644
--- a/rtengine/dcrop.h
+++ b/rtengine/dcrop.h
@@ -46,7 +46,6 @@ protected:
LabImage* reservCrop; // "one chunk" allocation
Image8* cropImg; // "one chunk" allocation ; displayed image in monitor color space, showing the output profile as well (soft-proofing enabled, which then correspond to workimg) or not
float * cbuf_real; // "one chunk" allocation
- SHMap* cshmap; // per line allocation
float * shbuf_real; // "one chunk" allocation
// --- automatically allocated and deleted when necessary, and only renewed on size changes
diff --git a/rtengine/demosaic_algos.cc b/rtengine/demosaic_algos.cc
index 89387a9b4..582b00629 100644
--- a/rtengine/demosaic_algos.cc
+++ b/rtengine/demosaic_algos.cc
@@ -3845,994 +3845,6 @@ BENCHFUN
}
}
-const double xyz_rgb[3][3] = { // XYZ from RGB
- { 0.412453, 0.357580, 0.180423 },
- { 0.212671, 0.715160, 0.072169 },
- { 0.019334, 0.119193, 0.950227 }
-};
-const float d65_white[3] = { 0.950456, 1, 1.088754 };
-
-void RawImageSource::cielab (const float (*rgb)[3], float* l, float* a, float *b, const int width, const int height, const int labWidth, const float xyz_cam[3][3])
-{
- static LUTf cbrt(0x14000);
- static bool cbrtinit = false;
-
- if (!rgb) {
- if(!cbrtinit) {
- for (int i = 0; i < 0x14000; i++) {
- double r = i / 65535.0;
- cbrt[i] = r > Color::eps ? std::cbrt(r) : (Color::kappa * r + 16.0) / 116.0;
- }
-
- cbrtinit = true;
- }
-
- return;
- }
-
-#ifdef __SSE2__
- vfloat c116v = F2V(116.f);
- vfloat c16v = F2V(16.f);
- vfloat c500v = F2V(500.f);
- vfloat c200v = F2V(200.f);
- vfloat xyz_camv[3][3];
-
- for(int i = 0; i < 3; i++)
- for(int j = 0; j < 3; j++) {
- xyz_camv[i][j] = F2V(xyz_cam[i][j]);
- }
-
-#endif // __SSE2__
-
- for(int i = 0; i < height; i++) {
- int j = 0;
-#ifdef __SSE2__
-
- for(; j < labWidth - 3; j += 4) {
- vfloat redv, greenv, bluev;
- vconvertrgbrgbrgbrgb2rrrrggggbbbb(rgb[i * width + j], redv, greenv, bluev);
- vfloat xyz0v = redv * xyz_camv[0][0] + greenv * xyz_camv[0][1] + bluev * xyz_camv[0][2];
- vfloat xyz1v = redv * xyz_camv[1][0] + greenv * xyz_camv[1][1] + bluev * xyz_camv[1][2];
- vfloat xyz2v = redv * xyz_camv[2][0] + greenv * xyz_camv[2][1] + bluev * xyz_camv[2][2];
- xyz0v = cbrt[_mm_cvtps_epi32(xyz0v)];
- xyz1v = cbrt[_mm_cvtps_epi32(xyz1v)];
- xyz2v = cbrt[_mm_cvtps_epi32(xyz2v)];
-
- STVFU(l[i * labWidth + j], c116v * xyz1v - c16v);
- STVFU(a[i * labWidth + j], c500v * (xyz0v - xyz1v));
- STVFU(b[i * labWidth + j], c200v * (xyz1v - xyz2v));
- }
-
-#endif
-
- for(; j < labWidth; j++) {
- float xyz[3] = {0.5f, 0.5f, 0.5f};
-
- for(int c = 0; c < 3; c++) {
- float val = rgb[i * width + j][c];
- xyz[0] += xyz_cam[0][c] * val;
- xyz[1] += xyz_cam[1][c] * val;
- xyz[2] += xyz_cam[2][c] * val;
- }
-
- xyz[0] = cbrt[(int) xyz[0]];
- xyz[1] = cbrt[(int) xyz[1]];
- xyz[2] = cbrt[(int) xyz[2]];
-
- l[i * labWidth + j] = 116 * xyz[1] - 16;
- a[i * labWidth + j] = 500 * (xyz[0] - xyz[1]);
- b[i * labWidth + j] = 200 * (xyz[1] - xyz[2]);
- }
- }
-}
-
-
-#define fcol(row,col) xtrans[(row)%6][(col)%6]
-#define isgreen(row,col) (xtrans[(row)%3][(col)%3]&1)
-
-void RawImageSource::xtransborder_interpolate (int border)
-{
- const int height = H, width = W;
-
- int xtrans[6][6];
- ri->getXtransMatrix(xtrans);
-
- for (int row = 0; row < height; row++)
- for (int col = 0; col < width; col++) {
- if (col == border && row >= border && row < height - border) {
- col = width - border;
- }
-
- float sum[6] = {0.f};
-
- for (int y = MAX(0, row - 1); y <= MIN(row + 1, height - 1); y++)
- for (int x = MAX(0, col - 1); x <= MIN(col + 1, width - 1); x++) {
- int f = fcol(y, x);
- sum[f] += rawData[y][x];
- sum[f + 3]++;
- }
-
- switch(fcol(row, col)) {
- case 0:
- red[row][col] = rawData[row][col];
- green[row][col] = (sum[1] / sum[4]);
- blue[row][col] = (sum[2] / sum[5]);
- break;
-
- case 1:
- if(sum[3] == 0.f) { // at the 4 corner pixels it can happen, that we have only green pixels in 2x2 area
- red[row][col] = green[row][col] = blue[row][col] = rawData[row][col];
- } else {
- red[row][col] = (sum[0] / sum[3]);
- green[row][col] = rawData[row][col];
- blue[row][col] = (sum[2] / sum[5]);
- }
-
- break;
-
- case 2:
- red[row][col] = (sum[0] / sum[3]);
- green[row][col] = (sum[1] / sum[4]);
- blue[row][col] = rawData[row][col];
- }
- }
-}
-
-/*
- Frank Markesteijn's algorithm for Fuji X-Trans sensors
- adapted to RT by Ingo Weyrich 2014
-*/
-// override CLIP function to test unclipped output
-#define CLIP(x) (x)
-void RawImageSource::xtrans_interpolate (const int passes, const bool useCieLab)
-{
- BENCHFUN
- constexpr int ts = 114; /* Tile Size */
- constexpr int tsh = ts / 2; /* half of Tile Size */
-
- double progress = 0.0;
- const bool plistenerActive = plistener;
-
- if (plistenerActive) {
- plistener->setProgressStr (Glib::ustring::compose(M("TP_RAW_DMETHOD_PROGRESSBAR"), "Xtrans"));
- plistener->setProgress (progress);
- }
-
- int xtrans[6][6];
- ri->getXtransMatrix(xtrans);
-
- constexpr short orth[12] = { 1, 0, 0, 1, -1, 0, 0, -1, 1, 0, 0, 1 },
- patt[2][16] = { { 0, 1, 0, -1, 2, 0, -1, 0, 1, 1, 1, -1, 0, 0, 0, 0 },
- { 0, 1, 0, -2, 1, 0, -2, 0, 1, 1, -2, -2, 1, -1, -1, 1 }
- },
- dir[4] = { 1, ts, ts + 1, ts - 1 };
-
- // sgrow/sgcol is the offset in the sensor matrix of the solitary
- // green pixels
- ushort sgrow = 0, sgcol = 0;
-
- const int height = H, width = W;
-
- if (settings->verbose) {
- printf("%d-pass X-Trans interpolation using %s conversion...\n", passes, useCieLab ? "lab" : "yuv");
- }
-
- xtransborder_interpolate(6);
-
- float xyz_cam[3][3];
- {
- float rgb_cam[3][4];
- ri->getRgbCam(rgb_cam);
- int k;
-
- for (int i = 0; i < 3; i++)
- for (int j = 0; j < 3; j++)
- for (xyz_cam[i][j] = k = 0; k < 3; k++) {
- xyz_cam[i][j] += xyz_rgb[i][k] * rgb_cam[k][j] / d65_white[i];
- }
- }
-
- /* Map a green hexagon around each non-green pixel and vice versa: */
- short allhex[2][3][3][8];
- {
- int gint, d, h, v, ng, row, col, c;
-
- for (row = 0; row < 3; row++)
- for (col = 0; col < 3; col++) {
- gint = isgreen(row, col);
-
- for (ng = d = 0; d < 10; d += 2) {
- if (isgreen(row + orth[d] + 6, col + orth[d + 2] + 6)) {
- ng = 0;
- } else {
- ng++;
- }
-
- if (ng == 4) {
- // if there are four non-green pixels adjacent in cardinal
- // directions, this is the solitary green pixel
- sgrow = row;
- sgcol = col;
- }
-
- if (ng == gint + 1)
- FORC(8) {
- v = orth[d] * patt[gint][c * 2] + orth[d + 1] * patt[gint][c * 2 + 1];
- h = orth[d + 2] * patt[gint][c * 2] + orth[d + 3] * patt[gint][c * 2 + 1];
- allhex[0][row][col][c ^ (gint * 2 & d)] = h + v * width;
- allhex[1][row][col][c ^ (gint * 2 & d)] = h + v * ts;
- }
- }
- }
-
- }
-
- if(plistenerActive) {
- progress += 0.05;
- plistener->setProgress(progress);
- }
-
-
- double progressInc = 36.0 * (1.0 - progress) / ((H * W) / ((ts - 16) * (ts - 16)));
- const int ndir = 4 << (passes > 1);
- cielab (nullptr, nullptr, nullptr, nullptr, 0, 0, 0, nullptr);
- struct s_minmaxgreen {
- float min;
- float max;
- };
-
- int RightShift[3];
-
- for(int row = 0; row < 3; row++) {
- // count number of green pixels in three cols
- int greencount = 0;
-
- for(int col = 0; col < 3; col++) {
- greencount += isgreen(row, col);
- }
-
- RightShift[row] = (greencount == 2);
- }
-
-#ifdef _OPENMP
- #pragma omp parallel
-#endif
- {
- int progressCounter = 0;
- int c;
- float color[3][6];
-
- float *buffer = (float *) malloc ((ts * ts * (ndir * 4 + 3) + 128) * sizeof(float));
- float (*rgb)[ts][ts][3] = (float(*)[ts][ts][3]) buffer;
- float (*lab)[ts - 8][ts - 8] = (float (*)[ts - 8][ts - 8])(buffer + ts * ts * (ndir * 3));
- float (*drv)[ts - 10][ts - 10] = (float (*)[ts - 10][ts - 10]) (buffer + ts * ts * (ndir * 3 + 3));
- uint8_t (*homo)[ts][ts] = (uint8_t (*)[ts][ts]) (lab); // we can reuse the lab-buffer because they are not used together
- s_minmaxgreen (*greenminmaxtile)[tsh] = (s_minmaxgreen(*)[tsh]) (lab); // we can reuse the lab-buffer because they are not used together
- uint8_t (*homosum)[ts][ts] = (uint8_t (*)[ts][ts]) (drv); // we can reuse the drv-buffer because they are not used together
- uint8_t (*homosummax)[ts] = (uint8_t (*)[ts]) homo[ndir - 1]; // we can reuse the homo-buffer because they are not used together
-
-#ifdef _OPENMP
- #pragma omp for collapse(2) schedule(dynamic) nowait
-#endif
-
- for (int top = 3; top < height - 19; top += ts - 16)
- for (int left = 3; left < width - 19; left += ts - 16) {
- int mrow = MIN (top + ts, height - 3);
- int mcol = MIN (left + ts, width - 3);
-
- /* Set greenmin and greenmax to the minimum and maximum allowed values: */
- for (int row = top; row < mrow; row++) {
- // find first non-green pixel
- int leftstart = left;
-
- for(; leftstart < mcol; leftstart++)
- if(!isgreen(row, leftstart)) {
- break;
- }
-
- int coloffset = (RightShift[row % 3] == 1 ? 3 : 1 + (fcol(row, leftstart + 1) & 1));
-
- if(coloffset == 3) {
- short *hex = allhex[0][row % 3][leftstart % 3];
-
- for (int col = leftstart; col < mcol; col += coloffset) {
- float minval = FLT_MAX;
- float maxval = 0.f;
- float *pix = &rawData[row][col];
-
- for(int c = 0; c < 6; c++) {
- float val = pix[hex[c]];
-
- minval = minval < val ? minval : val;
- maxval = maxval > val ? maxval : val;
- }
-
- greenminmaxtile[row - top][(col - left) >> 1].min = minval;
- greenminmaxtile[row - top][(col - left) >> 1].max = maxval;
- }
- } else {
- float minval = FLT_MAX;
- float maxval = 0.f;
- int col = leftstart;
-
- if(coloffset == 2) {
- minval = FLT_MAX;
- maxval = 0.f;
- float *pix = &rawData[row][col];
- short *hex = allhex[0][row % 3][col % 3];
-
- for(int c = 0; c < 6; c++) {
- float val = pix[hex[c]];
-
- minval = minval < val ? minval : val;
- maxval = maxval > val ? maxval : val;
- }
-
- greenminmaxtile[row - top][(col - left) >> 1].min = minval;
- greenminmaxtile[row - top][(col - left) >> 1].max = maxval;
- col += 2;
- }
-
- short *hex = allhex[0][row % 3][col % 3];
-
- for (; col < mcol - 1; col += 3) {
- minval = FLT_MAX;
- maxval = 0.f;
- float *pix = &rawData[row][col];
-
- for(int c = 0; c < 6; c++) {
- float val = pix[hex[c]];
-
- minval = minval < val ? minval : val;
- maxval = maxval > val ? maxval : val;
- }
-
- greenminmaxtile[row - top][(col - left) >> 1].min = minval;
- greenminmaxtile[row - top][(col - left) >> 1].max = maxval;
- greenminmaxtile[row - top][(col + 1 - left) >> 1].min = minval;
- greenminmaxtile[row - top][(col + 1 - left) >> 1].max = maxval;
- }
-
- if(col < mcol) {
- minval = FLT_MAX;
- maxval = 0.f;
- float *pix = &rawData[row][col];
-
- for(int c = 0; c < 6; c++) {
- float val = pix[hex[c]];
-
- minval = minval < val ? minval : val;
- maxval = maxval > val ? maxval : val;
- }
-
- greenminmaxtile[row - top][(col - left) >> 1].min = minval;
- greenminmaxtile[row - top][(col - left) >> 1].max = maxval;
- }
- }
- }
-
- memset(rgb, 0, ts * ts * 3 * sizeof(float));
-
- for (int row = top; row < mrow; row++)
- for (int col = left; col < mcol; col++) {
- rgb[0][row - top][col - left][fcol(row, col)] = rawData[row][col];
- }
-
- for(int c = 0; c < 3; c++) {
- memcpy (rgb[c + 1], rgb[0], sizeof * rgb);
- }
-
- /* Interpolate green horizontally, vertically, and along both diagonals: */
- for (int row = top; row < mrow; row++) {
- // find first non-green pixel
- int leftstart = left;
-
- for(; leftstart < mcol; leftstart++)
- if(!isgreen(row, leftstart)) {
- break;
- }
-
- int coloffset = (RightShift[row % 3] == 1 ? 3 : 1 + (fcol(row, leftstart + 1) & 1));
-
- if(coloffset == 3) {
- short *hex = allhex[0][row % 3][leftstart % 3];
-
- for (int col = leftstart; col < mcol; col += coloffset) {
- float *pix = &rawData[row][col];
- float color[4];
- color[0] = 0.6796875f * (pix[hex[1]] + pix[hex[0]]) -
- 0.1796875f * (pix[2 * hex[1]] + pix[2 * hex[0]]);
- color[1] = 0.87109375f * pix[hex[3]] + pix[hex[2]] * 0.12890625f +
- 0.359375f * (pix[0] - pix[-hex[2]]);
-
- for(int c = 0; c < 2; c++)
- color[2 + c] = 0.640625f * pix[hex[4 + c]] + 0.359375f * pix[-2 * hex[4 + c]] + 0.12890625f *
- (2.f * pix[0] - pix[3 * hex[4 + c]] - pix[-3 * hex[4 + c]]);
-
- for(int c = 0; c < 4; c++) {
- rgb[c][row - top][col - left][1] = LIM(color[c], greenminmaxtile[row - top][(col - left) >> 1].min, greenminmaxtile[row - top][(col - left) >> 1].max);
- }
- }
- } else {
- short *hexmod[2];
- hexmod[0] = allhex[0][row % 3][leftstart % 3];
- hexmod[1] = allhex[0][row % 3][(leftstart + coloffset) % 3];
-
- for (int col = leftstart, hexindex = 0; col < mcol; col += coloffset, coloffset ^= 3, hexindex ^= 1) {
- float *pix = &rawData[row][col];
- short *hex = hexmod[hexindex];
- float color[4];
- color[0] = 0.6796875f * (pix[hex[1]] + pix[hex[0]]) -
- 0.1796875f * (pix[2 * hex[1]] + pix[2 * hex[0]]);
- color[1] = 0.87109375f * pix[hex[3]] + pix[hex[2]] * 0.12890625f +
- 0.359375f * (pix[0] - pix[-hex[2]]);
-
- for(int c = 0; c < 2; c++)
- color[2 + c] = 0.640625f * pix[hex[4 + c]] + 0.359375f * pix[-2 * hex[4 + c]] + 0.12890625f *
- (2.f * pix[0] - pix[3 * hex[4 + c]] - pix[-3 * hex[4 + c]]);
-
- for(int c = 0; c < 4; c++) {
- rgb[c ^ 1][row - top][col - left][1] = LIM(color[c], greenminmaxtile[row - top][(col - left) >> 1].min, greenminmaxtile[row - top][(col - left) >> 1].max);
- }
- }
- }
- }
-
- for (int pass = 0; pass < passes; pass++) {
- if (pass == 1) {
- memcpy (rgb += 4, buffer, 4 * sizeof * rgb);
- }
-
- /* Recalculate green from interpolated values of closer pixels: */
- if (pass) {
- for (int row = top + 2; row < mrow - 2; row++) {
- int leftstart = left + 2;
-
- for(; leftstart < mcol - 2; leftstart++)
- if(!isgreen(row, leftstart)) {
- break;
- }
-
- int coloffset = (RightShift[row % 3] == 1 ? 3 : 1 + (fcol(row, leftstart + 1) & 1));
-
- if(coloffset == 3) {
- int f = fcol(row, leftstart);
- short *hex = allhex[1][row % 3][leftstart % 3];
-
- for (int col = leftstart; col < mcol - 2; col += coloffset, f ^= 2) {
- for (int d = 3; d < 6; d++) {
- float (*rix)[3] = &rgb[(d - 2)][row - top][col - left];
- float val = 0.33333333f * (rix[-2 * hex[d]][1] + 2 * (rix[hex[d]][1] - rix[hex[d]][f])
- - rix[-2 * hex[d]][f]) + rix[0][f];
- rix[0][1] = LIM(val, greenminmaxtile[row - top][(col - left) >> 1].min, greenminmaxtile[row - top][(col - left) >> 1].max);
- }
- }
- } else {
- int f = fcol(row, leftstart);
- short *hexmod[2];
- hexmod[0] = allhex[1][row % 3][leftstart % 3];
- hexmod[1] = allhex[1][row % 3][(leftstart + coloffset) % 3];
-
- for (int col = leftstart, hexindex = 0; col < mcol - 2; col += coloffset, coloffset ^= 3, f = f ^ (coloffset & 2), hexindex ^= 1 ) {
- short *hex = hexmod[hexindex];
-
- for (int d = 3; d < 6; d++) {
- float (*rix)[3] = &rgb[(d - 2) ^ 1][row - top][col - left];
- float val = 0.33333333f * (rix[-2 * hex[d]][1] + 2 * (rix[hex[d]][1] - rix[hex[d]][f])
- - rix[-2 * hex[d]][f]) + rix[0][f];
- rix[0][1] = LIM(val, greenminmaxtile[row - top][(col - left) >> 1].min, greenminmaxtile[row - top][(col - left) >> 1].max);
- }
- }
- }
- }
- }
-
- /* Interpolate red and blue values for solitary green pixels: */
- int sgstartcol = (left - sgcol + 4) / 3 * 3 + sgcol;
-
- for (int row = (top - sgrow + 4) / 3 * 3 + sgrow; row < mrow - 2; row += 3) {
- for (int col = sgstartcol, h = fcol(row, col + 1); col < mcol - 2; col += 3, h ^= 2) {
- float (*rix)[3] = &rgb[0][row - top][col - left];
- float diff[6] = {0.f};
-
- for (int i = 1, d = 0; d < 6; d++, i ^= ts ^ 1, h ^= 2) {
- for (int c = 0; c < 2; c++, h ^= 2) {
- float g = rix[0][1] + rix[0][1] - rix[i << c][1] - rix[-i << c][1];
- color[h][d] = g + rix[i << c][h] + rix[-i << c][h];
-
- if (d > 1)
- diff[d] += SQR (rix[i << c][1] - rix[-i << c][1]
- - rix[i << c][h] + rix[-i << c][h]) + SQR(g);
- }
-
- if (d > 2 && (d & 1)) // 3, 5
- if (diff[d - 1] < diff[d])
- for(int c = 0; c < 2; c++) {
- color[c * 2][d] = color[c * 2][d - 1];
- }
-
- if ((d & 1) || d < 2) { // d: 0, 1, 3, 5
- for(int c = 0; c < 2; c++) {
- rix[0][c * 2] = CLIP(0.5f * color[c * 2][d]);
- }
-
- rix += ts * ts;
- }
- }
- }
- }
-
- /* Interpolate red for blue pixels and vice versa: */
- for (int row = top + 3; row < mrow - 3; row++) {
- int leftstart = left + 3;
-
- for(; leftstart < mcol - 1; leftstart++)
- if(!isgreen(row, leftstart)) {
- break;
- }
-
- int coloffset = (RightShift[row % 3] == 1 ? 3 : 1);
- c = (row - sgrow) % 3 ? ts : 1;
- int h = 3 * (c ^ ts ^ 1);
-
- if(coloffset == 3) {
- int f = 2 - fcol(row, leftstart);
-
- for (int col = leftstart; col < mcol - 3; col += coloffset, f ^= 2) {
- float (*rix)[3] = &rgb[0][row - top][col - left];
-
- for (int d = 0; d < 4; d++, rix += ts * ts) {
- int i = d > 1 || ((d ^ c) & 1) ||
- ((fabsf(rix[0][1] - rix[c][1]) + fabsf(rix[0][1] - rix[-c][1])) < 2.f * (fabsf(rix[0][1] - rix[h][1]) + fabsf(rix[0][1] - rix[-h][1]))) ? c : h;
-
- rix[0][f] = CLIP(rix[0][1] + 0.5f * (rix[i][f] + rix[-i][f] - rix[i][1] - rix[-i][1]));
- }
- }
- } else {
- coloffset = fcol(row, leftstart + 1) == 1 ? 2 : 1;
- int f = 2 - fcol(row, leftstart);
-
- for (int col = leftstart; col < mcol - 3; col += coloffset, coloffset ^= 3, f = f ^ (coloffset & 2) ) {
- float (*rix)[3] = &rgb[0][row - top][col - left];
-
- for (int d = 0; d < 4; d++, rix += ts * ts) {
- int i = d > 1 || ((d ^ c) & 1) ||
- ((fabsf(rix[0][1] - rix[c][1]) + fabsf(rix[0][1] - rix[-c][1])) < 2.f * (fabsf(rix[0][1] - rix[h][1]) + fabsf(rix[0][1] - rix[-h][1]))) ? c : h;
-
- rix[0][f] = CLIP(rix[0][1] + 0.5f * (rix[i][f] + rix[-i][f] - rix[i][1] - rix[-i][1]));
- }
- }
- }
- }
-
- /* Fill in red and blue for 2x2 blocks of green: */
- // Find first row of 2x2 green
- int topstart = top + 2;
-
- for(; topstart < mrow - 2; topstart++)
- if((topstart - sgrow) % 3) {
- break;
- }
-
- int leftstart = left + 2;
-
- for(; leftstart < mcol - 2; leftstart++)
- if((leftstart - sgcol) % 3) {
- break;
- }
-
- int coloffsetstart = 2 - (fcol(topstart, leftstart + 1) & 1);
-
- for (int row = topstart; row < mrow - 2; row++) {
- if ((row - sgrow) % 3) {
- short *hexmod[2];
- hexmod[0] = allhex[1][row % 3][leftstart % 3];
- hexmod[1] = allhex[1][row % 3][(leftstart + coloffsetstart) % 3];
-
- for (int col = leftstart, coloffset = coloffsetstart, hexindex = 0; col < mcol - 2; col += coloffset, coloffset ^= 3, hexindex ^= 1) {
- float (*rix)[3] = &rgb[0][row - top][col - left];
- short *hex = hexmod[hexindex];
-
- for (int d = 0; d < ndir; d += 2, rix += ts * ts) {
- if (hex[d] + hex[d + 1]) {
- float g = 3 * rix[0][1] - 2 * rix[hex[d]][1] - rix[hex[d + 1]][1];
-
- for (c = 0; c < 4; c += 2) {
- rix[0][c] = CLIP((g + 2 * rix[hex[d]][c] + rix[hex[d + 1]][c]) * 0.33333333f);
- }
- } else {
- float g = 2 * rix[0][1] - rix[hex[d]][1] - rix[hex[d + 1]][1];
-
- for (c = 0; c < 4; c += 2) {
- rix[0][c] = CLIP((g + rix[hex[d]][c] + rix[hex[d + 1]][c]) * 0.5f);
- }
- }
- }
- }
- }
- }
- }
-
-// end of multipass part
- rgb = (float(*)[ts][ts][3]) buffer;
- mrow -= top;
- mcol -= left;
-
- if(useCieLab) {
- /* Convert to CIELab and differentiate in all directions: */
- // Original dcraw algorithm uses CIELab as perceptual space
- // (presumably coming from original AHD) and converts taking
- // camera matrix into account. We use this in RT.
- for (int d = 0; d < ndir; d++) {
- float *l = &lab[0][0][0];
- float *a = &lab[1][0][0];
- float *b = &lab[2][0][0];
- cielab(&rgb[d][4][4], l, a, b, ts, mrow - 8, ts - 8, xyz_cam);
- int f = dir[d & 3];
- f = f == 1 ? 1 : f - 8;
-
- for (int row = 5; row < mrow - 5; row++)
-#ifdef _OPENMP
- #pragma omp simd
-#endif
- for (int col = 5; col < mcol - 5; col++) {
- float *l = &lab[0][row - 4][col - 4];
- float *a = &lab[1][row - 4][col - 4];
- float *b = &lab[2][row - 4][col - 4];
-
- float g = 2 * l[0] - l[f] - l[-f];
- drv[d][row - 5][col - 5] = SQR(g)
- + SQR((2 * a[0] - a[f] - a[-f] + g * 2.1551724f))
- + SQR((2 * b[0] - b[f] - b[-f] - g * 0.86206896f));
- }
-
- }
- } else {
- // For 1-pass demosaic we use YPbPr which requires much
- // less code and is nearly indistinguishable. It assumes the
- // camera RGB is roughly linear.
- for (int d = 0; d < ndir; d++) {
- float (*yuv)[ts - 8][ts - 8] = lab; // we use the lab buffer, which has the same dimensions
-#ifdef __SSE2__
- vfloat zd2627v = F2V(0.2627f);
- vfloat zd6780v = F2V(0.6780f);
- vfloat zd0593v = F2V(0.0593f);
- vfloat zd56433v = F2V(0.56433f);
- vfloat zd67815v = F2V(0.67815f);
-#endif
-
- for (int row = 4; row < mrow - 4; row++) {
- int col = 4;
-#ifdef __SSE2__
-
- for (; col < mcol - 7; col += 4) {
- // use ITU-R BT.2020 YPbPr, which is great, but could use
- // a better/simpler choice? note that imageop.h provides
- // dt_iop_RGB_to_YCbCr which uses Rec. 601 conversion,
- // which appears less good with specular highlights
- vfloat redv, greenv, bluev;
- vconvertrgbrgbrgbrgb2rrrrggggbbbb(rgb[d][row][col], redv, greenv, bluev);
- vfloat yv = zd2627v * redv + zd6780v * bluev + zd0593v * greenv;
- STVFU(yuv[0][row - 4][col - 4], yv);
- STVFU(yuv[1][row - 4][col - 4], (bluev - yv) * zd56433v);
- STVFU(yuv[2][row - 4][col - 4], (redv - yv) * zd67815v);
- }
-
-#endif
-
- for (; col < mcol - 4; col++) {
- // use ITU-R BT.2020 YPbPr, which is great, but could use
- // a better/simpler choice? note that imageop.h provides
- // dt_iop_RGB_to_YCbCr which uses Rec. 601 conversion,
- // which appears less good with specular highlights
- float y = 0.2627f * rgb[d][row][col][0] + 0.6780f * rgb[d][row][col][1] + 0.0593f * rgb[d][row][col][2];
- yuv[0][row - 4][col - 4] = y;
- yuv[1][row - 4][col - 4] = (rgb[d][row][col][2] - y) * 0.56433f;
- yuv[2][row - 4][col - 4] = (rgb[d][row][col][0] - y) * 0.67815f;
- }
- }
-
- int f = dir[d & 3];
- f = f == 1 ? 1 : f - 8;
-
- for (int row = 5; row < mrow - 5; row++)
- for (int col = 5; col < mcol - 5; col++) {
- float *y = &yuv[0][row - 4][col - 4];
- float *u = &yuv[1][row - 4][col - 4];
- float *v = &yuv[2][row - 4][col - 4];
- drv[d][row - 5][col - 5] = SQR(2 * y[0] - y[f] - y[-f])
- + SQR(2 * u[0] - u[f] - u[-f])
- + SQR(2 * v[0] - v[f] - v[-f]);
- }
- }
- }
-
- /* Build homogeneity maps from the derivatives: */
-#ifdef __SSE2__
- vfloat eightv = F2V(8.f);
- vfloat zerov = F2V(0.f);
- vfloat onev = F2V(1.f);
-#endif
-
- for (int row = 6; row < mrow - 6; row++) {
- int col = 6;
-#ifdef __SSE2__
-
- for (; col < mcol - 9; col += 4) {
- vfloat tr1v = vminf(LVFU(drv[0][row - 5][col - 5]), LVFU(drv[1][row - 5][col - 5]));
- vfloat tr2v = vminf(LVFU(drv[2][row - 5][col - 5]), LVFU(drv[3][row - 5][col - 5]));
-
- if(ndir > 4) {
- vfloat tr3v = vminf(LVFU(drv[4][row - 5][col - 5]), LVFU(drv[5][row - 5][col - 5]));
- vfloat tr4v = vminf(LVFU(drv[6][row - 5][col - 5]), LVFU(drv[7][row - 5][col - 5]));
- tr1v = vminf(tr1v, tr3v);
- tr1v = vminf(tr1v, tr4v);
- }
-
- tr1v = vminf(tr1v, tr2v);
- tr1v = tr1v * eightv;
-
- for (int d = 0; d < ndir; d++) {
- uint8_t tempstore[16];
- vfloat tempv = zerov;
-
- for (int v = -1; v <= 1; v++) {
- for (int h = -1; h <= 1; h++) {
- tempv += vselfzero(vmaskf_le(LVFU(drv[d][row + v - 5][col + h - 5]), tr1v), onev);
- }
- }
-
- _mm_storeu_si128((__m128i*)&tempstore, _mm_cvtps_epi32(tempv));
- homo[d][row][col] = tempstore[0];
- homo[d][row][col + 1] = tempstore[4];
- homo[d][row][col + 2] = tempstore[8];
- homo[d][row][col + 3] = tempstore[12];
-
- }
- }
-
-#endif
-
- for (; col < mcol - 6; col++) {
- float tr = drv[0][row - 5][col - 5] < drv[1][row - 5][col - 5] ? drv[0][row - 5][col - 5] : drv[1][row - 5][col - 5];
-
- for (int d = 2; d < ndir; d++) {
- tr = (drv[d][row - 5][col - 5] < tr ? drv[d][row - 5][col - 5] : tr);
- }
-
- tr *= 8;
-
- for (int d = 0; d < ndir; d++) {
- uint8_t temp = 0;
-
- for (int v = -1; v <= 1; v++) {
- for (int h = -1; h <= 1; h++) {
- temp += (drv[d][row + v - 5][col + h - 5] <= tr ? 1 : 0);
- }
- }
-
- homo[d][row][col] = temp;
- }
- }
- }
-
- if (height - top < ts + 4) {
- mrow = height - top + 2;
- }
-
- if (width - left < ts + 4) {
- mcol = width - left + 2;
- }
-
-
- /* Build 5x5 sum of homogeneity maps */
- const int startcol = MIN(left, 8);
-
- for(int d = 0; d < ndir; d++) {
- for (int row = MIN(top, 8); row < mrow - 8; row++) {
- int col = startcol;
-#ifdef __SSE2__
- int endcol = row < mrow - 9 ? mcol - 8 : mcol - 23;
-
- // crunching 16 values at once is faster than summing up column sums
- for (; col < endcol; col += 16) {
- vint v5sumv = (vint)ZEROV;
-
- for(int v = -2; v <= 2; v++)
- for(int h = -2; h <= 2; h++) {
- v5sumv = _mm_adds_epu8( _mm_loadu_si128((vint*)&homo[d][row + v][col + h]), v5sumv);
- }
-
- _mm_storeu_si128((vint*)&homosum[d][row][col], v5sumv);
- }
-
-#endif
-
- if(col < mcol - 8) {
- int v5sum[5] = {0};
-
- for(int v = -2; v <= 2; v++)
- for(int h = -2; h <= 2; h++) {
- v5sum[2 + h] += homo[d][row + v][col + h];
- }
-
- int blocksum = v5sum[0] + v5sum[1] + v5sum[2] + v5sum[3] + v5sum[4];
- homosum[d][row][col] = blocksum;
- col++;
-
- // now we can subtract a column of five from blocksum and get new colsum of 5
- for (int voffset = 0; col < mcol - 8; col++, voffset++) {
- int colsum = homo[d][row - 2][col + 2] + homo[d][row - 1][col + 2] + homo[d][row][col + 2] + homo[d][row + 1][col + 2] + homo[d][row + 2][col + 2];
- voffset = voffset == 5 ? 0 : voffset; // faster than voffset %= 5;
- blocksum -= v5sum[voffset];
- blocksum += colsum;
- v5sum[voffset] = colsum;
- homosum[d][row][col] = blocksum;
- }
- }
- }
- }
-
- // calculate maximum of homogeneity maps per pixel. Vectorized calculation is a tiny bit faster than on the fly calculation in next step
-#ifdef __SSE2__
- vint maskv = _mm_set1_epi8(31);
-#endif
-
- for (int row = MIN(top, 8); row < mrow - 8; row++) {
- int col = startcol;
-#ifdef __SSE2__
- int endcol = row < mrow - 9 ? mcol - 8 : mcol - 23;
-
- for (; col < endcol; col += 16) {
- vint maxval1 = _mm_max_epu8(_mm_loadu_si128((vint*)&homosum[0][row][col]), _mm_loadu_si128((vint*)&homosum[1][row][col]));
- vint maxval2 = _mm_max_epu8(_mm_loadu_si128((vint*)&homosum[2][row][col]), _mm_loadu_si128((vint*)&homosum[3][row][col]));
-
- if(ndir > 4) {
- vint maxval3 = _mm_max_epu8(_mm_loadu_si128((vint*)&homosum[4][row][col]), _mm_loadu_si128((vint*)&homosum[5][row][col]));
- vint maxval4 = _mm_max_epu8(_mm_loadu_si128((vint*)&homosum[6][row][col]), _mm_loadu_si128((vint*)&homosum[7][row][col]));
- maxval1 = _mm_max_epu8(maxval1, maxval3);
- maxval1 = _mm_max_epu8(maxval1, maxval4);
- }
-
- maxval1 = _mm_max_epu8(maxval1, maxval2);
- // there is no shift intrinsic for epu8. Shift using epi32 and mask the wrong bits out
- vint subv = _mm_srli_epi32( maxval1, 3 );
- subv = _mm_and_si128(subv, maskv);
- maxval1 = _mm_subs_epu8(maxval1, subv);
- _mm_storeu_si128((vint*)&homosummax[row][col], maxval1);
- }
-
-#endif
-
- for (; col < mcol - 8; col ++) {
- uint8_t maxval = homosum[0][row][col];
-
- for(int d = 1; d < ndir; d++) {
- maxval = maxval < homosum[d][row][col] ? homosum[d][row][col] : maxval;
- }
-
- maxval -= maxval >> 3;
- homosummax[row][col] = maxval;
- }
- }
-
-
- /* Average the most homogeneous pixels for the final result: */
- uint8_t hm[8] = {};
-
- for (int row = MIN(top, 8); row < mrow - 8; row++)
- for (int col = MIN(left, 8); col < mcol - 8; col++) {
-
- for (int d = 0; d < 4; d++) {
- hm[d] = homosum[d][row][col];
- }
-
- for (int d = 4; d < ndir; d++) {
- hm[d] = homosum[d][row][col];
-
- if (hm[d - 4] < hm[d]) {
- hm[d - 4] = 0;
- } else if (hm[d - 4] > hm[d]) {
- hm[d] = 0;
- }
- }
-
- float avg[4] = {0.f};
-
- uint8_t maxval = homosummax[row][col];
-
- for (int d = 0; d < ndir; d++)
- if (hm[d] >= maxval) {
- FORC3 avg[c] += rgb[d][row][col][c];
- avg[3]++;
- }
-
- red[row + top][col + left] = avg[0] / avg[3];
- green[row + top][col + left] = avg[1] / avg[3];
- blue[row + top][col + left] = avg[2] / avg[3];
- }
-
- if(plistenerActive && ((++progressCounter) % 32 == 0)) {
-#ifdef _OPENMP
- #pragma omp critical (xtransdemosaic)
-#endif
- {
- progress += progressInc;
- progress = min(1.0, progress);
- plistener->setProgress (progress);
- }
- }
-
-
- }
-
- free(buffer);
- }
-
-}
-#undef CLIP
-void RawImageSource::fast_xtrans_interpolate ()
-{
- if (settings->verbose) {
- printf("fast X-Trans interpolation...\n");
- }
-
- double progress = 0.0;
- const bool plistenerActive = plistener;
-
- if (plistenerActive) {
- plistener->setProgressStr (Glib::ustring::compose(M("TP_RAW_DMETHOD_PROGRESSBAR"), "fast Xtrans"));
- plistener->setProgress (progress);
- }
-
- const int height = H, width = W;
-
- xtransborder_interpolate (1);
- int xtrans[6][6];
- ri->getXtransMatrix(xtrans);
-
- #pragma omp parallel for
-
- for(int row = 1; row < height - 1; row++) {
- for(int col = 1; col < width - 1; col++) {
- float sum[3] = {0.f};
-
- for(int v = -1; v <= 1; v++) {
- for(int h = -1; h <= 1; h++) {
- sum[fcol(row + v, col + h)] += rawData[row + v][(col + h)];
- }
- }
-
- switch(fcol(row, col)) {
- case 0:
- red[row][col] = rawData[row][col];
- green[row][col] = sum[1] * 0.2f;
- blue[row][col] = sum[2] * 0.33333333f;
- break;
-
- case 1:
- red[row][col] = sum[0] * 0.5f;
- green[row][col] = rawData[row][col];
- blue[row][col] = sum[2] * 0.5f;
- break;
-
- case 2:
- red[row][col] = sum[0] * 0.33333333f;
- green[row][col] = sum[1] * 0.2f;
- blue[row][col] = rawData[row][col];
- break;
- }
- }
- }
-
- if (plistenerActive) {
- plistener->setProgress (1.0);
- }
-}
-#undef fcol
-#undef isgreen
-
-
#undef TILEBORDER
#undef TILESIZE
#undef CACHESIZE
diff --git a/rtengine/dynamicprofile.cc b/rtengine/dynamicprofile.cc
index 1afc04446..7b7f2a517 100644
--- a/rtengine/dynamicprofile.cc
+++ b/rtengine/dynamicprofile.cc
@@ -80,7 +80,8 @@ bool DynamicProfileRule::matches (const rtengine::FramesMetaData *im) const
&& shutterspeed (im->getShutterSpeed())
&& expcomp (im->getExpComp())
&& camera (im->getCamera())
- && lens (im->getLens()));
+ && lens (im->getLens())
+ && imagetype(im->getImageType(0)));
}
namespace
@@ -208,6 +209,7 @@ bool DynamicProfileRules::loadRules()
get_double_range (rule.expcomp, kf, group, "expcomp");
get_optional (rule.camera, kf, group, "camera");
get_optional (rule.lens, kf, group, "lens");
+ get_optional (rule.imagetype, kf, group, "imagetype");
try {
rule.profilepath = kf.get_string (group, "profilepath");
@@ -240,6 +242,7 @@ bool DynamicProfileRules::storeRules()
set_double_range (kf, group, "expcomp", rule.expcomp);
set_optional (kf, group, "camera", rule.camera);
set_optional (kf, group, "lens", rule.lens);
+ set_optional (kf, group, "imagetype", rule.imagetype);
kf.set_string (group, "profilepath", rule.profilepath);
}
diff --git a/rtengine/dynamicprofile.h b/rtengine/dynamicprofile.h
index 4e6bbbba9..fc5c85e4c 100644
--- a/rtengine/dynamicprofile.h
+++ b/rtengine/dynamicprofile.h
@@ -59,6 +59,7 @@ public:
Range expcomp;
Optional camera;
Optional lens;
+ Optional imagetype;
Glib::ustring profilepath;
};
diff --git a/rtengine/gauss.cc b/rtengine/gauss.cc
index a0775033e..3c53a7820 100644
--- a/rtengine/gauss.cc
+++ b/rtengine/gauss.cc
@@ -1192,7 +1192,9 @@ template void gaussianBlurImpl(T** src, T** dst, const int W, const int
#pragma omp single
#endif
if (src != dst) {
- memcpy (dst[0], src[0], W * H * sizeof(T));
+ for(int i = 0; i < H; ++i) {
+ memcpy(dst[i], src[i], W * sizeof(T));
+ }
}
} else if (sigma < GAUSS_3X3_LIMIT) {
if(src != dst) {
diff --git a/rtengine/imagedata.cc b/rtengine/imagedata.cc
index c7f26bce6..7ec9ba8cc 100644
--- a/rtengine/imagedata.cc
+++ b/rtengine/imagedata.cc
@@ -520,8 +520,7 @@ FrameData::FrameData(rtexif::TagDirectory* frameRootDir_, rtexif::TagDirectory*
if (!isHDR) {
const rtexif::Tag* const q = mnote->findTag("Quality");
-
- if (q && q->toInt() == 7) {
+ if (q && (q->toInt() == 7 || q->toInt() == 8)) {
isPixelShift = true;
#if PRINT_HDR_PS_DETECTION
printf("PixelShift detected ! -> \"Quality\" = 7\n");
@@ -709,6 +708,10 @@ bool FrameData::getHDR() const
{
return isHDR;
}
+std::string FrameData::getImageType () const
+{
+ return isPixelShift ? "PS" : isHDR ? "HDR" : "STD";
+}
IIOSampleFormat FrameData::getSampleFormat() const
{
return sampleFormat;
@@ -804,27 +807,30 @@ FrameData *FramesData::getFrameData(unsigned int frame) const
return frames.empty() || frame >= frames.size() ? nullptr : frames.at(frame);
}
-bool FramesData::getPixelShift(unsigned int frame) const
+bool FramesData::getPixelShift () const
{
- // So far only Pentax and Sony provide multi-frame HDR file.
- // Only the first frame contains the HDR tag
+ // So far only Pentax and Sony provide multi-frame Pixel Shift files.
+ // Only the first frame contains the Pixel Shift tag
// If more brand have to be supported, this rule may need
// to evolve
- //return frames.at(frame)->getPixelShift ();
- return frames.empty() || frame >= frames.size() ? false : frames.at(0)->getPixelShift();
+ return frames.empty() ? false : frames.at(0)->getPixelShift ();
}
bool FramesData::getHDR(unsigned int frame) const
{
- // So far only Pentax provide multi-frame HDR file.
+ // So far only Pentax provides multi-frame HDR file.
// Only the first frame contains the HDR tag
// If more brand have to be supported, this rule may need
// to evolve
- //return frames.at(frame)->getHDR ();
return frames.empty() || frame >= frames.size() ? false : frames.at(0)->getHDR();
}
+std::string FramesData::getImageType (unsigned int frame) const
+{
+ return frames.empty() || frame >= frames.size() ? "STD" : frames.at(0)->getImageType();
+}
+
IIOSampleFormat FramesData::getSampleFormat(unsigned int frame) const
{
return frames.empty() || frame >= frames.size() ? IIOSF_UNKNOWN : frames.at(frame)->getSampleFormat();
diff --git a/rtengine/imagedata.h b/rtengine/imagedata.h
index b9f955611..0427ee519 100644
--- a/rtengine/imagedata.h
+++ b/rtengine/imagedata.h
@@ -63,6 +63,7 @@ public:
bool getPixelShift () const;
bool getHDR () const;
+ std::string getImageType () const;
IIOSampleFormat getSampleFormat () const;
rtexif::TagDirectory* getExifData () const;
procparams::IPTCPairs getIPTCData () const;
@@ -102,8 +103,9 @@ public:
unsigned int getRootCount () const;
unsigned int getFrameCount () const;
FrameData *getFrameData (unsigned int frame) const;
- bool getPixelShift (unsigned int frame = 0) const;
+ bool getPixelShift () const;
bool getHDR (unsigned int frame = 0) const;
+ std::string getImageType (unsigned int frame) const;
IIOSampleFormat getSampleFormat (unsigned int frame = 0) const;
rtexif::TagDirectory* getFrameExifData (unsigned int frame = 0) const;
rtexif::TagDirectory* getRootExifData (unsigned int root = 0) const;
diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc
index 78f0065ba..083c38e95 100644
--- a/rtengine/improccoordinator.cc
+++ b/rtengine/improccoordinator.cc
@@ -41,7 +41,7 @@ extern const Settings* settings;
ImProcCoordinator::ImProcCoordinator()
: orig_prev(nullptr), oprevi(nullptr), oprevl(nullptr), nprevl(nullptr), reserv(nullptr), fattal_11_dcrop_cache(nullptr), previmg(nullptr), workimg(nullptr),
- ncie(nullptr), imgsrc(nullptr), shmap(nullptr), lastAwbEqual(0.), lastAwbTempBias(0.0), ipf(¶ms, true), monitorIntent(RI_RELATIVE),
+ ncie (nullptr), imgsrc (nullptr), lastAwbEqual (0.), lastAwbTempBias (0.0), ipf (¶ms, true), monitorIntent (RI_RELATIVE),
softProof(false), gamutCheck(false), scale(10), highDetailPreprocessComputed(false), highDetailRawComputed(false),
allocated(false), bwAutoR(-9000.f), bwAutoG(-9000.f), bwAutoB(-9000.f), CAMMean(NAN), coordX(0), coordY(0), localX(0), localY(0),
ctColorCurve(),
@@ -561,23 +561,6 @@ void ImProcCoordinator::updatePreviewImage(int todo, Crop* cropCall)
readyphase++;
progress("Preparing shadow/highlight map...", 100 * readyphase / numofphases);
- if ((todo & M_BLURMAP) && params.sh.enabled) {
- double radius = sqrt(double (pW * pW + pH * pH)) / 2.0;
- double shradius = params.sh.radius;
-
- if (!params.sh.hq) {
- shradius *= radius / 1800.0;
- }
-
- if (!shmap) {
- shmap = new SHMap(pW, pH, true);
- }
-
- shmap->update(oprevi, shradius, ipf.lumimul, params.sh.hq, scale);
- }
-
-
-
readyphase++;
if (todo & M_AUTOEXP) {
@@ -713,7 +696,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, Crop* cropCall)
DCPProfile::ApplyState as;
DCPProfile *dcpProf = imgsrc->getDCP(params.icm, as);
- ipf.rgbProc(oprevi, oprevl, nullptr, hltonecurve, shtonecurve, tonecurve, shmap, params.toneCurve.saturation,
+ ipf.rgbProc (oprevi, oprevl, nullptr, hltonecurve, shtonecurve, tonecurve, params.toneCurve.saturation,
rCurve, gCurve, bCurve, colourToningSatLimit, colourToningSatLimitOpacity, ctColorCurve, ctOpacityCurve, opautili, clToningcurve, cl2Toningcurve, customToneCurve1, customToneCurve2, beforeToneCurveBW, afterToneCurveBW, rrm, ggm, bbm, bwAutoR, bwAutoG, bwAutoB, params.toneCurve.expcomp, params.toneCurve.hlcompr, params.toneCurve.hlcomprthresh, dcpProf, as, histToneCurve);
if (params.blackwhite.enabled && params.blackwhite.autoc && abwListener) {
@@ -3952,12 +3935,6 @@ void ImProcCoordinator::freeAll()
delete workimg;
- if (shmap) {
- delete shmap;
- }
-
- shmap = nullptr;
-
}
allocated = false;
@@ -4011,10 +3988,6 @@ void ImProcCoordinator::setScale(int prevscale)
previmg = new Image8(pW, pH);
workimg = new Image8(pW, pH);
- if (params.sh.enabled) {
- shmap = new SHMap(pW, pH, true);
- }
-
allocated = true;
}
diff --git a/rtengine/improccoordinator.h b/rtengine/improccoordinator.h
index c1f076bd2..91232f9d4 100644
--- a/rtengine/improccoordinator.h
+++ b/rtengine/improccoordinator.h
@@ -69,8 +69,6 @@ protected:
ImageSource* imgsrc;
- SHMap* shmap;
-
ColorTemp currWB;
ColorTemp autoWB;
diff --git a/rtengine/improcfun.cc b/rtengine/improcfun.cc
index 76be78aa9..891a0a323 100644
--- a/rtengine/improcfun.cc
+++ b/rtengine/improcfun.cc
@@ -349,7 +349,7 @@ void ImProcFunctions::updateColorProfiles(const Glib::ustring& monitorProfile, R
monitorTransform = cmsCreateProofingTransform(
iprof, TYPE_Lab_FLT,
- monitor, TYPE_RGB_8,
+ monitor, TYPE_RGB_FLT,
oprof,
monitorIntent, outIntent,
flags
@@ -392,7 +392,7 @@ void ImProcFunctions::updateColorProfiles(const Glib::ustring& monitorProfile, R
flags |= cmsFLAGS_BLACKPOINTCOMPENSATION;
}
- monitorTransform = cmsCreateTransform(iprof, TYPE_Lab_FLT, monitor, TYPE_RGB_8, monitorIntent, flags);
+ monitorTransform = cmsCreateTransform (iprof, TYPE_Lab_FLT, monitor, TYPE_RGB_FLT, monitorIntent, flags);
}
if (gamutCheck && gamutprof) {
@@ -2027,15 +2027,15 @@ filmlike_clip(float *r, float *g, float *b)
void ImProcFunctions::rgbProc(Imagefloat* working, LabImage* lab, PipetteBuffer *pipetteBuffer, LUTf & hltonecurve, LUTf & shtonecurve, LUTf & tonecurve,
- SHMap* shmap, int sat, LUTf & rCurve, LUTf & gCurve, LUTf & bCurve, float satLimit, float satLimitOpacity, const ColorGradientCurve & ctColorCurve, const OpacityCurve & ctOpacityCurve, bool opautili, LUTf & clToningcurve, LUTf & cl2Toningcurve,
+ int sat, LUTf & rCurve, LUTf & gCurve, LUTf & bCurve, float satLimit, float satLimitOpacity, const ColorGradientCurve & ctColorCurve, const OpacityCurve & ctOpacityCurve, bool opautili, LUTf & clToningcurve, LUTf & cl2Toningcurve,
const ToneCurve & customToneCurve1, const ToneCurve & customToneCurve2, const ToneCurve & customToneCurvebw1, const ToneCurve & customToneCurvebw2, double &rrm, double &ggm, double &bbm, float &autor, float &autog, float &autob, DCPProfile *dcpProf, const DCPProfile::ApplyState &asIn, LUTu &histToneCurve)
{
- rgbProc(working, lab, pipetteBuffer, hltonecurve, shtonecurve, tonecurve, shmap, sat, rCurve, gCurve, bCurve, satLimit, satLimitOpacity, ctColorCurve, ctOpacityCurve, opautili, clToningcurve, cl2Toningcurve, customToneCurve1, customToneCurve2, customToneCurvebw1, customToneCurvebw2, rrm, ggm, bbm, autor, autog, autob, params->toneCurve.expcomp, params->toneCurve.hlcompr, params->toneCurve.hlcomprthresh, dcpProf, asIn, histToneCurve);
+ rgbProc (working, lab, pipetteBuffer, hltonecurve, shtonecurve, tonecurve, sat, rCurve, gCurve, bCurve, satLimit, satLimitOpacity, ctColorCurve, ctOpacityCurve, opautili, clToningcurve, cl2Toningcurve, customToneCurve1, customToneCurve2, customToneCurvebw1, customToneCurvebw2, rrm, ggm, bbm, autor, autog, autob, params->toneCurve.expcomp, params->toneCurve.hlcompr, params->toneCurve.hlcomprthresh, dcpProf, asIn, histToneCurve);
}
// Process RGB image and convert to LAB space
void ImProcFunctions::rgbProc(Imagefloat* working, LabImage* lab, PipetteBuffer *pipetteBuffer, LUTf & hltonecurve, LUTf & shtonecurve, LUTf & tonecurve,
- SHMap* shmap, int sat, LUTf & rCurve, LUTf & gCurve, LUTf & bCurve, float satLimit, float satLimitOpacity, const ColorGradientCurve & ctColorCurve, const OpacityCurve & ctOpacityCurve, bool opautili, LUTf & clToningcurve, LUTf & cl2Toningcurve,
+ int sat, LUTf & rCurve, LUTf & gCurve, LUTf & bCurve, float satLimit, float satLimitOpacity, const ColorGradientCurve & ctColorCurve, const OpacityCurve & ctOpacityCurve, bool opautili, LUTf & clToningcurve, LUTf & cl2Toningcurve,
const ToneCurve & customToneCurve1, const ToneCurve & customToneCurve2, const ToneCurve & customToneCurvebw1, const ToneCurve & customToneCurvebw2, double &rrm, double &ggm, double &bbm, float &autor, float &autog, float &autob, double expcomp, int hlcompr, int hlcomprthresh, DCPProfile *dcpProf, const DCPProfile::ApplyState &asIn, LUTu &histToneCurve)
{
BENCHFUN
@@ -2060,15 +2060,6 @@ void ImProcFunctions::rgbProc(Imagefloat* working, LabImage* lab, PipetteBuffer
}
}
- int h_th = 0, s_th = 0;
-
- if (shmap) {
- h_th = shmap->max_f - params->sh.htonalwidth * (shmap->max_f - shmap->avg) / 100;
- s_th = params->sh.stonalwidth * (shmap->avg - shmap->min_f) / 100;
- }
-
- bool processSH = params->sh.enabled && shmap && (params->sh.highlights > 0 || params->sh.shadows > 0);
-
TMatrix wprof = ICCStore::getInstance()->workingSpaceMatrix(params->icm.working);
TMatrix wiprof = ICCStore::getInstance()->workingSpaceInverseMatrix(params->icm.working);
@@ -2293,8 +2284,6 @@ void ImProcFunctions::rgbProc(Imagefloat* working, LabImage* lab, PipetteBuffer
float chMixBG = float (params->chmixer.blue[1]);
float chMixBB = float (params->chmixer.blue[2]);
- int shHighlights = params->sh.highlights;
- int shShadows = params->sh.shadows;
bool blackwhite = params->blackwhite.enabled;
bool complem = params->blackwhite.enabledcc;
float bwr = float (params->blackwhite.mixerRed);
@@ -2456,31 +2445,6 @@ void ImProcFunctions::rgbProc(Imagefloat* working, LabImage* lab, PipetteBuffer
}
}
- if (processSH) {
- for (int i = istart, ti = 0; i < tH; i++, ti++) {
- for (int j = jstart, tj = 0; j < tW; j++, tj++) {
-
- float r = rtemp[ti * TS + tj];
- float g = gtemp[ti * TS + tj];
- float b = btemp[ti * TS + tj];
-
-
- float mapval = 1.f + shmap->map[i][j];
- float factor = 1.f;
-
- if (mapval > h_th) {
- factor = (h_th + (100.0 - shHighlights) * (mapval - h_th) / 100.0) / mapval;
- } else if (mapval < s_th) {
- factor = (s_th - (100.0 - shShadows) * (s_th - mapval) / 100.0) / mapval;
- }
-
- rtemp[ti * TS + tj] = factor * r;
- gtemp[ti * TS + tj] = factor * g;
- btemp[ti * TS + tj] = factor * b;
- }
- }
- }
-
highlightToneCurve(hltonecurve, rtemp, gtemp, btemp, istart, tH, jstart, tW, TS, exp_scale, comp, hlrange);
shadowToneCurve(shtonecurve, rtemp, gtemp, btemp, istart, tH, jstart, tW, TS);
@@ -3670,6 +3634,8 @@ void ImProcFunctions::rgbProc(Imagefloat* working, LabImage* lab, PipetteBuffer
delete vCurve;
}
+ shadowsHighlights(lab);
+
if (params->localContrast.enabled) {
// Alberto's local contrast
localContrast(lab);
diff --git a/rtengine/improcfun.h b/rtengine/improcfun.h
index cd2d96b4d..8cf00a525 100644
--- a/rtengine/improcfun.h
+++ b/rtengine/improcfun.h
@@ -221,10 +221,10 @@ public:
void firstAnalysis(const Imagefloat* const working, const ProcParams ¶ms, LUTu & vhist16);
void updateColorProfiles(const Glib::ustring& monitorProfile, RenderingIntent monitorIntent, bool softProof, bool gamutCheck);
void rgbProc(Imagefloat* working, LabImage* lab, PipetteBuffer *pipetteBuffer, LUTf & hltonecurve, LUTf & shtonecurve, LUTf & tonecurve,
- SHMap* shmap, int sat, LUTf & rCurve, LUTf & gCurve, LUTf & bCurve, float satLimit, float satLimitOpacity, const ColorGradientCurve & ctColorCurve, const OpacityCurve & ctOpacityCurve, bool opautili, LUTf & clcurve, LUTf & cl2curve, const ToneCurve & customToneCurve1, const ToneCurve & customToneCurve2,
+ int sat, LUTf & rCurve, LUTf & gCurve, LUTf & bCurve, float satLimit, float satLimitOpacity, const ColorGradientCurve & ctColorCurve, const OpacityCurve & ctOpacityCurve, bool opautili, LUTf & clcurve, LUTf & cl2curve, const ToneCurve & customToneCurve1, const ToneCurve & customToneCurve2,
const ToneCurve & customToneCurvebw1, const ToneCurve & customToneCurvebw2, double &rrm, double &ggm, double &bbm, float &autor, float &autog, float &autob, DCPProfile *dcpProf, const DCPProfile::ApplyState &asIn, LUTu &histToneCurve);
void rgbProc(Imagefloat* working, LabImage* lab, PipetteBuffer *pipetteBuffer, LUTf & hltonecurve, LUTf & shtonecurve, LUTf & tonecurve,
- SHMap* shmap, int sat, LUTf & rCurve, LUTf & gCurve, LUTf & bCurve, float satLimit, float satLimitOpacity, const ColorGradientCurve & ctColorCurve, const OpacityCurve & ctOpacityCurve, bool opautili, LUTf & clcurve, LUTf & cl2curve, const ToneCurve & customToneCurve1, const ToneCurve & customToneCurve2,
+ int sat, LUTf & rCurve, LUTf & gCurve, LUTf & bCurve, float satLimit, float satLimitOpacity, const ColorGradientCurve & ctColorCurve, const OpacityCurve & ctOpacityCurve, bool opautili, LUTf & clcurve, LUTf & cl2curve, const ToneCurve & customToneCurve1, const ToneCurve & customToneCurve2,
const ToneCurve & customToneCurvebw1, const ToneCurve & customToneCurvebw2, double &rrm, double &ggm, double &bbm, float &autor, float &autog, float &autob,
double expcomp, int hlcompr, int hlcomprthresh, DCPProfile *dcpProf, const DCPProfile::ApplyState &asIn, LUTu &histToneCurve);
void labtoning(float r, float g, float b, float &ro, float &go, float &bo, int algm, int metchrom, int twoc, float satLimit, float satLimitOpacity, const ColorGradientCurve & ctColorCurve, const OpacityCurve & ctOpacityCurve, LUTf & clToningcurve, LUTf & cl2Toningcurve, float iplow, float iphigh, double wp[3][3], double wip[3][3]);
@@ -404,6 +404,7 @@ public:
void ToneMapFattal02(Imagefloat *rgb);
void localContrast(LabImage *lab);
void colorToningLabGrid(LabImage *lab, int xstart, int xend, int ystart, int yend, bool MultiThread);
+ void shadowsHighlights(LabImage *lab);
Image8* lab2rgb(LabImage* lab, int cx, int cy, int cw, int ch, const procparams::ColorManagementParams &icm, bool consider_histogram_settings = true);
Imagefloat* lab2rgbOut(LabImage* lab, int cx, int cy, int cw, int ch, const procparams::ColorManagementParams &icm, GammaValues *ga = nullptr);
diff --git a/rtengine/iplab2rgb.cc b/rtengine/iplab2rgb.cc
index 0c1e00774..4838ea1f7 100644
--- a/rtengine/iplab2rgb.cc
+++ b/rtengine/iplab2rgb.cc
@@ -32,64 +32,61 @@ namespace rtengine
extern void filmlike_clip(float *r, float *g, float *b);
+extern const Settings* settings;
+
namespace {
-inline void clipLAB(float iL, float ia, float ib, float &oL, float &oa, float &ob, const float scale, const float wp[3][3], const float wip[3][3])
+inline void copyAndClampLine(const float *src, unsigned char *dst, const int W)
{
- if (iL < 0.f) {
- oL = oa = ob = 0.f;
- } else if (iL > 32768.f || min(ia, ib) < -42000.f || max(ia, ib) > 42000.f) {
-
- float X, Y, Z;
- float r, g, b;
- Color::Lab2XYZ(iL, ia, ib, X, Y, Z);
- Color::xyz2rgb(X, Y, Z, r, g, b, wip);
- filmlike_clip(&r, &g, &b);
- Color::rgbxyz(r, g, b, X, Y, Z, wp);
- Color::XYZ2Lab(X, Y, Z, oL, oa, ob);
- oL /= scale;
- oa /= scale;
- ob /= scale;
-
- // oL = 32768.f / scale;
- // oa = ob = 0.f;
- } else {
- oL = iL / scale;
- oa = ia / scale;
- ob = ib / scale;
+ for (int j = 0, iy = 0; j < W; ++j) {
+ float r = src[iy] * MAXVALF;
+ float g = src[iy+1] * MAXVALF;
+ float b = src[iy+2] * MAXVALF;
+ if (r > MAXVALF || g > MAXVALF || b > MAXVALF) {
+ filmlike_clip(&r, &g, &b);
+ }
+ dst[iy] = uint16ToUint8Rounded(CLIP(r));
+ dst[iy+1] = uint16ToUint8Rounded(CLIP(g));
+ dst[iy+2] = uint16ToUint8Rounded(CLIP(b));
+ iy += 3;
}
}
-inline void clipLAB(float iL, float ia, float ib, double &oL, double &oa, double &ob, const float scale, const float wp[3][3], const float wip[3][3])
+inline void copyAndClamp(const LabImage *src, unsigned char *dst, const double rgb_xyz[3][3], bool multiThread)
{
- float tL, ta, tb;
- clipLAB(iL, ia, ib, tL, ta, tb, scale, wp, wip);
- oL = tL;
- oa = ta;
- ob = tb;
+ int W = src->W;
+ int H = src->H;
+
+#ifdef _OPENMP
+ #pragma omp parallel for schedule(dynamic,16) if (multiThread)
+#endif
+ for (int i = 0; i < H; ++i) {
+ float* rL = src->L[i];
+ float* ra = src->a[i];
+ float* rb = src->b[i];
+ int ix = i * 3 * W;
+
+ float R, G, B;
+ float x_, y_, z_;
+
+ for (int j = 0; j < W; ++j) {
+ Color::Lab2XYZ(rL[j], ra[j], rb[j], x_, y_, z_ );
+ Color::xyz2rgb(x_, y_, z_, R, G, B, rgb_xyz);
+
+ if (R > MAXVALF || G > MAXVALF || B > MAXVALF) {
+ filmlike_clip(&R, &G, &B);
+ }
+
+ dst[ix++] = uint16ToUint8Rounded(Color::gamma2curve[R]);
+ dst[ix++] = uint16ToUint8Rounded(Color::gamma2curve[G]);
+ dst[ix++] = uint16ToUint8Rounded(Color::gamma2curve[B]);
+ }
+ }
}
} // namespace
-extern const Settings* settings;
-
-#define DECLARE_WORKING_MATRICES_(space) \
- TMatrix wprof = ICCStore::getInstance()->workingSpaceMatrix ( space ); \
- const float wp[3][3] = { \
- {static_cast (wprof[0][0]), static_cast (wprof[0][1]), static_cast (wprof[0][2])}, \
- {static_cast (wprof[1][0]), static_cast (wprof[1][1]), static_cast (wprof[1][2])}, \
- {static_cast (wprof[2][0]), static_cast (wprof[2][1]), static_cast (wprof[2][2])} \
- }; \
- \
- TMatrix wiprof = ICCStore::getInstance()->workingSpaceInverseMatrix ( space ); \
- const float wip[3][3] = { \
- {static_cast (wiprof[0][0]), static_cast (wiprof[0][1]), static_cast (wiprof[0][2])}, \
- {static_cast (wiprof[1][0]), static_cast (wiprof[1][1]), static_cast (wiprof[1][2])}, \
- {static_cast (wiprof[2][0]), static_cast (wiprof[2][1]), static_cast (wiprof[2][2])} \
- }
-
-
// Used in ImProcCoordinator::updatePreviewImage (rtengine/improccoordinator.cc)
// Crop::update (rtengine/dcrop.cc)
// Thumbnail::processImage (rtengine/rtthumbnail.cc)
@@ -98,8 +95,6 @@ extern const Settings* settings;
// otherwise divide by 327.68, convert to xyz and apply the sRGB transform, before converting with gamma2curve
void ImProcFunctions::lab2monitorRgb (LabImage* lab, Image8* image)
{
- DECLARE_WORKING_MATRICES_(params->icm.working);
-
if (monitorTransform) {
int W = lab->W;
@@ -112,6 +107,7 @@ void ImProcFunctions::lab2monitorRgb (LabImage* lab, Image8* image)
#endif
{
AlignedBuffer pBuf(3 * lab->W);
+ AlignedBuffer mBuf(3 * lab->W);
AlignedBuffer gwBuf1;
AlignedBuffer gwBuf2;
@@ -121,6 +117,7 @@ void ImProcFunctions::lab2monitorRgb (LabImage* lab, Image8* image)
}
float *buffer = pBuf.data;
+ float *outbuffer = mBuf.data;
#ifdef _OPENMP
#pragma omp for schedule(dynamic,16)
@@ -136,11 +133,13 @@ void ImProcFunctions::lab2monitorRgb (LabImage* lab, Image8* image)
float* rb = lab->b[i];
for (int j = 0; j < W; j++) {
- clipLAB(rL[j], ra[j], rb[j], buffer[iy], buffer[iy+1], buffer[iy+2], 327.68f, wp, wip);
- iy += 3;
+ buffer[iy++] = rL[j] / 327.68f;
+ buffer[iy++] = ra[j] / 327.68f;
+ buffer[iy++] = rb[j] / 327.68f;
}
- cmsDoTransform (monitorTransform, buffer, data + ix, W);
+ cmsDoTransform (monitorTransform, buffer, outbuffer, W);
+ copyAndClampLine(outbuffer, data + ix, W);
if (gamutWarning) {
gamutWarning->markLine(image, i, buffer, gwBuf1.data, gwBuf2.data);
@@ -148,41 +147,7 @@ void ImProcFunctions::lab2monitorRgb (LabImage* lab, Image8* image)
}
} // End of parallelization
} else {
-
- int W = lab->W;
- int H = lab->H;
- unsigned char * data = image->data;
-
-#ifdef _OPENMP
- #pragma omp parallel for schedule(dynamic,16) if (multiThread)
-#endif
-
- for (int i = 0; i < H; ++i) {
- float* rL = lab->L[i];
- float* ra = lab->a[i];
- float* rb = lab->b[i];
- int ix = i * 3 * W;
-
- float R, G, B;
- float x_, y_, z_;
- float L, a, b;
-
- for (int j = 0; j < W; ++j) {
-
- //float L1=rL[j],a1=ra[j],b1=rb[j];//for testing
- clipLAB(rL[j], ra[j], rb[j], L, a, b, 1.f, wp, wip);
-
- Color::Lab2XYZ(L, a, b, x_, y_, z_ );
-
- Color::xyz2srgb(x_, y_, z_, R, G, B);
-
- /* copy RGB */
- //int R1=((int)gamma2curve[(R)])
- data[ix++] = uint16ToUint8Rounded(Color::gamma2curve[R]);
- data[ix++] = uint16ToUint8Rounded(Color::gamma2curve[G]);
- data[ix++] = uint16ToUint8Rounded(Color::gamma2curve[B]);
- }
- }
+ copyAndClamp(lab, image->data, sRGB_xyz, multiThread);
}
}
@@ -197,8 +162,6 @@ void ImProcFunctions::lab2monitorRgb (LabImage* lab, Image8* image)
// otherwise divide by 327.68, convert to xyz and apply the RGB transform, before converting with gamma2curve
Image8* ImProcFunctions::lab2rgb (LabImage* lab, int cx, int cy, int cw, int ch, const procparams::ColorManagementParams &icm, bool consider_histogram_settings)
{
- DECLARE_WORKING_MATRICES_(icm.working);
-
//gamutmap(lab);
if (cx < 0) {
@@ -248,7 +211,7 @@ Image8* ImProcFunctions::lab2rgb (LabImage* lab, int cx, int cy, int cw, int ch,
}
lcmsMutex->lock ();
cmsHPROFILE LabIProf = cmsCreateLab4Profile(nullptr);
- cmsHTRANSFORM hTransform = cmsCreateTransform (LabIProf, TYPE_Lab_DBL, oprofG, TYPE_RGB_8, icm.outputIntent, flags); // NOCACHE is important for thread safety
+ cmsHTRANSFORM hTransform = cmsCreateTransform (LabIProf, TYPE_Lab_DBL, oprofG, TYPE_RGB_FLT, icm.outputIntent, flags); // NOCACHE is important for thread safety
cmsCloseProfile(LabIProf);
lcmsMutex->unlock ();
@@ -260,7 +223,9 @@ Image8* ImProcFunctions::lab2rgb (LabImage* lab, int cx, int cy, int cw, int ch,
#endif
{
AlignedBuffer pBuf(3 * cw);
+ AlignedBuffer oBuf(3 * cw);
double *buffer = pBuf.data;
+ float *outbuffer = oBuf.data;
int condition = cy + ch;
#ifdef _OPENMP
@@ -275,11 +240,13 @@ Image8* ImProcFunctions::lab2rgb (LabImage* lab, int cx, int cy, int cw, int ch,
float* rb = lab->b[i];
for (int j = cx; j < cx + cw; j++) {
- clipLAB(rL[j], ra[j], rb[j], buffer[iy], buffer[iy+1], buffer[iy+2], 327.68f, wp, wip);
- iy += 3;
+ buffer[iy++] = rL[j] / 327.68f;
+ buffer[iy++] = ra[j] / 327.68f;
+ buffer[iy++] = rb[j] / 327.68f;
}
- cmsDoTransform (hTransform, buffer, data + ix, cw);
+ cmsDoTransform (hTransform, buffer, outbuffer, cw);
+ copyAndClampLine(outbuffer, data + ix, cw);
}
} // End of parallelization
@@ -289,34 +256,8 @@ Image8* ImProcFunctions::lab2rgb (LabImage* lab, int cx, int cy, int cw, int ch,
cmsCloseProfile(oprofG);
}
} else {
-
const auto xyz_rgb = ICCStore::getInstance()->workingSpaceInverseMatrix (profile);
-
-#ifdef _OPENMP
- #pragma omp parallel for schedule(dynamic,16) if (multiThread)
-#endif
-
- for (int i = cy; i < cy + ch; ++i) {
- float* rL = lab->L[i];
- float* ra = lab->a[i];
- float* rb = lab->b[i];
- int ix = 3 * i * cw;
-
- float R, G, B;
- float x_, y_, z_;
- float L, a, b;
-
- for (int j = cx; j < cx + cw; ++j) {
- clipLAB(rL[j], ra[j], rb[j], L, a, b, 1.f, wp, wip);
- Color::Lab2XYZ(rL[j], ra[j], rb[j], x_, y_, z_);
-
- Color::xyz2rgb(x_, y_, z_, R, G, B, xyz_rgb);
-
- image->data[ix++] = uint16ToUint8Rounded(Color::gamma2curve[R]);
- image->data[ix++] = uint16ToUint8Rounded(Color::gamma2curve[G]);
- image->data[ix++] = uint16ToUint8Rounded(Color::gamma2curve[B]);
- }
- }
+ copyAndClamp(lab, image->data, xyz_rgb, multiThread);
}
return image;
@@ -383,6 +324,7 @@ Imagefloat* ImProcFunctions::lab2rgbOut (LabImage* lab, int cx, int cy, int cw,
cmsDeleteTransform(hTransform);
image->normalizeFloatTo65535();
} else {
+
#ifdef _OPENMP
#pragma omp parallel for schedule(dynamic,16) if (multiThread)
#endif
diff --git a/rtengine/ipshadowshighlights.cc b/rtengine/ipshadowshighlights.cc
new file mode 100644
index 000000000..4d5cc465a
--- /dev/null
+++ b/rtengine/ipshadowshighlights.cc
@@ -0,0 +1,146 @@
+/* -*- C++ -*-
+ *
+ * This file is part of RawTherapee.
+ *
+ * Copyright 2018 Alberto Griggio
+ *
+ * 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 "improcfun.h"
+#include "gauss.h"
+#include "sleef.c"
+#include "opthelper.h"
+
+namespace rtengine {
+
+void ImProcFunctions::shadowsHighlights(LabImage *lab)
+{
+ if (!params->sh.enabled || (!params->sh.highlights && !params->sh.shadows)){
+ return;
+ }
+
+ const int width = lab->W;
+ const int height = lab->H;
+
+ array2D mask(width, height);
+ const float sigma = params->sh.radius * 5.f / scale;
+ LUTf f(32768);
+
+ const auto apply =
+ [&](int amount, int tonalwidth, bool hl) -> void
+ {
+ const float thresh = tonalwidth * 327.68f;
+ const float scale = hl ? (thresh > 0.f ? 0.9f / thresh : 1.f) : thresh * 0.9f;
+
+#ifdef _OPENMP
+ #pragma omp parallel if (multiThread)
+#endif
+ {
+
+#ifdef _OPENMP
+ #pragma omp for
+#endif
+ for (int y = 0; y < height; ++y) {
+ for (int x = 0; x < width; ++x) {
+ float l = lab->L[y][x];
+ if (hl) {
+ mask[y][x] = (l > thresh) ? 1.f : pow4(l * scale);
+ } else {
+ mask[y][x] = l <= thresh ? 1.f : pow4(scale / l);
+ }
+ }
+ }
+
+ gaussianBlur(mask, mask, width, height, sigma);
+ }
+
+ const float base = std::pow(4.f, float(amount)/100.f);
+ const float gamma = hl ? base : 1.f / base;
+
+ const float contrast = std::pow(2.f, float(amount)/100.f);
+ DiagonalCurve sh_contrast({
+ DCT_NURBS,
+ 0, 0,
+ 0.125, std::pow(0.125 / 0.25, contrast) * 0.25,
+ 0.25, 0.25,
+ 0.375, std::pow(0.375 / 0.25, contrast) * 0.25,
+ 1, 1
+ });
+
+ if(!hl) {
+#ifdef _OPENMP
+ #pragma omp parallel for if (multiThread)
+#endif
+ for (int l = 0; l < 32768; ++l) {
+ auto base = pow_F(l / 32768.f, gamma);
+ // get a bit more contrast in the shadows
+ base = sh_contrast.getVal(base);
+ f[l] = base * 32768.f;
+ }
+ } else {
+#ifdef __SSE2__
+ vfloat c32768v = F2V(32768.f);
+ vfloat lv = _mm_setr_ps(0,1,2,3);
+ vfloat fourv = F2V(4.f);
+ vfloat gammav = F2V(gamma);
+ for (int l = 0; l < 32768; l += 4) {
+ vfloat basev = pow_F(lv / c32768v, gammav);
+ STVFU(f[l], basev * c32768v);
+ lv += fourv;
+ }
+#else
+#ifdef _OPENMP
+ #pragma omp parallel for if (multiThread)
+#endif
+ for (int l = 0; l < 32768; ++l) {
+ auto base = pow_F(l / 32768.f, gamma);
+ f[l] = base * 32768.f;
+ }
+#endif
+ }
+
+#ifdef _OPENMP
+ #pragma omp parallel for schedule(dynamic,16) if (multiThread)
+#endif
+ for (int y = 0; y < height; ++y) {
+ for (int x = 0; x < width; ++x) {
+ float l = lab->L[y][x];
+ float blend = mask[y][x];
+ float orig = 1.f - blend;
+ if (l >= 0.f && l < 32768.f) {
+ lab->L[y][x] = f[l] * blend + l * orig;
+ if (!hl && l > 1.f) {
+ // when pushing shadows, scale also the chromaticity
+ float s = max(lab->L[y][x] / l * 0.5f, 1.f) * blend;
+ float a = lab->a[y][x];
+ float b = lab->b[y][x];
+ lab->a[y][x] = a * s + a * orig;
+ lab->b[y][x] = b * s + b * orig;
+ }
+ }
+ }
+ }
+ };
+
+ if (params->sh.highlights > 0) {
+ apply(params->sh.highlights, params->sh.htonalwidth, true);
+ }
+
+ if (params->sh.shadows > 0) {
+ apply(params->sh.shadows, params->sh.stonalwidth, false);
+ }
+}
+
+} // namespace rtengine
diff --git a/rtengine/pixelshift.cc b/rtengine/pixelshift.cc
index 511e4c95d..5aac37d20 100644
--- a/rtengine/pixelshift.cc
+++ b/rtengine/pixelshift.cc
@@ -2,7 +2,7 @@
//
// Algorithm for Pentax/Sony Pixel Shift raw files with motion detection
//
-// Copyright (C) 2016 - 2017 Ingo Weyrich
+// Copyright (C) 2016 - 2018 Ingo Weyrich
//
//
// pixelshift.cc is free software: you can redistribute it and/or modify
@@ -26,7 +26,8 @@
#include "procparams.h"
#include "gauss.h"
#include "median.h"
-
+#define BENCHMARK
+#include "StopWatch.h"
namespace
{
@@ -63,16 +64,12 @@ float nonGreenDiffCross(float right, float left, float top, float bottom, float
return std::min(hDiff, vDiff) - stddev;
}
-void paintMotionMask(int index, bool showMotion, bool showOnlyMask, float *maskDest, float *nonMaskDest0, float *nonMaskDest1)
+void paintMotionMask(int index, bool showMotion, float *maskDest, float *nonMaskDest0, float *nonMaskDest1)
{
if(showMotion) {
- if(!showOnlyMask) {
- // if showMotion is enabled colourize the pixel
- maskDest[index] = 13500.f;
- nonMaskDest1[index] = nonMaskDest0[index] = 0.f;
- } else {
- maskDest[index] = nonMaskDest0[index] = nonMaskDest1[index] = 65535.f;
- }
+ // if showMotion is enabled colourize the pixel
+ maskDest[index] = 13500.f;
+ nonMaskDest1[index] = nonMaskDest0[index] = 0.f;
}
}
@@ -271,7 +268,7 @@ void floodFill4(int xStart, int xEnd, int yStart, int yEnd, array2D &ma
}
}
-void calcFrameBrightnessFactor(unsigned int frame, uint32_t datalen, LUT *histo[4], float brightnessFactor[4])
+void calcFrameBrightnessFactor(unsigned int frame, uint32_t datalen, LUTu *histo[4], float brightnessFactor[4])
{
float medians[4];
@@ -300,7 +297,7 @@ using namespace std;
using namespace rtengine;
void RawImageSource::pixelshift(int winx, int winy, int winw, int winh, const RAWParams::BayerSensor &bayerParamsIn, unsigned int frame, const std::string &make, const std::string &model, float rawWpCorrection)
{
-
+BENCHFUN
if(numFrames != 4) { // fallback for non pixelshift files
amaze_demosaic_RT(winx, winy, winw, winh, rawData, red, green, blue);
return;
@@ -308,23 +305,24 @@ void RawImageSource::pixelshift(int winx, int winy, int winw, int winh, const RA
RAWParams::BayerSensor bayerParams = bayerParamsIn;
- bayerParams.pixelShiftAutomatic = true;
+ bool motionDetection = true;
if(bayerParams.pixelShiftMotionCorrectionMethod == RAWParams::BayerSensor::PSMotionCorrectionMethod::AUTO) {
bool pixelShiftEqualBright = bayerParams.pixelShiftEqualBright;
bayerParams.setPixelShiftDefaults();
bayerParams.pixelShiftEqualBright = pixelShiftEqualBright;
} else if(bayerParams.pixelShiftMotionCorrectionMethod == RAWParams::BayerSensor::PSMotionCorrectionMethod::OFF) {
- bayerParams.pixelShiftAutomatic = false;
+ motionDetection = false;
bayerParams.pixelShiftShowMotion = false;
}
const bool showMotion = bayerParams.pixelShiftShowMotion;
const bool showOnlyMask = bayerParams.pixelShiftShowMotionMaskOnly && showMotion;
+ const float smoothFactor = 1.0 - bayerParams.pixelShiftSmoothFactor;
- if(bayerParams.pixelShiftAutomatic) {
+ if(motionDetection) {
if(!showOnlyMask) {
- if(bayerParams.pixelShiftMedian) { // We need the amaze demosaiced frames for motion correction
+ if(bayerParams.pixelShiftMedian) { // We need the demosaiced frames for motion correction
if(bayerParams.pixelShiftLmmse) {
lmmse_interpolate_omp(winw, winh, *(rawDataFrames[0]), red, green, blue, bayerParams.lmmse_iterations);
} else {
@@ -370,7 +368,6 @@ void RawImageSource::pixelshift(int winx, int winy, int winw, int winh, const RA
}
}
- const bool adaptive = bayerParams.pixelShiftAutomatic;
constexpr float stddevFactorGreen = 25.f;
constexpr float stddevFactorRed = 25.f;
constexpr float stddevFactorBlue = 25.f;
@@ -382,12 +379,12 @@ void RawImageSource::pixelshift(int winx, int winy, int winw, int winh, const RA
constexpr float greenWeight = 2.f;
const bool blurMap = bayerParams.pixelShiftBlur;
const float sigma = bayerParams.pixelShiftSigma;
- constexpr float threshold = 3.f + 9.f;
+ constexpr float noMotion = 0.99f;
+ constexpr float threshold = 3.f + 9 * noMotion;
const bool holeFill = bayerParams.pixelShiftHoleFill;
const bool equalBrightness = bayerParams.pixelShiftEqualBright;
const bool equalChannel = bayerParams.pixelShiftEqualBrightChannel;
- const bool smoothTransitions = blurMap && bayerParams.pixelShiftSmoothFactor > 0. && !showOnlyMask;
- const float smoothFactor = 1.0 - bayerParams.pixelShiftSmoothFactor;
+ const bool smoothTransitions = blurMap && bayerParams.pixelShiftSmoothFactor > 0.;
static const float nReadK3II[] = { 3.4f, // ISO 100
3.1f, // ISO 125
@@ -421,6 +418,7 @@ void RawImageSource::pixelshift(int winx, int winy, int winw, int winh, const RA
static const float ePerIsoK3II = 0.35f;
+ // currently we use the same values for K-1 and K-1 Mark II, though for the K-1 Mark II the values seem a bit aggressive
static const float nReadK1[] = { 3.45f, // ISO 100
3.15f, // ISO 125
3.45f, // ISO 160
@@ -454,15 +452,21 @@ void RawImageSource::pixelshift(int winx, int winy, int winw, int winh, const RA
2.4f, // ISO 102400
2.4f, // ISO 128000
2.4f, // ISO 160000
- 2.4f // ISO 204800
+ 2.4f, // ISO 204800
+ 2.4f, // ISO 256000 // these are for K-1 Mark II to avoid crashes when using high-ISO files
+ 2.4f, // ISO 320000
+ 2.4f, // ISO 409600
+ 2.4f, // ISO 512000
+ 2.4f, // ISO 640000
+ 2.4f // ISO 819200
};
static const float ePerIsoK1 = 0.75f;
// currently nReadK70 is used for K-70 and KP
- static const float nReadK70[] = { 4.0f, // ISO 100
- 4.0f, // ISO 125
- 4.0f, // ISO 160
+ static const float nReadK70[] = { 4.0f, // ISO 100
+ 4.0f, // ISO 125
+ 4.0f, // ISO 160
4.0f, // ISO 200
4.0f, // ISO 250
4.0f, // ISO 320
@@ -504,40 +508,41 @@ void RawImageSource::pixelshift(int winx, int winy, int winw, int winh, const RA
static const float ePerIsoK70 = 0.5f;
- // preliminary ILCE-7RM3 data, good fidelity except from A) small innaccuracy at places
- // due to integer scaling quantization, B) much different noise behavior of PDAF pixels
+ // preliminary ILCE-7RM3 data, good fidelity except from A) small inaccuracy at places
+ // due to integer scaling quantization, B) much different noise behaviour of PDAF pixels
static const float nReadILCE7RM3[] = { 4.2f, // ISO 100
- 3.9f, // ISO 125
- 3.6f, // ISO 160
- 3.55f, // ISO 200
- 3.5f, // ISO 250
- 3.45f, // ISO 320
- 3.35f, // ISO 400
- 3.3f, // ISO 500
- 1.3f, // ISO 640
- 1.2f, // ISO 800
- 1.2f, // ISO 1000
- 1.2f, // ISO 1250
- 1.15f, // ISO 1600
- 1.2f, // ISO 2000
- 1.15f, // ISO 2500
- 1.15f, // ISO 3200
- 1.1f, // ISO 4000
- 1.1f, // ISO 5000
- 1.05f, // ISO 6400
- 1.05f, // ISO 8000
- 1.05f, // ISO 10000
- 1.0f, // ISO 12800
- 1.0f, // ISO 16000
- 1.0f, // ISO 20000
- 1.0f, // ISO 25600
- 1.0f, // ISO 32000
- 1.0f, // ISO 40000
- 1.0f, // ISO 51200
- 1.1f, // ISO 64000
- 1.1f, // ISO 80000
- 1.1f, // ISO 102400
- };
+ 3.9f, // ISO 125
+ 3.6f, // ISO 160
+ 3.55f, // ISO 200
+ 3.5f, // ISO 250
+ 3.45f, // ISO 320
+ 3.35f, // ISO 400
+ 3.3f, // ISO 500
+ 1.3f, // ISO 640
+ 1.2f, // ISO 800
+ 1.2f, // ISO 1000
+ 1.2f, // ISO 1250
+ 1.15f, // ISO 1600
+ 1.2f, // ISO 2000
+ 1.15f, // ISO 2500
+ 1.15f, // ISO 3200
+ 1.1f, // ISO 4000
+ 1.1f, // ISO 5000
+ 1.05f, // ISO 6400
+ 1.05f, // ISO 8000
+ 1.05f, // ISO 10000
+ 1.0f, // ISO 12800
+ 1.0f, // ISO 16000
+ 1.0f, // ISO 20000
+ 1.0f, // ISO 25600
+ 1.0f, // ISO 32000
+ 1.0f, // ISO 40000
+ 1.0f, // ISO 51200
+ 1.1f, // ISO 64000
+ 1.1f, // ISO 80000
+ 1.1f, // ISO 102400
+ };
+
static const float ePerIsoILCE7RM3 = 0.8f;
if(plistener) {
@@ -545,7 +550,7 @@ void RawImageSource::pixelshift(int winx, int winy, int winw, int winh, const RA
plistener->setProgress(0.0);
}
- if(adaptive && blurMap && smoothFactor == 0.f && !showMotion) {
+ if(motionDetection && blurMap && smoothFactor == 0.f && !showMotion) {
if(plistener) {
plistener->setProgress(1.0);
}
@@ -553,8 +558,6 @@ void RawImageSource::pixelshift(int winx, int winy, int winw, int winh, const RA
return;
}
- const float scaleGreen = 1.f / scale_mul[1];
-
float nRead;
float eperIsoModel;
@@ -563,7 +566,7 @@ void RawImageSource::pixelshift(int winx, int winy, int winw, int winh, const RA
if(model.find("K-3") != string::npos) {
nRead = nReadK3II[nReadIndex];
eperIsoModel = ePerIsoK3II;
- } else if(model.find("K-1") != string::npos) {
+ } else if(model.find("K-1") != string::npos) { // this also matches K-1 Mark II
nRead = nReadK1[nReadIndex];
eperIsoModel = ePerIsoK1;
} else if(model.find("ILCE-7RM3") != string::npos) {
@@ -574,12 +577,12 @@ void RawImageSource::pixelshift(int winx, int winy, int winw, int winh, const RA
eperIsoModel = ePerIsoK70;
}
- eperIsoModel *= pow(2.f, eperIso);
+ eperIsoModel *= pow(2.f, eperIso - 1.f);
eperIso = eperIsoModel * (100.f / (rawWpCorrection * idata->getISOSpeed()));
const float eperIsoRed = (eperIso / scale_mul[0]) * (65535.f / (c_white[0] - c_black[0]));
- const float eperIsoGreen = (eperIso * scaleGreen) * (65535.f / (c_white[1] - c_black[1]));
+ const float eperIsoGreen = (eperIso / scale_mul[1]) * (65535.f / (c_white[1] - c_black[1]));
const float eperIsoBlue = (eperIso / scale_mul[2]) * (65535.f / (c_white[2] - c_black[2]));
const float clippedRed = 65535.f / scale_mul[0];
@@ -587,41 +590,35 @@ void RawImageSource::pixelshift(int winx, int winy, int winw, int winh, const RA
nRead *= nRead;
- // calculate average green brightness for each frame
+ // calculate channel median brightness for each frame
float greenBrightness[4] = {1.f, 1.f, 1.f, 1.f};
float redBrightness[4] = {1.f, 1.f, 1.f, 1.f};
float blueBrightness[4] = {1.f, 1.f, 1.f, 1.f};
if(equalBrightness) {
if(rawDirty) {
- LUT *histogreen[4];
- LUT *histored[4];
- LUT *histoblue[4];
+ LUTu *histogreen[4];
+ LUTu *histored[4];
+ LUTu *histoblue[4];
for(int i = 0; i < 4; ++i) {
- histogreen[i] = new LUT(65536);
- histogreen[i]->clear();
- histored[i] = new LUT(65536);
- histored[i]->clear();
- histoblue[i] = new LUT(65536);
- histoblue[i]->clear();
+ histogreen[i] = new LUTu(65536, LUT_CLIP_BELOW | LUT_CLIP_ABOVE, true);
+ histored[i] = new LUTu(65536, LUT_CLIP_BELOW | LUT_CLIP_ABOVE, true);
+ histoblue[i] = new LUTu(65536, LUT_CLIP_BELOW | LUT_CLIP_ABOVE, true);
}
#ifdef _OPENMP
#pragma omp parallel
#endif
{
- LUT *histogreenThr[4];
- LUT *historedThr[4];
- LUT *histoblueThr[4];
+ LUTu *histogreenThr[4];
+ LUTu *historedThr[4];
+ LUTu *histoblueThr[4];
for(int i = 0; i < 4; ++i) {
- histogreenThr[i] = new LUT(65536);
- histogreenThr[i]->clear();
- historedThr[i] = new LUT(65536);
- historedThr[i]->clear();
- histoblueThr[i] = new LUT(65536);
- histoblueThr[i]->clear();
+ histogreenThr[i] = new LUTu(65536, LUT_CLIP_BELOW | LUT_CLIP_ABOVE, true);
+ historedThr[i] = new LUTu(65536, LUT_CLIP_BELOW | LUT_CLIP_ABOVE, true);
+ histoblueThr[i] = new LUTu(65536, LUT_CLIP_BELOW | LUT_CLIP_ABOVE, true);
}
#ifdef _OPENMP
@@ -698,7 +695,7 @@ void RawImageSource::pixelshift(int winx, int winy, int winw, int winh, const RA
}
- if(adaptive) {
+ if(motionDetection) {
// fill channels psRed and psBlue
array2D psRed(winw + 32, winh); // increase width to avoid cache conflicts
array2D psBlue(winw + 32, winh);
@@ -711,8 +708,8 @@ void RawImageSource::pixelshift(int winx, int winy, int winw, int winh, const RA
float *nonGreenDest0 = psRed[i];
float *nonGreenDest1 = psBlue[i];
float ngbright[2][4] = {{redBrightness[0], redBrightness[1], redBrightness[2], redBrightness[3]},
- {blueBrightness[0], blueBrightness[1], blueBrightness[2], blueBrightness[3]}
- };
+ {blueBrightness[0], blueBrightness[1], blueBrightness[2], blueBrightness[3]}
+ };
int ng = 0;
int j = winx + 1;
int c = FC(i, j);
@@ -775,7 +772,7 @@ void RawImageSource::pixelshift(int winx, int winy, int winw, int winh, const RA
unsigned int offset = FC(i, winx + border - offsX) & 1;
for(int j = winx + border - offsX; j < winw - (border + offsX); ++j, offset ^= 1) {
- psMask[i][j] = 1.f;
+ psMask[i][j] = noMotion;
if(checkGreen) {
if(greenDiff((*rawDataFrames[1 - offset])[i - offset + 1][j] * greenBrightness[1 - offset], (*rawDataFrames[3 - offset])[i + offset][j + 1] * greenBrightness[3 - offset], stddevFactorGreen, eperIsoGreen, nRead, prnu) > 0.f) {
@@ -787,12 +784,12 @@ void RawImageSource::pixelshift(int winx, int winy, int winw, int winh, const RA
if(checkNonGreenCross) {
// check red cross
- float redTop = psRed[i - 1][ j ];
- float redLeft = psRed[ i ][j - 1];
- float redCentre = psRed[ i ][ j ];
- float redRight = psRed[ i ][j + 1];
- float redBottom = psRed[i + 1][ j ];
- float redDiff = nonGreenDiffCross(redRight, redLeft, redTop, redBottom, redCentre, clippedRed, stddevFactorRed, eperIsoRed, nRead, prnu);
+ float redTop = psRed[i - 1][j];
+ float redLeft = psRed[i][j - 1];
+ float redCentre = psRed[i][j];
+ float redRight = psRed[i][j + 1];
+ float redBottom = psRed[i + 1][j];
+ float redDiff = nonGreenDiffCross(redRight, redLeft, redTop, redBottom, redCentre, clippedRed, stddevFactorRed, eperIsoRed, nRead, prnu);
if(redDiff > 0.f) {
psMask[i][j] = redBlueWeight;
@@ -800,12 +797,12 @@ void RawImageSource::pixelshift(int winx, int winy, int winw, int winh, const RA
}
// check blue cross
- float blueTop = psBlue[i - 1][ j ];
- float blueLeft = psBlue[ i ][j - 1];
- float blueCentre = psBlue[ i ][ j ];
- float blueRight = psBlue[ i ][j + 1];
- float blueBottom = psBlue[i + 1][ j ];
- float blueDiff = nonGreenDiffCross(blueRight, blueLeft, blueTop, blueBottom, blueCentre, clippedBlue, stddevFactorBlue, eperIsoBlue, nRead, prnu);
+ float blueTop = psBlue[i - 1][j];
+ float blueLeft = psBlue[i][j - 1];
+ float blueCentre = psBlue[i][j];
+ float blueRight = psBlue[i][j + 1];
+ float blueBottom = psBlue[i + 1][j];
+ float blueDiff = nonGreenDiffCross(blueRight, blueLeft, blueTop, blueBottom, blueCentre, clippedBlue, stddevFactorBlue, eperIsoBlue, nRead, prnu);
if(blueDiff > 0.f) {
psMask[i][j] = redBlueWeight;
@@ -829,7 +826,6 @@ void RawImageSource::pixelshift(int winx, int winy, int winw, int winh, const RA
if(plistener) {
plistener->setProgress(0.6);
}
-
}
array2D mask(winw, winh, ARRAY2D_CLEAR_DATA);
@@ -885,7 +881,7 @@ void RawImageSource::pixelshift(int winx, int winy, int winw, int winh, const RA
for(int i = winy + border - offsY; i < winh - (border + offsY); ++i) {
#ifdef __SSE2__
- // pow() is expensive => precalculate blend factor using SSE
+ // pow() is expensive => pre calculate blend factor using SSE
if(smoothTransitions) { //
vfloat onev = F2V(1.f);
vfloat smoothv = F2V(smoothFactor);
@@ -912,38 +908,34 @@ void RawImageSource::pixelshift(int winx, int winy, int winw, int winh, const RA
unsigned int offset = FC(i, winx + border - offsX) & 1;
for(int j = winx + border - offsX; j < winw - (border + offsX); ++j, offset ^= 1) {
- if(mask[i][j] == 255) {
- paintMotionMask(j + offsX, showMotion, showOnlyMask, greenDest, redDest, blueDest);
- } else if(showOnlyMask) { // we want only motion mask => paint areas without motion in pure black
- redDest[j + offsX] = greenDest[j + offsX] = blueDest[j + offsX] = 0.f;
- } else {
- if(smoothTransitions) {
+ if(showOnlyMask) {
+ if(smoothTransitions) { // we want only motion mask => paint areas according to their motion (dark = no motion, bright = motion)
#ifdef __SSE2__
- // use precalculated blend factor
+ // use pre calculated blend factor
const float blend = psMask[i][j];
#else
const float blend = smoothFactor == 0.f ? 1.f : pow_F(std::max(psMask[i][j] - 1.f, 0.f), smoothFactor);
#endif
- redDest[j + offsX] = intp(blend, redDest[j + offsX], psRed[i][j] );
- if(bayerParams.pixelShiftOneGreen) {
- int greenFrame = (1 - offset != 0) ? 1 - offset : 3 - offset;
- int greenJ = (1 - offset != 0) ? j : j + 1;
- int greenI = (1 - offset != 0) ? i - offset + 1 : i + offset;
- greenDest[j + offsX] = intp(blend, greenDest[j + offsX], (*rawDataFrames[greenFrame])[greenI][greenJ] * greenBrightness[greenFrame]);
- } else {
- greenDest[j + offsX] = intp(blend, greenDest[j + offsX], ((*rawDataFrames[1 - offset])[i - offset + 1][j] * greenBrightness[1 - offset] + (*rawDataFrames[3 - offset])[i + offset][j + 1] * greenBrightness[3 - offset]) * 0.5f);
- }
- blueDest[j + offsX] = intp(blend, blueDest[j + offsX], psBlue[i][j]);
+ redDest[j + offsX] = greenDest[j + offsX] = blueDest[j + offsX] = blend * 32768.f;
+ } else {
+ redDest[j + offsX] = greenDest[j + offsX] = blueDest[j + offsX] = mask[i][j] == 255 ? 65535.f : 0.f;
+ }
+ } else if(mask[i][j] == 255) {
+ paintMotionMask(j + offsX, showMotion, greenDest, redDest, blueDest);
+ } else {
+ if(smoothTransitions) {
+#ifdef __SSE2__
+ // use pre calculated blend factor
+ const float blend = psMask[i][j];
+#else
+ const float blend = smoothFactor == 0.f ? 1.f : pow_F(std::max(psMask[i][j] - 1.f, 0.f), smoothFactor);
+#endif
+ redDest[j + offsX] = intp(blend, showMotion ? 0.f : redDest[j + offsX], psRed[i][j] );
+ greenDest[j + offsX] = intp(blend, showMotion ? 13500.f : greenDest[j + offsX], ((*rawDataFrames[1 - offset])[i - offset + 1][j] * greenBrightness[1 - offset] + (*rawDataFrames[3 - offset])[i + offset][j + 1] * greenBrightness[3 - offset]) * 0.5f);
+ blueDest[j + offsX] = intp(blend, showMotion ? 0.f : blueDest[j + offsX], psBlue[i][j]);
} else {
redDest[j + offsX] = psRed[i][j];
- if(bayerParams.pixelShiftOneGreen) {
- int greenFrame = (1 - offset != 0) ? 1 - offset : 3 - offset;
- int greenJ = (1 - offset != 0) ? j : j + 1;
- int greenI = (1 - offset != 0) ? i - offset + 1 : i + offset;
- greenDest[j + offsX] = (*rawDataFrames[greenFrame])[greenI][greenJ] * greenBrightness[greenFrame];
- } else {
- greenDest[j + offsX] = ((*rawDataFrames[1 - offset])[i - offset + 1][j] * greenBrightness[1 - offset] + (*rawDataFrames[3 - offset])[i + offset][j + 1] * greenBrightness[3 - offset]) * 0.5f;
- }
+ greenDest[j + offsX] = ((*rawDataFrames[1 - offset])[i - offset + 1][j] * greenBrightness[1 - offset] + (*rawDataFrames[3 - offset])[i + offset][j + 1] * greenBrightness[3 - offset]) * 0.5f;
blueDest[j + offsX] = psBlue[i][j];
}
}
@@ -952,7 +944,7 @@ void RawImageSource::pixelshift(int winx, int winy, int winw, int winh, const RA
} else {
// motion detection off => combine the 4 raw frames
float ngbright[2][4] = {{redBrightness[0], redBrightness[1], redBrightness[2], redBrightness[3]},
- {blueBrightness[0], blueBrightness[1], blueBrightness[2], blueBrightness[3]}
+ {blueBrightness[0], blueBrightness[1], blueBrightness[2], blueBrightness[3]}
};
#ifdef _OPENMP
#pragma omp parallel for schedule(dynamic,16)
@@ -976,14 +968,7 @@ void RawImageSource::pixelshift(int winx, int winy, int winw, int winh, const RA
for(; j < winw - 1; ++j) {
// set red, green and blue values
- if(bayerParams.pixelShiftOneGreen) {
- int greenFrame = (1 - offset != 0) ? 1 - offset : 3 - offset;
- int greenJ = (1 - offset != 0) ? j : j + 1;
- int greenI = (1 - offset != 0) ? i - offset + 1 : i + offset;
- green[i][j] = (*rawDataFrames[greenFrame])[greenI][greenJ] * greenBrightness[greenFrame];
- } else {
- green[i][j] = ((*rawDataFrames[1 - offset])[i - offset + 1][j] * greenBrightness[1 - offset] + (*rawDataFrames[3 - offset])[i + offset][j + 1] * greenBrightness[3 - offset]) * 0.5f;
- }
+ green[i][j] = ((*rawDataFrames[1 - offset])[i - offset + 1][j] * greenBrightness[1 - offset] + (*rawDataFrames[3 - offset])[i + offset][j + 1] * greenBrightness[3 - offset]) * 0.5f;
nonGreenDest0[j] = (*rawDataFrames[(offset << 1) + offset])[i][j + offset] * ngbright[ng][(offset << 1) + offset];
nonGreenDest1[j] = (*rawDataFrames[2 - offset])[i + 1][j - offset + 1] * ngbright[ng ^ 1][2 - offset];
offset ^= 1; // 0 => 1 or 1 => 0
diff --git a/rtengine/procevents.h b/rtengine/procevents.h
index 91954efdf..0829f9ac4 100644
--- a/rtengine/procevents.h
+++ b/rtengine/procevents.h
@@ -472,31 +472,31 @@ enum ProcEventCode {
EvOBPCompens = 442,
EvWBtempBias = 443,
EvRawImageNum = 444,
- EvPixelShiftMotion = 445,
- EvPixelShiftMotionCorrection = 446,
- EvPixelShiftStddevFactorGreen = 447,
+// EvPixelShiftMotion = 445,
+// EvPixelShiftMotionCorrection = 446,
+// EvPixelShiftStddevFactorGreen = 447,
EvPixelShiftEperIso = 448,
- EvPixelShiftNreadIso = 449,
- EvPixelShiftPrnu = 450,
+// EvPixelShiftNreadIso = 449,
+// EvPixelShiftPrnu = 450,
EvPixelshiftShowMotion = 451,
EvPixelshiftShowMotionMaskOnly = 452,
- EvPixelShiftAutomatic = 453,
- EvPixelShiftNonGreenHorizontal = 454,
- EvPixelShiftNonGreenVertical = 455,
+// EvPixelShiftAutomatic = 453,
+// EvPixelShiftNonGreenHorizontal = 454,
+// EvPixelShiftNonGreenVertical = 455,
EvPixelShiftNonGreenCross = 456,
- EvPixelShiftStddevFactorRed = 457,
- EvPixelShiftStddevFactorBlue = 458,
- EvPixelShiftGreenAmaze = 459,
- EvPixelShiftNonGreenAmaze = 460,
+// EvPixelShiftStddevFactorRed = 457,
+// EvPixelShiftStddevFactorBlue = 458,
+// EvPixelShiftGreenAmaze = 459,
+// EvPixelShiftNonGreenAmaze = 460,
EvPixelShiftGreen = 461,
- EvPixelShiftRedBlueWeight = 462,
+// EvPixelShiftRedBlueWeight = 462,
EvPixelShiftBlur = 463,
EvPixelShiftSigma = 464,
- EvPixelShiftSum = 465,
- EvPixelShiftExp0 = 466,
+// EvPixelShiftSum = 465,
+// EvPixelShiftExp0 = 466,
EvPixelShiftHoleFill = 467,
EvPixelShiftMedian = 468,
- EvPixelShiftMedian3 = 469,
+// EvPixelShiftMedian3 = 469,
EvPixelShiftMotionMethod = 470,
EvPixelShiftSmooth = 471,
EvPixelShiftLmmse = 472,
@@ -520,7 +520,7 @@ enum ProcEventCode {
EvWBEnabled = 490,
EvRGBEnabled = 491,
EvLEnabled = 492,
- EvPixelShiftOneGreen = 493,
+// EvPixelShiftOneGreen = 493, can be reused
NUMOFEVENTS
diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc
index d4f8463ef..e4596d470 100644
--- a/rtengine/procparams.cc
+++ b/rtengine/procparams.cc
@@ -1491,11 +1491,10 @@ bool FattalToneMappingParams::operator !=(const FattalToneMappingParams& other)
SHParams::SHParams() :
enabled(false),
- hq(false),
highlights(0),
- htonalwidth(80),
+ htonalwidth(70),
shadows(0),
- stonalwidth(80),
+ stonalwidth(30),
radius(40)
{
}
@@ -1504,7 +1503,6 @@ bool SHParams::operator ==(const SHParams& other) const
{
return
enabled == other.enabled
- && hq == other.hq
&& highlights == other.highlights
&& htonalwidth == other.htonalwidth
&& shadows == other.shadows
@@ -2732,37 +2730,20 @@ RAWParams::BayerSensor::BayerSensor() :
greenthresh(0),
dcb_iterations(2),
lmmse_iterations(2),
- pixelShiftMotion(0),
- pixelShiftMotionCorrection(PSMotionCorrection::GRID_3X3_NEW),
pixelShiftMotionCorrectionMethod(PSMotionCorrectionMethod::AUTO),
- pixelShiftStddevFactorGreen(5.0),
- pixelShiftStddevFactorRed(5.0),
- pixelShiftStddevFactorBlue(5.0),
pixelShiftEperIso(0.0),
- pixelShiftNreadIso(0.0),
- pixelShiftPrnu(1.0),
pixelShiftSigma(1.0),
- pixelShiftSum(3.0),
- pixelShiftRedBlueWeight(0.7),
pixelShiftShowMotion(false),
pixelShiftShowMotionMaskOnly(false),
- pixelShiftAutomatic(true),
- pixelShiftNonGreenHorizontal(false),
- pixelShiftNonGreenVertical(false),
pixelShiftHoleFill(true),
pixelShiftMedian(false),
- pixelShiftMedian3(false),
pixelShiftGreen(true),
pixelShiftBlur(true),
pixelShiftSmoothFactor(0.7),
- pixelShiftExp0(false),
pixelShiftLmmse(false),
- pixelShiftOneGreen(false),
pixelShiftEqualBright(false),
pixelShiftEqualBrightChannel(false),
pixelShiftNonGreenCross(true),
- pixelShiftNonGreenCross2(false),
- pixelShiftNonGreenAmaze(false),
dcb_enhance(true),
pdafLinesFilter(false)
{
@@ -2784,37 +2765,20 @@ bool RAWParams::BayerSensor::operator ==(const BayerSensor& other) const
&& greenthresh == other.greenthresh
&& dcb_iterations == other.dcb_iterations
&& lmmse_iterations == other.lmmse_iterations
- && pixelShiftMotion == other.pixelShiftMotion
- && pixelShiftMotionCorrection == other.pixelShiftMotionCorrection
&& pixelShiftMotionCorrectionMethod == other.pixelShiftMotionCorrectionMethod
- && pixelShiftStddevFactorGreen == other.pixelShiftStddevFactorGreen
- && pixelShiftStddevFactorRed == other.pixelShiftStddevFactorRed
- && pixelShiftStddevFactorBlue == other.pixelShiftStddevFactorBlue
&& pixelShiftEperIso == other.pixelShiftEperIso
- && pixelShiftNreadIso == other.pixelShiftNreadIso
- && pixelShiftPrnu == other.pixelShiftPrnu
&& pixelShiftSigma == other.pixelShiftSigma
- && pixelShiftSum == other.pixelShiftSum
- && pixelShiftRedBlueWeight == other.pixelShiftRedBlueWeight
&& pixelShiftShowMotion == other.pixelShiftShowMotion
&& pixelShiftShowMotionMaskOnly == other.pixelShiftShowMotionMaskOnly
- && pixelShiftAutomatic == other.pixelShiftAutomatic
- && pixelShiftNonGreenHorizontal == other.pixelShiftNonGreenHorizontal
- && pixelShiftNonGreenVertical == other.pixelShiftNonGreenVertical
&& pixelShiftHoleFill == other.pixelShiftHoleFill
&& pixelShiftMedian == other.pixelShiftMedian
- && pixelShiftMedian3 == other.pixelShiftMedian3
&& pixelShiftGreen == other.pixelShiftGreen
&& pixelShiftBlur == other.pixelShiftBlur
&& pixelShiftSmoothFactor == other.pixelShiftSmoothFactor
- && pixelShiftExp0 == other.pixelShiftExp0
&& pixelShiftLmmse == other.pixelShiftLmmse
- && pixelShiftOneGreen == other.pixelShiftOneGreen
&& pixelShiftEqualBright == other.pixelShiftEqualBright
&& pixelShiftEqualBrightChannel == other.pixelShiftEqualBrightChannel
&& pixelShiftNonGreenCross == other.pixelShiftNonGreenCross
- && pixelShiftNonGreenCross2 == other.pixelShiftNonGreenCross2
- && pixelShiftNonGreenAmaze == other.pixelShiftNonGreenAmaze
&& dcb_enhance == other.dcb_enhance
&& pdafLinesFilter == other.pdafLinesFilter;
}
@@ -2826,35 +2790,18 @@ bool RAWParams::BayerSensor::operator !=(const BayerSensor& other) const
void RAWParams::BayerSensor::setPixelShiftDefaults()
{
- pixelShiftMotion = 0;
- pixelShiftMotionCorrection = RAWParams::BayerSensor::PSMotionCorrection::GRID_3X3_NEW;
pixelShiftMotionCorrectionMethod = RAWParams::BayerSensor::PSMotionCorrectionMethod::AUTO;
- pixelShiftStddevFactorGreen = 5.0;
- pixelShiftStddevFactorRed = 5.0;
- pixelShiftStddevFactorBlue = 5.0;
pixelShiftEperIso = 0.0;
- pixelShiftNreadIso = 0.0;
- pixelShiftPrnu = 1.0;
pixelShiftSigma = 1.0;
- pixelShiftSum = 3.0;
- pixelShiftRedBlueWeight = 0.7;
- pixelShiftAutomatic = true;
- pixelShiftNonGreenHorizontal = false;
- pixelShiftNonGreenVertical = false;
pixelShiftHoleFill = true;
pixelShiftMedian = false;
- pixelShiftMedian3 = false;
pixelShiftGreen = true;
pixelShiftBlur = true;
pixelShiftSmoothFactor = 0.7;
- pixelShiftExp0 = false;
pixelShiftLmmse = false;
- pixelShiftOneGreen = false;
pixelShiftEqualBright = false;
pixelShiftEqualBrightChannel = false;
pixelShiftNonGreenCross = true;
- pixelShiftNonGreenCross2 = false;
- pixelShiftNonGreenAmaze = false;
}
const std::vector& RAWParams::BayerSensor::getMethodStrings()
@@ -3442,7 +3389,6 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo
// Shadows & highlights
saveToKeyfile(!pedited || pedited->sh.enabled, "Shadows & Highlights", "Enabled", sh.enabled, keyFile);
- saveToKeyfile(!pedited || pedited->sh.hq, "Shadows & Highlights", "HighQuality", sh.hq, keyFile);
saveToKeyfile(!pedited || pedited->sh.highlights, "Shadows & Highlights", "Highlights", sh.highlights, keyFile);
saveToKeyfile(!pedited || pedited->sh.htonalwidth, "Shadows & Highlights", "HighlightTonalWidth", sh.htonalwidth, keyFile);
saveToKeyfile(!pedited || pedited->sh.shadows, "Shadows & Highlights", "Shadows", sh.shadows, keyFile);
@@ -3880,37 +3826,20 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo
saveToKeyfile(!pedited || pedited->raw.bayersensor.dcbIterations, "RAW Bayer", "DCBIterations", raw.bayersensor.dcb_iterations, keyFile);
saveToKeyfile(!pedited || pedited->raw.bayersensor.dcbEnhance, "RAW Bayer", "DCBEnhance", raw.bayersensor.dcb_enhance, keyFile);
saveToKeyfile(!pedited || pedited->raw.bayersensor.lmmseIterations, "RAW Bayer", "LMMSEIterations", raw.bayersensor.lmmse_iterations, keyFile);
- saveToKeyfile(!pedited || pedited->raw.bayersensor.pixelShiftMotion, "RAW Bayer", "PixelShiftMotion", raw.bayersensor.pixelShiftMotion, keyFile);
- saveToKeyfile(!pedited || pedited->raw.bayersensor.pixelShiftMotionCorrection, "RAW Bayer", "PixelShiftMotionCorrection", toUnderlying(raw.bayersensor.pixelShiftMotionCorrection), keyFile);
saveToKeyfile(!pedited || pedited->raw.bayersensor.pixelShiftMotionCorrectionMethod, "RAW Bayer", "PixelShiftMotionCorrectionMethod", toUnderlying(raw.bayersensor.pixelShiftMotionCorrectionMethod), keyFile);
- saveToKeyfile(!pedited || pedited->raw.bayersensor.pixelShiftStddevFactorGreen, "RAW Bayer", "pixelShiftStddevFactorGreen", raw.bayersensor.pixelShiftStddevFactorGreen, keyFile);
- saveToKeyfile(!pedited || pedited->raw.bayersensor.pixelShiftStddevFactorRed, "RAW Bayer", "pixelShiftStddevFactorRed", raw.bayersensor.pixelShiftStddevFactorRed, keyFile);
- saveToKeyfile(!pedited || pedited->raw.bayersensor.pixelShiftStddevFactorBlue, "RAW Bayer", "pixelShiftStddevFactorBlue", raw.bayersensor.pixelShiftStddevFactorBlue, keyFile);
saveToKeyfile(!pedited || pedited->raw.bayersensor.pixelShiftEperIso, "RAW Bayer", "PixelShiftEperIso", raw.bayersensor.pixelShiftEperIso, keyFile);
- saveToKeyfile(!pedited || pedited->raw.bayersensor.pixelShiftNreadIso, "RAW Bayer", "PixelShiftNreadIso", raw.bayersensor.pixelShiftNreadIso, keyFile);
- saveToKeyfile(!pedited || pedited->raw.bayersensor.pixelShiftPrnu, "RAW Bayer", "PixelShiftPrnu", raw.bayersensor.pixelShiftPrnu, keyFile);
saveToKeyfile(!pedited || pedited->raw.bayersensor.pixelShiftSigma, "RAW Bayer", "PixelShiftSigma", raw.bayersensor.pixelShiftSigma, keyFile);
- saveToKeyfile(!pedited || pedited->raw.bayersensor.pixelShiftSum, "RAW Bayer", "PixelShiftSum", raw.bayersensor.pixelShiftSum, keyFile);
- saveToKeyfile(!pedited || pedited->raw.bayersensor.pixelShiftRedBlueWeight, "RAW Bayer", "PixelShiftRedBlueWeight", raw.bayersensor.pixelShiftRedBlueWeight, keyFile);
saveToKeyfile(!pedited || pedited->raw.bayersensor.pixelShiftShowMotion, "RAW Bayer", "PixelShiftShowMotion", raw.bayersensor.pixelShiftShowMotion, keyFile);
saveToKeyfile(!pedited || pedited->raw.bayersensor.pixelShiftShowMotionMaskOnly, "RAW Bayer", "PixelShiftShowMotionMaskOnly", raw.bayersensor.pixelShiftShowMotionMaskOnly, keyFile);
- saveToKeyfile(!pedited || pedited->raw.bayersensor.pixelShiftAutomatic, "RAW Bayer", "pixelShiftAutomatic", raw.bayersensor.pixelShiftAutomatic, keyFile);
- saveToKeyfile(!pedited || pedited->raw.bayersensor.pixelShiftNonGreenHorizontal, "RAW Bayer", "pixelShiftNonGreenHorizontal", raw.bayersensor.pixelShiftNonGreenHorizontal, keyFile);
- saveToKeyfile(!pedited || pedited->raw.bayersensor.pixelShiftNonGreenVertical, "RAW Bayer", "pixelShiftNonGreenVertical", raw.bayersensor.pixelShiftNonGreenVertical, keyFile);
saveToKeyfile(!pedited || pedited->raw.bayersensor.pixelShiftHoleFill, "RAW Bayer", "pixelShiftHoleFill", raw.bayersensor.pixelShiftHoleFill, keyFile);
saveToKeyfile(!pedited || pedited->raw.bayersensor.pixelShiftMedian, "RAW Bayer", "pixelShiftMedian", raw.bayersensor.pixelShiftMedian, keyFile);
- saveToKeyfile(!pedited || pedited->raw.bayersensor.pixelShiftMedian3, "RAW Bayer", "pixelShiftMedian3", raw.bayersensor.pixelShiftMedian3, keyFile);
saveToKeyfile(!pedited || pedited->raw.bayersensor.pixelShiftGreen, "RAW Bayer", "pixelShiftGreen", raw.bayersensor.pixelShiftGreen, keyFile);
saveToKeyfile(!pedited || pedited->raw.bayersensor.pixelShiftBlur, "RAW Bayer", "pixelShiftBlur", raw.bayersensor.pixelShiftBlur, keyFile);
saveToKeyfile(!pedited || pedited->raw.bayersensor.pixelShiftSmooth, "RAW Bayer", "pixelShiftSmoothFactor", raw.bayersensor.pixelShiftSmoothFactor, keyFile);
- saveToKeyfile(!pedited || pedited->raw.bayersensor.pixelShiftExp0, "RAW Bayer", "pixelShiftExp0", raw.bayersensor.pixelShiftExp0, keyFile);
saveToKeyfile(!pedited || pedited->raw.bayersensor.pixelShiftLmmse, "RAW Bayer", "pixelShiftLmmse", raw.bayersensor.pixelShiftLmmse, keyFile);
-// saveToKeyfile(!pedited || pedited->raw.bayersensor.pixelShiftOneGreen, "RAW Bayer", "pixelShiftOneGreen", raw.bayersensor.pixelShiftOneGreen, keyFile);
saveToKeyfile(!pedited || pedited->raw.bayersensor.pixelShiftEqualBright, "RAW Bayer", "pixelShiftEqualBright", raw.bayersensor.pixelShiftEqualBright, keyFile);
saveToKeyfile(!pedited || pedited->raw.bayersensor.pixelShiftEqualBrightChannel, "RAW Bayer", "pixelShiftEqualBrightChannel", raw.bayersensor.pixelShiftEqualBrightChannel, keyFile);
saveToKeyfile(!pedited || pedited->raw.bayersensor.pixelShiftNonGreenCross, "RAW Bayer", "pixelShiftNonGreenCross", raw.bayersensor.pixelShiftNonGreenCross, keyFile);
- saveToKeyfile(!pedited || pedited->raw.bayersensor.pixelShiftNonGreenCross2, "RAW Bayer", "pixelShiftNonGreenCross2", raw.bayersensor.pixelShiftNonGreenCross2, keyFile);
- saveToKeyfile(!pedited || pedited->raw.bayersensor.pixelShiftNonGreenAmaze, "RAW Bayer", "pixelShiftNonGreenAmaze", raw.bayersensor.pixelShiftNonGreenAmaze, keyFile);
saveToKeyfile(!pedited || pedited->raw.bayersensor.pdafLinesFilter, "RAW Bayer", "PDAFLinesFilter", raw.bayersensor.pdafLinesFilter, keyFile);
saveToKeyfile(!pedited || pedited->raw.xtranssensor.method, "RAW X-Trans", "Method", raw.xtranssensor.method, keyFile);
saveToKeyfile(!pedited || pedited->raw.xtranssensor.ccSteps, "RAW X-Trans", "CcSteps", raw.xtranssensor.ccSteps, keyFile);
@@ -4466,9 +4395,8 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited)
assignFromKeyfile(keyFile, "FattalToneMapping", "Anchor", pedited, fattal.anchor, pedited->fattal.anchor);
}
- if (keyFile.has_group("Shadows & Highlights")) {
+ if (keyFile.has_group ("Shadows & Highlights") && ppVersion >= 333) {
assignFromKeyfile(keyFile, "Shadows & Highlights", "Enabled", pedited, sh.enabled, pedited->sh.enabled);
- assignFromKeyfile(keyFile, "Shadows & Highlights", "HighQuality", pedited, sh.hq, pedited->sh.hq);
assignFromKeyfile(keyFile, "Shadows & Highlights", "Highlights", pedited, sh.highlights, pedited->sh.highlights);
assignFromKeyfile(keyFile, "Shadows & Highlights", "HighlightTonalWidth", pedited, sh.htonalwidth, pedited->sh.htonalwidth);
assignFromKeyfile(keyFile, "Shadows & Highlights", "Shadows", pedited, sh.shadows, pedited->sh.shadows);
@@ -4477,7 +4405,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited)
if (keyFile.has_key("Shadows & Highlights", "LocalContrast") && ppVersion < 329) {
int lc = keyFile.get_integer("Shadows & Highlights", "LocalContrast");
- localContrast.amount = float(lc) / (sh.hq ? 500.0 : 30.);
+ localContrast.amount = float(lc) / 30.;
if (pedited) {
pedited->localContrast.amount = true;
@@ -5370,15 +5298,6 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited)
assignFromKeyfile(keyFile, "RAW Bayer", "DCBIterations", pedited, raw.bayersensor.dcb_iterations, pedited->raw.bayersensor.dcbIterations);
assignFromKeyfile(keyFile, "RAW Bayer", "DCBEnhance", pedited, raw.bayersensor.dcb_enhance, pedited->raw.bayersensor.dcbEnhance);
assignFromKeyfile(keyFile, "RAW Bayer", "LMMSEIterations", pedited, raw.bayersensor.lmmse_iterations, pedited->raw.bayersensor.lmmseIterations);
- assignFromKeyfile(keyFile, "RAW Bayer", "PixelShiftMotion", pedited, raw.bayersensor.pixelShiftMotion, pedited->raw.bayersensor.pixelShiftMotion);
-
- if (keyFile.has_key("RAW Bayer", "PixelShiftMotionCorrection")) {
- raw.bayersensor.pixelShiftMotionCorrection = (RAWParams::BayerSensor::PSMotionCorrection)keyFile.get_integer("RAW Bayer", "PixelShiftMotionCorrection");
-
- if (pedited) {
- pedited->raw.bayersensor.pixelShiftMotionCorrection = true;
- }
- }
if (keyFile.has_key("RAW Bayer", "PixelShiftMotionCorrectionMethod")) {
raw.bayersensor.pixelShiftMotionCorrectionMethod = (RAWParams::BayerSensor::PSMotionCorrectionMethod)keyFile.get_integer("RAW Bayer", "PixelShiftMotionCorrectionMethod");
@@ -5388,34 +5307,22 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited)
}
}
- assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftStddevFactorGreen", pedited, raw.bayersensor.pixelShiftStddevFactorGreen, pedited->raw.bayersensor.pixelShiftStddevFactorGreen);
- assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftStddevFactorRed", pedited, raw.bayersensor.pixelShiftStddevFactorRed, pedited->raw.bayersensor.pixelShiftStddevFactorRed);
- assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftStddevFactorBlue", pedited, raw.bayersensor.pixelShiftStddevFactorBlue, pedited->raw.bayersensor.pixelShiftStddevFactorBlue);
assignFromKeyfile(keyFile, "RAW Bayer", "PixelShiftEperIso", pedited, raw.bayersensor.pixelShiftEperIso, pedited->raw.bayersensor.pixelShiftEperIso);
- assignFromKeyfile(keyFile, "RAW Bayer", "PixelShiftNreadIso", pedited, raw.bayersensor.pixelShiftNreadIso, pedited->raw.bayersensor.pixelShiftNreadIso);
- assignFromKeyfile(keyFile, "RAW Bayer", "PixelShiftPrnu", pedited, raw.bayersensor.pixelShiftPrnu, pedited->raw.bayersensor.pixelShiftPrnu);
+ if (ppVersion < 332) {
+ raw.bayersensor.pixelShiftEperIso += 1.0;
+ }
assignFromKeyfile(keyFile, "RAW Bayer", "PixelShiftSigma", pedited, raw.bayersensor.pixelShiftSigma, pedited->raw.bayersensor.pixelShiftSigma);
- assignFromKeyfile(keyFile, "RAW Bayer", "PixelShiftSum", pedited, raw.bayersensor.pixelShiftSum, pedited->raw.bayersensor.pixelShiftSum);
- assignFromKeyfile(keyFile, "RAW Bayer", "PixelShiftRedBlueWeight", pedited, raw.bayersensor.pixelShiftRedBlueWeight, pedited->raw.bayersensor.pixelShiftRedBlueWeight);
assignFromKeyfile(keyFile, "RAW Bayer", "PixelShiftShowMotion", pedited, raw.bayersensor.pixelShiftShowMotion, pedited->raw.bayersensor.pixelShiftShowMotion);
assignFromKeyfile(keyFile, "RAW Bayer", "PixelShiftShowMotionMaskOnly", pedited, raw.bayersensor.pixelShiftShowMotionMaskOnly, pedited->raw.bayersensor.pixelShiftShowMotionMaskOnly);
- assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftAutomatic", pedited, raw.bayersensor.pixelShiftAutomatic, pedited->raw.bayersensor.pixelShiftAutomatic);
- assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftNonGreenHorizontal", pedited, raw.bayersensor.pixelShiftNonGreenHorizontal, pedited->raw.bayersensor.pixelShiftNonGreenHorizontal);
- assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftNonGreenVertical", pedited, raw.bayersensor.pixelShiftNonGreenVertical, pedited->raw.bayersensor.pixelShiftNonGreenVertical);
assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftHoleFill", pedited, raw.bayersensor.pixelShiftHoleFill, pedited->raw.bayersensor.pixelShiftHoleFill);
assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftMedian", pedited, raw.bayersensor.pixelShiftMedian, pedited->raw.bayersensor.pixelShiftMedian);
- assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftMedian3", pedited, raw.bayersensor.pixelShiftMedian3, pedited->raw.bayersensor.pixelShiftMedian3);
assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftGreen", pedited, raw.bayersensor.pixelShiftGreen, pedited->raw.bayersensor.pixelShiftGreen);
assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftBlur", pedited, raw.bayersensor.pixelShiftBlur, pedited->raw.bayersensor.pixelShiftBlur);
assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftSmoothFactor", pedited, raw.bayersensor.pixelShiftSmoothFactor, pedited->raw.bayersensor.pixelShiftSmooth);
- assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftExp0", pedited, raw.bayersensor.pixelShiftExp0, pedited->raw.bayersensor.pixelShiftExp0);
assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftLmmse", pedited, raw.bayersensor.pixelShiftLmmse, pedited->raw.bayersensor.pixelShiftLmmse);
-// assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftOneGreen", pedited, raw.bayersensor.pixelShiftOneGreen, pedited->raw.bayersensor.pixelShiftOneGreen);
assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftEqualBright", pedited, raw.bayersensor.pixelShiftEqualBright, pedited->raw.bayersensor.pixelShiftEqualBright);
assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftEqualBrightChannel", pedited, raw.bayersensor.pixelShiftEqualBrightChannel, pedited->raw.bayersensor.pixelShiftEqualBrightChannel);
assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftNonGreenCross", pedited, raw.bayersensor.pixelShiftNonGreenCross, pedited->raw.bayersensor.pixelShiftNonGreenCross);
- assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftNonGreenCross2", pedited, raw.bayersensor.pixelShiftNonGreenCross2, pedited->raw.bayersensor.pixelShiftNonGreenCross2);
- assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftNonGreenAmaze", pedited, raw.bayersensor.pixelShiftNonGreenAmaze, pedited->raw.bayersensor.pixelShiftNonGreenAmaze);
assignFromKeyfile(keyFile, "RAW Bayer", "PDAFLinesFilter", pedited, raw.bayersensor.pdafLinesFilter, pedited->raw.bayersensor.pdafLinesFilter);
}
diff --git a/rtengine/procparams.h b/rtengine/procparams.h
index 83d559713..cfabb8f7c 100644
--- a/rtengine/procparams.h
+++ b/rtengine/procparams.h
@@ -747,7 +747,6 @@ struct FattalToneMappingParams {
*/
struct SHParams {
bool enabled;
- bool hq;
int highlights;
int htonalwidth;
int shadows;
@@ -1376,15 +1375,6 @@ struct RAWParams {
PIXELSHIFT
};
- enum class PSMotionCorrection {
- GRID_1X1,
- GRID_1X2,
- GRID_3X3,
- GRID_5X5,
- GRID_7X7,
- GRID_3X3_NEW
- };
-
enum class PSMotionCorrectionMethod {
OFF,
AUTO,
@@ -1410,37 +1400,20 @@ struct RAWParams {
int greenthresh;
int dcb_iterations;
int lmmse_iterations;
- int pixelShiftMotion;
- PSMotionCorrection pixelShiftMotionCorrection;
PSMotionCorrectionMethod pixelShiftMotionCorrectionMethod;
- double pixelShiftStddevFactorGreen;
- double pixelShiftStddevFactorRed;
- double pixelShiftStddevFactorBlue;
double pixelShiftEperIso;
- double pixelShiftNreadIso;
- double pixelShiftPrnu;
double pixelShiftSigma;
- double pixelShiftSum;
- double pixelShiftRedBlueWeight;
bool pixelShiftShowMotion;
bool pixelShiftShowMotionMaskOnly;
- bool pixelShiftAutomatic;
- bool pixelShiftNonGreenHorizontal;
- bool pixelShiftNonGreenVertical;
bool pixelShiftHoleFill;
bool pixelShiftMedian;
- bool pixelShiftMedian3;
bool pixelShiftGreen;
bool pixelShiftBlur;
double pixelShiftSmoothFactor;
- bool pixelShiftExp0;
bool pixelShiftLmmse;
- bool pixelShiftOneGreen;
bool pixelShiftEqualBright;
bool pixelShiftEqualBrightChannel;
bool pixelShiftNonGreenCross;
- bool pixelShiftNonGreenCross2;
- bool pixelShiftNonGreenAmaze;
bool dcb_enhance;
bool pdafLinesFilter;
diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc
index 415d01d81..1be659bd1 100644
--- a/rtengine/rawimagesource.cc
+++ b/rtengine/rawimagesource.cc
@@ -154,7 +154,7 @@ void transLineFuji(const float* const red, const float* const green, const float
}
}
-void transLineD1x (const float* const red, const float* const green, const float* const blue, const int i, rtengine::Imagefloat* const image, const int tran, const int imwidth, const int imheight, const bool oddHeight)
+void transLineD1x (const float* const red, const float* const green, const float* const blue, const int i, rtengine::Imagefloat* const image, const int tran, const int imwidth, const int imheight, const bool oddHeight, const bool clip)
{
// Nikon D1X has an uncommon sensor with 4028 x 1324 sensels.
// Vertical sensel size is 2x horizontal sensel size
@@ -223,6 +223,12 @@ void transLineD1x (const float* const red, const float* const green, const float
image->r(row, col) = MAX(0.f, -0.0625f * (red[j] + image->r(row + 3, col)) + 0.5625f * (image->r(row - 1, col) + image->r(row + 1, col)));
image->g(row, col) = MAX(0.f, -0.0625f * (green[j] + image->g(row + 3, col)) + 0.5625f * (image->g(row - 1, col) + image->g(row + 1, col)));
image->b(row, col) = MAX(0.f, -0.0625f * (blue[j] + image->b(row + 3, col)) + 0.5625f * (image->b(row - 1, col) + image->b(row + 1, col)));
+
+ if(clip) {
+ image->r(row, col) = MIN(image->r(row, col), rtengine::MAXVALF);
+ image->g(row, col) = MIN(image->g(row, col), rtengine::MAXVALF);
+ image->b(row, col) = MIN(image->b(row, col), rtengine::MAXVALF);
+ }
}
}
@@ -280,6 +286,12 @@ void transLineD1x (const float* const red, const float* const green, const float
image->r(j, col) = MAX(0.f, -0.0625f * (red[j] + image->r(j, col + 3)) + 0.5625f * (image->r(j, col - 1) + image->r(j, col + 1)));
image->g(j, col) = MAX(0.f, -0.0625f * (green[j] + image->g(j, col + 3)) + 0.5625f * (image->g(j, col - 1) + image->g(j, col + 1)));
image->b(j, col) = MAX(0.f, -0.0625f * (blue[j] + image->b(j, col + 3)) + 0.5625f * (image->b(j, col - 1) + image->b(j, col + 1)));
+
+ if(clip) {
+ image->r(j, col) = MIN(image->r(j, col), rtengine::MAXVALF);
+ image->g(j, col) = MIN(image->g(j, col), rtengine::MAXVALF);
+ image->b(j, col) = MIN(image->b(j, col), rtengine::MAXVALF);
+ }
}
}
@@ -307,6 +319,12 @@ void transLineD1x (const float* const red, const float* const green, const float
image->g(row, 2 * i - 3) = MAX(0.f, -0.0625f * (green[j] + image->g(row, 2 * i - 6)) + 0.5625f * (image->g(row, 2 * i - 2) + image->g(row, 2 * i - 4)));
image->b(row, 2 * i - 3) = MAX(0.f, -0.0625f * (blue[j] + image->b(row, 2 * i - 6)) + 0.5625f * (image->b(row, 2 * i - 2) + image->b(row, 2 * i - 4)));
+ if(clip) {
+ image->r(row, 2 * i - 3) = MIN(image->r(row, 2 * i - 3), rtengine::MAXVALF);
+ image->g(row, 2 * i - 3) = MIN(image->g(row, 2 * i - 3), rtengine::MAXVALF);
+ image->b(row, 2 * i - 3) = MIN(image->b(row, 2 * i - 3), rtengine::MAXVALF);
+ }
+
image->r(row, 2 * i) = red[j];
image->g(row, 2 * i) = green[j];
image->b(row, 2 * i) = blue[j];
@@ -319,6 +337,12 @@ void transLineD1x (const float* const red, const float* const green, const float
image->g(row, 2 * i - 1) = MAX(0.f, -0.0625f * (green[j] + image->g(row, 2 * i - 4)) + 0.5625f * (image->g(row, 2 * i) + image->g(row, 2 * i - 2)));
image->b(row, 2 * i - 1) = MAX(0.f, -0.0625f * (blue[j] + image->b(row, 2 * i - 4)) + 0.5625f * (image->b(row, 2 * i) + image->b(row, 2 * i - 2)));
+ if(clip) {
+ image->r(j, 2 * i - 1) = MIN(image->r(j, 2 * i - 1), rtengine::MAXVALF);
+ image->g(j, 2 * i - 1) = MIN(image->g(j, 2 * i - 1), rtengine::MAXVALF);
+ image->b(j, 2 * i - 1) = MIN(image->b(j, 2 * i - 1), rtengine::MAXVALF);
+ }
+
image->r(row, 2 * i + 1) = (red[j] + image->r(row, 2 * i - 1)) / 2;
image->g(row, 2 * i + 1) = (green[j] + image->g(row, 2 * i - 1)) / 2;
image->b(row, 2 * i + 1) = (blue[j] + image->b(row, 2 * i - 1)) / 2;
@@ -350,6 +374,12 @@ void transLineD1x (const float* const red, const float* const green, const float
image->r(2 * i - 3, j) = MAX(0.f, -0.0625f * (red[j] + image->r(2 * i - 6, j)) + 0.5625f * (image->r(2 * i - 2, j) + image->r(2 * i - 4, j)));
image->g(2 * i - 3, j) = MAX(0.f, -0.0625f * (green[j] + image->g(2 * i - 6, j)) + 0.5625f * (image->g(2 * i - 2, j) + image->g(2 * i - 4, j)));
image->b(2 * i - 3, j) = MAX(0.f, -0.0625f * (blue[j] + image->b(2 * i - 6, j)) + 0.5625f * (image->b(2 * i - 2, j) + image->b(2 * i - 4, j)));
+
+ if(clip) {
+ image->r(2 * i - 3, j) = MIN(image->r(2 * i - 3, j), rtengine::MAXVALF);
+ image->g(2 * i - 3, j) = MIN(image->g(2 * i - 3, j), rtengine::MAXVALF);
+ image->b(2 * i - 3, j) = MIN(image->b(2 * i - 3, j), rtengine::MAXVALF);
+ }
}
}
@@ -359,6 +389,12 @@ void transLineD1x (const float* const red, const float* const green, const float
image->g(2 * i - 1, j) = MAX(0.f, -0.0625f * (green[j] + image->g(2 * i - 4, j)) + 0.5625f * (image->g(2 * i, j) + image->g(2 * i - 2, j)));
image->b(2 * i - 1, j) = MAX(0.f, -0.0625f * (blue[j] + image->b(2 * i - 4, j)) + 0.5625f * (image->b(2 * i, j) + image->b(2 * i - 2, j)));
+ if(clip) {
+ image->r(2 * i - 1, j) = MIN(image->r(2 * i - 1, j), rtengine::MAXVALF);
+ image->g(2 * i - 1, j) = MIN(image->g(2 * i - 1, j), rtengine::MAXVALF);
+ image->b(2 * i - 1, j) = MIN(image->b(2 * i - 1, j), rtengine::MAXVALF);
+ }
+
image->r(2 * i + 1, j) = (red[j] + image->r(2 * i - 1, j)) / 2;
image->g(2 * i + 1, j) = (green[j] + image->g(2 * i - 1, j)) / 2;
image->b(2 * i + 1, j) = (blue[j] + image->b(2 * i - 1, j)) / 2;
@@ -689,6 +725,8 @@ void RawImageSource::getImage(const ColorTemp &ctemp, int tran, Imagefloat* imag
hlmax[1] = clmax[1] * gm;
hlmax[2] = clmax[2] * bm;
+ const bool doClip = (chmax[0] >= clmax[0] || chmax[1] >= clmax[1] || chmax[2] >= clmax[2]) && !hrp.hrenabled && hrp.clampOOG;
+
float area = skip * skip;
rm /= area;
gm /= area;
@@ -731,6 +769,17 @@ void RawImageSource::getImage(const ColorTemp &ctemp, int tran, Imagefloat* imag
gtot *= gm;
btot *= bm;
+ if (doClip) {
+ // note: as hlmax[] can be larger than CLIP and we can later apply negative
+ // exposure this means that we can clip away local highlights which actually
+ // are not clipped. We have to do that though as we only check pixel by pixel
+ // and don't know if this will transition into a clipped area, if so we need
+ // to clip also surrounding to make a good colour transition
+ rtot = CLIP(rtot);
+ gtot = CLIP(gtot);
+ btot = CLIP(btot);
+ }
+
line_red[j] = rtot;
line_grn[j] = gtot;
line_blue[j] = btot;
@@ -755,6 +804,12 @@ void RawImageSource::getImage(const ColorTemp &ctemp, int tran, Imagefloat* imag
gtot *= gm;
btot *= bm;
+ if (doClip) {
+ rtot = CLIP(rtot);
+ gtot = CLIP(gtot);
+ btot = CLIP(btot);
+ }
+
line_red[j] = rtot;
line_grn[j] = gtot;
line_blue[j] = btot;
@@ -768,7 +823,7 @@ void RawImageSource::getImage(const ColorTemp &ctemp, int tran, Imagefloat* imag
}
if (d1x) {
- transLineD1x (line_red, line_grn, line_blue, ix, image, tran, imwidth, imheight, d1xHeightOdd);
+ transLineD1x (line_red, line_grn, line_blue, ix, image, tran, imwidth, imheight, d1xHeightOdd, doClip);
} else if (fuji) {
transLineFuji(line_red, line_grn, line_blue, ix, image, tran, imheight, fw);
} else {
@@ -2893,6 +2948,7 @@ void RawImageSource::processFlatField(const RAWParams &raw, RawImage *riFlatFile
c4[1][1] = c[1][1];
}
+ constexpr float minValue = 1.f; // if the pixel value in the flat field is less or equal this value, no correction will be applied.
#ifdef __SSE2__
vfloat refcolorv[2] = {_mm_set_ps(refcolor[0][1], refcolor[0][0], refcolor[0][1], refcolor[0][0]),
@@ -2902,7 +2958,8 @@ void RawImageSource::processFlatField(const RAWParams &raw, RawImage *riFlatFile
_mm_set_ps(black[c4[1][1]], black[c4[1][0]], black[c4[1][1]], black[c4[1][0]])
};
- vfloat epsv = F2V(1e-5f);
+ vfloat onev = F2V(1.f);
+ vfloat minValuev = F2V(minValue);
#endif
#ifdef _OPENMP
#pragma omp parallel for schedule(dynamic,16)
@@ -2915,7 +2972,9 @@ void RawImageSource::processFlatField(const RAWParams &raw, RawImage *riFlatFile
vfloat rowRefcolorv = refcolorv[row & 1];
for (; col < W - 3; col += 4) {
- vfloat vignettecorrv = rowRefcolorv / vmaxf(epsv, LVFU(cfablur[(row) * W + col]) - rowBlackv);
+ vfloat blurv = LVFU(cfablur[(row) * W + col]) - rowBlackv;
+ vfloat vignettecorrv = rowRefcolorv / blurv;
+ vignettecorrv = vself(vmaskf_le(blurv, minValuev), onev, vignettecorrv);
vfloat valv = LVFU(rawData[row][col]);
valv -= rowBlackv;
STVFU(rawData[row][col], valv * vignettecorrv + rowBlackv);
@@ -2924,7 +2983,8 @@ void RawImageSource::processFlatField(const RAWParams &raw, RawImage *riFlatFile
#endif
for (; col < W; col ++) {
- float vignettecorr = refcolor[row & 1][col & 1] / max(1e-5f, cfablur[(row) * W + col] - black[c4[row & 1][col & 1]]);
+ float blur = cfablur[(row) * W + col] - black[c4[row & 1][col & 1]];
+ float vignettecorr = blur <= minValue ? 1.f : refcolor[row & 1][col & 1] / blur;
rawData[row][col] = (rawData[row][col] - black[c4[row & 1][col & 1]]) * vignettecorr + black[c4[row & 1][col & 1]];
}
}
@@ -2996,6 +3056,8 @@ void RawImageSource::processFlatField(const RAWParams &raw, RawImage *riFlatFile
refcolor[c] *= limitFactor;
}
+ constexpr float minValue = 1.f; // if the pixel value in the flat field is less or equal this value, no correction will be applied.
+
#ifdef _OPENMP
#pragma omp parallel for
#endif
@@ -3003,7 +3065,8 @@ void RawImageSource::processFlatField(const RAWParams &raw, RawImage *riFlatFile
for (int row = 0; row < H; row++) {
for (int col = 0; col < W; col++) {
int c = ri->XTRANSFC(row, col);
- float vignettecorr = (refcolor[c] / max(1e-5f, cfablur[(row) * W + col] - black[c]));
+ float blur = cfablur[(row) * W + col] - black[c];
+ float vignettecorr = blur <= minValue ? 1.f : refcolor[c] / blur;
rawData[row][col] = (rawData[row][col] - black[c]) * vignettecorr + black[c];
}
}
diff --git a/rtengine/refreshmap.cc b/rtengine/refreshmap.cc
index 1e0408af0..69b8c95da 100644
--- a/rtengine/refreshmap.cc
+++ b/rtengine/refreshmap.cc
@@ -472,36 +472,36 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
OUTPUTPROFILE, // EvOBPCompens
ALLNORAW, // EvWBtempBias
DARKFRAME, // EvRawImageNum
- DEMOSAIC, // EvPixelShiftMotion
- DEMOSAIC, // EvPixelShiftMotionCorrection
- DEMOSAIC, // EvPixelShiftStddevFactorGreen
+ 0, // unused
+ 0, // unused
+ 0, // unused
DEMOSAIC, // EvPixelShiftEperIso
- DEMOSAIC, // EvPixelShiftNreadIso
- DEMOSAIC, // EvPixelShiftPrnu
+ 0, // unused
+ 0, // unused
DEMOSAIC, // EvPixelshiftShowMotion
DEMOSAIC, // EvPixelshiftShowMotionMaskOnly
- DEMOSAIC, // EvPixelShiftAutomatic
- DEMOSAIC, // EvPixelShiftNonGreenHorizontal
- DEMOSAIC, // EvPixelShiftNonGreenVertical
+ 0, // unused
+ 0, // unused
+ 0, // unused
DEMOSAIC, // EvPixelShiftNonGreenCross
- DEMOSAIC, // EvPixelShiftStddevFactorRed
- DEMOSAIC, // EvPixelShiftStddevFactorBlue
- DEMOSAIC, // EvPixelShiftNonGreenCross2
- DEMOSAIC, // EvPixelShiftNonGreenAmaze
+ 0, // unused
+ 0, // unused
+ 0, // unused
+ 0, // unused
DEMOSAIC, // EvPixelShiftGreen
- DEMOSAIC, // EvPixelShiftRedBlueWeight
+ 0, // unused
DEMOSAIC, // EvPixelShiftBlur
DEMOSAIC, // EvPixelShiftSigma
- DEMOSAIC, // EvPixelShiftSum
- DEMOSAIC, // EvPixelShiftExp0
+ 0, // unused
+ 0, // unused
DEMOSAIC, // EvPixelShiftHoleFill
DEMOSAIC, // EvPixelShiftMedian
- DEMOSAIC, // EvPixelShiftMedian3
+ 0, // unused
DEMOSAIC, // EvPixelShiftMotionMethod
DEMOSAIC, // EvPixelShiftSmooth
DEMOSAIC, // EvPixelShiftLmmse
DEMOSAIC, // EvPixelShiftEqualBright
- DEMOSAIC, // EvPixelShiftEqualBrightChannel
+ DEMOSAIC, // EvPixelShiftEqualBrightChannel
LUMINANCECURVE, // EvCATtempout
LUMINANCECURVE, // EvCATgreenout
LUMINANCECURVE, // EvCATybout
@@ -519,8 +519,7 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
HDR, // EvTMFattalAmount
ALLNORAW, // EvWBEnabled
RGBCURVE, // EvRGBEnabled
- LUMINANCECURVE, // EvLEnabled
- DEMOSAIC // EvPixelShiftOneGreen
+ LUMINANCECURVE // EvLEnabled
};
diff --git a/rtengine/rt_math.h b/rtengine/rt_math.h
index 8a32f52b9..8d55b492e 100644
--- a/rtengine/rt_math.h
+++ b/rtengine/rt_math.h
@@ -38,6 +38,12 @@ constexpr T SQR(T x)
return x * x;
}
+template
+constexpr T pow4(T x)
+{
+ return SQR(SQR(x));
+}
+
template
constexpr const T& min(const T& a)
{
diff --git a/rtengine/rtengine.h b/rtengine/rtengine.h
index c257735e3..1fcc92735 100644
--- a/rtengine/rtengine.h
+++ b/rtengine/rtengine.h
@@ -121,9 +121,12 @@ public:
virtual std::string getOrientation (unsigned int frame = 0) const = 0;
/** @return true if the file is a PixelShift shot (Pentax and Sony bodies) */
- virtual bool getPixelShift (unsigned int frame = 0) const = 0;
+ virtual bool getPixelShift () const = 0;
/** @return false: not an HDR file ; true: single or multi-frame HDR file (e.g. Pentax HDR raw file or 32 bit float DNG file or Log compressed) */
virtual bool getHDR (unsigned int frame = 0) const = 0;
+
+ /** @return false: not an HDR file ; true: single or multi-frame HDR file (e.g. Pentax HDR raw file or 32 bit float DNG file or Log compressed) */
+ virtual std::string getImageType (unsigned int frame) const = 0;
/** @return the sample format based on MetaData */
virtual IIOSampleFormat getSampleFormat (unsigned int frame = 0) const = 0;
diff --git a/rtengine/rtthumbnail.cc b/rtengine/rtthumbnail.cc
index d2f17835c..2dd745f6c 100644
--- a/rtengine/rtthumbnail.cc
+++ b/rtengine/rtthumbnail.cc
@@ -1184,21 +1184,6 @@ IImage8* Thumbnail::processImage (const procparams::ProcParams& params, eSensorT
baseImg = trImg;
}
- // update blurmap
- SHMap* shmap = nullptr;
-
- if (params.sh.enabled) {
- shmap = new SHMap (fw, fh, false);
- double radius = sqrt (double (fw * fw + fh * fh)) / 2.0;
- double shradius = params.sh.radius;
-
- if (!params.sh.hq) {
- shradius *= radius / 1800.0;
- }
-
- shmap->update (baseImg, shradius, ipf.lumimul, params.sh.hq, 16);
- }
-
// RGB processing
double expcomp = params.toneCurve.expcomp;
int bright = params.toneCurve.brightness;
@@ -1308,7 +1293,7 @@ IImage8* Thumbnail::processImage (const procparams::ProcParams& params, eSensorT
}
LUTu histToneCurve;
- ipf.rgbProc (baseImg, labView, nullptr, curve1, curve2, curve, shmap, params.toneCurve.saturation, rCurve, gCurve, bCurve, satLimit, satLimitOpacity, ctColorCurve, ctOpacityCurve, opautili, clToningcurve, cl2Toningcurve, customToneCurve1, customToneCurve2, customToneCurvebw1, customToneCurvebw2, rrm, ggm, bbm, autor, autog, autob, expcomp, hlcompr, hlcomprthresh, dcpProf, as, histToneCurve);
+ ipf.rgbProc (baseImg, labView, nullptr, curve1, curve2, curve, params.toneCurve.saturation, rCurve, gCurve, bCurve, satLimit, satLimitOpacity, ctColorCurve, ctOpacityCurve, opautili, clToningcurve, cl2Toningcurve, customToneCurve1, customToneCurve2, customToneCurvebw1, customToneCurvebw2, rrm, ggm, bbm, autor, autog, autob, expcomp, hlcompr, hlcomprthresh, dcpProf, as, histToneCurve);
// freeing up some memory
customToneCurve1.Reset();
@@ -1318,10 +1303,6 @@ IImage8* Thumbnail::processImage (const procparams::ProcParams& params, eSensorT
customToneCurvebw1.Reset();
customToneCurvebw2.Reset();
- if (shmap) {
- delete shmap;
- }
-
// luminance histogram update
if (params.labCurve.contrast != 0) {
hist16.clear();
diff --git a/rtengine/simpleprocess.cc b/rtengine/simpleprocess.cc
index 1c81af783..68cd8637f 100644
--- a/rtengine/simpleprocess.cc
+++ b/rtengine/simpleprocess.cc
@@ -892,21 +892,6 @@ private:
ipf.lab2rgb(labcbdl, *baseImg, params.icm.working);
}
- // update blurmap
- SHMap* shmap = nullptr;
-
- if (params.sh.enabled) {
- shmap = new SHMap(fw, fh, true);
- double radius = sqrt(double (fw * fw + fh * fh)) / 2.0;
- double shradius = params.sh.radius;
-
- if (!params.sh.hq) {
- shradius *= radius / 1800.0;
- }
-
- shmap->update(baseImg, shradius, ipf.lumimul, params.sh.hq, 1);
- }
-
// RGB processing
curve1(65536);
@@ -981,7 +966,7 @@ private:
LUTu histToneCurve;
- ipf.rgbProc(baseImg, labView, nullptr, curve1, curve2, curve, shmap, params.toneCurve.saturation, rCurve, gCurve, bCurve, satLimit, satLimitOpacity, ctColorCurve, ctOpacityCurve, opautili, clToningcurve, cl2Toningcurve, customToneCurve1, customToneCurve2, customToneCurvebw1, customToneCurvebw2, rrm, ggm, bbm, autor, autog, autob, expcomp, hlcompr, hlcomprthresh, dcpProf, as, histToneCurve);
+ ipf.rgbProc (baseImg, labView, nullptr, curve1, curve2, curve, params.toneCurve.saturation, rCurve, gCurve, bCurve, satLimit, satLimitOpacity, ctColorCurve, ctOpacityCurve, opautili, clToningcurve, cl2Toningcurve, customToneCurve1, customToneCurve2, customToneCurvebw1, customToneCurvebw2, rrm, ggm, bbm, autor, autog, autob, expcomp, hlcompr, hlcomprthresh, dcpProf, as, histToneCurve);
if (settings->verbose) {
printf("Output image / Auto B&W coefs: R=%.2f G=%.2f B=%.2f\n", autor, autog, autob);
@@ -1006,12 +991,6 @@ private:
delete baseImg;
baseImg = nullptr;
- if (shmap) {
- delete shmap;
- }
-
- shmap = nullptr;
-
if (pl) {
pl->setProgress(0.55);
}
diff --git a/rtengine/xtrans_demosaic.cc b/rtengine/xtrans_demosaic.cc
new file mode 100644
index 000000000..a8e964ad0
--- /dev/null
+++ b/rtengine/xtrans_demosaic.cc
@@ -0,0 +1,1020 @@
+////////////////////////////////////////////////////////////////
+//
+// Xtrans demosaic algorithm
+//
+// code dated: April 18, 2018
+//
+// xtrans_demosaic.cc 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.
+//
+// This program 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 this program. If not, see .
+//
+////////////////////////////////////////////////////////////////
+
+#include "rtengine.h"
+#include "rawimagesource.h"
+#include "rt_math.h"
+#include "../rtgui/multilangmgr.h"
+#include "opthelper.h"
+#include "StopWatch.h"
+
+namespace rtengine
+{
+const double xyz_rgb[3][3] = { // XYZ from RGB
+ { 0.412453, 0.357580, 0.180423 },
+ { 0.212671, 0.715160, 0.072169 },
+ { 0.019334, 0.119193, 0.950227 }
+};
+const float d65_white[3] = { 0.950456, 1, 1.088754 };
+
+void RawImageSource::cielab (const float (*rgb)[3], float* l, float* a, float *b, const int width, const int height, const int labWidth, const float xyz_cam[3][3])
+{
+ static LUTf cbrt(0x14000);
+ static bool cbrtinit = false;
+
+ if (!rgb) {
+ if(!cbrtinit) {
+ for (int i = 0; i < 0x14000; i++) {
+ double r = i / 65535.0;
+ cbrt[i] = r > Color::eps ? std::cbrt(r) : (Color::kappa * r + 16.0) / 116.0;
+ }
+
+ cbrtinit = true;
+ }
+
+ return;
+ }
+
+#ifdef __SSE2__
+ vfloat c116v = F2V(116.f);
+ vfloat c16v = F2V(16.f);
+ vfloat c500v = F2V(500.f);
+ vfloat c200v = F2V(200.f);
+ vfloat xyz_camv[3][3];
+
+ for(int i = 0; i < 3; i++)
+ for(int j = 0; j < 3; j++) {
+ xyz_camv[i][j] = F2V(xyz_cam[i][j]);
+ }
+
+#endif // __SSE2__
+
+ for(int i = 0; i < height; i++) {
+ int j = 0;
+#ifdef __SSE2__
+
+ for(; j < labWidth - 3; j += 4) {
+ vfloat redv, greenv, bluev;
+ vconvertrgbrgbrgbrgb2rrrrggggbbbb(rgb[i * width + j], redv, greenv, bluev);
+ vfloat xyz0v = redv * xyz_camv[0][0] + greenv * xyz_camv[0][1] + bluev * xyz_camv[0][2];
+ vfloat xyz1v = redv * xyz_camv[1][0] + greenv * xyz_camv[1][1] + bluev * xyz_camv[1][2];
+ vfloat xyz2v = redv * xyz_camv[2][0] + greenv * xyz_camv[2][1] + bluev * xyz_camv[2][2];
+ xyz0v = cbrt[_mm_cvtps_epi32(xyz0v)];
+ xyz1v = cbrt[_mm_cvtps_epi32(xyz1v)];
+ xyz2v = cbrt[_mm_cvtps_epi32(xyz2v)];
+
+ STVFU(l[i * labWidth + j], c116v * xyz1v - c16v);
+ STVFU(a[i * labWidth + j], c500v * (xyz0v - xyz1v));
+ STVFU(b[i * labWidth + j], c200v * (xyz1v - xyz2v));
+ }
+
+#endif
+
+ for(; j < labWidth; j++) {
+ float xyz[3] = {0.5f, 0.5f, 0.5f};
+
+ for(int c = 0; c < 3; c++) {
+ float val = rgb[i * width + j][c];
+ xyz[0] += xyz_cam[0][c] * val;
+ xyz[1] += xyz_cam[1][c] * val;
+ xyz[2] += xyz_cam[2][c] * val;
+ }
+
+ xyz[0] = cbrt[(int) xyz[0]];
+ xyz[1] = cbrt[(int) xyz[1]];
+ xyz[2] = cbrt[(int) xyz[2]];
+
+ l[i * labWidth + j] = 116 * xyz[1] - 16;
+ a[i * labWidth + j] = 500 * (xyz[0] - xyz[1]);
+ b[i * labWidth + j] = 200 * (xyz[1] - xyz[2]);
+ }
+ }
+}
+
+
+#define fcol(row,col) xtrans[(row)%6][(col)%6]
+#define isgreen(row,col) (xtrans[(row)%3][(col)%3]&1)
+
+void RawImageSource::xtransborder_interpolate (int border)
+{
+ const int height = H, width = W;
+
+ int xtrans[6][6];
+ ri->getXtransMatrix(xtrans);
+
+ for (int row = 0; row < height; row++)
+ for (int col = 0; col < width; col++) {
+ if (col == border && row >= border && row < height - border) {
+ col = width - border;
+ }
+
+ float sum[6] = {0.f};
+
+ for (int y = MAX(0, row - 1); y <= MIN(row + 1, height - 1); y++)
+ for (int x = MAX(0, col - 1); x <= MIN(col + 1, width - 1); x++) {
+ int f = fcol(y, x);
+ sum[f] += rawData[y][x];
+ sum[f + 3]++;
+ }
+
+ switch(fcol(row, col)) {
+ case 0:
+ red[row][col] = rawData[row][col];
+ green[row][col] = (sum[1] / sum[4]);
+ blue[row][col] = (sum[2] / sum[5]);
+ break;
+
+ case 1:
+ if(sum[3] == 0.f) { // at the 4 corner pixels it can happen, that we have only green pixels in 2x2 area
+ red[row][col] = green[row][col] = blue[row][col] = rawData[row][col];
+ } else {
+ red[row][col] = (sum[0] / sum[3]);
+ green[row][col] = rawData[row][col];
+ blue[row][col] = (sum[2] / sum[5]);
+ }
+
+ break;
+
+ case 2:
+ red[row][col] = (sum[0] / sum[3]);
+ green[row][col] = (sum[1] / sum[4]);
+ blue[row][col] = rawData[row][col];
+ }
+ }
+}
+
+/*
+ Frank Markesteijn's algorithm for Fuji X-Trans sensors
+ adapted to RT by Ingo Weyrich 2014
+*/
+// override CLIP function to test unclipped output
+#define CLIP(x) (x)
+void RawImageSource::xtrans_interpolate (const int passes, const bool useCieLab)
+{
+ BENCHFUN
+ constexpr int ts = 114; /* Tile Size */
+ constexpr int tsh = ts / 2; /* half of Tile Size */
+
+ double progress = 0.0;
+ const bool plistenerActive = plistener;
+
+ if (plistenerActive) {
+ plistener->setProgressStr (Glib::ustring::compose(M("TP_RAW_DMETHOD_PROGRESSBAR"), "Xtrans"));
+ plistener->setProgress (progress);
+ }
+
+ int xtrans[6][6];
+ ri->getXtransMatrix(xtrans);
+
+ constexpr short orth[12] = { 1, 0, 0, 1, -1, 0, 0, -1, 1, 0, 0, 1 },
+ patt[2][16] = { { 0, 1, 0, -1, 2, 0, -1, 0, 1, 1, 1, -1, 0, 0, 0, 0 },
+ { 0, 1, 0, -2, 1, 0, -2, 0, 1, 1, -2, -2, 1, -1, -1, 1 }
+ },
+ dir[4] = { 1, ts, ts + 1, ts - 1 };
+
+ // sgrow/sgcol is the offset in the sensor matrix of the solitary
+ // green pixels
+ ushort sgrow = 0, sgcol = 0;
+
+ const int height = H, width = W;
+
+// if (settings->verbose) {
+// printf("%d-pass X-Trans interpolation using %s conversion...\n", passes, useCieLab ? "lab" : "yuv");
+// }
+
+ xtransborder_interpolate(6);
+
+ float xyz_cam[3][3];
+ {
+ float rgb_cam[3][4];
+ ri->getRgbCam(rgb_cam);
+ int k;
+
+ for (int i = 0; i < 3; i++)
+ for (int j = 0; j < 3; j++)
+ for (xyz_cam[i][j] = k = 0; k < 3; k++) {
+ xyz_cam[i][j] += xyz_rgb[i][k] * rgb_cam[k][j] / d65_white[i];
+ }
+ }
+
+ /* Map a green hexagon around each non-green pixel and vice versa: */
+ short allhex[2][3][3][8];
+ {
+ int gint, d, h, v, ng, row, col;
+
+ for (row = 0; row < 3; row++)
+ for (col = 0; col < 3; col++) {
+ gint = isgreen(row, col);
+
+ for (ng = d = 0; d < 10; d += 2) {
+ if (isgreen(row + orth[d] + 6, col + orth[d + 2] + 6)) {
+ ng = 0;
+ } else {
+ ng++;
+ }
+
+ if (ng == 4) {
+ // if there are four non-green pixels adjacent in cardinal
+ // directions, this is the solitary green pixel
+ sgrow = row;
+ sgcol = col;
+ }
+
+ if (ng == gint + 1) {
+ for (int c = 0; c < 8; c++) {
+ v = orth[d] * patt[gint][c * 2] + orth[d + 1] * patt[gint][c * 2 + 1];
+ h = orth[d + 2] * patt[gint][c * 2] + orth[d + 3] * patt[gint][c * 2 + 1];
+ allhex[0][row][col][c ^ (gint * 2 & d)] = h + v * width;
+ allhex[1][row][col][c ^ (gint * 2 & d)] = h + v * ts;
+ }
+ }
+ }
+ }
+
+ }
+
+ if(plistenerActive) {
+ progress += 0.05;
+ plistener->setProgress(progress);
+ }
+
+
+ double progressInc = 36.0 * (1.0 - progress) / ((H * W) / ((ts - 16) * (ts - 16)));
+ const int ndir = 4 << (passes > 1);
+ cielab (nullptr, nullptr, nullptr, nullptr, 0, 0, 0, nullptr);
+ struct s_minmaxgreen {
+ float min;
+ float max;
+ };
+
+ int RightShift[3];
+
+ for(int row = 0; row < 3; row++) {
+ // count number of green pixels in three cols
+ int greencount = 0;
+
+ for(int col = 0; col < 3; col++) {
+ greencount += isgreen(row, col);
+ }
+
+ RightShift[row] = (greencount == 2);
+ }
+
+#ifdef _OPENMP
+ #pragma omp parallel
+#endif
+ {
+ int progressCounter = 0;
+ int c;
+ float color[3][6];
+
+ float *buffer = (float *) malloc ((ts * ts * (ndir * 4 + 3) + 128) * sizeof(float));
+ float (*rgb)[ts][ts][3] = (float(*)[ts][ts][3]) buffer;
+ float (*lab)[ts - 8][ts - 8] = (float (*)[ts - 8][ts - 8])(buffer + ts * ts * (ndir * 3));
+ float (*drv)[ts - 10][ts - 10] = (float (*)[ts - 10][ts - 10]) (buffer + ts * ts * (ndir * 3 + 3));
+ uint8_t (*homo)[ts][ts] = (uint8_t (*)[ts][ts]) (lab); // we can reuse the lab-buffer because they are not used together
+ s_minmaxgreen (*greenminmaxtile)[tsh] = (s_minmaxgreen(*)[tsh]) (lab); // we can reuse the lab-buffer because they are not used together
+ uint8_t (*homosum)[ts][ts] = (uint8_t (*)[ts][ts]) (drv); // we can reuse the drv-buffer because they are not used together
+ uint8_t (*homosummax)[ts] = (uint8_t (*)[ts]) homo[ndir - 1]; // we can reuse the homo-buffer because they are not used together
+
+#ifdef _OPENMP
+ #pragma omp for collapse(2) schedule(dynamic) nowait
+#endif
+
+ for (int top = 3; top < height - 19; top += ts - 16)
+ for (int left = 3; left < width - 19; left += ts - 16) {
+ int mrow = MIN (top + ts, height - 3);
+ int mcol = MIN (left + ts, width - 3);
+
+ /* Set greenmin and greenmax to the minimum and maximum allowed values: */
+ for (int row = top; row < mrow; row++) {
+ // find first non-green pixel
+ int leftstart = left;
+
+ for(; leftstart < mcol; leftstart++)
+ if(!isgreen(row, leftstart)) {
+ break;
+ }
+
+ int coloffset = (RightShift[row % 3] == 1 ? 3 : 1 + (fcol(row, leftstart + 1) & 1));
+
+ if(coloffset == 3) {
+ short *hex = allhex[0][row % 3][leftstart % 3];
+
+ for (int col = leftstart; col < mcol; col += coloffset) {
+ float minval = FLT_MAX;
+ float maxval = 0.f;
+ float *pix = &rawData[row][col];
+
+ for(int c = 0; c < 6; c++) {
+ float val = pix[hex[c]];
+
+ minval = minval < val ? minval : val;
+ maxval = maxval > val ? maxval : val;
+ }
+
+ greenminmaxtile[row - top][(col - left) >> 1].min = minval;
+ greenminmaxtile[row - top][(col - left) >> 1].max = maxval;
+ }
+ } else {
+ float minval = FLT_MAX;
+ float maxval = 0.f;
+ int col = leftstart;
+
+ if(coloffset == 2) {
+ minval = FLT_MAX;
+ maxval = 0.f;
+ float *pix = &rawData[row][col];
+ short *hex = allhex[0][row % 3][col % 3];
+
+ for(int c = 0; c < 6; c++) {
+ float val = pix[hex[c]];
+
+ minval = minval < val ? minval : val;
+ maxval = maxval > val ? maxval : val;
+ }
+
+ greenminmaxtile[row - top][(col - left) >> 1].min = minval;
+ greenminmaxtile[row - top][(col - left) >> 1].max = maxval;
+ col += 2;
+ }
+
+ short *hex = allhex[0][row % 3][col % 3];
+
+ for (; col < mcol - 1; col += 3) {
+ minval = FLT_MAX;
+ maxval = 0.f;
+ float *pix = &rawData[row][col];
+
+ for(int c = 0; c < 6; c++) {
+ float val = pix[hex[c]];
+
+ minval = minval < val ? minval : val;
+ maxval = maxval > val ? maxval : val;
+ }
+
+ greenminmaxtile[row - top][(col - left) >> 1].min = minval;
+ greenminmaxtile[row - top][(col - left) >> 1].max = maxval;
+ greenminmaxtile[row - top][(col + 1 - left) >> 1].min = minval;
+ greenminmaxtile[row - top][(col + 1 - left) >> 1].max = maxval;
+ }
+
+ if(col < mcol) {
+ minval = FLT_MAX;
+ maxval = 0.f;
+ float *pix = &rawData[row][col];
+
+ for(int c = 0; c < 6; c++) {
+ float val = pix[hex[c]];
+
+ minval = minval < val ? minval : val;
+ maxval = maxval > val ? maxval : val;
+ }
+
+ greenminmaxtile[row - top][(col - left) >> 1].min = minval;
+ greenminmaxtile[row - top][(col - left) >> 1].max = maxval;
+ }
+ }
+ }
+
+ memset(rgb, 0, ts * ts * 3 * sizeof(float));
+
+ for (int row = top; row < mrow; row++)
+ for (int col = left; col < mcol; col++) {
+ rgb[0][row - top][col - left][fcol(row, col)] = rawData[row][col];
+ }
+
+ for(int c = 0; c < 3; c++) {
+ memcpy (rgb[c + 1], rgb[0], sizeof * rgb);
+ }
+
+ /* Interpolate green horizontally, vertically, and along both diagonals: */
+ for (int row = top; row < mrow; row++) {
+ // find first non-green pixel
+ int leftstart = left;
+
+ for(; leftstart < mcol; leftstart++)
+ if(!isgreen(row, leftstart)) {
+ break;
+ }
+
+ int coloffset = (RightShift[row % 3] == 1 ? 3 : 1 + (fcol(row, leftstart + 1) & 1));
+
+ if(coloffset == 3) {
+ short *hex = allhex[0][row % 3][leftstart % 3];
+
+ for (int col = leftstart; col < mcol; col += coloffset) {
+ float *pix = &rawData[row][col];
+ float color[4];
+ color[0] = 0.6796875f * (pix[hex[1]] + pix[hex[0]]) -
+ 0.1796875f * (pix[2 * hex[1]] + pix[2 * hex[0]]);
+ color[1] = 0.87109375f * pix[hex[3]] + pix[hex[2]] * 0.12890625f +
+ 0.359375f * (pix[0] - pix[-hex[2]]);
+
+ for(int c = 0; c < 2; c++)
+ color[2 + c] = 0.640625f * pix[hex[4 + c]] + 0.359375f * pix[-2 * hex[4 + c]] + 0.12890625f *
+ (2.f * pix[0] - pix[3 * hex[4 + c]] - pix[-3 * hex[4 + c]]);
+
+ for(int c = 0; c < 4; c++) {
+ rgb[c][row - top][col - left][1] = LIM(color[c], greenminmaxtile[row - top][(col - left) >> 1].min, greenminmaxtile[row - top][(col - left) >> 1].max);
+ }
+ }
+ } else {
+ short *hexmod[2];
+ hexmod[0] = allhex[0][row % 3][leftstart % 3];
+ hexmod[1] = allhex[0][row % 3][(leftstart + coloffset) % 3];
+
+ for (int col = leftstart, hexindex = 0; col < mcol; col += coloffset, coloffset ^= 3, hexindex ^= 1) {
+ float *pix = &rawData[row][col];
+ short *hex = hexmod[hexindex];
+ float color[4];
+ color[0] = 0.6796875f * (pix[hex[1]] + pix[hex[0]]) -
+ 0.1796875f * (pix[2 * hex[1]] + pix[2 * hex[0]]);
+ color[1] = 0.87109375f * pix[hex[3]] + pix[hex[2]] * 0.12890625f +
+ 0.359375f * (pix[0] - pix[-hex[2]]);
+
+ for(int c = 0; c < 2; c++)
+ color[2 + c] = 0.640625f * pix[hex[4 + c]] + 0.359375f * pix[-2 * hex[4 + c]] + 0.12890625f *
+ (2.f * pix[0] - pix[3 * hex[4 + c]] - pix[-3 * hex[4 + c]]);
+
+ for(int c = 0; c < 4; c++) {
+ rgb[c ^ 1][row - top][col - left][1] = LIM(color[c], greenminmaxtile[row - top][(col - left) >> 1].min, greenminmaxtile[row - top][(col - left) >> 1].max);
+ }
+ }
+ }
+ }
+
+ for (int pass = 0; pass < passes; pass++) {
+ if (pass == 1) {
+ memcpy (rgb += 4, buffer, 4 * sizeof * rgb);
+ }
+
+ /* Recalculate green from interpolated values of closer pixels: */
+ if (pass) {
+ for (int row = top + 2; row < mrow - 2; row++) {
+ int leftstart = left + 2;
+
+ for(; leftstart < mcol - 2; leftstart++)
+ if(!isgreen(row, leftstart)) {
+ break;
+ }
+
+ int coloffset = (RightShift[row % 3] == 1 ? 3 : 1 + (fcol(row, leftstart + 1) & 1));
+
+ if(coloffset == 3) {
+ int f = fcol(row, leftstart);
+ short *hex = allhex[1][row % 3][leftstart % 3];
+
+ for (int col = leftstart; col < mcol - 2; col += coloffset, f ^= 2) {
+ for (int d = 3; d < 6; d++) {
+ float (*rix)[3] = &rgb[(d - 2)][row - top][col - left];
+ float val = 0.33333333f * (rix[-2 * hex[d]][1] + 2 * (rix[hex[d]][1] - rix[hex[d]][f])
+ - rix[-2 * hex[d]][f]) + rix[0][f];
+ rix[0][1] = LIM(val, greenminmaxtile[row - top][(col - left) >> 1].min, greenminmaxtile[row - top][(col - left) >> 1].max);
+ }
+ }
+ } else {
+ int f = fcol(row, leftstart);
+ short *hexmod[2];
+ hexmod[0] = allhex[1][row % 3][leftstart % 3];
+ hexmod[1] = allhex[1][row % 3][(leftstart + coloffset) % 3];
+
+ for (int col = leftstart, hexindex = 0; col < mcol - 2; col += coloffset, coloffset ^= 3, f = f ^ (coloffset & 2), hexindex ^= 1 ) {
+ short *hex = hexmod[hexindex];
+
+ for (int d = 3; d < 6; d++) {
+ float (*rix)[3] = &rgb[(d - 2) ^ 1][row - top][col - left];
+ float val = 0.33333333f * (rix[-2 * hex[d]][1] + 2 * (rix[hex[d]][1] - rix[hex[d]][f])
+ - rix[-2 * hex[d]][f]) + rix[0][f];
+ rix[0][1] = LIM(val, greenminmaxtile[row - top][(col - left) >> 1].min, greenminmaxtile[row - top][(col - left) >> 1].max);
+ }
+ }
+ }
+ }
+ }
+
+ /* Interpolate red and blue values for solitary green pixels: */
+ int sgstartcol = (left - sgcol + 4) / 3 * 3 + sgcol;
+
+ for (int row = (top - sgrow + 4) / 3 * 3 + sgrow; row < mrow - 2; row += 3) {
+ for (int col = sgstartcol, h = fcol(row, col + 1); col < mcol - 2; col += 3, h ^= 2) {
+ float (*rix)[3] = &rgb[0][row - top][col - left];
+ float diff[6] = {0.f};
+
+ for (int i = 1, d = 0; d < 6; d++, i ^= ts ^ 1, h ^= 2) {
+ for (int c = 0; c < 2; c++, h ^= 2) {
+ float g = rix[0][1] + rix[0][1] - rix[i << c][1] - rix[-i << c][1];
+ color[h][d] = g + rix[i << c][h] + rix[-i << c][h];
+
+ if (d > 1)
+ diff[d] += SQR (rix[i << c][1] - rix[-i << c][1]
+ - rix[i << c][h] + rix[-i << c][h]) + SQR(g);
+ }
+
+ if (d > 2 && (d & 1)) // 3, 5
+ if (diff[d - 1] < diff[d])
+ for(int c = 0; c < 2; c++) {
+ color[c * 2][d] = color[c * 2][d - 1];
+ }
+
+ if ((d & 1) || d < 2) { // d: 0, 1, 3, 5
+ for(int c = 0; c < 2; c++) {
+ rix[0][c * 2] = CLIP(0.5f * color[c * 2][d]);
+ }
+
+ rix += ts * ts;
+ }
+ }
+ }
+ }
+
+ /* Interpolate red for blue pixels and vice versa: */
+ for (int row = top + 3; row < mrow - 3; row++) {
+ int leftstart = left + 3;
+
+ for(; leftstart < mcol - 1; leftstart++)
+ if(!isgreen(row, leftstart)) {
+ break;
+ }
+
+ int coloffset = (RightShift[row % 3] == 1 ? 3 : 1);
+ c = (row - sgrow) % 3 ? ts : 1;
+ int h = 3 * (c ^ ts ^ 1);
+
+ if(coloffset == 3) {
+ int f = 2 - fcol(row, leftstart);
+
+ for (int col = leftstart; col < mcol - 3; col += coloffset, f ^= 2) {
+ float (*rix)[3] = &rgb[0][row - top][col - left];
+
+ for (int d = 0; d < 4; d++, rix += ts * ts) {
+ int i = d > 1 || ((d ^ c) & 1) ||
+ ((fabsf(rix[0][1] - rix[c][1]) + fabsf(rix[0][1] - rix[-c][1])) < 2.f * (fabsf(rix[0][1] - rix[h][1]) + fabsf(rix[0][1] - rix[-h][1]))) ? c : h;
+
+ rix[0][f] = CLIP(rix[0][1] + 0.5f * (rix[i][f] + rix[-i][f] - rix[i][1] - rix[-i][1]));
+ }
+ }
+ } else {
+ coloffset = fcol(row, leftstart + 1) == 1 ? 2 : 1;
+ int f = 2 - fcol(row, leftstart);
+
+ for (int col = leftstart; col < mcol - 3; col += coloffset, coloffset ^= 3, f = f ^ (coloffset & 2) ) {
+ float (*rix)[3] = &rgb[0][row - top][col - left];
+
+ for (int d = 0; d < 4; d++, rix += ts * ts) {
+ int i = d > 1 || ((d ^ c) & 1) ||
+ ((fabsf(rix[0][1] - rix[c][1]) + fabsf(rix[0][1] - rix[-c][1])) < 2.f * (fabsf(rix[0][1] - rix[h][1]) + fabsf(rix[0][1] - rix[-h][1]))) ? c : h;
+
+ rix[0][f] = CLIP(rix[0][1] + 0.5f * (rix[i][f] + rix[-i][f] - rix[i][1] - rix[-i][1]));
+ }
+ }
+ }
+ }
+
+ /* Fill in red and blue for 2x2 blocks of green: */
+ // Find first row of 2x2 green
+ int topstart = top + 2;
+
+ for(; topstart < mrow - 2; topstart++)
+ if((topstart - sgrow) % 3) {
+ break;
+ }
+
+ int leftstart = left + 2;
+
+ for(; leftstart < mcol - 2; leftstart++)
+ if((leftstart - sgcol) % 3) {
+ break;
+ }
+
+ int coloffsetstart = 2 - (fcol(topstart, leftstart + 1) & 1);
+
+ for (int row = topstart; row < mrow - 2; row++) {
+ if ((row - sgrow) % 3) {
+ short *hexmod[2];
+ hexmod[0] = allhex[1][row % 3][leftstart % 3];
+ hexmod[1] = allhex[1][row % 3][(leftstart + coloffsetstart) % 3];
+
+ for (int col = leftstart, coloffset = coloffsetstart, hexindex = 0; col < mcol - 2; col += coloffset, coloffset ^= 3, hexindex ^= 1) {
+ float (*rix)[3] = &rgb[0][row - top][col - left];
+ short *hex = hexmod[hexindex];
+
+ for (int d = 0; d < ndir; d += 2, rix += ts * ts) {
+ if (hex[d] + hex[d + 1]) {
+ float g = 3 * rix[0][1] - 2 * rix[hex[d]][1] - rix[hex[d + 1]][1];
+
+ for (c = 0; c < 4; c += 2) {
+ rix[0][c] = CLIP((g + 2 * rix[hex[d]][c] + rix[hex[d + 1]][c]) * 0.33333333f);
+ }
+ } else {
+ float g = 2 * rix[0][1] - rix[hex[d]][1] - rix[hex[d + 1]][1];
+
+ for (c = 0; c < 4; c += 2) {
+ rix[0][c] = CLIP((g + rix[hex[d]][c] + rix[hex[d + 1]][c]) * 0.5f);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+// end of multipass part
+ rgb = (float(*)[ts][ts][3]) buffer;
+ mrow -= top;
+ mcol -= left;
+
+ if(useCieLab) {
+ /* Convert to CIELab and differentiate in all directions: */
+ // Original dcraw algorithm uses CIELab as perceptual space
+ // (presumably coming from original AHD) and converts taking
+ // camera matrix into account. We use this in RT.
+ for (int d = 0; d < ndir; d++) {
+ float *l = &lab[0][0][0];
+ float *a = &lab[1][0][0];
+ float *b = &lab[2][0][0];
+ cielab(&rgb[d][4][4], l, a, b, ts, mrow - 8, ts - 8, xyz_cam);
+ int f = dir[d & 3];
+ f = f == 1 ? 1 : f - 8;
+
+ for (int row = 5; row < mrow - 5; row++)
+#ifdef _OPENMP
+ #pragma omp simd
+#endif
+ for (int col = 5; col < mcol - 5; col++) {
+ float *l = &lab[0][row - 4][col - 4];
+ float *a = &lab[1][row - 4][col - 4];
+ float *b = &lab[2][row - 4][col - 4];
+
+ float g = 2 * l[0] - l[f] - l[-f];
+ drv[d][row - 5][col - 5] = SQR(g)
+ + SQR((2 * a[0] - a[f] - a[-f] + g * 2.1551724f))
+ + SQR((2 * b[0] - b[f] - b[-f] - g * 0.86206896f));
+ }
+
+ }
+ } else {
+ // For 1-pass demosaic we use YPbPr which requires much
+ // less code and is nearly indistinguishable. It assumes the
+ // camera RGB is roughly linear.
+ for (int d = 0; d < ndir; d++) {
+ float (*yuv)[ts - 8][ts - 8] = lab; // we use the lab buffer, which has the same dimensions
+#ifdef __SSE2__
+ vfloat zd2627v = F2V(0.2627f);
+ vfloat zd6780v = F2V(0.6780f);
+ vfloat zd0593v = F2V(0.0593f);
+ vfloat zd56433v = F2V(0.56433f);
+ vfloat zd67815v = F2V(0.67815f);
+#endif
+
+ for (int row = 4; row < mrow - 4; row++) {
+ int col = 4;
+#ifdef __SSE2__
+
+ for (; col < mcol - 7; col += 4) {
+ // use ITU-R BT.2020 YPbPr, which is great, but could use
+ // a better/simpler choice? note that imageop.h provides
+ // dt_iop_RGB_to_YCbCr which uses Rec. 601 conversion,
+ // which appears less good with specular highlights
+ vfloat redv, greenv, bluev;
+ vconvertrgbrgbrgbrgb2rrrrggggbbbb(rgb[d][row][col], redv, greenv, bluev);
+ vfloat yv = zd2627v * redv + zd6780v * bluev + zd0593v * greenv;
+ STVFU(yuv[0][row - 4][col - 4], yv);
+ STVFU(yuv[1][row - 4][col - 4], (bluev - yv) * zd56433v);
+ STVFU(yuv[2][row - 4][col - 4], (redv - yv) * zd67815v);
+ }
+
+#endif
+
+ for (; col < mcol - 4; col++) {
+ // use ITU-R BT.2020 YPbPr, which is great, but could use
+ // a better/simpler choice? note that imageop.h provides
+ // dt_iop_RGB_to_YCbCr which uses Rec. 601 conversion,
+ // which appears less good with specular highlights
+ float y = 0.2627f * rgb[d][row][col][0] + 0.6780f * rgb[d][row][col][1] + 0.0593f * rgb[d][row][col][2];
+ yuv[0][row - 4][col - 4] = y;
+ yuv[1][row - 4][col - 4] = (rgb[d][row][col][2] - y) * 0.56433f;
+ yuv[2][row - 4][col - 4] = (rgb[d][row][col][0] - y) * 0.67815f;
+ }
+ }
+
+ int f = dir[d & 3];
+ f = f == 1 ? 1 : f - 8;
+
+ for (int row = 5; row < mrow - 5; row++)
+ for (int col = 5; col < mcol - 5; col++) {
+ float *y = &yuv[0][row - 4][col - 4];
+ float *u = &yuv[1][row - 4][col - 4];
+ float *v = &yuv[2][row - 4][col - 4];
+ drv[d][row - 5][col - 5] = SQR(2 * y[0] - y[f] - y[-f])
+ + SQR(2 * u[0] - u[f] - u[-f])
+ + SQR(2 * v[0] - v[f] - v[-f]);
+ }
+ }
+ }
+
+ /* Build homogeneity maps from the derivatives: */
+#ifdef __SSE2__
+ vfloat eightv = F2V(8.f);
+ vfloat zerov = F2V(0.f);
+ vfloat onev = F2V(1.f);
+#endif
+
+ for (int row = 6; row < mrow - 6; row++) {
+ int col = 6;
+#ifdef __SSE2__
+
+ for (; col < mcol - 9; col += 4) {
+ vfloat tr1v = vminf(LVFU(drv[0][row - 5][col - 5]), LVFU(drv[1][row - 5][col - 5]));
+ vfloat tr2v = vminf(LVFU(drv[2][row - 5][col - 5]), LVFU(drv[3][row - 5][col - 5]));
+
+ if(ndir > 4) {
+ vfloat tr3v = vminf(LVFU(drv[4][row - 5][col - 5]), LVFU(drv[5][row - 5][col - 5]));
+ vfloat tr4v = vminf(LVFU(drv[6][row - 5][col - 5]), LVFU(drv[7][row - 5][col - 5]));
+ tr1v = vminf(tr1v, tr3v);
+ tr1v = vminf(tr1v, tr4v);
+ }
+
+ tr1v = vminf(tr1v, tr2v);
+ tr1v = tr1v * eightv;
+
+ for (int d = 0; d < ndir; d++) {
+ uint8_t tempstore[16];
+ vfloat tempv = zerov;
+
+ for (int v = -1; v <= 1; v++) {
+ for (int h = -1; h <= 1; h++) {
+ tempv += vselfzero(vmaskf_le(LVFU(drv[d][row + v - 5][col + h - 5]), tr1v), onev);
+ }
+ }
+
+ _mm_storeu_si128((__m128i*)&tempstore, _mm_cvtps_epi32(tempv));
+ homo[d][row][col] = tempstore[0];
+ homo[d][row][col + 1] = tempstore[4];
+ homo[d][row][col + 2] = tempstore[8];
+ homo[d][row][col + 3] = tempstore[12];
+
+ }
+ }
+
+#endif
+
+ for (; col < mcol - 6; col++) {
+ float tr = drv[0][row - 5][col - 5] < drv[1][row - 5][col - 5] ? drv[0][row - 5][col - 5] : drv[1][row - 5][col - 5];
+
+ for (int d = 2; d < ndir; d++) {
+ tr = (drv[d][row - 5][col - 5] < tr ? drv[d][row - 5][col - 5] : tr);
+ }
+
+ tr *= 8;
+
+ for (int d = 0; d < ndir; d++) {
+ uint8_t temp = 0;
+
+ for (int v = -1; v <= 1; v++) {
+ for (int h = -1; h <= 1; h++) {
+ temp += (drv[d][row + v - 5][col + h - 5] <= tr ? 1 : 0);
+ }
+ }
+
+ homo[d][row][col] = temp;
+ }
+ }
+ }
+
+ if (height - top < ts + 4) {
+ mrow = height - top + 2;
+ }
+
+ if (width - left < ts + 4) {
+ mcol = width - left + 2;
+ }
+
+
+ /* Build 5x5 sum of homogeneity maps */
+ const int startcol = MIN(left, 8);
+
+ for(int d = 0; d < ndir; d++) {
+ for (int row = MIN(top, 8); row < mrow - 8; row++) {
+ int col = startcol;
+#ifdef __SSE2__
+ int endcol = row < mrow - 9 ? mcol - 8 : mcol - 23;
+
+ // crunching 16 values at once is faster than summing up column sums
+ for (; col < endcol; col += 16) {
+ vint v5sumv = (vint)ZEROV;
+
+ for(int v = -2; v <= 2; v++)
+ for(int h = -2; h <= 2; h++) {
+ v5sumv = _mm_adds_epu8( _mm_loadu_si128((vint*)&homo[d][row + v][col + h]), v5sumv);
+ }
+
+ _mm_storeu_si128((vint*)&homosum[d][row][col], v5sumv);
+ }
+
+#endif
+
+ if(col < mcol - 8) {
+ int v5sum[5] = {0};
+
+ for(int v = -2; v <= 2; v++)
+ for(int h = -2; h <= 2; h++) {
+ v5sum[2 + h] += homo[d][row + v][col + h];
+ }
+
+ int blocksum = v5sum[0] + v5sum[1] + v5sum[2] + v5sum[3] + v5sum[4];
+ homosum[d][row][col] = blocksum;
+ col++;
+
+ // now we can subtract a column of five from blocksum and get new colsum of 5
+ for (int voffset = 0; col < mcol - 8; col++, voffset++) {
+ int colsum = homo[d][row - 2][col + 2] + homo[d][row - 1][col + 2] + homo[d][row][col + 2] + homo[d][row + 1][col + 2] + homo[d][row + 2][col + 2];
+ voffset = voffset == 5 ? 0 : voffset; // faster than voffset %= 5;
+ blocksum -= v5sum[voffset];
+ blocksum += colsum;
+ v5sum[voffset] = colsum;
+ homosum[d][row][col] = blocksum;
+ }
+ }
+ }
+ }
+
+ // calculate maximum of homogeneity maps per pixel. Vectorized calculation is a tiny bit faster than on the fly calculation in next step
+#ifdef __SSE2__
+ vint maskv = _mm_set1_epi8(31);
+#endif
+
+ for (int row = MIN(top, 8); row < mrow - 8; row++) {
+ int col = startcol;
+#ifdef __SSE2__
+ int endcol = row < mrow - 9 ? mcol - 8 : mcol - 23;
+
+ for (; col < endcol; col += 16) {
+ vint maxval1 = _mm_max_epu8(_mm_loadu_si128((vint*)&homosum[0][row][col]), _mm_loadu_si128((vint*)&homosum[1][row][col]));
+ vint maxval2 = _mm_max_epu8(_mm_loadu_si128((vint*)&homosum[2][row][col]), _mm_loadu_si128((vint*)&homosum[3][row][col]));
+
+ if(ndir > 4) {
+ vint maxval3 = _mm_max_epu8(_mm_loadu_si128((vint*)&homosum[4][row][col]), _mm_loadu_si128((vint*)&homosum[5][row][col]));
+ vint maxval4 = _mm_max_epu8(_mm_loadu_si128((vint*)&homosum[6][row][col]), _mm_loadu_si128((vint*)&homosum[7][row][col]));
+ maxval1 = _mm_max_epu8(maxval1, maxval3);
+ maxval1 = _mm_max_epu8(maxval1, maxval4);
+ }
+
+ maxval1 = _mm_max_epu8(maxval1, maxval2);
+ // there is no shift intrinsic for epu8. Shift using epi32 and mask the wrong bits out
+ vint subv = _mm_srli_epi32( maxval1, 3 );
+ subv = _mm_and_si128(subv, maskv);
+ maxval1 = _mm_subs_epu8(maxval1, subv);
+ _mm_storeu_si128((vint*)&homosummax[row][col], maxval1);
+ }
+
+#endif
+
+ for (; col < mcol - 8; col ++) {
+ uint8_t maxval = homosum[0][row][col];
+
+ for(int d = 1; d < ndir; d++) {
+ maxval = maxval < homosum[d][row][col] ? homosum[d][row][col] : maxval;
+ }
+
+ maxval -= maxval >> 3;
+ homosummax[row][col] = maxval;
+ }
+ }
+
+
+ /* Average the most homogeneous pixels for the final result: */
+ uint8_t hm[8] = {};
+
+ for (int row = MIN(top, 8); row < mrow - 8; row++)
+ for (int col = MIN(left, 8); col < mcol - 8; col++) {
+
+ for (int d = 0; d < 4; d++) {
+ hm[d] = homosum[d][row][col];
+ }
+
+ for (int d = 4; d < ndir; d++) {
+ hm[d] = homosum[d][row][col];
+
+ if (hm[d - 4] < hm[d]) {
+ hm[d - 4] = 0;
+ } else if (hm[d - 4] > hm[d]) {
+ hm[d] = 0;
+ }
+ }
+
+ float avg[4] = {0.f};
+
+ uint8_t maxval = homosummax[row][col];
+
+ for (int d = 0; d < ndir; d++)
+ if (hm[d] >= maxval) {
+ for (int c = 0; c < 3; c++) {
+ avg[c] += rgb[d][row][col][c];
+ }
+ avg[3]++;
+ }
+
+ red[row + top][col + left] = avg[0] / avg[3];
+ green[row + top][col + left] = avg[1] / avg[3];
+ blue[row + top][col + left] = avg[2] / avg[3];
+ }
+
+ if(plistenerActive && ((++progressCounter) % 32 == 0)) {
+#ifdef _OPENMP
+ #pragma omp critical (xtransdemosaic)
+#endif
+ {
+ progress += progressInc;
+ progress = min(1.0, progress);
+ plistener->setProgress (progress);
+ }
+ }
+
+
+ }
+
+ free(buffer);
+ }
+
+}
+#undef CLIP
+void RawImageSource::fast_xtrans_interpolate ()
+{
+// if (settings->verbose) {
+// printf("fast X-Trans interpolation...\n");
+// }
+
+ double progress = 0.0;
+ const bool plistenerActive = plistener;
+
+ if (plistenerActive) {
+ plistener->setProgressStr (Glib::ustring::compose(M("TP_RAW_DMETHOD_PROGRESSBAR"), "fast Xtrans"));
+ plistener->setProgress (progress);
+ }
+
+ const int height = H, width = W;
+
+ xtransborder_interpolate (1);
+ int xtrans[6][6];
+ ri->getXtransMatrix(xtrans);
+
+ #pragma omp parallel for
+
+ for(int row = 1; row < height - 1; row++) {
+ for(int col = 1; col < width - 1; col++) {
+ float sum[3] = {0.f};
+
+ for(int v = -1; v <= 1; v++) {
+ for(int h = -1; h <= 1; h++) {
+ sum[fcol(row + v, col + h)] += rawData[row + v][(col + h)];
+ }
+ }
+
+ switch(fcol(row, col)) {
+ case 0:
+ red[row][col] = rawData[row][col];
+ green[row][col] = sum[1] * 0.2f;
+ blue[row][col] = sum[2] * 0.33333333f;
+ break;
+
+ case 1:
+ red[row][col] = sum[0] * 0.5f;
+ green[row][col] = rawData[row][col];
+ blue[row][col] = sum[2] * 0.5f;
+ break;
+
+ case 2:
+ red[row][col] = sum[0] * 0.33333333f;
+ green[row][col] = sum[1] * 0.2f;
+ blue[row][col] = rawData[row][col];
+ break;
+ }
+ }
+ }
+
+ if (plistenerActive) {
+ plistener->setProgress (1.0);
+ }
+}
+#undef fcol
+#undef isgreen
+}
\ No newline at end of file
diff --git a/rtexif/pentaxattribs.cc b/rtexif/pentaxattribs.cc
index c7252d360..4d9a31b6f 100644
--- a/rtexif/pentaxattribs.cc
+++ b/rtexif/pentaxattribs.cc
@@ -44,6 +44,7 @@ public:
choices[5] = "Premium";
choices[6] = "RAW (HDR enabled)";
choices[7] = "RAW (pixel shift enabled)";
+ choices[8] = "RAW (pixel shift handheld mode enabled)";
choices[65535] = "n/a";
}
};
diff --git a/rtgui/bayerprocess.cc b/rtgui/bayerprocess.cc
index b294c9fee..73fea1aa3 100644
--- a/rtgui/bayerprocess.cc
+++ b/rtgui/bayerprocess.cc
@@ -130,11 +130,6 @@ BayerProcess::BayerProcess () : FoldableToolPanel(this, "bayerprocess", M("TP_RA
pixelShiftShowMotionMaskOnly->set_tooltip_text (M("TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY_TOOLTIP"));
pixelShiftFrame->pack_start(*pixelShiftShowMotionMaskOnly);
-#ifdef PIXELSHIFTDEV
- pixelShiftAutomatic = Gtk::manage (new CheckBox(M("TP_RAW_PIXELSHIFTADAPTIVE"), multiImage));
- pixelShiftAutomatic->setCheckBoxListener (this);
- pixelShiftOptions->pack_start(*pixelShiftAutomatic);
-#endif
pixelShiftGreen = Gtk::manage (new CheckBox(M("TP_RAW_PIXELSHIFTGREEN"), multiImage));
pixelShiftGreen->setCheckBoxListener (this);
pixelShiftOptions->pack_start(*pixelShiftGreen);
@@ -194,139 +189,11 @@ BayerProcess::BayerProcess () : FoldableToolPanel(this, "bayerprocess", M("TP_RA
pixelShiftOptions->pack_start(*pixelShiftMedian);
-#ifdef PIXELSHIFTDEV
- pixelShiftMedian3 = Gtk::manage (new CheckBox(M("TP_RAW_PIXELSHIFTMEDIAN3"), multiImage));
- pixelShiftMedian3->setCheckBoxListener (this);
- pixelShiftMedian3->set_tooltip_text (M("TP_RAW_PIXELSHIFTMEDIAN3_TOOLTIP"));
- pixelShiftOptions->pack_start(*pixelShiftMedian3);
-
- pixelShiftNonGreenCross2 = Gtk::manage (new CheckBox(M("TP_RAW_PIXELSHIFTNONGREENCROSS2"), multiImage));
- pixelShiftNonGreenCross2->setCheckBoxListener (this);
- pixelShiftOptions->pack_start(*pixelShiftNonGreenCross2);
-
- pixelShiftNonGreenAmaze = Gtk::manage (new CheckBox(M("TP_RAW_PIXELSHIFTNONGREENAMAZE"), multiImage));
- pixelShiftNonGreenAmaze->setCheckBoxListener (this);
- pixelShiftOptions->pack_start(*pixelShiftNonGreenAmaze);
-
- pixelShiftNonGreenHorizontal = Gtk::manage (new CheckBox(M("TP_RAW_PIXELSHIFTNONGREENHORIZONTAL"), multiImage));
- pixelShiftNonGreenHorizontal->setCheckBoxListener (this);
- pixelShiftOptions->pack_start(*pixelShiftNonGreenHorizontal);
-
- pixelShiftNonGreenVertical = Gtk::manage (new CheckBox(M("TP_RAW_PIXELSHIFTNONGREENVERTICAL"), multiImage));
- pixelShiftNonGreenVertical->setCheckBoxListener (this);
- pixelShiftOptions->pack_start(*pixelShiftNonGreenVertical);
-
- pixelShiftExp0 = Gtk::manage (new CheckBox(M("TP_RAW_PIXELSHIFTEXP0"), multiImage));
- pixelShiftExp0->setCheckBoxListener (this);
- pixelShiftOptions->pack_start(*pixelShiftExp0);
-#endif
pixelShiftLmmse = Gtk::manage (new CheckBox(M("TP_RAW_PIXELSHIFTLMMSE"), multiImage));
pixelShiftLmmse->setCheckBoxListener (this);
pixelShiftLmmse->set_tooltip_text (M("TP_RAW_PIXELSHIFTLMMSE_TOOLTIP"));
pixelShiftOptions->pack_start(*pixelShiftLmmse);
-// pixelShiftOneGreen = Gtk::manage (new CheckBox(M("TP_RAW_PIXELSHIFTONEGREEN"), multiImage));
-// pixelShiftOneGreen->setCheckBoxListener (this);
-// pixelShiftOneGreen->set_tooltip_text (M("TP_RAW_PIXELSHIFTONEGREEN_TOOLTIP"));
-// pixelShiftOptions->pack_start(*pixelShiftOneGreen);
-
-#ifdef PIXELSHIFTDEV
- pixelShiftMotion = Gtk::manage (new Adjuster (M("TP_RAW_PIXELSHIFTMOTION"), 0, 100, 1, 70));
- pixelShiftMotion->setAdjusterListener (this);
- pixelShiftMotion->set_tooltip_text (M("TP_RAW_PIXELSHIFTMOTION_TOOLTIP"));
-
- if (pixelShiftMotion->delay < options.adjusterMaxDelay) {
- pixelShiftMotion->delay = options.adjusterMaxDelay;
- }
- pixelShiftMotion->show();
- pixelShiftOptions->pack_start(*pixelShiftMotion);
-
- Gtk::HBox* hb2 = Gtk::manage (new Gtk::HBox ());
- hb2->pack_start (*Gtk::manage (new Gtk::Label ( M("TP_RAW_PIXELSHIFTMOTIONCORRECTION") + ": ")), Gtk::PACK_SHRINK, 0);
- pixelShiftMotionCorrection = Gtk::manage (new MyComboBoxText ());
- pixelShiftMotionCorrection->append("1x1");
- pixelShiftMotionCorrection->append("1x2");
- pixelShiftMotionCorrection->append("3x3");
- pixelShiftMotionCorrection->append("5x5");
- pixelShiftMotionCorrection->append("7x7");
- pixelShiftMotionCorrection->append("3x3 new");
- pixelShiftMotionCorrection->set_active(0);
- pixelShiftMotionCorrection->show();
- hb2->pack_start(*pixelShiftMotionCorrection);
- pixelShiftOptions->pack_start(*hb2);
- pixelShiftStddevFactorGreen = Gtk::manage (new Adjuster (M("TP_RAW_PIXELSHIFTSTDDEVFACTORGREEN"), 2, 8, 0.1, 5));
- pixelShiftStddevFactorGreen->setAdjusterListener (this);
-
- if (pixelShiftStddevFactorGreen->delay < options.adjusterMaxDelay) {
- pixelShiftStddevFactorGreen->delay = options.adjusterMaxDelay;
- }
-
- pixelShiftStddevFactorGreen->show();
- pixelShiftOptions->pack_start(*pixelShiftStddevFactorGreen);
-
- pixelShiftStddevFactorRed = Gtk::manage (new Adjuster (M("TP_RAW_PIXELSHIFTSTDDEVFACTORRED"), 1, 8, 0.1, 5));
- pixelShiftStddevFactorRed->setAdjusterListener (this);
-
- if (pixelShiftStddevFactorRed->delay < options.adjusterMaxDelay) {
- pixelShiftStddevFactorRed->delay = options.adjusterMaxDelay;
- }
-
- pixelShiftStddevFactorRed->show();
- pixelShiftOptions->pack_start(*pixelShiftStddevFactorRed);
-
- pixelShiftStddevFactorBlue = Gtk::manage (new Adjuster (M("TP_RAW_PIXELSHIFTSTDDEVFACTORBLUE"), 1, 8, 0.1, 5));
- pixelShiftStddevFactorBlue->setAdjusterListener (this);
-
- if (pixelShiftStddevFactorBlue->delay < options.adjusterMaxDelay) {
- pixelShiftStddevFactorBlue->delay = options.adjusterMaxDelay;
- }
-
- pixelShiftStddevFactorBlue->show();
- pixelShiftOptions->pack_start(*pixelShiftStddevFactorBlue);
-#endif
-
-#ifdef PIXELSHIFTDEV
- pixelShiftNreadIso = Gtk::manage (new Adjuster (M("TP_RAW_PIXELSHIFTNREADISO"), -2.0, 2.0, 0.05, 0.0));
- pixelShiftNreadIso->setAdjusterListener (this);
-
- if (pixelShiftNreadIso->delay < options.adjusterMaxDelay) {
- pixelShiftNreadIso->delay = options.adjusterMaxDelay;
- }
-
- pixelShiftNreadIso->show();
- pixelShiftOptions->pack_start(*pixelShiftNreadIso);
-
-
- pixelShiftPrnu = Gtk::manage (new Adjuster (M("TP_RAW_PIXELSHIFTPRNU"), 0.3, 2.0, 0.1, 1.0));
- pixelShiftPrnu->setAdjusterListener (this);
-
- if (pixelShiftPrnu->delay < options.adjusterMaxDelay) {
- pixelShiftPrnu->delay = options.adjusterMaxDelay;
- }
-
- pixelShiftPrnu->show();
- pixelShiftOptions->pack_start(*pixelShiftPrnu);
-
- pixelShiftSum = Gtk::manage (new Adjuster (M("TP_RAW_PIXELSHIFTMASKTHRESHOLD"), 1.0, 8.0, 0.1, 3.0));
- pixelShiftSum->setAdjusterListener (this);
-
- if (pixelShiftSum->delay < options.adjusterMaxDelay) {
- pixelShiftSum->delay = options.adjusterMaxDelay;
- }
-
- pixelShiftSum->show();
- pixelShiftOptions->pack_start(*pixelShiftSum);
-
- pixelShiftRedBlueWeight = Gtk::manage (new Adjuster (M("TP_RAW_PIXELSHIFTREDBLUEWEIGHT"), 0.1, 1.0, 0.1, 0.7));
- pixelShiftRedBlueWeight->setAdjusterListener (this);
-
- if (pixelShiftRedBlueWeight->delay < options.adjusterMaxDelay) {
- pixelShiftRedBlueWeight->delay = options.adjusterMaxDelay;
- }
-
- pixelShiftRedBlueWeight->show();
- pixelShiftOptions->pack_start(*pixelShiftRedBlueWeight);
-#endif
pixelShiftFrame->pack_start(*pixelShiftOptions);
pixelShiftOptions->hide();
@@ -336,9 +203,6 @@ BayerProcess::BayerProcess () : FoldableToolPanel(this, "bayerprocess", M("TP_RA
method->connect(method->signal_changed().connect( sigc::mem_fun(*this, &BayerProcess::methodChanged) ));
imageNumber->connect(imageNumber->signal_changed().connect( sigc::mem_fun(*this, &BayerProcess::imageNumberChanged) ));
pixelShiftMotionMethod->connect(pixelShiftMotionMethod->signal_changed().connect( sigc::mem_fun(*this, &BayerProcess::pixelShiftMotionMethodChanged) ));
-#ifdef PIXELSHIFTDEV
- pixelShiftMotionCorrection->connect(pixelShiftMotionCorrection->signal_changed().connect( sigc::mem_fun(*this, &BayerProcess::psMotionCorrectionChanged) ));
-#endif
}
@@ -348,9 +212,6 @@ void BayerProcess::read(const rtengine::procparams::ProcParams* pp, const Params
method->block (true);
imageNumber->block (true);
//allEnhconn.block (true);
-#ifdef PIXELSHIFTDEV
- pixelShiftMotionCorrection->block (true);
-#endif
method->set_active(std::numeric_limits::max());
imageNumber->set_active(pp->raw.bayersensor.imageNum);
@@ -381,7 +242,6 @@ void BayerProcess::read(const rtengine::procparams::ProcParams* pp, const Params
}
pixelShiftSmooth->setValue (pp->raw.bayersensor.pixelShiftSmoothFactor);
pixelShiftLmmse->setValue (pp->raw.bayersensor.pixelShiftLmmse);
-// pixelShiftOneGreen->setValue (pp->raw.bayersensor.pixelShiftOneGreen);
pixelShiftEqualBright->setValue (pp->raw.bayersensor.pixelShiftEqualBright);
pixelShiftEqualBrightChannel->set_sensitive (pp->raw.bayersensor.pixelShiftEqualBright);
pixelShiftEqualBrightChannel->setValue (pp->raw.bayersensor.pixelShiftEqualBrightChannel);
@@ -394,32 +254,6 @@ void BayerProcess::read(const rtengine::procparams::ProcParams* pp, const Params
if (!batchMode) {
pixelShiftSigma->set_sensitive (pp->raw.bayersensor.pixelShiftBlur);
}
-#ifdef PIXELSHIFTDEV
- pixelShiftStddevFactorGreen->setValue (pp->raw.bayersensor.pixelShiftStddevFactorGreen);
- pixelShiftStddevFactorRed->setValue (pp->raw.bayersensor.pixelShiftStddevFactorRed);
- pixelShiftStddevFactorBlue->setValue (pp->raw.bayersensor.pixelShiftStddevFactorBlue);
- pixelShiftSum->setValue (pp->raw.bayersensor.pixelShiftSum);
- pixelShiftMedian3->setValue (pp->raw.bayersensor.pixelShiftMedian3);
- if (!batchMode) {
- pixelShiftMedian3->set_sensitive (pixelShiftMedian->getValue() != CheckValue::off);
- }
- pixelShiftAutomatic->setValue (pp->raw.bayersensor.pixelShiftAutomatic);
- pixelShiftNonGreenHorizontal->setValue (pp->raw.bayersensor.pixelShiftNonGreenHorizontal);
- pixelShiftNonGreenVertical->setValue (pp->raw.bayersensor.pixelShiftNonGreenVertical);
- pixelShiftExp0->setValue (pp->raw.bayersensor.pixelShiftExp0);
- pixelShiftNonGreenCross2->setValue (pp->raw.bayersensor.pixelShiftNonGreenCross2);
- pixelShiftNonGreenAmaze->setValue (pp->raw.bayersensor.pixelShiftNonGreenAmaze);
- pixelShiftMotion->setValue (pp->raw.bayersensor.pixelShiftMotion);
- pixelShiftMotionCorrection->set_active ((int)pp->raw.bayersensor.pixelShiftMotionCorrection);
- if (!batchMode) {
- pixelShiftHoleFill->set_sensitive (pixelShiftAutomatic->getValue () != CheckValue::off && pixelShiftMotionCorrection->get_active_row_number() == 5);
- pixelShiftBlur->set_sensitive(pixelShiftAutomatic->getValue () != CheckValue::off && pixelShiftMotionCorrection->get_active_row_number() == 5);
- pixelShiftSmooth->set_sensitive(pixelShiftAutomatic->getValue () != CheckValue::off && pixelShiftMotionCorrection->get_active_row_number() == 5 && pixelShiftBlur->getValue() != CheckValue::off);
- }
- pixelShiftNreadIso->setValue (pp->raw.bayersensor.pixelShiftNreadIso);
- pixelShiftPrnu->setValue (pp->raw.bayersensor.pixelShiftPrnu);
- pixelShiftRedBlueWeight->setValue (pp->raw.bayersensor.pixelShiftRedBlueWeight);
-#endif
if(pedited) {
ccSteps->setEditedState (pedited->raw.bayersensor.ccSteps ? Edited : UnEdited);
@@ -433,30 +267,12 @@ void BayerProcess::read(const rtengine::procparams::ProcParams* pp, const Params
pixelShiftBlur->setEdited (pedited->raw.bayersensor.pixelShiftBlur);
pixelShiftSmooth->setEditedState ( pedited->raw.bayersensor.pixelShiftSmooth ? Edited : UnEdited);
pixelShiftLmmse->setEdited (pedited->raw.bayersensor.pixelShiftLmmse);
-// pixelShiftOneGreen->setEdited (pedited->raw.bayersensor.pixelShiftOneGreen);
pixelShiftEqualBright->setEdited (pedited->raw.bayersensor.pixelShiftEqualBright);
pixelShiftEqualBrightChannel->setEdited (pedited->raw.bayersensor.pixelShiftEqualBrightChannel);
pixelShiftNonGreenCross->setEdited (pedited->raw.bayersensor.pixelShiftNonGreenCross);
lmmseIterations->setEditedState ( pedited->raw.bayersensor.lmmseIterations ? Edited : UnEdited);
pixelShiftEperIso->setEditedState ( pedited->raw.bayersensor.pixelShiftEperIso ? Edited : UnEdited);
pixelShiftSigma->setEditedState ( pedited->raw.bayersensor.pixelShiftSigma ? Edited : UnEdited);
-#ifdef PIXELSHIFTDEV
- pixelShiftNreadIso->setEditedState ( pedited->raw.bayersensor.pixelShiftNreadIso ? Edited : UnEdited);
- pixelShiftPrnu->setEditedState ( pedited->raw.bayersensor.pixelShiftPrnu ? Edited : UnEdited);
- pixelShiftStddevFactorGreen->setEditedState ( pedited->raw.bayersensor.pixelShiftStddevFactorGreen ? Edited : UnEdited);
- pixelShiftStddevFactorRed->setEditedState ( pedited->raw.bayersensor.pixelShiftStddevFactorRed ? Edited : UnEdited);
- pixelShiftStddevFactorBlue->setEditedState ( pedited->raw.bayersensor.pixelShiftStddevFactorBlue ? Edited : UnEdited);
- pixelShiftSum->setEditedState ( pedited->raw.bayersensor.pixelShiftSum ? Edited : UnEdited);
- pixelShiftAutomatic->setEdited (pedited->raw.bayersensor.pixelShiftAutomatic);
- pixelShiftNonGreenHorizontal->setEdited (pedited->raw.bayersensor.pixelShiftNonGreenHorizontal);
- pixelShiftNonGreenVertical->setEdited (pedited->raw.bayersensor.pixelShiftNonGreenVertical);
- pixelShiftMedian3->setEdited (pedited->raw.bayersensor.pixelShiftMedian3);
- pixelShiftExp0->setEdited (pedited->raw.bayersensor.pixelShiftExp0);
- pixelShiftNonGreenCross2->setEdited (pedited->raw.bayersensor.pixelShiftNonGreenCross2);
- pixelShiftNonGreenAmaze->setEdited (pedited->raw.bayersensor.pixelShiftNonGreenAmaze);
- pixelShiftMotion->setEditedState ( pedited->raw.bayersensor.pixelShiftMotion ? Edited : UnEdited);
- pixelShiftRedBlueWeight->setEditedState ( pedited->raw.bayersensor.pixelShiftRedBlueWeight ? Edited : UnEdited);
-#endif
if(!pedited->raw.bayersensor.method) {
method->set_active(std::numeric_limits::max()); // No name
@@ -464,11 +280,6 @@ void BayerProcess::read(const rtengine::procparams::ProcParams* pp, const Params
if(!pedited->raw.bayersensor.imageNum) {
imageNumber->set_active_text(M("GENERAL_UNCHANGED"));
}
-#ifdef PIXELSHIFTDEV
- if(!pedited->raw.bayersensor.pixelShiftMotionCorrection) {
- pixelShiftMotionCorrection->set_active_text(M("GENERAL_UNCHANGED"));
- }
-#endif
if(!pedited->raw.bayersensor.pixelShiftMotionCorrectionMethod) {
pixelShiftMotionMethod->set_active_text(M("GENERAL_UNCHANGED"));
}
@@ -511,9 +322,6 @@ void BayerProcess::read(const rtengine::procparams::ProcParams* pp, const Params
//lastALLen = pp->raw.bayersensor.all_enhance;
method->block (false);
-#ifdef PIXELSHIFTDEV
- pixelShiftMotionCorrection->block (false);
-#endif
imageNumber->block (false);
//allEnhconn.block (false);
@@ -538,28 +346,9 @@ void BayerProcess::write( rtengine::procparams::ProcParams* pp, ParamsEdited* pe
pp->raw.bayersensor.pixelShiftBlur = pixelShiftBlur->getLastActive ();
pp->raw.bayersensor.pixelShiftSmoothFactor = pixelShiftSmooth->getValue();
pp->raw.bayersensor.pixelShiftLmmse = pixelShiftLmmse->getLastActive ();
-// pp->raw.bayersensor.pixelShiftOneGreen = pixelShiftOneGreen->getLastActive ();
pp->raw.bayersensor.pixelShiftEqualBright = pixelShiftEqualBright->getLastActive ();
pp->raw.bayersensor.pixelShiftEqualBrightChannel = pixelShiftEqualBrightChannel->getLastActive ();
pp->raw.bayersensor.pixelShiftNonGreenCross = pixelShiftNonGreenCross->getLastActive ();
-#ifdef PIXELSHIFTDEV
- pp->raw.bayersensor.pixelShiftStddevFactorGreen = pixelShiftStddevFactorGreen->getValue();
- pp->raw.bayersensor.pixelShiftStddevFactorRed = pixelShiftStddevFactorRed->getValue();
- pp->raw.bayersensor.pixelShiftStddevFactorBlue = pixelShiftStddevFactorBlue->getValue();
- pp->raw.bayersensor.pixelShiftSum = pixelShiftSum->getValue();
- pp->raw.bayersensor.pixelShiftMedian3 = pixelShiftMedian3->getLastActive ();
- pp->raw.bayersensor.pixelShiftMotion = pixelShiftMotion->getIntValue();
- pp->raw.bayersensor.pixelShiftMotionCorrection = (RAWParams::BayerSensor::ePSMotionCorrection)pixelShiftMotionCorrection->get_active_row_number();
- pp->raw.bayersensor.pixelShiftAutomatic = pixelShiftAutomatic->getLastActive ();
- pp->raw.bayersensor.pixelShiftNonGreenHorizontal = pixelShiftNonGreenHorizontal->getLastActive ();
- pp->raw.bayersensor.pixelShiftNonGreenVertical = pixelShiftNonGreenVertical->getLastActive ();
- pp->raw.bayersensor.pixelShiftExp0 = pixelShiftExp0->getLastActive ();
- pp->raw.bayersensor.pixelShiftNonGreenCross2 = pixelShiftNonGreenCross2->getLastActive ();
- pp->raw.bayersensor.pixelShiftNonGreenAmaze = pixelShiftNonGreenAmaze->getLastActive ();
- pp->raw.bayersensor.pixelShiftNreadIso = pixelShiftNreadIso->getValue();
- pp->raw.bayersensor.pixelShiftPrnu = pixelShiftPrnu->getValue();
- pp->raw.bayersensor.pixelShiftRedBlueWeight = pixelShiftRedBlueWeight->getValue();
-#endif
int currentRow = method->get_active_row_number();
if( currentRow >= 0 && currentRow < std::numeric_limits::max()) {
@@ -591,28 +380,9 @@ void BayerProcess::write( rtengine::procparams::ProcParams* pp, ParamsEdited* pe
pedited->raw.bayersensor.pixelShiftBlur = !pixelShiftBlur->get_inconsistent();
pedited->raw.bayersensor.pixelShiftSmooth = pixelShiftSmooth->getEditedState();
pedited->raw.bayersensor.pixelShiftLmmse = !pixelShiftLmmse->get_inconsistent();
-// pedited->raw.bayersensor.pixelShiftOneGreen = !pixelShiftOneGreen->get_inconsistent();
pedited->raw.bayersensor.pixelShiftEqualBright = !pixelShiftEqualBright->get_inconsistent();
pedited->raw.bayersensor.pixelShiftEqualBrightChannel = !pixelShiftEqualBrightChannel->get_inconsistent();
pedited->raw.bayersensor.pixelShiftNonGreenCross = !pixelShiftNonGreenCross->get_inconsistent();
-#ifdef PIXELSHIFTDEV
- pedited->raw.bayersensor.pixelShiftStddevFactorGreen = pixelShiftStddevFactorGreen->getEditedState ();
- pedited->raw.bayersensor.pixelShiftStddevFactorRed = pixelShiftStddevFactorRed->getEditedState ();
- pedited->raw.bayersensor.pixelShiftStddevFactorBlue = pixelShiftStddevFactorBlue->getEditedState ();
- pedited->raw.bayersensor.pixelShiftSum = pixelShiftSum->getEditedState ();
- pedited->raw.bayersensor.pixelShiftMedian3 = !pixelShiftMedian3->get_inconsistent();
- pedited->raw.bayersensor.pixelShiftMotion = pixelShiftMotion->getEditedState ();
- pedited->raw.bayersensor.pixelShiftMotionCorrection = pixelShiftMotionCorrection->get_active_text() != M("GENERAL_UNCHANGED");
- pedited->raw.bayersensor.pixelShiftAutomatic = !pixelShiftAutomatic->get_inconsistent();
- pedited->raw.bayersensor.pixelShiftNonGreenHorizontal = !pixelShiftNonGreenHorizontal->get_inconsistent();
- pedited->raw.bayersensor.pixelShiftNonGreenVertical = !pixelShiftNonGreenVertical->get_inconsistent();
- pedited->raw.bayersensor.pixelShiftExp0 = !pixelShiftExp0->get_inconsistent();
- pedited->raw.bayersensor.pixelShiftNonGreenCross2 = !pixelShiftNonGreenCross2->get_inconsistent();
- pedited->raw.bayersensor.pixelShiftNonGreenAmaze = !pixelShiftNonGreenAmaze->get_inconsistent();
- pedited->raw.bayersensor.pixelShiftNreadIso = pixelShiftNreadIso->getEditedState ();
- pedited->raw.bayersensor.pixelShiftPrnu = pixelShiftPrnu->getEditedState ();
- pedited->raw.bayersensor.pixelShiftRedBlueWeight = pixelShiftRedBlueWeight->getEditedState ();
-#endif
}
}
@@ -620,10 +390,6 @@ void BayerProcess::setBatchMode(bool batchMode)
{
method->append (M("GENERAL_UNCHANGED"));
method->set_active(std::numeric_limits::max()); // No name
-#ifdef PIXELSHIFTDEV
- pixelShiftMotionCorrection->append (M("GENERAL_UNCHANGED"));
- pixelShiftMotionCorrection->set_active_text (M("GENERAL_UNCHANGED"));
-#endif
pixelShiftMotionMethod->append (M("GENERAL_UNCHANGED"));
pixelShiftMotionMethod->set_active_text (M("GENERAL_UNCHANGED"));
imageNumber->append (M("GENERAL_UNCHANGED"));
@@ -632,16 +398,6 @@ void BayerProcess::setBatchMode(bool batchMode)
ccSteps->showEditedCB ();
dcbIterations->showEditedCB ();
lmmseIterations->showEditedCB ();
-#ifdef PIXELSHIFTDEV
- pixelShiftMotion->showEditedCB ();
- pixelShiftSum->showEditedCB ();
- pixelShiftStddevFactorGreen->showEditedCB ();
- pixelShiftStddevFactorRed->showEditedCB ();
- pixelShiftStddevFactorBlue->showEditedCB ();
- pixelShiftNreadIso->showEditedCB ();
- pixelShiftPrnu->showEditedCB ();
- pixelShiftRedBlueWeight->showEditedCB ();
-#endif
pixelShiftEperIso->showEditedCB ();
pixelShiftSigma->showEditedCB ();
}
@@ -650,16 +406,6 @@ void BayerProcess::setDefaults(const rtengine::procparams::ProcParams* defParams
{
dcbIterations->setDefault( defParams->raw.bayersensor.dcb_iterations);
lmmseIterations->setDefault( defParams->raw.bayersensor.lmmse_iterations);
-#ifdef PIXELSHIFTDEV
- pixelShiftMotion->setDefault( defParams->raw.bayersensor.pixelShiftMotion);
- pixelShiftSum->setDefault( defParams->raw.bayersensor.pixelShiftSum);
- pixelShiftStddevFactorGreen->setDefault( defParams->raw.bayersensor.pixelShiftStddevFactorGreen);
- pixelShiftStddevFactorRed->setDefault( defParams->raw.bayersensor.pixelShiftStddevFactorRed);
- pixelShiftStddevFactorBlue->setDefault( defParams->raw.bayersensor.pixelShiftStddevFactorBlue);
- pixelShiftNreadIso->setDefault( defParams->raw.bayersensor.pixelShiftNreadIso);
- pixelShiftPrnu->setDefault( defParams->raw.bayersensor.pixelShiftPrnu);
- pixelShiftRedBlueWeight->setDefault( defParams->raw.bayersensor.pixelShiftRedBlueWeight);
-#endif
pixelShiftEperIso->setDefault( defParams->raw.bayersensor.pixelShiftEperIso);
pixelShiftSigma->setDefault( defParams->raw.bayersensor.pixelShiftSigma);
ccSteps->setDefault (defParams->raw.bayersensor.ccSteps);
@@ -667,32 +413,12 @@ void BayerProcess::setDefaults(const rtengine::procparams::ProcParams* defParams
if (pedited) {
dcbIterations->setDefaultEditedState( pedited->raw.bayersensor.dcbIterations ? Edited : UnEdited);
lmmseIterations->setDefaultEditedState( pedited->raw.bayersensor.lmmseIterations ? Edited : UnEdited);
-#ifdef PIXELSHIFTDEV
- pixelShiftMotion->setDefaultEditedState( pedited->raw.bayersensor.pixelShiftMotion ? Edited : UnEdited);
- pixelShiftSum->setDefaultEditedState( pedited->raw.bayersensor.pixelShiftSum ? Edited : UnEdited);
- pixelShiftStddevFactorGreen->setDefaultEditedState( pedited->raw.bayersensor.pixelShiftStddevFactorGreen ? Edited : UnEdited);
- pixelShiftStddevFactorRed->setDefaultEditedState( pedited->raw.bayersensor.pixelShiftStddevFactorRed ? Edited : UnEdited);
- pixelShiftStddevFactorBlue->setDefaultEditedState( pedited->raw.bayersensor.pixelShiftStddevFactorBlue ? Edited : UnEdited);
- pixelShiftNreadIso->setDefaultEditedState( pedited->raw.bayersensor.pixelShiftNreadIso ? Edited : UnEdited);
- pixelShiftPrnu->setDefaultEditedState( pedited->raw.bayersensor.pixelShiftPrnu ? Edited : UnEdited);
- pixelShiftRedBlueWeight->setDefaultEditedState( pedited->raw.bayersensor.pixelShiftRedBlueWeight ? Edited : UnEdited);
-#endif
pixelShiftEperIso->setDefaultEditedState( pedited->raw.bayersensor.pixelShiftEperIso ? Edited : UnEdited);
pixelShiftSigma->setDefaultEditedState( pedited->raw.bayersensor.pixelShiftSigma ? Edited : UnEdited);
ccSteps->setDefaultEditedState(pedited->raw.bayersensor.ccSteps ? Edited : UnEdited);
} else {
dcbIterations->setDefaultEditedState( Irrelevant );
lmmseIterations->setDefaultEditedState( Irrelevant );
-#ifdef PIXELSHIFTDEV
- pixelShiftMotion->setDefaultEditedState( Irrelevant );
- pixelShiftSum->setDefaultEditedState( Irrelevant );
- pixelShiftStddevFactorGreen->setDefaultEditedState( Irrelevant );
- pixelShiftStddevFactorRed->setDefaultEditedState( Irrelevant );
- pixelShiftStddevFactorBlue->setDefaultEditedState( Irrelevant );
- pixelShiftNreadIso->setDefaultEditedState( Irrelevant );
- pixelShiftPrnu->setDefaultEditedState( Irrelevant );
- pixelShiftRedBlueWeight->setDefaultEditedState( Irrelevant );
-#endif
pixelShiftEperIso->setDefaultEditedState( Irrelevant );
pixelShiftSigma->setDefaultEditedState( Irrelevant );
ccSteps->setDefaultEditedState(Irrelevant );
@@ -708,24 +434,6 @@ void BayerProcess::adjusterChanged (Adjuster* a, double newval)
listener->panelChanged (EvDemosaicFalseColorIter, a->getTextValue() );
} else if (a == lmmseIterations) {
listener->panelChanged (EvDemosaicLMMSEIter, a->getTextValue() );
-#ifdef PIXELSHIFTDEV
- } else if (a == pixelShiftMotion) {
- listener->panelChanged (EvPixelShiftMotion, a->getTextValue() );
- } else if (a == pixelShiftSum) {
- listener->panelChanged (EvPixelShiftSum, a->getTextValue() );
- } else if (a == pixelShiftStddevFactorGreen) {
- listener->panelChanged (EvPixelShiftStddevFactorGreen, a->getTextValue() );
- } else if (a == pixelShiftStddevFactorRed) {
- listener->panelChanged (EvPixelShiftStddevFactorRed, a->getTextValue() );
- } else if (a == pixelShiftStddevFactorBlue) {
- listener->panelChanged (EvPixelShiftStddevFactorBlue, a->getTextValue() );
- } else if (a == pixelShiftNreadIso) {
- listener->panelChanged (EvPixelShiftNreadIso, a->getTextValue() );
- } else if (a == pixelShiftPrnu) {
- listener->panelChanged (EvPixelShiftPrnu, a->getTextValue() );
- } else if (a == pixelShiftRedBlueWeight) {
- listener->panelChanged (EvPixelShiftRedBlueWeight, a->getTextValue() );
-#endif
} else if (a == pixelShiftEperIso) {
listener->panelChanged (EvPixelShiftEperIso, a->getTextValue() );
} else if (a == pixelShiftSigma) {
@@ -736,27 +444,6 @@ void BayerProcess::adjusterChanged (Adjuster* a, double newval)
}
}
-#ifdef PIXELSHIFTDEV
-void BayerProcess::psMotionCorrectionChanged ()
-{
- if (!batchMode) {
- if(pixelShiftMotionCorrection->get_active_row_number() == 5) {
- pixelShiftBlur->set_sensitive(true);
- pixelShiftHoleFill->set_sensitive(true);
- pixelShiftSmooth->set_sensitive(pixelShiftBlur->getValue() != CheckValue::off);
- } else {
- pixelShiftBlur->set_sensitive(false);
- pixelShiftHoleFill->set_sensitive(false);
- pixelShiftSmooth->set_sensitive(false);
- }
- }
-
- if (listener) {
- listener->panelChanged (EvPixelShiftMotionCorrection, pixelShiftMotionCorrection->get_active_text());
- }
-}
-#endif
-
void BayerProcess::methodChanged ()
{
const int curSelection = method->get_active_row_number();
@@ -834,11 +521,6 @@ void BayerProcess::checkBoxToggled (CheckBox* c, CheckValue newval)
listener->panelChanged (EvPixelShiftHoleFill, pixelShiftHoleFill->getValueAsStr ());
}
} else if (c == pixelShiftMedian) {
-#ifdef PIXELSHIFTDEV
- if (!batchMode) {
- pixelShiftMedian3->set_sensitive(newval != CheckValue::off);
- }
-#endif
if (listener) {
listener->panelChanged (EvPixelShiftMedian, pixelShiftMedian->getValueAsStr ());
}
@@ -858,10 +540,6 @@ void BayerProcess::checkBoxToggled (CheckBox* c, CheckValue newval)
if (listener) {
listener->panelChanged (EvPixelShiftLmmse, pixelShiftLmmse->getValueAsStr ());
}
-// } else if (c == pixelShiftOneGreen) {
-// if (listener) {
-// listener->panelChanged (EvPixelShiftOneGreen, pixelShiftOneGreen->getValueAsStr ());
-// }
} else if (c == pixelShiftEqualBright) {
if (!batchMode) {
pixelShiftEqualBrightChannel->set_sensitive(newval != CheckValue::off);
@@ -878,61 +556,6 @@ void BayerProcess::checkBoxToggled (CheckBox* c, CheckValue newval)
listener->panelChanged (EvPixelShiftNonGreenCross, pixelShiftNonGreenCross->getValueAsStr ());
}
}
-#ifdef PIXELSHIFTDEV
- else if (c == pixelShiftAutomatic) {
- if (!batchMode) {
- pixelShiftMotion->set_sensitive(newval != CheckValue::off);
- pixelShiftEperIso->set_sensitive(newval != CheckValue::off);
- pixelShiftNreadIso->set_sensitive(newval != CheckValue::off);
- pixelShiftPrnu->set_sensitive(newval != CheckValue::off);
- pixelShiftSigma->set_sensitive(newval != CheckValue::off);
- pixelShiftSum->set_sensitive(newval != CheckValue::off);
- pixelShiftRedBlueWeight->set_sensitive(newval != CheckValue::off);
- pixelShiftStddevFactorGreen->set_sensitive(newval != CheckValue::off);
- pixelShiftStddevFactorRed->set_sensitive(newval != CheckValue::off);
- pixelShiftStddevFactorBlue->set_sensitive(newval != CheckValue::off);
- pixelShiftNonGreenHorizontal->set_sensitive(newval != CheckValue::off);
- pixelShiftNonGreenVertical->set_sensitive(newval != CheckValue::off);
- pixelShiftHoleFill->set_sensitive(newval != CheckValue::off && pixelShiftMotionCorrection->get_active_row_number() == 5);
- pixelShiftMedian3->set_sensitive(newval != CheckValue::off && pixelShiftMedian->getValue () != CheckValue::off);
- pixelShiftGreen->set_sensitive(newval != CheckValue::off);
- pixelShiftBlur->set_sensitive(newval != CheckValue::off && pixelShiftMotionCorrection->get_active_row_number() == 5);
- pixelShiftSmooth->set_sensitive(newval != CheckValue::off && pixelShiftMotionCorrection->get_active_row_number() == 5 && pixelShiftBlur->getValue () != CheckValue::off);
- pixelShiftExp0->set_sensitive(newval != CheckValue::off);
- pixelShiftNonGreenCross->set_sensitive(newval != CheckValue::off);
- pixelShiftNonGreenCross2->set_sensitive(newval != CheckValue::off);
- pixelShiftNonGreenAmaze->set_sensitive(newval != CheckValue::off);
- }
-
- if (listener) {
- listener->panelChanged (EvPixelShiftAutomatic, pixelShiftAutomatic->getValueAsStr ());
- }
- } else if (c == pixelShiftNonGreenHorizontal) {
- if (listener) {
- listener->panelChanged (EvPixelShiftNonGreenHorizontal, pixelShiftNonGreenHorizontal->getValueAsStr ());
- }
- } else if (c == pixelShiftNonGreenVertical) {
- if (listener) {
- listener->panelChanged (EvPixelShiftNonGreenVertical, pixelShiftNonGreenVertical->getValueAsStr ());
- }
- } else if (c == pixelShiftMedian3) {
- if (listener) {
- listener->panelChanged (EvPixelShiftMedian3, pixelShiftMedian3->getValueAsStr ());
- }
- } else if (c == pixelShiftExp0) {
- if (listener) {
- listener->panelChanged (EvPixelShiftExp0, pixelShiftExp0->getValueAsStr ());
- }
- } else if (c == pixelShiftNonGreenCross2) {
- if (listener) {
- listener->panelChanged (EvPixelShiftGreenAmaze, pixelShiftNonGreenCross2->getValueAsStr ());
- }
- } else if (c == pixelShiftNonGreenAmaze) {
- if (listener) {
- listener->panelChanged (EvPixelShiftNonGreenAmaze, pixelShiftNonGreenAmaze->getValueAsStr ());
- }
- }
-#endif
}
void BayerProcess::pixelShiftMotionMethodChanged ()
diff --git a/rtgui/bayerprocess.h b/rtgui/bayerprocess.h
index e1a620474..48b445d90 100644
--- a/rtgui/bayerprocess.h
+++ b/rtgui/bayerprocess.h
@@ -49,31 +49,12 @@ protected:
CheckBox* pixelShiftBlur;
CheckBox* pixelShiftHoleFill;
CheckBox* pixelShiftMedian;
-// CheckBox* pixelShiftOneGreen;
CheckBox* pixelShiftLmmse;
CheckBox* pixelShiftEqualBright;
CheckBox* pixelShiftEqualBrightChannel;
Adjuster* pixelShiftSmooth;
Adjuster* pixelShiftEperIso;
Adjuster* pixelShiftSigma;
-#ifdef PIXELSHIFTDEV
- Adjuster* pixelShiftSum;
- Adjuster* pixelShiftMotion;
- MyComboBoxText* pixelShiftMotionCorrection;
- CheckBox* pixelShiftAutomatic;
- CheckBox* pixelShiftNonGreenHorizontal;
- CheckBox* pixelShiftNonGreenVertical;
- CheckBox* pixelShiftNonGreenCross2;
- CheckBox* pixelShiftNonGreenAmaze;
- CheckBox* pixelShiftExp0;
- CheckBox* pixelShiftMedian3;
- Adjuster* pixelShiftStddevFactorGreen;
- Adjuster* pixelShiftStddevFactorRed;
- Adjuster* pixelShiftStddevFactorBlue;
- Adjuster* pixelShiftNreadIso;
- Adjuster* pixelShiftPrnu;
- Adjuster* pixelShiftRedBlueWeight;
-#endif
int oldMethod;
IdleRegister idle_register;
@@ -92,9 +73,6 @@ public:
void checkBoxToggled (CheckBox* c, CheckValue newval);
void pixelShiftMotionMethodChanged();
void FrameCountChanged(int n, int frameNum);
-#ifdef PIXELSHIFTDEV
- void psMotionCorrectionChanged ();
-#endif
};
#endif
diff --git a/rtgui/cacheimagedata.h b/rtgui/cacheimagedata.h
index 71541cdb8..d204f1ff9 100644
--- a/rtgui/cacheimagedata.h
+++ b/rtgui/cacheimagedata.h
@@ -108,8 +108,9 @@ public:
std::string getModel (unsigned int frame = 0) const { return camModel; }
std::string getLens (unsigned int frame = 0) const { return lens; }
std::string getOrientation (unsigned int frame = 0) const { return ""; } // TODO
- bool getPixelShift (unsigned int frame = 0) const { return isPixelShift; }
+ bool getPixelShift () const { return isPixelShift; }
bool getHDR (unsigned int frame = 0) const { return isHDR; }
+ std::string getImageType (unsigned int frame) const { return isPixelShift ? "PS" : isHDR ? "HDR" : "STD"; }
rtengine::IIOSampleFormat getSampleFormat (unsigned int frame = 0) const { return sampleFormat; }
};
#endif
diff --git a/rtgui/crophandler.cc b/rtgui/crophandler.cc
index 5ab57eacd..ecef3fa3b 100644
--- a/rtgui/crophandler.cc
+++ b/rtgui/crophandler.cc
@@ -313,8 +313,6 @@ void CropHandler::setDetailedCrop (IImage8* im, IImage8* imtrue, rtengine::procp
cropParams = cp;
colorParams = cmp;
- cropPixbuf.clear ();
-
if (!cropimg.empty()) {
cropimg.clear();
}
diff --git a/rtgui/dynamicprofilepanel.cc b/rtgui/dynamicprofilepanel.cc
index c8a8a1644..d7e8f356a 100644
--- a/rtgui/dynamicprofilepanel.cc
+++ b/rtgui/dynamicprofilepanel.cc
@@ -41,6 +41,7 @@ DynamicProfilePanel::EditDialog::EditDialog (const Glib::ustring &title, Gtk::Wi
add_optional (M ("EXIFFILTER_CAMERA"), has_camera_, camera_);
add_optional (M ("EXIFFILTER_LENS"), has_lens_, lens_);
+ add_optional (M ("EXIFFILTER_IMAGETYPE"), has_imagetype_, imagetype_);
add_range (M ("EXIFFILTER_ISO"), iso_min_, iso_max_);
add_range (M ("EXIFFILTER_APERTURE"), fnumber_min_, fnumber_max_);
@@ -81,6 +82,9 @@ void DynamicProfilePanel::EditDialog::set_rule (
has_lens_->set_active (rule.lens.enabled);
lens_->set_text (rule.lens.value);
+ has_imagetype_->set_active (rule.imagetype.enabled);
+ imagetype_->set_text (rule.imagetype.value);
+
profilepath_->updateProfileList();
if (!profilepath_->setActiveRowFromFullPath (rule.profilepath)) {
@@ -112,6 +116,9 @@ DynamicProfileRule DynamicProfilePanel::EditDialog::get_rule()
ret.lens.enabled = has_lens_->get_active();
ret.lens.value = lens_->get_text();
+ ret.imagetype.enabled = has_imagetype_->get_active();
+ ret.imagetype.value = imagetype_->get_text();
+
ret.profilepath = profilepath_->getFullPathFromActiveRow();
return ret;
@@ -254,6 +261,16 @@ DynamicProfilePanel::DynamicProfilePanel():
*this, &DynamicProfilePanel::render_lens));
}
+ cell = Gtk::manage (new Gtk::CellRendererText());
+ cols_count = treeview_.append_column (M ("EXIFFILTER_IMAGETYPE"), *cell);
+ col = treeview_.get_column (cols_count - 1);
+
+ if (col) {
+ col->set_cell_data_func (
+ *cell, sigc::mem_fun (
+ *this, &DynamicProfilePanel::render_imagetype));
+ }
+
cell = Gtk::manage (new Gtk::CellRendererText());
cols_count = treeview_.append_column (M ("EXIFFILTER_ISO"), *cell);
col = treeview_.get_column (cols_count - 1);
@@ -323,6 +340,7 @@ void DynamicProfilePanel::update_rule (Gtk::TreeModel::Row row,
row[columns_.expcomp] = rule.expcomp;
row[columns_.camera] = rule.camera;
row[columns_.lens] = rule.lens;
+ row[columns_.imagetype] = rule.imagetype;
row[columns_.profilepath] = rule.profilepath;
}
@@ -346,6 +364,7 @@ DynamicProfileRule DynamicProfilePanel::to_rule (Gtk::TreeModel::Row row,
ret.camera = row[columns_.camera];
ret.lens = row[columns_.lens];
ret.profilepath = row[columns_.profilepath];
+ ret.imagetype = row[columns_.imagetype];
return ret;
}
@@ -456,6 +475,12 @@ void DynamicProfilePanel::render_lens (
RENDER_OPTIONAL_ (lens);
}
+void DynamicProfilePanel::render_imagetype (
+ Gtk::CellRenderer *cell, const Gtk::TreeModel::iterator &iter)
+{
+ RENDER_OPTIONAL_ (imagetype);
+}
+
#undef RENDER_OPTIONAL_
void DynamicProfilePanel::on_button_up()
diff --git a/rtgui/dynamicprofilepanel.h b/rtgui/dynamicprofilepanel.h
index dca62f1e6..3b5bec4df 100644
--- a/rtgui/dynamicprofilepanel.h
+++ b/rtgui/dynamicprofilepanel.h
@@ -54,6 +54,7 @@ private:
add (camera);
add (lens);
add (profilepath);
+ add (imagetype);
}
Gtk::TreeModelColumn> iso;
@@ -63,6 +64,7 @@ private:
Gtk::TreeModelColumn> expcomp;
Gtk::TreeModelColumn camera;
Gtk::TreeModelColumn lens;
+ Gtk::TreeModelColumn imagetype;
Gtk::TreeModelColumn profilepath;
};
@@ -74,6 +76,7 @@ private:
void render_expcomp (Gtk::CellRenderer* cell, const Gtk::TreeModel::iterator& iter);
void render_camera (Gtk::CellRenderer* cell, const Gtk::TreeModel::iterator& iter);
void render_lens (Gtk::CellRenderer* cell, const Gtk::TreeModel::iterator& iter);
+ void render_imagetype (Gtk::CellRenderer* cell, const Gtk::TreeModel::iterator& iter);
void render_profilepath (Gtk::CellRenderer* cell, const Gtk::TreeModel::iterator& iter);
class EditDialog: public Gtk::Dialog
@@ -109,6 +112,9 @@ private:
Gtk::CheckButton *has_lens_;
Gtk::Entry *lens_;
+ Gtk::CheckButton *has_imagetype_;
+ Gtk::Entry *imagetype_;
+
ProfileStoreComboBox *profilepath_;
};
diff --git a/rtgui/editorpanel.cc b/rtgui/editorpanel.cc
index 60dd25e7e..76bf2794a 100644
--- a/rtgui/editorpanel.cc
+++ b/rtgui/editorpanel.cc
@@ -1053,13 +1053,6 @@ void EditorPanel::open (Thumbnail* tmb, rtengine::InitialImage* isrc)
// since there was no resize event
if (iareapanel->imageArea->mainCropWindow) {
iareapanel->imageArea->mainCropWindow->cropHandler.newImage (ipc, false);
-
- // In single tab mode, the image is not always updated between switches
- // normal redraw don't work, so this is the hard way
- // Disabled this with Issue 2435 because it seems to work fine now
-// if (!options.tabbedUI && iareapanel->imageArea->mainCropWindow->getZoomFitVal() == 1.0) {
- iareapanel->imageArea->mainCropWindow->cropHandler.update();
-// }
} else {
Gtk::Allocation alloc;
iareapanel->imageArea->on_resized (alloc);
@@ -2205,7 +2198,7 @@ void EditorPanel::beforeAfterToggled ()
rtengine::RenderingIntent intent;
ipc->getMonitorProfile(monitorProfile, intent);
beforeIpc->setMonitorProfile(monitorProfile, intent);
-
+
beforeIarea->imageArea->setPreviewHandler (beforePreviewHandler);
beforeIarea->imageArea->setImProcCoordinator (beforeIpc);
diff --git a/rtgui/exportpanel.cc b/rtgui/exportpanel.cc
index 144a107d5..75156b56b 100644
--- a/rtgui/exportpanel.cc
+++ b/rtgui/exportpanel.cc
@@ -51,7 +51,6 @@ ExportPanel::ExportPanel () : listener (nullptr)
//bypass_colorDenoise = Gtk::manage ( new Gtk::CheckButton (M("EXPORT_BYPASS_COLORDENOISE")));
bypass_defringe = Gtk::manage ( new Gtk::CheckButton (M ("EXPORT_BYPASS_DEFRINGE")));
bypass_dirpyrDenoise = Gtk::manage ( new Gtk::CheckButton (M ("EXPORT_BYPASS_DIRPYRDENOISE")));
- bypass_sh_hq = Gtk::manage ( new Gtk::CheckButton (M ("EXPORT_BYPASS_SH_HQ")));
bypass_dirpyrequalizer = Gtk::manage ( new Gtk::CheckButton (M ("EXPORT_BYPASS_DIRPYREQUALIZER")));
bypass_wavelet = Gtk::manage ( new Gtk::CheckButton (M ("EXPORT_BYPASS_EQUALIZER")));
bypass_raw_ccSteps = Gtk::manage ( new Gtk::CheckButton (M ("EXPORT_BYPASS_RAW_CCSTEPS")));
@@ -120,7 +119,6 @@ ExportPanel::ExportPanel () : listener (nullptr)
//pack_start(*bypass_colorDenoise , Gtk::PACK_SHRINK, 4);
bypass_box->pack_start (*bypass_defringe, Gtk::PACK_SHRINK, 4);
bypass_box->pack_start (*bypass_dirpyrDenoise, Gtk::PACK_SHRINK, 4);
- bypass_box->pack_start (*bypass_sh_hq, Gtk::PACK_SHRINK, 4);
bypass_box->pack_start (*bypass_dirpyrequalizer, Gtk::PACK_SHRINK, 4);
bypass_box->pack_start (*bypass_wavelet, Gtk::PACK_SHRINK, 4);
@@ -206,7 +204,6 @@ ExportPanel::ExportPanel () : listener (nullptr)
//bypass_colorDenoiseConn = bypass_colorDenoise->signal_toggled().connect (sigc::bind (sigc::mem_fun(*bypass_ALL, &Gtk::CheckButton::set_inconsistent), true));
bypass_defringeConn = bypass_defringe->signal_toggled().connect (sigc::bind (sigc::mem_fun (*bypass_ALL, &Gtk::CheckButton::set_inconsistent), true));
bypass_dirpyrDenoiseConn = bypass_dirpyrDenoise->signal_toggled().connect (sigc::bind (sigc::mem_fun (*bypass_ALL, &Gtk::CheckButton::set_inconsistent), true));
- bypass_sh_hqConn = bypass_sh_hq->signal_toggled().connect (sigc::bind (sigc::mem_fun (*bypass_ALL, &Gtk::CheckButton::set_inconsistent), true));
bypass_dirpyrequalizerConn = bypass_dirpyrequalizer->signal_toggled().connect (sigc::bind (sigc::mem_fun (*bypass_ALL, &Gtk::CheckButton::set_inconsistent), true));
bypass_waveletConn = bypass_wavelet->signal_toggled().connect (sigc::bind (sigc::mem_fun (*bypass_ALL, &Gtk::CheckButton::set_inconsistent), true));
//bypass_raw_all_enhanceConn = bypass_raw_bayer_all_enhance->signal_toggled().connect (sigc::bind (sigc::mem_fun(*bypass_ALL, &Gtk::CheckButton::set_inconsistent), true));
@@ -258,7 +255,6 @@ void ExportPanel::SaveSettingsAsDefault()
//options.fastexport_bypass_colorDenoise = bypass_colorDenoise->get_active ();
FE_OPT_STORE_ (options.fastexport_bypass_defringe, bypass_defringe->get_active ());
FE_OPT_STORE_ (options.fastexport_bypass_dirpyrDenoise, bypass_dirpyrDenoise->get_active ());
- FE_OPT_STORE_ (options.fastexport_bypass_sh_hq, bypass_sh_hq->get_active ());
FE_OPT_STORE_ (options.fastexport_bypass_dirpyrequalizer, bypass_dirpyrequalizer->get_active ());
FE_OPT_STORE_ (options.fastexport_bypass_wavelet, bypass_wavelet->get_active ());
//options.fastexport_bypass_raw_bayer_all_enhance = bypass_raw_all_enhance->get_active ();
@@ -322,7 +318,6 @@ void ExportPanel::LoadDefaultSettings()
//bypass_colorDenoise->set_active (options.fastexport_bypass_colorDenoise );
bypass_defringe->set_active (options.fastexport_bypass_defringe );
bypass_dirpyrDenoise->set_active (options.fastexport_bypass_dirpyrDenoise );
- bypass_sh_hq->set_active (options.fastexport_bypass_sh_hq );
bypass_dirpyrequalizer->set_active (options.fastexport_bypass_dirpyrequalizer );
bypass_wavelet->set_active (options.fastexport_bypass_wavelet );
//bypass_raw_bayer_all_enhance->set_active (options.fastexport_bypass_raw_bayer_all_enhance );
@@ -394,7 +389,6 @@ void ExportPanel::bypassALL_Toggled()
//bypass_colorDenoiseConn.block (true);
bypass_defringeConn.block (true);
bypass_dirpyrDenoiseConn.block (true);
- bypass_sh_hqConn.block (true);
bypass_dirpyrequalizerConn.block (true);
bypass_waveletConn.block (true);
//bypass_raw_bayer_all_enhanceConn.block (true);
@@ -417,7 +411,6 @@ void ExportPanel::bypassALL_Toggled()
//bypass_colorDenoise->set_active(bypass_ALL->get_active());
bypass_defringe->set_active (bypass_ALL->get_active());
bypass_dirpyrDenoise->set_active (bypass_ALL->get_active());
- bypass_sh_hq->set_active (bypass_ALL->get_active());
bypass_dirpyrequalizer->set_active (bypass_ALL->get_active());
bypass_wavelet->set_active (bypass_ALL->get_active());
//bypass_raw_bayer_all_enhance->set_active(bypass_ALL->get_active());
@@ -438,7 +431,6 @@ void ExportPanel::bypassALL_Toggled()
//bypass_colorDenoiseConn.block (false);
bypass_defringeConn.block (false);
bypass_dirpyrDenoiseConn.block (false);
- bypass_sh_hqConn.block (false);
bypass_dirpyrequalizerConn.block (false);
bypass_waveletConn.block (false);
//bypass_raw_bayer_all_enhanceConn.block (false);
@@ -466,7 +458,6 @@ fastexport_bypass_lumaDenoise
fastexport_bypass_colorDenoise
fastexport_bypass_defringe
fastexport_bypass_dirpyrDenoise
-fastexport_bypass_sh_hq
fastexport_bypass_dirpyrequalizer
fastexport_raw_bayer_method
fastexport_bypass_raw_bayer_all_enhance
diff --git a/rtgui/exportpanel.h b/rtgui/exportpanel.h
index be6c9b4e3..0bea30d22 100644
--- a/rtgui/exportpanel.h
+++ b/rtgui/exportpanel.h
@@ -48,7 +48,6 @@ protected:
//Gtk::CheckButton* bypass_colorDenoise;
Gtk::CheckButton* bypass_defringe;
Gtk::CheckButton* bypass_dirpyrDenoise;
- Gtk::CheckButton* bypass_sh_hq;
/* icm_input = "(camera)";
icm_working = "sRGB";
@@ -88,7 +87,6 @@ protected:
//sigc::connection bypass_colorDenoiseConn ;
sigc::connection bypass_defringeConn ;
sigc::connection bypass_dirpyrDenoiseConn ;
- sigc::connection bypass_sh_hqConn ;
sigc::connection bypass_dirpyrequalizerConn ;
sigc::connection bypass_waveletConn ;
//sigc::connection bypass_raw_bayer_all_enhanceConn ;
diff --git a/rtgui/filecatalog.cc b/rtgui/filecatalog.cc
index e23266e58..86c530661 100644
--- a/rtgui/filecatalog.cc
+++ b/rtgui/filecatalog.cc
@@ -1129,10 +1129,6 @@ void FileCatalog::developRequested (std::vector tbe, bool fas
params.dirpyrDenoise.enabled = false;
}
- if (options.fastexport_bypass_sh_hq) {
- params.sh.hq = false;
- }
-
if (options.fastexport_bypass_dirpyrequalizer) {
params.dirpyrequalizer.enabled = false;
}
diff --git a/rtgui/main-cli.cc b/rtgui/main-cli.cc
index 43948bae9..6643b0913 100644
--- a/rtgui/main-cli.cc
+++ b/rtgui/main-cli.cc
@@ -206,75 +206,6 @@ int main (int argc, char **argv)
g_rename (Glib::build_filename (options.rtdir, "cache").c_str (), options.cacheBaseDir.c_str ());
}
-#endif
-
-#ifdef WIN32
- bool consoleOpened = false;
-
- // suppression of annoying error boxes
- SetErrorMode (SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX | SEM_NOOPENFILEERRORBOX);
-
- if (argc > 1 || options.rtSettings.verbose) {
- Glib::ustring fname (fname_to_utf8 (argv[1]));
-#if ECLIPSE_ARGS
- fname = fname.substr (1, fname.length() - 2);
-#endif
-
- if (options.rtSettings.verbose || ( !Glib::file_test (fname, Glib::FILE_TEST_EXISTS ) && !Glib::file_test (fname, Glib::FILE_TEST_IS_DIR))) {
- bool stdoutRedirectedtoFile = (GetFileType (GetStdHandle (STD_OUTPUT_HANDLE)) == 0x0001);
- bool stderrRedirectedtoFile = (GetFileType (GetStdHandle (STD_ERROR_HANDLE)) == 0x0001);
-
- // no console, if stdout and stderr both are redirected to file
- if ( ! (stdoutRedirectedtoFile && stderrRedirectedtoFile)) {
- // check if parameter -w was passed.
- // We have to do that in this step, because it controls whether to open a console to show the output of following steps
- bool Console = true;
-
- for (int i = 1; i < argc; i++)
- if (!strcmp (argv[i], "-w")) {
- Console = false;
- break;
- }
-
- if (Console && AllocConsole()) {
- AttachConsole ( GetCurrentProcessId() ) ;
- // Don't allow CTRL-C in console to terminate RT
- SetConsoleCtrlHandler ( NULL, true );
- // Set title of console
- char consoletitle[128];
- sprintf (consoletitle, "RawTherapee %s Console", RTVERSION);
- SetConsoleTitle (consoletitle);
- // increase size of screen buffer
- COORD c;
- c.X = 200;
- c.Y = 1000;
- SetConsoleScreenBufferSize ( GetStdHandle ( STD_OUTPUT_HANDLE ), c );
- // Disable console-Cursor
- CONSOLE_CURSOR_INFO cursorInfo;
- cursorInfo.dwSize = 100;
- cursorInfo.bVisible = false;
- SetConsoleCursorInfo ( GetStdHandle ( STD_OUTPUT_HANDLE ), &cursorInfo );
-
- if (!stdoutRedirectedtoFile) {
- freopen ( "CON", "w", stdout ) ;
- }
-
- if (!stderrRedirectedtoFile) {
- freopen ( "CON", "w", stderr ) ;
- }
-
- freopen ( "CON", "r", stdin ) ;
-
- consoleOpened = true;
-
- // printing RT's version in every case, particularly useful for the 'verbose' mode, but also for the batch processing
- std::cout << "RawTherapee, version " << RTVERSION << ", command line" << std::endl;
- std::cout << "WARNING: closing this window will close RawTherapee!" << std::endl << std::endl;
- }
- }
- }
- }
-
#endif
int ret = 0;
@@ -288,16 +219,6 @@ int main (int argc, char **argv)
std::cout << "Terminating without anything to do." << std::endl;
}
-#ifdef WIN32
-
- if (consoleOpened) {
- printf ("Press any key to exit RawTherapee\n");
- FlushConsoleInputBuffer (GetStdHandle (STD_INPUT_HANDLE));
- getch();
- }
-
-#endif
-
return ret;
}
@@ -575,11 +496,6 @@ int processLineParams ( int argc, char **argv )
}
break;
-#ifdef WIN32
-
- case 'w': // This case is handled outside this function
- break;
-#endif
case 'h':
case '?':
@@ -602,10 +518,6 @@ int processLineParams ( int argc, char **argv )
std::cout << " " << Glib::path_get_basename (argv[0]) << " -c | Convert files in batch with default parameters." << std::endl;
std::cout << " " << Glib::path_get_basename (argv[0]) << " -c | Convert files in batch with your own settings." << std::endl;
std::cout << std::endl;
-#ifdef WIN32
- std::cout << " -w Do not open the Windows console" << std::endl;
- std::cout << std::endl;
-#endif
std::cout << "Options:" << std::endl;
std::cout << " " << Glib::path_get_basename (argv[0]) << "[-o