diff --git a/rtdata/languages/default b/rtdata/languages/default index 2a4943424..064c4dbdb 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -701,6 +701,7 @@ HISTORY_MSG_466;EvPixelShiftExp0 HISTORY_MSG_467;EvPixelShiftHoleFill HISTORY_MSG_468;EvPixelShiftMedian HISTORY_MSG_469;EvPixelShiftMotionMethod +HISTORY_MSG_470;EvPixelShiftSmooth HISTORY_NEWSNAPSHOT;Add HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s HISTORY_SNAPSHOT;Snapshot @@ -1686,6 +1687,7 @@ TP_RAW_PIXELSHIFTMEDIAN;Median TP_RAW_PIXELSHIFTMEDIAN3;Exclude selected frame from median TP_RAW_PIXELSHIFTHOLEFILL;3x3 new: Fill holes TP_RAW_PIXELSHIFTBLUR;3x3 new: Blur +TP_RAW_PIXELSHIFTSMOOTH;3x3 new: Smooth transitions TP_RAW_PIXELSHIFTEXP0;Experimental TP_RAW_PIXELSHIFTGREEN;Check dual green TP_RAW_PIXELSHIFTNONGREENCROSS;Check red/blue cross @@ -1695,6 +1697,7 @@ TP_RAW_PIXELSHIFTMOTION;Motion detection level (deprecated) 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_PIXELSHIFTHOLEFILL_TOOLTIP;Fill holes in motion mask TP_RAW_PIXELSHIFTBLUR_TOOLTIP;Blur motion mask +TP_RAW_PIXELSHIFTSMOOTH_TOOLTIP;Smooth transitions (requires 3x3 new Blur) 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_PIXELSHIFTMEDIAN3_TOOLTIP;Excludes selected frame from median.\nUseful if moving objects overlap in frame 2 and 3 TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Overlays the image with a mask showing the regions with motion diff --git a/rtengine/pixelshift.cc b/rtengine/pixelshift.cc index 1fde4156d..91aa972ee 100644 --- a/rtengine/pixelshift.cc +++ b/rtengine/pixelshift.cc @@ -906,6 +906,7 @@ void RawImageSource::pixelshift(int winx, int winy, int winw, int winh, const RA const float threshold = bayerParams.pixelShiftSum; const bool experimental0 = bayerParams.pixelShiftExp0; const bool holeFill = bayerParams.pixelShiftHoleFill; + const bool smoothTransitions = blurMap && bayerParams.pixelShiftSmooth; static const float nReadK3II[] = { 3.4f, // ISO 100 3.1f, // ISO 125 @@ -1650,7 +1651,7 @@ void RawImageSource::pixelshift(int winx, int winy, int winw, int winh, const RA if(showMotion && showOnlyMask) { // we want only motion mask => paint areas without motion in pure black red[i + offsY][j + offsX] = green[i + offsY][j + offsX] = blue[i + offsY][j + offsX] = 0.f; } else { - if(blurMap && experimental0) { + if(smoothTransitions) { red[i + offsY][j + offsX] = intp(psMask[i][j], red[i + offsY][j + offsX], psRed[i][j] ); green[i + offsY][j + offsX] = intp(psMask[i][j],green[i + offsY][j + offsX],(psG1[i][j] + psG2[i][j]) / 2.f); blue[i + offsY][j + offsX] = intp(psMask[i][j],blue[i + offsY][j + offsX], psBlue[i][j]); diff --git a/rtengine/procevents.h b/rtengine/procevents.h index 75b64d30d..86deb7d6d 100644 --- a/rtengine/procevents.h +++ b/rtengine/procevents.h @@ -497,6 +497,7 @@ enum ProcEvent { EvPixelShiftMedian = 467, EvPixelShiftMedian3 = 468, EvPixelShiftMotionMethod = 469, + EvPixelShiftSmooth = 470, NUMOFEVENTS }; diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index 0597be182..2edf7c77e 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -897,6 +897,7 @@ void RAWParams::BayerSensor::setPixelShiftDefaults() pixelShiftMedian3 = false; pixelShiftGreen = true; pixelShiftBlur = true; + pixelShiftSmooth = true; pixelShiftExp0 = false; pixelShiftNonGreenCross = true; pixelShiftNonGreenCross2 = false; @@ -912,32 +913,6 @@ void RAWParams::setDefaults() bayersensor.dcb_enhance = true; //bayersensor.all_enhance = false; bayersensor.lmmse_iterations = 2; - bayersensor.pixelShiftMotion = 0; - bayersensor.pixelShiftMotionCorrection = RAWParams::BayerSensor::Grid3x3New; - bayersensor.pixelShiftMotionCorrectionMethod = RAWParams::BayerSensor::Automatic; - bayersensor.pixelShiftStddevFactorGreen = 5.0; - bayersensor.pixelShiftStddevFactorRed = 5.0; - bayersensor.pixelShiftStddevFactorBlue = 5.0; - bayersensor.pixelShiftEperIso = 0.0; - bayersensor.pixelShiftNreadIso = 0.0; - bayersensor.pixelShiftPrnu = 1.0; - bayersensor.pixelShiftSigma = 1.0; - bayersensor.pixelShiftSum = 3.0; - bayersensor.pixelShiftRedBlueWeight = 0.7; - bayersensor.pixelshiftShowMotion = false; - bayersensor.pixelshiftShowMotionMaskOnly = false; - bayersensor.pixelShiftAutomatic = true; - bayersensor.pixelShiftNonGreenHorizontal = false; - bayersensor.pixelShiftNonGreenVertical = false; - bayersensor.pixelShiftHoleFill = true; - bayersensor.pixelShiftMedian = false; - bayersensor.pixelShiftMedian3 = false; - bayersensor.pixelShiftGreen = true; - bayersensor.pixelShiftBlur = true; - bayersensor.pixelShiftExp0 = false; - bayersensor.pixelShiftNonGreenCross = true; - bayersensor.pixelShiftNonGreenCross2 = false; - bayersensor.pixelShiftNonGreenAmaze = false; bayersensor.black0 = 0.0; bayersensor.black1 = 0.0; bayersensor.black2 = 0.0; @@ -3509,6 +3484,10 @@ int ProcParams::save (const Glib::ustring &fname, const Glib::ustring &fname2, b keyFile.set_boolean ("RAW Bayer", "pixelShiftBlur", raw.bayersensor.pixelShiftBlur ); } + if (!pedited || pedited->raw.bayersensor.pixelShiftSmooth) { + keyFile.set_boolean ("RAW Bayer", "pixelShiftSmooth", raw.bayersensor.pixelShiftSmooth ); + } + if (!pedited || pedited->raw.bayersensor.pixelShiftExp0) { keyFile.set_boolean ("RAW Bayer", "pixelShiftExp0", raw.bayersensor.pixelShiftExp0 ); } @@ -7757,6 +7736,14 @@ int ProcParams::load (const Glib::ustring &fname, ParamsEdited* pedited) } } + if (keyFile.has_key ("RAW Bayer", "pixelShiftSmooth")) { + raw.bayersensor.pixelShiftSmooth = keyFile.get_boolean("RAW Bayer", "pixelShiftSmooth"); + + if (pedited) { + pedited->raw.bayersensor.pixelShiftSmooth = true; + } + } + if (keyFile.has_key ("RAW Bayer", "pixelShiftExp0")) { raw.bayersensor.pixelShiftExp0 = keyFile.get_boolean("RAW Bayer", "pixelShiftExp0"); @@ -8248,6 +8235,7 @@ bool ProcParams::operator== (const ProcParams& other) && raw.bayersensor.pixelShiftMedian3 == other.raw.bayersensor.pixelShiftMedian3 && raw.bayersensor.pixelShiftGreen == other.raw.bayersensor.pixelShiftGreen && raw.bayersensor.pixelShiftBlur == other.raw.bayersensor.pixelShiftBlur + && raw.bayersensor.pixelShiftSmooth == other.raw.bayersensor.pixelShiftSmooth && raw.bayersensor.pixelShiftExp0 == other.raw.bayersensor.pixelShiftExp0 && raw.bayersensor.pixelShiftNonGreenCross == other.raw.bayersensor.pixelShiftNonGreenCross && raw.bayersensor.pixelShiftNonGreenCross2 == other.raw.bayersensor.pixelShiftNonGreenCross2 diff --git a/rtengine/procparams.h b/rtengine/procparams.h index 51d55bedc..dbf285fb2 100644 --- a/rtengine/procparams.h +++ b/rtengine/procparams.h @@ -1229,6 +1229,7 @@ public: bool pixelShiftMedian3; bool pixelShiftGreen; bool pixelShiftBlur; + bool pixelShiftSmooth; bool pixelShiftExp0; bool pixelShiftNonGreenCross; bool pixelShiftNonGreenCross2; diff --git a/rtengine/refreshmap.cc b/rtengine/refreshmap.cc index 72fe3b76a..891f191b2 100644 --- a/rtengine/refreshmap.cc +++ b/rtengine/refreshmap.cc @@ -496,7 +496,8 @@ int refreshmap[rtengine::NUMOFEVENTS] = { DEMOSAIC, // EvPixelShiftHoleFill DEMOSAIC, // EvPixelShiftMedian DEMOSAIC, // EvPixelShiftMedian3 - DEMOSAIC // EvPixelShiftMotionMethod + DEMOSAIC, // EvPixelShiftMotionMethod + DEMOSAIC // EvPixelShiftSmooth }; diff --git a/rtgui/bayerprocess.cc b/rtgui/bayerprocess.cc index 8b8cc9be8..5d33ffe18 100644 --- a/rtgui/bayerprocess.cc +++ b/rtgui/bayerprocess.cc @@ -128,6 +128,10 @@ BayerProcess::BayerProcess () : FoldableToolPanel(this, "bayerprocess", M("TP_RA pixelShiftBlur->set_tooltip_text (M("TP_RAW_PIXELSHIFTBLUR_TOOLTIP")); pixelShiftOptions->pack_start(*pixelShiftBlur); + pixelShiftSmooth = Gtk::manage (new Gtk::CheckButton(M("TP_RAW_PIXELSHIFTSMOOTH"))); + pixelShiftSmooth->set_tooltip_text (M("TP_RAW_PIXELSHIFTSMOOTH_TOOLTIP")); + pixelShiftOptions->pack_start(*pixelShiftSmooth); + pixelShiftHoleFill = Gtk::manage (new Gtk::CheckButton(M("TP_RAW_PIXELSHIFTHOLEFILL"))); pixelShiftHoleFill->set_tooltip_text (M("TP_RAW_PIXELSHIFTHOLEFILL_TOOLTIP")); pixelShiftOptions->pack_start(*pixelShiftHoleFill); @@ -301,6 +305,7 @@ BayerProcess::BayerProcess () : FoldableToolPanel(this, "bayerprocess", M("TP_RA pixelShiftMedian3conn = pixelShiftMedian3->signal_toggled().connect ( sigc::mem_fun(*this, &BayerProcess::pixelShiftMedian3Changed), true); pixelShiftGreenconn = pixelShiftGreen->signal_toggled().connect ( sigc::mem_fun(*this, &BayerProcess::pixelShiftGreenChanged), true); pixelShiftBlurconn = pixelShiftBlur->signal_toggled().connect ( sigc::mem_fun(*this, &BayerProcess::pixelShiftBlurChanged), true); + pixelShiftSmoothconn = pixelShiftSmooth->signal_toggled().connect ( sigc::mem_fun(*this, &BayerProcess::pixelShiftSmoothChanged), true); pixelShiftExp0conn = pixelShiftExp0->signal_toggled().connect ( sigc::mem_fun(*this, &BayerProcess::pixelShiftExp0Changed), true); pixelShiftNonGreenCrossconn = pixelShiftNonGreenCross->signal_toggled().connect ( sigc::mem_fun(*this, &BayerProcess::pixelShiftNonGreenCrossChanged), true); pixelShiftNonGreenCross2conn = pixelShiftNonGreenCross2->signal_toggled().connect ( sigc::mem_fun(*this, &BayerProcess::pixelShiftNonGreenCross2Changed), true); @@ -342,6 +347,7 @@ void BayerProcess::read(const rtengine::procparams::ProcParams* pp, const Params pixelShiftMedian3->set_inconsistent(!pedited->raw.bayersensor.pixelShiftMedian3); pixelShiftGreen->set_inconsistent(!pedited->raw.bayersensor.pixelShiftGreen); pixelShiftBlur->set_inconsistent(!pedited->raw.bayersensor.pixelShiftBlur); + pixelShiftSmooth->set_inconsistent(!pedited->raw.bayersensor.pixelShiftSmooth); pixelShiftExp0->set_inconsistent(!pedited->raw.bayersensor.pixelShiftExp0); pixelShiftNonGreenCross->set_inconsistent(!pedited->raw.bayersensor.pixelShiftNonGreenCross); pixelShiftNonGreenCross2->set_inconsistent(!pedited->raw.bayersensor.pixelShiftNonGreenCross2); @@ -386,6 +392,7 @@ void BayerProcess::read(const rtengine::procparams::ProcParams* pp, const Params pixelShiftMedian3->set_active(pp->raw.bayersensor.pixelShiftMedian3); pixelShiftGreen->set_active(pp->raw.bayersensor.pixelShiftGreen); pixelShiftBlur->set_active(pp->raw.bayersensor.pixelShiftBlur); + pixelShiftSmooth->set_active(pp->raw.bayersensor.pixelShiftSmooth); pixelShiftExp0->set_active(pp->raw.bayersensor.pixelShiftExp0); pixelShiftNonGreenCross->set_active(pp->raw.bayersensor.pixelShiftNonGreenCross); pixelShiftNonGreenCross2->set_active(pp->raw.bayersensor.pixelShiftNonGreenCross2); @@ -407,6 +414,7 @@ void BayerProcess::read(const rtengine::procparams::ProcParams* pp, const Params pixelShiftHoleFill->set_sensitive(pixelShiftAutomatic->get_active () && pixelShiftMotionCorrection->get_active_row_number() == 5); pixelShiftBlur->set_sensitive(pixelShiftAutomatic->get_active () && pixelShiftMotionCorrection->get_active_row_number() == 5); + pixelShiftSmooth->set_sensitive(pixelShiftAutomatic->get_active () && pixelShiftMotionCorrection->get_active_row_number() == 5 && pixelShiftBlur->get_active()); if (!batchMode) { if (pp->raw.bayersensor.method == procparams::RAWParams::BayerSensor::methodstring[procparams::RAWParams::BayerSensor::dcb] || @@ -483,6 +491,7 @@ void BayerProcess::write( rtengine::procparams::ProcParams* pp, ParamsEdited* pe pp->raw.bayersensor.pixelShiftMedian3 = pixelShiftMedian3->get_active(); pp->raw.bayersensor.pixelShiftGreen = pixelShiftGreen->get_active(); pp->raw.bayersensor.pixelShiftBlur = pixelShiftBlur->get_active(); + pp->raw.bayersensor.pixelShiftSmooth = pixelShiftSmooth->get_active(); pp->raw.bayersensor.pixelShiftExp0 = pixelShiftExp0->get_active(); pp->raw.bayersensor.pixelShiftNonGreenCross = pixelShiftNonGreenCross->get_active(); pp->raw.bayersensor.pixelShiftNonGreenCross2 = pixelShiftNonGreenCross2->get_active(); @@ -529,6 +538,7 @@ void BayerProcess::write( rtengine::procparams::ProcParams* pp, ParamsEdited* pe pedited->raw.bayersensor.pixelShiftMedian3 = !pixelShiftMedian3->get_inconsistent(); pedited->raw.bayersensor.pixelShiftGreen = !pixelShiftGreen->get_inconsistent(); pedited->raw.bayersensor.pixelShiftBlur = !pixelShiftBlur->get_inconsistent(); + pedited->raw.bayersensor.pixelShiftSmooth = !pixelShiftSmooth->get_inconsistent(); pedited->raw.bayersensor.pixelShiftExp0 = !pixelShiftExp0->get_inconsistent(); pedited->raw.bayersensor.pixelShiftNonGreenCross = !pixelShiftNonGreenCross->get_inconsistent(); pedited->raw.bayersensor.pixelShiftNonGreenCross2 = !pixelShiftNonGreenCross2->get_inconsistent(); @@ -650,9 +660,11 @@ void BayerProcess::psMotionCorrectionChanged () if(pixelShiftMotionCorrection->get_active_row_number() == 5) { pixelShiftBlur->set_sensitive(true); pixelShiftHoleFill->set_sensitive(true); + pixelShiftSmooth->set_sensitive(pixelShiftBlur->get_active()); } else { pixelShiftBlur->set_sensitive(false); pixelShiftHoleFill->set_sensitive(false); + pixelShiftSmooth->set_sensitive(false); } if (listener) { @@ -823,6 +835,7 @@ void BayerProcess::pixelShiftAutomaticChanged () pixelShiftMedian3->set_sensitive(pixelShiftAutomatic->get_active () && pixelShiftMedian->get_active()); pixelShiftGreen->set_sensitive(pixelShiftAutomatic->get_active ()); pixelShiftBlur->set_sensitive(pixelShiftAutomatic->get_active () && pixelShiftMotionCorrection->get_active_row_number() == 5); + pixelShiftSmooth->set_sensitive(pixelShiftAutomatic->get_active () && pixelShiftMotionCorrection->get_active_row_number() == 5 && pixelShiftBlur->get_active()); pixelShiftExp0->set_sensitive(pixelShiftAutomatic->get_active ()); pixelShiftNonGreenCross->set_sensitive(pixelShiftAutomatic->get_active ()); pixelShiftNonGreenCross2->set_sensitive(pixelShiftAutomatic->get_active ()); @@ -971,11 +984,33 @@ void BayerProcess::pixelShiftBlurChanged () lastDCBen = pixelShiftBlur->get_active (); } + pixelShiftSmooth->set_sensitive(pixelShiftBlur->get_active ()); + if (listener) { listener->panelChanged (EvPixelShiftBlur, pixelShiftBlur->get_active() ? M("GENERAL_ENABLED") : M("GENERAL_DISABLED")); } } +void BayerProcess::pixelShiftSmoothChanged () +{ + if (batchMode) { + if (pixelShiftSmooth->get_inconsistent()) { + pixelShiftSmooth->set_inconsistent (false); + pixelShiftSmoothconn.block (true); + pixelShiftSmooth->set_active (false); + pixelShiftSmoothconn.block (false); + } else if (lastDCBen) { + pixelShiftSmooth->set_inconsistent (true); + } + + lastDCBen = pixelShiftSmooth->get_active (); + } + + if (listener) { + listener->panelChanged (EvPixelShiftSmooth, pixelShiftSmooth->get_active() ? M("GENERAL_ENABLED") : M("GENERAL_DISABLED")); + } +} + void BayerProcess::pixelShiftExp0Changed () { if (batchMode) { diff --git a/rtgui/bayerprocess.h b/rtgui/bayerprocess.h index e53cb6816..135c02df5 100644 --- a/rtgui/bayerprocess.h +++ b/rtgui/bayerprocess.h @@ -56,6 +56,7 @@ protected: Gtk::CheckButton* pixelShiftNonGreenAmaze; Gtk::CheckButton* pixelShiftGreen; Gtk::CheckButton* pixelShiftBlur; + Gtk::CheckButton* pixelShiftSmooth; Gtk::CheckButton* pixelShiftExp0; Gtk::CheckButton* pixelShiftHoleFill; Gtk::CheckButton* pixelShiftMedian; @@ -75,7 +76,7 @@ protected: sigc::connection methodconn, imagenumberconn, psmcconn, dcbEnhconn, pixelShiftShowMotionconn, pixelShiftShowMotionMaskOnlyconn, pixelShiftAutomaticconn, pixelShiftNonGreenHorizontalconn, pixelShiftNonGreenVerticalconn, pixelShiftHoleFillconn, pixelShiftMedianconn, pixelShiftMedian3conn, pixelShiftNonGreenCrossconn, - pixelShiftNonGreenCross2conn, pixelShiftNonGreenAmazeconn, pixelShiftGreenconn, pixelShiftBlurconn, pixelShiftExp0conn, pixelShiftMotionMethodConn; + pixelShiftNonGreenCross2conn, pixelShiftNonGreenAmazeconn, pixelShiftGreenconn, pixelShiftBlurconn, pixelShiftSmoothconn, pixelShiftExp0conn, pixelShiftMotionMethodConn; public: BayerProcess (); @@ -100,6 +101,7 @@ public: void pixelShiftMedian3Changed(); void pixelShiftGreenChanged(); void pixelShiftBlurChanged(); + void pixelShiftSmoothChanged(); void pixelShiftExp0Changed(); void pixelShiftNonGreenCrossChanged(); void pixelShiftNonGreenCross2Changed(); diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc index 185341e32..061424acf 100644 --- a/rtgui/paramsedited.cc +++ b/rtgui/paramsedited.cc @@ -392,6 +392,7 @@ void ParamsEdited::set (bool v) raw.bayersensor.pixelShiftMedian3 = v; raw.bayersensor.pixelShiftGreen = v; raw.bayersensor.pixelShiftBlur = v; + raw.bayersensor.pixelShiftSmooth = v; raw.bayersensor.pixelShiftExp0 = v; raw.bayersensor.pixelShiftNonGreenCross = v; raw.bayersensor.pixelShiftNonGreenCross2 = v; @@ -914,6 +915,7 @@ void ParamsEdited::initFrom (const std::vector 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.pixelShiftSmooth == other.raw.bayersensor.pixelShiftSmooth; raw.bayersensor.pixelShiftExp0 = raw.bayersensor.pixelShiftExp0 && p.raw.bayersensor.pixelShiftExp0 == other.raw.bayersensor.pixelShiftExp0; 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; @@ -2418,6 +2420,10 @@ void ParamsEdited::combine (rtengine::procparams::ProcParams& toEdit, const rten toEdit.raw.bayersensor.pixelShiftBlur = mods.raw.bayersensor.pixelShiftBlur; } + if (raw.bayersensor.pixelShiftSmooth) { + toEdit.raw.bayersensor.pixelShiftSmooth = mods.raw.bayersensor.pixelShiftSmooth; + } + if (raw.bayersensor.pixelShiftExp0) { toEdit.raw.bayersensor.pixelShiftExp0 = mods.raw.bayersensor.pixelShiftExp0; } @@ -2946,7 +2952,7 @@ 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 && pixelShiftExp0 + && pixelShiftAutomatic && pixelShiftNonGreenHorizontal && pixelShiftNonGreenVertical && pixelShiftHoleFill && pixelShiftMedian && pixelShiftMedian3 && pixelShiftNonGreenCross && pixelShiftNonGreenCross2 && pixelShiftNonGreenAmaze && pixelShiftGreen && pixelShiftBlur && pixelShiftSmooth && pixelShiftExp0 && linenoise && exBlack0 && exBlack1 && exBlack2 && exBlack3 && exTwoGreen; } diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h index ceb8b82fd..23b0e240b 100644 --- a/rtgui/paramsedited.h +++ b/rtgui/paramsedited.h @@ -714,6 +714,7 @@ public: bool pixelShiftMedian3; bool pixelShiftGreen; bool pixelShiftBlur; + bool pixelShiftSmooth; bool pixelShiftExp0; bool pixelShiftNonGreenCross; bool pixelShiftNonGreenCross2;