From: Enblend <enb...@li...> - 2010-09-06 07:07:00
|
changeset 77fbc2c95fb5 in /hgrepo/e/en/enblend/enblend details: http://enblend.hg.sourceforge.net/hgweb/enblend/enblend/hgrepo/e/en/enblend/enblend?cmd=changeset;node=77fbc2c95fb5 description: Add an RGB'-to-Lab gray-scale projector. The existing projector, called "l-star" is for linear data. The new one is particularly suited for gamma-corrected data. diffstat: VERSION | 2 +- doc/enfuse.info | 0 doc/enfuse.texi | 23 ++++++++++++++++++++--- src/enblend.1 | 6 +++--- src/enfuse.1 | 23 ++++++++++++----------- src/enfuse.cc | 5 +++-- src/mga.h | 19 +++++++++++++++---- 7 files changed, 54 insertions(+), 24 deletions(-) diffs (189 lines): diff -r fbce8183896d -r 77fbc2c95fb5 VERSION --- a/VERSION Sun Sep 05 16:43:05 2010 +0200 +++ b/VERSION Sun Sep 05 17:04:20 2010 +0200 @@ -1,1 +1,1 @@ -4.1-05b1d2d0adbc +4.1-fbce8183896d diff -r fbce8183896d -r 77fbc2c95fb5 doc/enfuse.info Binary file doc/enfuse.info has changed diff -r fbce8183896d -r 77fbc2c95fb5 doc/enfuse.texi --- a/doc/enfuse.texi Sun Sep 05 16:43:05 2010 +0200 +++ b/doc/enfuse.texi Sun Sep 05 17:04:20 2010 +0200 @@ -1796,12 +1796,13 @@ @item l-star @cindex gray projector, @samp{l-star} @cindex @samp{l-star} gray projector -@cindex L*a*b* conversion -@cindex conversion, L*a*b* +@cindex RGB-L*a*b* conversion +@cindex conversion, RGB-L*a*b* Use the L-channel of the L*a*b*-conversion of the image as its grayscale representation. This is a useful projector for gamma = 1 data. It reveals minute contrast variations even in the shadows and -the highlights. This projector is computationally expensive. +the highlights. This projector is computationally expensive. Compare +with @samp{pl-star}, which is intended for gamma-corrected images. See @uref{http://@/en.wikipedia.org/@/wiki/@/Lab_@/color_@/space, Wikipedia} for a detailed description of the @acronym{Lab}@tie{}color @@ -1954,6 +1955,22 @@ </informalequation> @end docbook +@item pl-star +@cindex gray projector, @samp{pl-star} +@cindex @samp{pl-star} gray projector +@cindex RGB'-L*a*b* conversion +@cindex conversion, RGB'-L*a*b* +Use the L-channel of the L*a*b*-conversion of the image as its +grayscale representation. This is a useful projector for +gamma-corrected data. It reveals minute contrast variations even in +the shadows and the highlights. This projector is computationally +expensive. Compare with @samp{l-star}, which is intended for gamma = +1 images. + +See @uref{http://@/en.wikipedia.org/@/wiki/@/Lab_@/color_@/space, +Wikipedia} for a detailed description of the @acronym{Lab}@tie{}color +space. + @item value @cindex gray projector, @samp{value} @cindex @samp{value} gray projector diff -r fbce8183896d -r 77fbc2c95fb5 src/enblend.1 --- a/src/enblend.1 Sun Sep 05 16:43:05 2010 +0200 +++ b/src/enblend.1 Sun Sep 05 17:04:20 2010 +0200 @@ -115,9 +115,9 @@ .TP \fB\-\-save\-masks\fR[=\fITEMPLATE\fR] save generated masks in TEMPLATE; default: "mask\-%n.tif"; -conversion chars: %i: mask index, %n: mask number, -%p: full path, %d: dirname, %b: basename, -%f: filename, %e: extension; lowercase characters +conversion chars: "%i": mask index, "%n": mask number, +"%p": full path, "%d": dirname, "%b": basename, +"%f": filename, "%e": extension; lowercase characters refer to input images uppercase to the output image .TP \fB\-\-load\-masks\fR[=\fITEMPLATE\fR] diff -r fbce8183896d -r 77fbc2c95fb5 src/enfuse.1 --- a/src/enfuse.1 Sun Sep 05 16:43:05 2010 +0200 +++ b/src/enfuse.1 Sun Sep 05 17:04:20 2010 +0200 @@ -114,8 +114,9 @@ .TP \fB\-\-gray\-projector\fR=\fIPROJECTOR\fR apply gray\-scale PROJECTOR in exposure or contrast -weighing, where PROJECTOR is "anti\-value", "average", -"l\-star", "lightness", "value", "luminance", or +weighing, where PROJECTOR is one of "anti\-value", +"average", "l\-star", "lightness", "luminance", +"pl\-star", "value", or "channel\-mixer:RED\-WEIGHT:GREEN\-WEIGHT:BLUE\-WEIGHT"; default: "average" .TP @@ -125,7 +126,7 @@ by LCEFACTOR (EDGESCALE, LCESCALE, LCEFACTOR >= 0); append "%" to LCESCALE for values relative to EDGESCALE; append "%" to LCEFACTOR for relative -value; defaults: 0:0:0 +value; default: 0:0:0 .TP \fB\-\-contrast\-min\-curvature\fR=\fICURVATURE\fR minimum CURVATURE for an edge to qualify; append @@ -144,17 +145,17 @@ .TP \fB\-\-save\-masks[\fR=\fISOFT\-TEMPLATE[\fR:HARD\-TEMPLATE]] save weight masks in SOFT\-TEMPLATE and HARD\-TEMPLATE; -conversion chars: %i: mask index, %n: mask number, -%p: full path, %d: dirname, %b: basename, -%f: filename, %e: extension; lowercase characters -refer to input images uppercase to the output image; +conversion chars: "%i": mask index, "%n": mask number, +"%p": full path, "%d": dirname, "%b": basename, +"%f": filename, "%e": extension; lowercase characters +refer to input images uppercase to the output image default: "softmask\-%n.tif":"hardmask\-%n.tif" .TP \fB\-\-load\-masks[\fR=\fISOFT\-TEMPLATE[\fR:HARD\-TEMPLATE]] -skip internal calculation of weight maps and use -the ones in the files matching the templates instead. -These can be either hard or soft masks. For template -syntax see "\-\-save\-masks". +skip calculation of weight maps and use the ones +in the files matching the templates instead. These +can be either hard or soft masks. For template +syntax see "\-\-save\-masks"; default: "softmask\-%n.tif":"hardmask\-%n.tif" .PP Enfuse accepts arguments to any option in uppercase as diff -r fbce8183896d -r 77fbc2c95fb5 src/enfuse.cc --- a/src/enfuse.cc Sun Sep 05 16:43:05 2010 +0200 +++ b/src/enfuse.cc Sun Sep 05 17:04:20 2010 +0200 @@ -434,8 +434,9 @@ " (SIZE >= 3); default: " << ContrastWindowSize << "\n" << " --gray-projector=PROJECTOR\n" << " apply gray-scale PROJECTOR in exposure or contrast\n" << - " weighing, where PROJECTOR is \"anti-value\", \"average\", \n" << - " \"l-star\", \"lightness\", \"value\", \"luminance\", or\n" << + " weighing, where PROJECTOR is one of \"anti-value\",\n" << + " \"average\", \"l-star\", \"lightness\", \"luminance\",\n" << + " \"pl-star\", \"value\", or\n" << " \"channel-mixer:RED-WEIGHT:GREEN-WEIGHT:BLUE-WEIGHT\";\n" << " default: \"" << enblend::MultiGrayscaleAccessor<UInt8, NumericTraits<UInt8>::Promote>::defaultGrayscaleAccessorName() << "\"\n" << diff -r fbce8183896d -r 77fbc2c95fb5 src/mga.h --- a/src/mga.h Sun Sep 05 16:43:05 2010 +0200 +++ b/src/mga.h Sun Sep 05 17:04:20 2010 +0200 @@ -73,7 +73,9 @@ static const std::string defaultGrayscaleAccessorName() {return "average";} private: - typedef enum {AVERAGE, LSTAR, LIGHTNESS, VALUE, ANTI_VALUE, LUMINANCE, MIXER} AccKindType; + typedef enum { + AVERAGE, LSTAR, PRIMED_LSTAR, LIGHTNESS, VALUE, ANTI_VALUE, LUMINANCE, MIXER + } AccKindType; typedef std::map<std::string, AccKindType> NameMapType; typedef typename NameMapType::const_iterator NameMapConstIterType; @@ -82,6 +84,7 @@ void initializeAccessorNameMap() { nameMap["average"] = AVERAGE; nameMap["l-star"] = LSTAR; + nameMap["pl-star"] = PRIMED_LSTAR; nameMap["lightness"] = LIGHTNESS; nameMap["value"] = VALUE; nameMap["anti-value"] = ANTI_VALUE; @@ -179,7 +182,8 @@ void initializeTypeSpecific(VigraFalseType) { typedef typename InputType::value_type ValueType; - labfun = vigra::RGB2LabFunctor<double>(NumericTraits<ValueType>::max()); + rgb_to_lab_fun = vigra::RGB2LabFunctor<double>(NumericTraits<ValueType>::max()); + rgb_prime_to_lab_fun = vigra::RGBPrime2LabFunctor<double>(NumericTraits<ValueType>::max()); } ResultType project(const InputType& x) const { @@ -195,7 +199,13 @@ case LSTAR: { typedef typename vigra::RGB2LabFunctor<double>::result_type LABResultType; - const LABResultType y = labfun.operator()(x) / 100.0; + const LABResultType y = rgb_to_lab_fun.operator()(x) / 100.0; + return NumericTraits<ResultType>::fromRealPromote(NumericTraits<ValueType>::max() * y[0]); + } + case PRIMED_LSTAR: + { + typedef typename vigra::RGBPrime2LabFunctor<double>::result_type LABResultType; + const LABResultType y = rgb_prime_to_lab_fun.operator()(x) / 100.0; return NumericTraits<ResultType>::fromRealPromote(NumericTraits<ValueType>::max() * y[0]); } case LIGHTNESS: @@ -247,7 +257,8 @@ NameMapType nameMap; AccKindType kind; double redWeight, greenWeight, blueWeight; - vigra::RGB2LabFunctor<double> labfun; + vigra::RGB2LabFunctor<double> rgb_to_lab_fun; + vigra::RGBPrime2LabFunctor<double> rgb_prime_to_lab_fun; }; } // namespace enblend |