]> granicus.if.org Git - imagemagick/commitdiff
Added local contrast to Magick++ and Wand.
authordirk <dirk@git.imagemagick.org>
Tue, 3 Nov 2015 21:36:30 +0000 (22:36 +0100)
committerdirk <dirk@git.imagemagick.org>
Tue, 3 Nov 2015 21:36:30 +0000 (22:36 +0100)
Magick++/lib/Image.cpp
Magick++/lib/Magick++/Image.h
Magick++/lib/Magick++/Include.h
MagickCore/accelerate.c
MagickCore/effect.c
MagickWand/magick-image.c
MagickWand/magick-image.h

index fe6d47e01daa937cadb5a12e856086a291ca1f06..4fe7775d5b611a5c9da6b5bff589215ad30019fc 100644 (file)
@@ -3503,6 +3503,17 @@ void Magick::Image::liquidRescale(const Geometry &geometry_)
   ThrowImageException;
 }
 
+void Magick::Image::localContrast(const double radius_,const double strength_)
+{
+  MagickCore::Image
+    *newImage;
+
+  GetPPException;
+  newImage=LocalContrastImage(constImage(),radius_,strength_,exceptionInfo);
+  replaceImage(newImage);
+  ThrowImageException;
+}
+
 void Magick::Image::magnify(void)
 {
   MagickCore::Image
index 27dfc516392c8a869e1b44c9b181f0487d5131fd..f3a41acfcf516bf233b00b960eca56a23c89d75d 100644 (file)
@@ -1065,6 +1065,9 @@ namespace Magick
     // Rescales image with seam carving.
     void liquidRescale(const Geometry &geometry_);
 
+    // Local contrast enhancement
+    void localContrast(const double radius_,const double strength_);
+
     // Magnify image by integral size
     void magnify(void);
 
index 4ce30511489f312a7cca612e737446d145d71720..8ca3e864fb6c7e711ca657a32beff05c5b908577 100644 (file)
@@ -1349,6 +1349,7 @@ namespace Magick
   using MagickCore::LevelizeImage;
   using MagickCore::LinearStretchImage;
   using MagickCore::LiquidRescaleImage;
+  using MagickCore::LocalContrastImage;
   using MagickCore::LocaleCompare;
   using MagickCore::LockSemaphoreInfo;
   using MagickCore::LogMagickEvent;
index 239618dabefffff19f350a7ed6013dbf908566a4..cc7a5f633d2b9ebd49a9c0137bb818ff727d6190 100644 (file)
@@ -1614,10 +1614,8 @@ MagickExport Image* AccelerateBlurImage(const Image *image,
 %
 %    o image: the image.
 %
-%    o channel: the channel type.
-%
-%    o radius: the radius of the Gaussian blur, in percentage with 100%
-%      resulting in a blur radius of 20% of largest dimension.
+%    o radius: the radius of the Gaussian, in pixels, not counting
+%      the center pixel.
 %
 %    o strength: the strength of the blur mask in percentage.
 %
index 7c6caf1922277fab211ed0e5b277cd11ae939a01..5d1e1600b0fcfab60851f2c7048be9c4dfa2a151 100644 (file)
@@ -1645,7 +1645,7 @@ MagickExport Image *KuwaharaImage(const Image *image,const double radius,
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
 %  LocalContrastImage() attempts to increase the appearance of large-scale
-%  light-dark transitions. Local contrast enhancement works  similarly to
+%  light-dark transitions. Local contrast enhancement works similarly to
 %  sharpening with an unsharp mask, however the mask is instead created using
 %  an image with a greater blur distance.
 %
@@ -1658,8 +1658,6 @@ MagickExport Image *KuwaharaImage(const Image *image,const double radius,
 %
 %    o image: the image.
 %
-%    o channel: the channel type.
-%
 %    o radius: the radius of the Gaussian, in pixels, not counting
 %      the center pixel.
 %
index 138604700d5e7d5d3612b46fe9ecfaea7cc00f69..9e59a3707e680484d18edaa8832477545fbd16a5 100644 (file)
@@ -6525,6 +6525,55 @@ WandExport MagickBooleanType MagickLiquidRescaleImage(MagickWand *wand,
   ReplaceImageInList(&wand->images,rescale_image);
   return(MagickTrue);
 }
+
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%                                                                             %
+%                                                                             %
+%                                                                             %
+%     M a g i c k L o c a l C o n t r a s t I m a g e                         %
+%                                                                             %
+%                                                                             %
+%                                                                             %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%  MagickLocalContrastImage() attempts to increase the appearance of
+%  large-scale light-dark transitions. Local contrast enhancement works
+%  similarly to sharpening with an unsharp mask, however the mask is instead
+%  created using an image with a greater blur distance.
+%
+%      MagickBooleanType MagickLocalContrastImage(MagickWand *wand,
+%        const double radius,const double strength)
+%
+%  A description of each parameter follows:
+%
+%    o image: the image.
+%
+%    o radius: the radius of the Gaussian, in pixels, not counting
+%      the center pixel.
+%
+%    o strength: the strength of the blur mask in percentage.
+%
+*/
+WandExport MagickBooleanType MagickLocalContrastImage(MagickWand *wand,
+  const double radius, const double strength)
+{
+  Image
+    *contrast_image;
+
+  assert(wand != (MagickWand *)NULL);
+  assert(wand->signature == MagickWandSignature);
+  if (wand->debug != MagickFalse)
+    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s", wand->name);
+  if (wand->images == (Image *)NULL)
+    ThrowWandException(WandError,"ContainsNoImages",wand->name);
+  contrast_image=LocalContrastImage(wand->images,radius,strength,
+    wand->exception);
+  if (contrast_image == (Image *)NULL)
+    return(MagickFalse);
+  ReplaceImageInList(&wand->images,contrast_image);
+  return(MagickTrue);
+}
 \f
 /*
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
index 6b59258c440547d5d26f0f5ab6521e22f2218e7a..d50cf3d27309b5844875812c5f4887eab116ecad 100644 (file)
@@ -188,6 +188,7 @@ extern WandExport MagickBooleanType
   MagickLinearStretchImage(MagickWand *,const double,const double),
   MagickLiquidRescaleImage(MagickWand *,const size_t,const size_t,const double,
     const double),
+  MagickLocalContrastImage(MagickWand *,const double,const double),
   MagickMagnifyImage(MagickWand *),
   MagickMedianConvolveImage(MagickWand *,const double),
   MagickMinifyImage(MagickWand *),