]> granicus.if.org Git - imagemagick/commitdiff
Added morphology to Magick++.
authordirk <dirk@git.imagemagick.org>
Sun, 16 Feb 2014 10:51:16 +0000 (10:51 +0000)
committerdirk <dirk@git.imagemagick.org>
Sun, 16 Feb 2014 10:51:16 +0000 (10:51 +0000)
Magick++/lib/Image.cpp
Magick++/lib/Magick++/Image.h
Magick++/lib/Magick++/Include.h

index d825b20d7462b42163e8bf10c96021125d1f034e..d42c63f893f8d38b6dfd7f8051b07217c6ee741b 100644 (file)
@@ -3361,6 +3361,93 @@ void Magick::Image::modulate(const double brightness_,const double saturation_,
   ThrowPPException;
 }
 
+void Magick::Image::morphology(const MorphologyMethod method_,
+  const std::string kernel_,const ssize_t iterations_)
+{
+  KernelInfo
+    *kernel;
+
+  MagickCore::Image
+    *newImage;
+
+  kernel=AcquireKernelInfo(kernel_.c_str());
+  if (kernel == (KernelInfo *)NULL)
+    throwExceptionExplicit(OptionError,"Unable to parse kernel.");
+
+  GetPPException;
+  newImage=MorphologyImage(constImage(),method_,iterations_,kernel,
+    &exceptionInfo);
+  replaceImage(newImage);
+  kernel=DestroyKernelInfo(kernel);
+  ThrowPPException;
+}
+
+void Magick::Image::morphology(const MorphologyMethod method_,
+  const KernelInfoType kernel_,const std::string arguments_,
+  const ssize_t iterations_)
+{
+  const char
+    *option;
+
+  std::string
+    kernel;
+
+  option=CommandOptionToMnemonic(MagickKernelOptions,kernel_);
+  if (option == (const char *)NULL)
+    throwExceptionExplicit(OptionError,"Unable to determine kernel type.");
+
+  kernel=std::string(option);
+  if (!arguments_.empty())
+    kernel+=":"+arguments_;
+
+  morphology(method_,kernel,iterations_);
+}
+
+void Magick::Image::morphologyChannel(const ChannelType channel_,
+  const MorphologyMethod method_,const std::string kernel_,
+  const ssize_t iterations_)
+{
+  KernelInfo
+    *kernel;
+
+  MagickCore::Image
+    *newImage;
+
+  kernel=AcquireKernelInfo(kernel_.c_str());
+  if (kernel == (KernelInfo *)NULL)
+    throwExceptionExplicit(OptionError,"Unable to parse kernel.");
+
+  GetPPException;
+  SetPPChannelMask(channel_);
+  newImage=MorphologyImage(constImage(),method_,iterations_,kernel,
+    &exceptionInfo);
+  RestorePPChannelMask;
+  replaceImage(newImage);
+  kernel=DestroyKernelInfo(kernel);
+  ThrowPPException;
+}
+
+void Magick::Image::morphologyChannel(const ChannelType channel_,
+  const MorphologyMethod method_,const KernelInfoType kernel_,
+  const std::string arguments_,const ssize_t iterations_)
+{
+  const char
+    *option;
+
+  std::string
+    kernel;
+
+  option=CommandOptionToMnemonic(MagickKernelOptions,kernel_);
+  if (option == (const char *)NULL)
+    throwExceptionExplicit(OptionError,"Unable to determine kernel type.");
+
+  kernel=std::string(option);
+  if (!arguments_.empty())
+    kernel+=":"+arguments_;
+
+  morphologyChannel(channel_,method_,kernel,iterations_);
+}
+
 void Magick::Image::motionBlur(const double radius_,const double sigma_,
   const double angle_)
 {
index 85e31fdd3999d5bd149794b40954d1fda99a5adb..05a3757c53de116922981e5509f823018c49340f 100644 (file)
@@ -1010,6 +1010,19 @@ namespace Magick
     void modulate(const double brightness_,const double saturation_,
       const double hue_);
 
+    // Applies a kernel to the image according to the given mophology method.
+    void morphology(const MorphologyMethod method_,const std::string kernel_,
+      const ssize_t iterations_=1);
+    void morphology(const MorphologyMethod method_,
+      const KernelInfoType kernel_,const std::string arguments_,
+      const ssize_t iterations_=1);
+    void morphologyChannel(const ChannelType channel_,
+      const MorphologyMethod method_,const std::string kernel_,
+      const ssize_t iterations_=1);
+    void morphologyChannel(const ChannelType channel_,
+      const MorphologyMethod method_,const KernelInfoType kernel_,
+      const std::string arguments_,const ssize_t iterations_=1);
+
     // Motion blur image with specified blur factor
     // The radius_ parameter specifies the radius of the Gaussian, in
     // pixels, not counting the center pixel.  The sigma_ parameter
index 8dbdb4a311be4a7585686f2582ddc287200d9262..d44445005f36fd1d2a5f8338973cc4976d81d968 100644 (file)
@@ -350,7 +350,12 @@ namespace Magick
   using MagickCore::YPbPrColorspace;
   using MagickCore::YUVColorspace;
 
+  // Command options
+  using MagickCore::CommandOption;
+  using MagickCore::MagickKernelOptions;
+
   // Compliance types
+  using MagickCore::ComplianceType;
   using MagickCore::AllCompliance;
 
   // Composition operations
@@ -624,20 +629,46 @@ namespace Magick
   using MagickCore::JPEGInterlace;
   using MagickCore::PNGInterlace;
 
-  // Pixel interpolation methods
-  using MagickCore::PixelInterpolateMethod;
-  using MagickCore::UndefinedInterpolatePixel;
-  using MagickCore::AverageInterpolatePixel;
-  using MagickCore::Average9InterpolatePixel;
-  using MagickCore::Average16InterpolatePixel;
-  using MagickCore::BackgroundInterpolatePixel;
-  using MagickCore::BilinearInterpolatePixel;
-  using MagickCore::BlendInterpolatePixel;
-  using MagickCore::CatromInterpolatePixel;
-  using MagickCore::IntegerInterpolatePixel;
-  using MagickCore::MeshInterpolatePixel;
-  using MagickCore::NearestInterpolatePixel;
-  using MagickCore::SplineInterpolatePixel;
+  // Built-in kernels
+  using MagickCore::KernelInfoType;
+  using MagickCore::UndefinedKernel;
+  using MagickCore::UnityKernel;
+  using MagickCore::GaussianKernel;
+  using MagickCore::DoGKernel;
+  using MagickCore::LoGKernel;
+  using MagickCore::BlurKernel;
+  using MagickCore::CometKernel;
+  using MagickCore::BinomialKernel;
+  using MagickCore::LaplacianKernel;
+  using MagickCore::SobelKernel;
+  using MagickCore::FreiChenKernel;
+  using MagickCore::RobertsKernel;
+  using MagickCore::PrewittKernel;
+  using MagickCore::CompassKernel;
+  using MagickCore::KirschKernel;
+  using MagickCore::DiamondKernel;
+  using MagickCore::SquareKernel;
+  using MagickCore::RectangleKernel;
+  using MagickCore::OctagonKernel;
+  using MagickCore::DiskKernel;
+  using MagickCore::PlusKernel;
+  using MagickCore::CrossKernel;
+  using MagickCore::RingKernel;
+  using MagickCore::PeaksKernel;
+  using MagickCore::EdgesKernel;
+  using MagickCore::CornersKernel;
+  using MagickCore::DiagonalsKernel;
+  using MagickCore::LineEndsKernel;
+  using MagickCore::LineJunctionsKernel;
+  using MagickCore::RidgesKernel;
+  using MagickCore::ConvexHullKernel;
+  using MagickCore::ThinSEKernel;
+  using MagickCore::SkeletonKernel;
+  using MagickCore::ChebyshevKernel;
+  using MagickCore::ManhattanKernel;
+  using MagickCore::OctagonalKernel;
+  using MagickCore::EuclideanKernel;
+  using MagickCore::UserDefinedKernel;
 
   // Layer method
   using MagickCore::LayerMethod;
@@ -714,6 +745,32 @@ namespace Magick
   using MagickCore::PerceptualHashErrorMetric;
   using MagickCore::RootMeanSquaredErrorMetric;
 
+  // Morphology methods
+  using MagickCore::MorphologyMethod;
+  using MagickCore::UndefinedMorphology;
+  using MagickCore::ConvolveMorphology;
+  using MagickCore::CorrelateMorphology;
+  using MagickCore::ErodeMorphology;
+  using MagickCore::DilateMorphology;
+  using MagickCore::ErodeIntensityMorphology;
+  using MagickCore::DilateIntensityMorphology;
+  using MagickCore::IterativeDistanceMorphology;
+  using MagickCore::OpenMorphology;
+  using MagickCore::CloseMorphology;
+  using MagickCore::OpenIntensityMorphology;
+  using MagickCore::CloseIntensityMorphology;
+  using MagickCore::SmoothMorphology;
+  using MagickCore::EdgeInMorphology;
+  using MagickCore::EdgeOutMorphology;
+  using MagickCore::EdgeMorphology;
+  using MagickCore::TopHatMorphology;
+  using MagickCore::BottomHatMorphology;
+  using MagickCore::HitAndMissMorphology;
+  using MagickCore::ThinningMorphology;
+  using MagickCore::ThickenMorphology;
+  using MagickCore::DistanceMorphology;
+  using MagickCore::VoronoiMorphology;
+
   // Noise types
   using MagickCore::NoiseType;
   using MagickCore::UndefinedNoise;
@@ -786,6 +843,7 @@ namespace Magick
   using MagickCore::SplineInterpolatePixel;
 
   // Pixel traits
+  using MagickCore::PixelTrait;
   using MagickCore::UndefinedPixelTrait;
   using MagickCore::BlendPixelTrait;
 
@@ -991,6 +1049,7 @@ namespace Magick
   using MagickCore::ColorDecisionListImage;
   using MagickCore::ColorizeImage;
   using MagickCore::ColorMatrixImage;
+  using MagickCore::CommandOptionToMnemonic;
   using MagickCore::CompareImages;
   using MagickCore::CompositeImage;
   using MagickCore::ConfigureError;
@@ -1234,6 +1293,7 @@ namespace Magick
   using MagickCore::MonitorFatalError;
   using MagickCore::MonitorWarning;
   using MagickCore::MontageInfo;
+  using MagickCore::MorphologyImage;
   using MagickCore::MotionBlurImage;
   using MagickCore::NegateImage;
   using MagickCore::NewMagickWandFromImage;