From: anthony Date: Tue, 12 Oct 2010 05:48:17 +0000 (+0000) Subject: Add "Lanczos2DSharp" filter created by Nicholas Robidoux X-Git-Tag: 7.0.1-0~8692 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e5f06453faf1ba6df2532b2af720976972243a47;p=imagemagick Add "Lanczos2DSharp" filter created by Nicholas Robidoux --- diff --git a/ChangeLog b/ChangeLog index 7baccc317..777271765 100644 --- a/ChangeLog +++ b/ChangeLog @@ -15,6 +15,7 @@ the previous sharped "Lanczos2D" filter. (C=0.31089212245300069) This also is very similer to a Mitchell filter but specifically designed for EWA use and is the new default filter for Distorting Images. + * Original sharpened Lanczos2D filter now called "Lanczos2Dsharp" 2010-10-08 6.6.4-10 Jerry Gay * Autodetect file type support in Makefile.PL to prevent test failures diff --git a/magick/option.c b/magick/option.c index 698585204..f3f0f4937 100644 --- a/magick/option.c +++ b/magick/option.c @@ -948,12 +948,13 @@ static const OptionInfo { "Kaiser", (ssize_t) KaiserFilter, MagickFalse }, { "Lagrange", (ssize_t) LagrangeFilter, MagickFalse }, { "Lanczos", (ssize_t) LanczosFilter, MagickFalse }, - { "Lanczos2D", (ssize_t) Lanczos2DFilter, MagickTrue }, + { "Lanczos2D", (ssize_t) Lanczos2DFilter, MagickFalse }, + { "Lanczos2DSharp", (ssize_t) Lanczos2DSharpFilter, MagickTrue }, { "Mitchell", (ssize_t) MitchellFilter, MagickFalse }, { "Parzen", (ssize_t) ParzenFilter, MagickFalse }, { "Point", (ssize_t) PointFilter, MagickFalse }, { "Quadratic", (ssize_t) QuadraticFilter, MagickFalse }, - { "Robidoux", (ssize_t) RobidouxFilter, MagickTrue }, + { "Robidoux", (ssize_t) RobidouxFilter, MagickFalse }, { "Sinc", (ssize_t) SincFilter, MagickFalse }, { "SincFast", (ssize_t) SincFastFilter, MagickFalse }, { "Triangle", (ssize_t) TriangleFilter, MagickFalse }, diff --git a/magick/resample.h b/magick/resample.h index b72d62dce..bef5ab444 100644 --- a/magick/resample.h +++ b/magick/resample.h @@ -56,6 +56,7 @@ typedef enum BartlettFilter, SincFastFilter, Lanczos2DFilter, + Lanczos2DSharpFilter, RobidouxFilter, SentinelFilter /* a count of all the filters, not a real filter */ } FilterTypes; diff --git a/magick/resize.c b/magick/resize.c index c476573ce..62461387f 100644 --- a/magick/resize.c +++ b/magick/resize.c @@ -697,7 +697,8 @@ MagickExport ResizeFilter *AcquireResizeFilter(const Image *image, { SincFastFilter, TriangleFilter }, /* Bartlett -- triangle-sinc */ { SincFastFilter, BoxFilter }, /* Raw fast sinc ("Pade"-type) */ { Lanczos2DFilter, JincFilter }, /* SPECIAL: 2-lobed jinc-jinc */ - { RobidouxFilter, BoxFilter }, /* SPECIAL: Keys cubic tuned for EWA */ + { Lanczos2DSharpFilter, JincFilter },/* SPECIAL: ditto sharpened */ + { RobidouxFilter, BoxFilter }, /* SPECIAL: Keys cubic tuned for EWA */ }; /* Table mapping the filter/window from the above table to an actual @@ -745,6 +746,7 @@ MagickExport ResizeFilter *AcquireResizeFilter(const Image *image, { Triangle, 1.0, 1.0, 0.0, 0.0 }, /* Bartlett (triangle window) */ { SincFast, 4.0, 1.0, 0.0, 0.0 }, /* Raw fast sinc ("Pade"-type) */ { Jinc, 2.0, 1.0, 0.0, 0.0 }, /* Lanczos2D (Jinc-Jinc) */ + { Jinc, 2.0, 1.0, 0.0, 0.0 }, /* Lanczos2D Sharpened */ { CubicBC, 2.0, 1.0, 0.37821575509399862, 0.31089212245300069 } /* Robidoux: Keys cubic close to Lanczos2D with blur=0.958033808 */ }; @@ -830,6 +832,7 @@ MagickExport ResizeFilter *AcquireResizeFilter(const Image *image, switch (filter_type) { case Lanczos2DFilter: + case Lanczos2DSharpFilter: /* Demote to a 2-lobe Sinc-Sinc for orthogonal use. */ window_type=SincFastFilter; break; @@ -898,6 +901,12 @@ MagickExport ResizeFilter *AcquireResizeFilter(const Image *image, /* Support for Cylindrical Box should be sqrt(2)/2 */ resize_filter->support=(MagickRealType) MagickSQ1_2; break; + case Lanczos2DSharpFilter: + /* Sharpened by Nicholas Robidoux so as to optimize for + * minimal blurring of orthogonal lines + */ + resize_filter->blur *= 0.958033808; + break; default: break; } @@ -905,6 +914,7 @@ MagickExport ResizeFilter *AcquireResizeFilter(const Image *image, switch (filter_type) { case Lanczos2DFilter: + case Lanczos2DSharpFilter: /* Demote to a 2-lobe Lanczos (Sinc-Sinc) for orthogonal use. */ resize_filter->filter=SincFast; break;