]> granicus.if.org Git - imagemagick/commitdiff
Add "Lanczos2DSharp" filter created by Nicholas Robidoux
authoranthony <anthony@git.imagemagick.org>
Tue, 12 Oct 2010 05:48:17 +0000 (05:48 +0000)
committeranthony <anthony@git.imagemagick.org>
Tue, 12 Oct 2010 05:48:17 +0000 (05:48 +0000)
ChangeLog
magick/option.c
magick/resample.h
magick/resize.c

index 7baccc317336fff19dcc6f40942c5e26201577e5..77727176562b6a7a31c441ee69d040c9d883cb95 100644 (file)
--- 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  <jerry.gay@gmail..>
   * Autodetect file type support in Makefile.PL to prevent test failures
index 698585204de1569b8672aa69200ac05968d50e3b..f3f0f4937667e00436e22df8357258619a0a12a2 100644 (file)
@@ -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 },
index b72d62dceb83b79f5e537cf0f0bb6778a9e96215..bef5ab4445fb3815bbe4fc4b00b11492ffb4975a 100644 (file)
@@ -56,6 +56,7 @@ typedef enum
   BartlettFilter,
   SincFastFilter,
   Lanczos2DFilter,
+  Lanczos2DSharpFilter,
   RobidouxFilter,
   SentinelFilter  /* a count of all the filters, not a real filter */
 } FilterTypes;
index c476573cee78aef81dd80d9ce10979d5ce467427..62461387f61be4245264947b30f1cf2379d6f7be 100644 (file)
@@ -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;