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 |-O ] [-q] [-a] [-s|-S] [-p [-p ...] ] [-d] [ -j[1-100] [-js<1-3>] | [-b<8|16>] [-t[z] | [-n]] ] [-Y] [-f] -c " << std::endl; std::cout << std::endl; diff --git a/rtgui/main.cc b/rtgui/main.cc index 702b77231..6b1feca5d 100644 --- a/rtgui/main.cc +++ b/rtgui/main.cc @@ -122,6 +122,7 @@ static void myGdkLockLeave() //int processLineParams ( int argc, char **argv ); int processLineParams ( int argc, char **argv ) { + int ret = 1; for ( int iArg = 1; iArg < argc; iArg++) { Glib::ustring currParam (argv[iArg]); if ( currParam.empty() ) { @@ -140,8 +141,9 @@ int processLineParams ( int argc, char **argv ) #endif case 'v': - std::cout << "Using lensfun " << LF_VERSION_MAJOR << "." << LF_VERSION_MINOR << "." << LF_VERSION_MICRO << "." << LF_VERSION_BUGFIX << std::endl; - return 0; + printf("RawTherapee, version %s\n", RTVERSION); + ret = 0; + break; #ifndef __APPLE__ // TODO agriggio - there seems to be already some "single instance app" support for OSX in rtwindow. Disabling it here until I understand how to merge the two @@ -166,34 +168,29 @@ int processLineParams ( int argc, char **argv ) case 'h': case '?': default: { - Glib::ustring pparamsExt = paramFileExtension.substr (1); - std::cout << " An advanced, cross-platform program for developing raw photos." << std::endl; + printf(" An advanced, cross-platform program for developing raw photos.\n\n"); + printf(" Website: http://www.rawtherapee.com/\n"); + printf(" Documentation: http://rawpedia.rawtherapee.com/\n"); + printf(" Forum: https://discuss.pixls.us/c/software/rawtherapee\n"); + printf(" Code and bug reports: https://github.com/Beep6581/RawTherapee\n\n"); + printf("Symbols:\n"); + printf(" indicate parameters you can change.\n\n"); + printf("Usage:\n"); + printf(" %s Start File Browser inside folder.\n",Glib::path_get_basename (argv[0]).c_str()); + printf(" %s Start Image Editor with file.\n\n",Glib::path_get_basename (argv[0]).c_str()); std::cout << std::endl; - std::cout << " Website: http://www.rawtherapee.com/" << std::endl; - std::cout << " Documentation: http://rawpedia.rawtherapee.com/" << std::endl; - std::cout << " Forum: https://discuss.pixls.us/c/software/rawtherapee" << std::endl; - std::cout << " Code and bug reports: https://github.com/Beep6581/RawTherapee" << std::endl; - std::cout << std::endl; - std::cout << "Symbols:" << std::endl; - std::cout << " indicate parameters you can change." << std::endl; - //std::cout << " [Square brackets] mean the parameter is optional." << std::endl; - //std::cout << " The pipe symbol | indicates a choice of one or the other." << std::endl; - //std::cout << " The dash symbol - denotes a range of possible values from one to the other." << std::endl; - std::cout << std::endl; - std::cout << "Usage:" << std::endl; - std::cout << " " << Glib::path_get_basename (argv[0]) << " Start File Browser inside folder." << std::endl; - std::cout << " " << Glib::path_get_basename (argv[0]) << " Start Image Editor with file." << std::endl; - std::cout << std::endl; - std::cout << "Options:" << std::endl; + printf("Options:\n"); #ifdef WIN32 - std::cout << " -w Do not open the Windows console" << std::endl; + printf(" -w Do not open the Windows console\n"); #endif - std::cout << " -v Print RawTherapee version number and exit" << std::endl; + printf(" -v Print RawTherapee version number and exit\n"); #ifndef __APPLE__ - std::cout << " -R Raise an already running RawTherapee instance (if available)" << std::endl; + printf(" -R Raise an already running RawTherapee instance (if available)\n"); #endif - std::cout << " -h -? Display this help message" << std::endl; - return -1; + printf(" -h -? Display this help message\n"); + + ret = -1; + break; } } } else { @@ -213,7 +210,7 @@ int processLineParams ( int argc, char **argv ) } } - return 1; + return ret; } @@ -472,6 +469,12 @@ int main (int argc, char **argv) Glib::init(); // called by Gtk::Main, but this may be important for thread handling, so we call it ourselves now Gio::init (); +#ifdef WIN32 + if (GetFileType (GetStdHandle (STD_OUTPUT_HANDLE)) == 0x0003) { + // started from msys2 console => do not buffer stdout + setbuf(stdout, NULL); + } +#endif #ifdef BUILD_BUNDLE char exname[512] = {0}; @@ -518,7 +521,6 @@ int main (int argc, char **argv) options.rtSettings.lensfunDbDirectory = LENSFUN_DB_PATH; #endif - #ifdef WIN32 bool consoleOpened = false; @@ -526,14 +528,10 @@ int main (int argc, char **argv) SetErrorMode (SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX | SEM_NOOPENFILEERRORBOX); if (argc > 1) { - int ret = processLineParams ( argc, argv); - - if (options.rtSettings.verbose || (!remote && !Glib::file_test (argv1, Glib::FILE_TEST_EXISTS ) && !Glib::file_test (argv1, 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)) { + if (!remote && !Glib::file_test (argv1, Glib::FILE_TEST_EXISTS ) && !Glib::file_test (argv1, Glib::FILE_TEST_IS_DIR)) { + bool stdoutRedirecttoConsole = (GetFileType (GetStdHandle (STD_OUTPUT_HANDLE)) == 0x0000); + // open console, if stdout is invalid + if (stdoutRedirecttoConsole) { // 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; @@ -563,26 +561,21 @@ int main (int argc, char **argv) cursorInfo.bVisible = false; SetConsoleCursorInfo ( GetStdHandle ( STD_OUTPUT_HANDLE ), &cursorInfo ); - if (!stdoutRedirectedtoFile) { + if (stdoutRedirecttoConsole) { // if stdout is Redirect to console, we also redirect stderr to console 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 << std::endl; - std::cout << "WARNING: closing this window will close RawTherapee!" << std::endl << std::endl; } } } + int ret = processLineParams ( argc, argv); if ( ret <= 0 ) { + fflush(stdout); if (consoleOpened) { printf ("Press any key to exit RawTherapee\n"); FlushConsoleInputBuffer (GetStdHandle (STD_INPUT_HANDLE)); @@ -595,24 +588,24 @@ int main (int argc, char **argv) #else - if (argc > 1 || options.rtSettings.verbose) { - // printing RT's version in all case, particularly useful for the 'verbose' mode, but also for the batch processing - std::cout << "RawTherapee, version " << RTVERSION << std::endl; -#ifdef WIN32 - std::cout << "WARNING: closing this window will close RawTherapee!" << std::endl << std::endl; -#endif + if (argc > 1) { + int ret = processLineParams ( argc, argv); - if (argc > 1) { - int ret = processLineParams ( argc, argv); - - if ( ret <= 0 ) { - return ret; - } + if ( ret <= 0 ) { + return ret; } } #endif + Glib::ustring fatalError; + + try { + Options::load(); + } catch (Options::Error &e) { + fatalError = e.get_msg(); + } + if (gimpPlugin) { if (!Glib::file_test (argv1, Glib::FILE_TEST_EXISTS) || Glib::file_test (argv1, Glib::FILE_TEST_IS_DIR)) { printf ("Error: argv1 doesn't exist\n"); @@ -629,14 +622,6 @@ int main (int argc, char **argv) int ret = 0; - Glib::ustring fatalError; - - try { - Options::load(); - } catch (Options::Error &e) { - fatalError = e.get_msg(); - } - gdk_threads_set_lock_functions (G_CALLBACK (myGdkLockEnter), (G_CALLBACK (myGdkLockLeave))); gdk_threads_init(); gtk_init (&argc, &argv); // use the "--g-fatal-warnings" command line flag to make warnings fatal @@ -682,6 +667,7 @@ int main (int argc, char **argv) if (consoleOpened) { printf ("Press any key to exit RawTherapee\n"); + fflush(stdout); FlushConsoleInputBuffer (GetStdHandle (STD_INPUT_HANDLE)); getch(); } diff --git a/rtgui/options.cc b/rtgui/options.cc index 7713685fe..e60bc8477 100644 --- a/rtgui/options.cc +++ b/rtgui/options.cc @@ -455,7 +455,6 @@ void Options::setDefaults () //fastexport_bypass_colorDenoise = true; fastexport_bypass_defringe = true; fastexport_bypass_dirpyrDenoise = true; - fastexport_bypass_sh_hq = true; fastexport_bypass_dirpyrequalizer = true; fastexport_bypass_wavelet = true; fastexport_raw_bayer_method = "fast"; @@ -1588,10 +1587,6 @@ void Options::readFromFile (Glib::ustring fname) fastexport_bypass_dirpyrDenoise = keyFile.get_boolean ("Fast Export", "fastexport_bypass_dirpyrDenoise" ); } - if (keyFile.has_key ("Fast Export", "fastexport_bypass_sh_hq" )) { - fastexport_bypass_sh_hq = keyFile.get_boolean ("Fast Export", "fastexport_bypass_sh_hq" ); - } - if (keyFile.has_key ("Fast Export", "fastexport_bypass_dirpyrequalizer" )) { fastexport_bypass_dirpyrequalizer = keyFile.get_boolean ("Fast Export", "fastexport_bypass_dirpyrequalizer" ); } @@ -2079,7 +2074,6 @@ void Options::saveToFile (Glib::ustring fname) //keyFile.set_boolean ("Fast Export", "fastexport_bypass_colorDenoise" , fastexport_bypass_colorDenoise); keyFile.set_boolean ("Fast Export", "fastexport_bypass_defringe", fastexport_bypass_defringe); keyFile.set_boolean ("Fast Export", "fastexport_bypass_dirpyrDenoise", fastexport_bypass_dirpyrDenoise); - keyFile.set_boolean ("Fast Export", "fastexport_bypass_sh_hq", fastexport_bypass_sh_hq); keyFile.set_boolean ("Fast Export", "fastexport_bypass_dirpyrequalizer", fastexport_bypass_dirpyrequalizer); keyFile.set_boolean ("Fast Export", "fastexport_bypass_wavelet", fastexport_bypass_wavelet); keyFile.set_string ("Fast Export", "fastexport_raw_bayer_method", fastexport_raw_bayer_method); diff --git a/rtgui/options.h b/rtgui/options.h index 2500bd48b..8ac6a1673 100644 --- a/rtgui/options.h +++ b/rtgui/options.h @@ -300,7 +300,6 @@ public: //bool fastexport_bypass_colorDenoise; bool fastexport_bypass_defringe; bool fastexport_bypass_dirpyrDenoise; - bool fastexport_bypass_sh_hq; bool fastexport_bypass_dirpyrequalizer; bool fastexport_bypass_wavelet; Glib::ustring fastexport_raw_bayer_method; diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc index 2c3278134..a09b7e625 100644 --- a/rtgui/paramsedited.cc +++ b/rtgui/paramsedited.cc @@ -283,7 +283,6 @@ void ParamsEdited::set(bool v) fattal.amount = v; fattal.anchor = v; sh.enabled = v; - sh.hq = v; sh.highlights = v; sh.htonalwidth = v; sh.shadows = v; @@ -518,37 +517,20 @@ void ParamsEdited::set(bool v) raw.bayersensor.dcbEnhance = v; //raw.bayersensor.allEnhance = v; raw.bayersensor.lmmseIterations = v; - raw.bayersensor.pixelShiftMotion = v; - raw.bayersensor.pixelShiftMotionCorrection = v; raw.bayersensor.pixelShiftMotionCorrectionMethod = v; - raw.bayersensor.pixelShiftStddevFactorGreen = v; - raw.bayersensor.pixelShiftStddevFactorRed = v; - raw.bayersensor.pixelShiftStddevFactorBlue = v; raw.bayersensor.pixelShiftEperIso = v; - raw.bayersensor.pixelShiftNreadIso = v; - raw.bayersensor.pixelShiftPrnu = v; raw.bayersensor.pixelShiftSigma = v; - raw.bayersensor.pixelShiftSum = v; - raw.bayersensor.pixelShiftRedBlueWeight = v; raw.bayersensor.pixelShiftShowMotion = v; raw.bayersensor.pixelShiftShowMotionMaskOnly = v; - raw.bayersensor.pixelShiftAutomatic = v; - raw.bayersensor.pixelShiftNonGreenHorizontal = v; - raw.bayersensor.pixelShiftNonGreenVertical = v; raw.bayersensor.pixelShiftHoleFill = v; raw.bayersensor.pixelShiftMedian = v; - raw.bayersensor.pixelShiftMedian3 = v; raw.bayersensor.pixelShiftGreen = v; raw.bayersensor.pixelShiftBlur = v; raw.bayersensor.pixelShiftSmooth = v; - raw.bayersensor.pixelShiftExp0 = v; raw.bayersensor.pixelShiftLmmse = v; - raw.bayersensor.pixelShiftOneGreen = v; raw.bayersensor.pixelShiftEqualBright = v; raw.bayersensor.pixelShiftEqualBrightChannel = v; raw.bayersensor.pixelShiftNonGreenCross = v; - raw.bayersensor.pixelShiftNonGreenCross2 = v; - raw.bayersensor.pixelShiftNonGreenAmaze = v; raw.bayersensor.greenEq = v; raw.bayersensor.linenoise = v; raw.bayersensor.linenoiseDirection = v; @@ -966,7 +948,6 @@ void ParamsEdited::initFrom(const std::vector& fattal.anchor = fattal.anchor && p.fattal.anchor == other.fattal.anchor; sh.enabled = sh.enabled && p.sh.enabled == other.sh.enabled; - sh.hq = sh.hq && p.sh.hq == other.sh.hq; sh.highlights = sh.highlights && p.sh.highlights == other.sh.highlights; sh.htonalwidth = sh.htonalwidth && p.sh.htonalwidth == other.sh.htonalwidth; sh.shadows = sh.shadows && p.sh.shadows == other.sh.shadows; @@ -1199,37 +1180,20 @@ void ParamsEdited::initFrom(const std::vector& raw.bayersensor.dcbEnhance = raw.bayersensor.dcbEnhance && p.raw.bayersensor.dcb_enhance == other.raw.bayersensor.dcb_enhance; //raw.bayersensor.allEnhance = raw.bayersensor.allEnhance && p.raw.bayersensor.all_enhance == other.raw.bayersensor.all_enhance; raw.bayersensor.lmmseIterations = raw.bayersensor.lmmseIterations && p.raw.bayersensor.lmmse_iterations == other.raw.bayersensor.lmmse_iterations; - raw.bayersensor.pixelShiftMotion = raw.bayersensor.pixelShiftMotion && p.raw.bayersensor.pixelShiftMotion == other.raw.bayersensor.pixelShiftMotion; - raw.bayersensor.pixelShiftMotionCorrection = raw.bayersensor.pixelShiftMotionCorrection && p.raw.bayersensor.pixelShiftMotionCorrection == other.raw.bayersensor.pixelShiftMotionCorrection; raw.bayersensor.pixelShiftMotionCorrectionMethod = raw.bayersensor.pixelShiftMotionCorrectionMethod && p.raw.bayersensor.pixelShiftMotionCorrectionMethod == other.raw.bayersensor.pixelShiftMotionCorrectionMethod; - raw.bayersensor.pixelShiftStddevFactorGreen = raw.bayersensor.pixelShiftStddevFactorGreen && p.raw.bayersensor.pixelShiftStddevFactorGreen == other.raw.bayersensor.pixelShiftStddevFactorGreen; - raw.bayersensor.pixelShiftStddevFactorRed = raw.bayersensor.pixelShiftStddevFactorRed && p.raw.bayersensor.pixelShiftStddevFactorRed == other.raw.bayersensor.pixelShiftStddevFactorRed; - raw.bayersensor.pixelShiftStddevFactorBlue = raw.bayersensor.pixelShiftStddevFactorBlue && p.raw.bayersensor.pixelShiftStddevFactorBlue == other.raw.bayersensor.pixelShiftStddevFactorBlue; raw.bayersensor.pixelShiftEperIso = raw.bayersensor.pixelShiftEperIso && p.raw.bayersensor.pixelShiftEperIso == other.raw.bayersensor.pixelShiftEperIso; - raw.bayersensor.pixelShiftNreadIso = raw.bayersensor.pixelShiftNreadIso && p.raw.bayersensor.pixelShiftNreadIso == other.raw.bayersensor.pixelShiftNreadIso; - raw.bayersensor.pixelShiftPrnu = raw.bayersensor.pixelShiftPrnu && p.raw.bayersensor.pixelShiftPrnu == other.raw.bayersensor.pixelShiftPrnu; raw.bayersensor.pixelShiftSigma = raw.bayersensor.pixelShiftSigma && p.raw.bayersensor.pixelShiftSigma == other.raw.bayersensor.pixelShiftSigma; - raw.bayersensor.pixelShiftSum = raw.bayersensor.pixelShiftSum && p.raw.bayersensor.pixelShiftSum == other.raw.bayersensor.pixelShiftSum; - raw.bayersensor.pixelShiftRedBlueWeight = raw.bayersensor.pixelShiftRedBlueWeight && p.raw.bayersensor.pixelShiftRedBlueWeight == other.raw.bayersensor.pixelShiftRedBlueWeight; raw.bayersensor.pixelShiftShowMotion = raw.bayersensor.pixelShiftShowMotion && p.raw.bayersensor.pixelShiftShowMotion == other.raw.bayersensor.pixelShiftShowMotion; raw.bayersensor.pixelShiftShowMotionMaskOnly = raw.bayersensor.pixelShiftShowMotionMaskOnly && p.raw.bayersensor.pixelShiftShowMotionMaskOnly == other.raw.bayersensor.pixelShiftShowMotionMaskOnly; - raw.bayersensor.pixelShiftAutomatic = raw.bayersensor.pixelShiftAutomatic && p.raw.bayersensor.pixelShiftAutomatic == other.raw.bayersensor.pixelShiftAutomatic; - raw.bayersensor.pixelShiftNonGreenHorizontal = raw.bayersensor.pixelShiftNonGreenHorizontal && p.raw.bayersensor.pixelShiftNonGreenHorizontal == other.raw.bayersensor.pixelShiftNonGreenHorizontal; - raw.bayersensor.pixelShiftNonGreenVertical = raw.bayersensor.pixelShiftNonGreenVertical && p.raw.bayersensor.pixelShiftNonGreenVertical == other.raw.bayersensor.pixelShiftNonGreenVertical; raw.bayersensor.pixelShiftHoleFill = raw.bayersensor.pixelShiftHoleFill && p.raw.bayersensor.pixelShiftHoleFill == other.raw.bayersensor.pixelShiftHoleFill; raw.bayersensor.pixelShiftMedian = raw.bayersensor.pixelShiftMedian && p.raw.bayersensor.pixelShiftMedian == other.raw.bayersensor.pixelShiftMedian; - raw.bayersensor.pixelShiftMedian3 = raw.bayersensor.pixelShiftMedian3 && p.raw.bayersensor.pixelShiftMedian3 == other.raw.bayersensor.pixelShiftMedian3; raw.bayersensor.pixelShiftGreen = raw.bayersensor.pixelShiftGreen && p.raw.bayersensor.pixelShiftGreen == other.raw.bayersensor.pixelShiftGreen; raw.bayersensor.pixelShiftBlur = raw.bayersensor.pixelShiftBlur && p.raw.bayersensor.pixelShiftBlur == other.raw.bayersensor.pixelShiftBlur; raw.bayersensor.pixelShiftSmooth = raw.bayersensor.pixelShiftSmooth && p.raw.bayersensor.pixelShiftSmoothFactor == other.raw.bayersensor.pixelShiftSmoothFactor; - raw.bayersensor.pixelShiftExp0 = raw.bayersensor.pixelShiftExp0 && p.raw.bayersensor.pixelShiftExp0 == other.raw.bayersensor.pixelShiftExp0; raw.bayersensor.pixelShiftLmmse = raw.bayersensor.pixelShiftLmmse && p.raw.bayersensor.pixelShiftLmmse == other.raw.bayersensor.pixelShiftLmmse; - raw.bayersensor.pixelShiftOneGreen = raw.bayersensor.pixelShiftOneGreen && p.raw.bayersensor.pixelShiftOneGreen == other.raw.bayersensor.pixelShiftOneGreen; raw.bayersensor.pixelShiftEqualBright = raw.bayersensor.pixelShiftEqualBright && p.raw.bayersensor.pixelShiftEqualBright == other.raw.bayersensor.pixelShiftEqualBright; raw.bayersensor.pixelShiftEqualBrightChannel = raw.bayersensor.pixelShiftEqualBrightChannel && p.raw.bayersensor.pixelShiftEqualBrightChannel == other.raw.bayersensor.pixelShiftEqualBrightChannel; raw.bayersensor.pixelShiftNonGreenCross = raw.bayersensor.pixelShiftNonGreenCross && p.raw.bayersensor.pixelShiftNonGreenCross == other.raw.bayersensor.pixelShiftNonGreenCross; - raw.bayersensor.pixelShiftNonGreenCross2 = raw.bayersensor.pixelShiftNonGreenCross2 && p.raw.bayersensor.pixelShiftNonGreenCross2 == other.raw.bayersensor.pixelShiftNonGreenCross2; - raw.bayersensor.pixelShiftNonGreenAmaze = raw.bayersensor.pixelShiftNonGreenAmaze && p.raw.bayersensor.pixelShiftNonGreenAmaze == other.raw.bayersensor.pixelShiftNonGreenAmaze; raw.bayersensor.greenEq = raw.bayersensor.greenEq && p.raw.bayersensor.greenthresh == other.raw.bayersensor.greenthresh; raw.bayersensor.linenoise = raw.bayersensor.linenoise && p.raw.bayersensor.linenoise == other.raw.bayersensor.linenoise; raw.bayersensor.linenoiseDirection = raw.bayersensor.linenoiseDirection && p.raw.bayersensor.linenoiseDirection == other.raw.bayersensor.linenoiseDirection; @@ -2324,10 +2288,6 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.sh.enabled = mods.sh.enabled; } - if (sh.hq) { - toEdit.sh.hq = mods.sh.hq; - } - if (sh.highlights) { toEdit.sh.highlights = dontforceSet && options.baBehav[ADDSET_SH_HIGHLIGHTS] ? toEdit.sh.highlights + mods.sh.highlights : mods.sh.highlights; } @@ -3196,54 +3156,18 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.raw.bayersensor.lmmse_iterations = mods.raw.bayersensor.lmmse_iterations; } - if (raw.bayersensor.pixelShiftMotion) { - toEdit.raw.bayersensor.pixelShiftMotion = mods.raw.bayersensor.pixelShiftMotion; - } - - if (raw.bayersensor.pixelShiftMotionCorrection) { - toEdit.raw.bayersensor.pixelShiftMotionCorrection = mods.raw.bayersensor.pixelShiftMotionCorrection; - } - if (raw.bayersensor.pixelShiftMotionCorrectionMethod) { toEdit.raw.bayersensor.pixelShiftMotionCorrectionMethod = mods.raw.bayersensor.pixelShiftMotionCorrectionMethod; } - if (raw.bayersensor.pixelShiftStddevFactorGreen) { - toEdit.raw.bayersensor.pixelShiftStddevFactorGreen = mods.raw.bayersensor.pixelShiftStddevFactorGreen; - } - - if (raw.bayersensor.pixelShiftStddevFactorRed) { - toEdit.raw.bayersensor.pixelShiftStddevFactorRed = mods.raw.bayersensor.pixelShiftStddevFactorRed; - } - - if (raw.bayersensor.pixelShiftStddevFactorBlue) { - toEdit.raw.bayersensor.pixelShiftStddevFactorBlue = mods.raw.bayersensor.pixelShiftStddevFactorBlue; - } - if (raw.bayersensor.pixelShiftEperIso) { toEdit.raw.bayersensor.pixelShiftEperIso = mods.raw.bayersensor.pixelShiftEperIso; } - if (raw.bayersensor.pixelShiftNreadIso) { - toEdit.raw.bayersensor.pixelShiftNreadIso = mods.raw.bayersensor.pixelShiftNreadIso; - } - - if (raw.bayersensor.pixelShiftPrnu) { - toEdit.raw.bayersensor.pixelShiftPrnu = mods.raw.bayersensor.pixelShiftPrnu; - } - if (raw.bayersensor.pixelShiftSigma) { toEdit.raw.bayersensor.pixelShiftSigma = mods.raw.bayersensor.pixelShiftSigma; } - if (raw.bayersensor.pixelShiftSum) { - toEdit.raw.bayersensor.pixelShiftSum = mods.raw.bayersensor.pixelShiftSum; - } - - if (raw.bayersensor.pixelShiftRedBlueWeight) { - toEdit.raw.bayersensor.pixelShiftRedBlueWeight = mods.raw.bayersensor.pixelShiftRedBlueWeight; - } - if (raw.bayersensor.pixelShiftShowMotion) { toEdit.raw.bayersensor.pixelShiftShowMotion = mods.raw.bayersensor.pixelShiftShowMotion; } @@ -3252,18 +3176,6 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.raw.bayersensor.pixelShiftShowMotionMaskOnly = mods.raw.bayersensor.pixelShiftShowMotionMaskOnly; } - if (raw.bayersensor.pixelShiftAutomatic) { - toEdit.raw.bayersensor.pixelShiftAutomatic = mods.raw.bayersensor.pixelShiftAutomatic; - } - - if (raw.bayersensor.pixelShiftNonGreenHorizontal) { - toEdit.raw.bayersensor.pixelShiftNonGreenHorizontal = mods.raw.bayersensor.pixelShiftNonGreenHorizontal; - } - - if (raw.bayersensor.pixelShiftNonGreenVertical) { - toEdit.raw.bayersensor.pixelShiftNonGreenVertical = mods.raw.bayersensor.pixelShiftNonGreenVertical; - } - if (raw.bayersensor.pixelShiftHoleFill) { toEdit.raw.bayersensor.pixelShiftHoleFill = mods.raw.bayersensor.pixelShiftHoleFill; } @@ -3272,10 +3184,6 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.raw.bayersensor.pixelShiftMedian = mods.raw.bayersensor.pixelShiftMedian; } - if (raw.bayersensor.pixelShiftMedian3) { - toEdit.raw.bayersensor.pixelShiftMedian3 = mods.raw.bayersensor.pixelShiftMedian3; - } - if (raw.bayersensor.pixelShiftGreen) { toEdit.raw.bayersensor.pixelShiftGreen = mods.raw.bayersensor.pixelShiftGreen; } @@ -3288,18 +3196,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.raw.bayersensor.pixelShiftSmoothFactor = mods.raw.bayersensor.pixelShiftSmoothFactor; } - if (raw.bayersensor.pixelShiftExp0) { - toEdit.raw.bayersensor.pixelShiftExp0 = mods.raw.bayersensor.pixelShiftExp0; - } - if (raw.bayersensor.pixelShiftLmmse) { toEdit.raw.bayersensor.pixelShiftLmmse = mods.raw.bayersensor.pixelShiftLmmse; } - if (raw.bayersensor.pixelShiftOneGreen) { - toEdit.raw.bayersensor.pixelShiftOneGreen = mods.raw.bayersensor.pixelShiftOneGreen; - } - if (raw.bayersensor.pixelShiftEqualBright) { toEdit.raw.bayersensor.pixelShiftEqualBright = mods.raw.bayersensor.pixelShiftEqualBright; } @@ -3312,14 +3212,6 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.raw.bayersensor.pixelShiftNonGreenCross = mods.raw.bayersensor.pixelShiftNonGreenCross; } - if (raw.bayersensor.pixelShiftNonGreenCross2) { - toEdit.raw.bayersensor.pixelShiftNonGreenCross2 = mods.raw.bayersensor.pixelShiftNonGreenCross2; - } - - if (raw.bayersensor.pixelShiftNonGreenAmaze) { - toEdit.raw.bayersensor.pixelShiftNonGreenAmaze = mods.raw.bayersensor.pixelShiftNonGreenAmaze; - } - if (raw.bayersensor.greenEq) { toEdit.raw.bayersensor.greenthresh = dontforceSet && options.baBehav[ADDSET_PREPROCESS_GREENEQUIL] ? toEdit.raw.bayersensor.greenthresh + mods.raw.bayersensor.greenthresh : mods.raw.bayersensor.greenthresh; } @@ -3841,9 +3733,8 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng bool RAWParamsEdited::BayerSensor::isUnchanged() const { return method && imageNum && dcbIterations && dcbEnhance && lmmseIterations/*&& allEnhance*/ && greenEq - && pixelShiftMotion && pixelShiftMotionCorrection && pixelShiftMotionCorrectionMethod && pixelShiftStddevFactorGreen && pixelShiftStddevFactorRed && pixelShiftStddevFactorBlue && pixelShiftEperIso - && pixelShiftNreadIso && pixelShiftPrnu && pixelShiftSigma && pixelShiftSum && pixelShiftRedBlueWeight && pixelShiftShowMotion && pixelShiftShowMotionMaskOnly - && pixelShiftAutomatic && pixelShiftNonGreenHorizontal && pixelShiftNonGreenVertical && pixelShiftHoleFill && pixelShiftMedian && pixelShiftMedian3 && pixelShiftNonGreenCross && pixelShiftNonGreenCross2 && pixelShiftNonGreenAmaze && pixelShiftGreen && pixelShiftBlur && pixelShiftSmooth && pixelShiftExp0 && pixelShiftLmmse && pixelShiftOneGreen && pixelShiftEqualBright && pixelShiftEqualBrightChannel + && pixelShiftMotionCorrectionMethod && pixelShiftEperIso && pixelShiftSigma && pixelShiftShowMotion && pixelShiftShowMotionMaskOnly + && pixelShiftHoleFill && pixelShiftMedian && pixelShiftNonGreenCross && pixelShiftGreen && pixelShiftBlur && pixelShiftSmooth && pixelShiftLmmse && pixelShiftEqualBright && pixelShiftEqualBrightChannel && linenoise && linenoiseDirection && pdafLinesFilter && exBlack0 && exBlack1 && exBlack2 && exBlack3 && exTwoGreen; } diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h index c9f491cde..99092c916 100644 --- a/rtgui/paramsedited.h +++ b/rtgui/paramsedited.h @@ -848,37 +848,20 @@ public: bool dcbIterations; bool dcbEnhance; bool lmmseIterations; - bool pixelShiftMotion; - bool pixelShiftMotionCorrection; bool pixelShiftMotionCorrectionMethod; - bool pixelShiftStddevFactorGreen; - bool pixelShiftStddevFactorRed; - bool pixelShiftStddevFactorBlue; bool pixelShiftEperIso; - bool pixelShiftNreadIso; - bool pixelShiftPrnu; bool pixelShiftSigma; - bool pixelShiftSum; - bool pixelShiftRedBlueWeight; bool pixelShiftShowMotion; bool pixelShiftShowMotionMaskOnly; - bool pixelShiftAutomatic; - bool pixelShiftNonGreenHorizontal; - bool pixelShiftNonGreenVertical; bool pixelShiftHoleFill; bool pixelShiftMedian; - bool pixelShiftMedian3; bool pixelShiftGreen; bool pixelShiftBlur; bool pixelShiftSmooth; - bool pixelShiftExp0; bool pixelShiftLmmse; - bool pixelShiftOneGreen; bool pixelShiftEqualBright; bool pixelShiftEqualBrightChannel; bool pixelShiftNonGreenCross; - bool pixelShiftNonGreenCross2; - bool pixelShiftNonGreenAmaze; //bool allEnhance; bool greenEq; diff --git a/rtgui/partialpastedlg.cc b/rtgui/partialpastedlg.cc index 4828e90dc..c9ed1cd14 100644 --- a/rtgui/partialpastedlg.cc +++ b/rtgui/partialpastedlg.cc @@ -846,34 +846,18 @@ void PartialPasteDlg::applyPaste (rtengine::procparams::ProcParams* dstPP, Param } if (!raw_pixelshift->get_active ()) { - filterPE.raw.bayersensor.pixelShiftAutomatic = falsePE.raw.bayersensor.pixelShiftAutomatic; filterPE.raw.bayersensor.pixelShiftBlur = falsePE.raw.bayersensor.pixelShiftBlur; filterPE.raw.bayersensor.pixelShiftEperIso = falsePE.raw.bayersensor.pixelShiftEperIso; filterPE.raw.bayersensor.pixelShiftEqualBright = falsePE.raw.bayersensor.pixelShiftEqualBright; filterPE.raw.bayersensor.pixelShiftEqualBrightChannel = falsePE.raw.bayersensor.pixelShiftEqualBrightChannel; - filterPE.raw.bayersensor.pixelShiftExp0 = falsePE.raw.bayersensor.pixelShiftExp0; filterPE.raw.bayersensor.pixelShiftGreen = falsePE.raw.bayersensor.pixelShiftGreen; filterPE.raw.bayersensor.pixelShiftHoleFill = falsePE.raw.bayersensor.pixelShiftHoleFill; filterPE.raw.bayersensor.pixelShiftLmmse = falsePE.raw.bayersensor.pixelShiftLmmse; filterPE.raw.bayersensor.pixelShiftMedian = falsePE.raw.bayersensor.pixelShiftMedian; - filterPE.raw.bayersensor.pixelShiftMedian3 = falsePE.raw.bayersensor.pixelShiftMedian3; - filterPE.raw.bayersensor.pixelShiftMotion = falsePE.raw.bayersensor.pixelShiftMotion; - filterPE.raw.bayersensor.pixelShiftMotionCorrection = falsePE.raw.bayersensor.pixelShiftMotionCorrection; filterPE.raw.bayersensor.pixelShiftMotionCorrectionMethod = falsePE.raw.bayersensor.pixelShiftMotionCorrectionMethod; - filterPE.raw.bayersensor.pixelShiftNonGreenAmaze = falsePE.raw.bayersensor.pixelShiftNonGreenAmaze; filterPE.raw.bayersensor.pixelShiftNonGreenCross = falsePE.raw.bayersensor.pixelShiftNonGreenCross; - filterPE.raw.bayersensor.pixelShiftNonGreenCross2 = falsePE.raw.bayersensor.pixelShiftNonGreenCross2; - filterPE.raw.bayersensor.pixelShiftNonGreenHorizontal = falsePE.raw.bayersensor.pixelShiftNonGreenHorizontal; - filterPE.raw.bayersensor.pixelShiftNonGreenVertical = falsePE.raw.bayersensor.pixelShiftNonGreenVertical; - filterPE.raw.bayersensor.pixelShiftNreadIso = falsePE.raw.bayersensor.pixelShiftNreadIso; - filterPE.raw.bayersensor.pixelShiftPrnu = falsePE.raw.bayersensor.pixelShiftPrnu; - filterPE.raw.bayersensor.pixelShiftRedBlueWeight = falsePE.raw.bayersensor.pixelShiftRedBlueWeight; filterPE.raw.bayersensor.pixelShiftSigma = falsePE.raw.bayersensor.pixelShiftSigma; filterPE.raw.bayersensor.pixelShiftSmooth = falsePE.raw.bayersensor.pixelShiftSmooth; - filterPE.raw.bayersensor.pixelShiftStddevFactorBlue = falsePE.raw.bayersensor.pixelShiftStddevFactorBlue; - filterPE.raw.bayersensor.pixelShiftStddevFactorGreen = falsePE.raw.bayersensor.pixelShiftStddevFactorGreen; - filterPE.raw.bayersensor.pixelShiftStddevFactorRed = falsePE.raw.bayersensor.pixelShiftStddevFactorRed; - filterPE.raw.bayersensor.pixelShiftSum = falsePE.raw.bayersensor.pixelShiftSum; filterPE.raw.bayersensor.pixelShiftShowMotion = falsePE.raw.bayersensor.pixelShiftShowMotion; filterPE.raw.bayersensor.pixelShiftShowMotionMaskOnly = falsePE.raw.bayersensor.pixelShiftShowMotionMaskOnly; } diff --git a/rtgui/ppversion.h b/rtgui/ppversion.h index e2838c2c0..1265d9969 100644 --- a/rtgui/ppversion.h +++ b/rtgui/ppversion.h @@ -1,16 +1,20 @@ #pragma once // This number has to be incremented whenever the PP3 file format is modified or the behaviour of a tool changes -#define PPVERSION 331 +#define PPVERSION 333 #define PPVERSION_AEXP 301 //value of PPVERSION when auto exposure algorithm was modified /* Log of version changes - 331 2018-14-02 + 333 2018-04-26 + new Shadows/Highlights tool + 332 2018-04-18 + changed pixelShiftEperIso calculation + 331 2018-02-14 changed wavelet.Lmethod to int - 330 2018-20-01 + 330 2018-01-20 Added 'Auto-matched Tone Curve' button, performing histogram matching - 329 2017-12-09 + 329 2017-09-12 Added 'Enabled' flag for Channel Mixer, RGB Curves, HSV Equalizer and L*a*b* Adjustments 328 2017-11-22 Fix wrong type of ff_clipControl diff --git a/rtgui/shadowshighlights.cc b/rtgui/shadowshighlights.cc index 8c701dae6..f1d8dbaf2 100644 --- a/rtgui/shadowshighlights.cc +++ b/rtgui/shadowshighlights.cc @@ -23,28 +23,21 @@ using namespace rtengine::procparams; ShadowsHighlights::ShadowsHighlights () : FoldableToolPanel(this, "shadowshighlights", M("TP_SHADOWSHLIGHTS_LABEL"), false, true) { - - hq = Gtk::manage (new Gtk::CheckButton (M("TP_SHADOWSHLIGHTS_SHARPMASK"))); - hq->set_active (false); - pack_start (*hq); - hqConn = hq->signal_toggled().connect( sigc::mem_fun(*this, &ShadowsHighlights::hqChanged) ); - - pack_start (*Gtk::manage (new Gtk::HSeparator())); highlights = Gtk::manage (new Adjuster (M("TP_SHADOWSHLIGHTS_HIGHLIGHTS"), 0, 100, 1, 0)); - h_tonalwidth = Gtk::manage (new Adjuster (M("TP_SHADOWSHLIGHTS_HLTONALW"), 10, 100, 1, 80)); + h_tonalwidth = Gtk::manage (new Adjuster (M("TP_SHADOWSHLIGHTS_HLTONALW"), 10, 100, 1, 70)); pack_start (*highlights); pack_start (*h_tonalwidth); pack_start (*Gtk::manage (new Gtk::HSeparator())); shadows = Gtk::manage (new Adjuster (M("TP_SHADOWSHLIGHTS_SHADOWS"), 0, 100, 1, 0)); - s_tonalwidth = Gtk::manage (new Adjuster (M("TP_SHADOWSHLIGHTS_SHTONALW"), 10, 100, 1, 80)); + s_tonalwidth = Gtk::manage (new Adjuster (M("TP_SHADOWSHLIGHTS_SHTONALW"), 10, 100, 1, 30)); pack_start (*shadows); pack_start (*s_tonalwidth); pack_start (*Gtk::manage (new Gtk::HSeparator())); - radius = Gtk::manage (new Adjuster (M("TP_SHADOWSHLIGHTS_RADIUS"), 5, 100, 1, 30)); + radius = Gtk::manage (new Adjuster (M("TP_SHADOWSHLIGHTS_RADIUS"), 1, 100, 1, 40)); pack_start (*radius); radius->setAdjusterListener (this); @@ -68,17 +61,10 @@ void ShadowsHighlights::read (const ProcParams* pp, const ParamsEdited* pedited) shadows->setEditedState (pedited->sh.shadows ? Edited : UnEdited); s_tonalwidth->setEditedState (pedited->sh.stonalwidth ? Edited : UnEdited); set_inconsistent (multiImage && !pedited->sh.enabled); - hq->set_inconsistent (!pedited->sh.hq); } setEnabled (pp->sh.enabled); - hqConn.block (true); - hq->set_active (pp->sh.hq); - hqConn.block (false); - - lastHQ = pp->sh.hq; - radius->setValue (pp->sh.radius); highlights->setValue (pp->sh.highlights); h_tonalwidth->setValue (pp->sh.htonalwidth); @@ -97,7 +83,6 @@ void ShadowsHighlights::write (ProcParams* pp, ParamsEdited* pedited) pp->sh.shadows = (int)shadows->getValue (); pp->sh.stonalwidth = (int)s_tonalwidth->getValue (); pp->sh.enabled = getEnabled(); - pp->sh.hq = hq->get_active(); if (pedited) { pedited->sh.radius = radius->getEditedState (); @@ -106,7 +91,6 @@ void ShadowsHighlights::write (ProcParams* pp, ParamsEdited* pedited) pedited->sh.shadows = shadows->getEditedState (); pedited->sh.stonalwidth = s_tonalwidth->getEditedState (); pedited->sh.enabled = !get_inconsistent(); - pedited->sh.hq = !hq->get_inconsistent(); } } @@ -169,31 +153,6 @@ void ShadowsHighlights::enabledChanged () } } -void ShadowsHighlights::hqChanged () -{ - - if (batchMode) { - if (hq->get_inconsistent()) { - hq->set_inconsistent (false); - hqConn.block (true); - hq->set_active (false); - hqConn.block (false); - } else if (lastHQ) { - hq->set_inconsistent (true); - } - - lastHQ = hq->get_active (); - } - - if (listener) { - if (hq->get_active()) { - listener->panelChanged (EvSHHighQuality, M("GENERAL_ENABLED")); - } else { - listener->panelChanged (EvSHHighQuality, M("GENERAL_DISABLED")); - } - } -} - void ShadowsHighlights::setBatchMode (bool batchMode) { diff --git a/rtgui/shadowshighlights.h b/rtgui/shadowshighlights.h index de3f893d5..96642bfc0 100644 --- a/rtgui/shadowshighlights.h +++ b/rtgui/shadowshighlights.h @@ -32,9 +32,6 @@ protected: Adjuster* shadows; Adjuster* s_tonalwidth; Adjuster* radius; - Gtk::CheckButton* hq; - bool lastHQ; - sigc::connection hqConn; public: @@ -47,7 +44,6 @@ public: void adjusterChanged (Adjuster* a, double newval); void enabledChanged (); - void hqChanged (); void setAdjusterBehavior (bool hadd, bool sadd); void trimValues (rtengine::procparams::ProcParams* pp); diff --git a/rtgui/tonecurve.cc b/rtgui/tonecurve.cc index 043d1d055..be683c3ee 100644 --- a/rtgui/tonecurve.cc +++ b/rtgui/tonecurve.cc @@ -32,7 +32,7 @@ ToneCurve::ToneCurve () : FoldableToolPanel(this, "tonecurve", M("TP_EXPOSURE_LA auto m = ProcEventMapper::getInstance(); EvHistMatching = m->newEvent(AUTOEXP, "HISTORY_MSG_HISTMATCHING"); EvHistMatchingBatch = m->newEvent(M_VOID, "HISTORY_MSG_HISTMATCHING"); - EvClampOOG = m->newEvent(RGBCURVE, "HISTORY_MSG_CLAMPOOG"); + EvClampOOG = m->newEvent(DARKFRAME, "HISTORY_MSG_CLAMPOOG"); CurveListener::setMulti(true); diff --git a/tools/win/InnoSetup/WindowsInnoSetup.iss.in b/tools/win/InnoSetup/WindowsInnoSetup.iss.in index 235d64968..6814d9c74 100644 --- a/tools/win/InnoSetup/WindowsInnoSetup.iss.in +++ b/tools/win/InnoSetup/WindowsInnoSetup.iss.in @@ -38,7 +38,7 @@ AppId={#MyAppName}{#MyAppVersion} AppName={#MyAppName} AppVersion={#MyAppVersion} -VersionInfoVersion={#MyAppVersionNumeric} +;VersionInfoVersion={#MyAppVersionNumeric} AppPublisher={#MyAppPublisher} AppPublisherURL={#MyAppURL} AppSupportURL={#MyAppURL}