]> granicus.if.org Git - imagemagick/commitdiff
(no commit message)
authorcristy <urban-warrior@git.imagemagick.org>
Sat, 14 Nov 2009 18:15:08 +0000 (18:15 +0000)
committercristy <urban-warrior@git.imagemagick.org>
Sat, 14 Nov 2009 18:15:08 +0000 (18:15 +0000)
Magick++/ChangeLog
Magick++/lib/Image.cpp
Magick++/lib/Magick++/Image.h
Magick++/lib/Magick++/STL.h
Magick++/lib/STL.cpp

index 1188c9ee11d4d92150ff14520f62a720bb61ae32..734c6b4a97a0cd35130adbd64fbcf8ddef124a03 100644 (file)
@@ -1,3 +1,8 @@
+2009-11-14  6.5.7-8 Cristy  <quetzlzacatenango@image...>
+  * Add forwardFourierTransform(), inverseFourierTransform(), and
+    inverseFourierTransformImage() methods to implement forward and inverse
+    discrete Fourier transform (DFT / IFT).
+
 2009-09-28  6.5.6-6 Cristy  <quetzlzacatenango@image...>
   * Add splice() method to splice the background color into the image.
 
index f61ef476dfa1534960c2c7c7bb6cc1206896f21a..0b460f99bc5920d06f4f7e879fdf7ac86aa0c800 100644 (file)
@@ -1037,12 +1037,12 @@ void Magick::Image::forwardFourierTransform ( void )
   throwException( exceptionInfo );
   (void) DestroyExceptionInfo( &exceptionInfo );
 }
-void Magick::Image::forwardFourierTransform ( const bool magnitude )
+void Magick::Image::forwardFourierTransform ( const bool magnitude_ )
 {
   ExceptionInfo exceptionInfo;
   GetExceptionInfo( &exceptionInfo );
   MagickCore::Image* newImage = ForwardFourierTransformImage ( image(),
-    magnitude == true ? MagickTrue : MagickFalse, &exceptionInfo );
+    magnitude_ == true ? MagickTrue : MagickFalse, &exceptionInfo );
   replaceImage( newImage );
   throwException( exceptionInfo );
   (void) DestroyExceptionInfo( &exceptionInfo );
@@ -1183,6 +1183,31 @@ void Magick::Image::implode ( const double factor_ )
   (void) DestroyExceptionInfo( &exceptionInfo );
 }
 
+// implements the inverse discrete Fourier transform (IFT) of the image either
+// as a magnitude / phase or real / imaginary image pair.
+void Magick::Image::inverseFourierTransform ( const Image &phase_ )
+{
+  ExceptionInfo exceptionInfo;
+  GetExceptionInfo( &exceptionInfo );
+  MagickCore::Image* newImage = InverseFourierTransformImage( image(),
+                phase_.constImage(), MagickTrue, &exceptionInfo);
+  replaceImage( newImage );
+  throwException( exceptionInfo );
+  (void) DestroyExceptionInfo( &exceptionInfo );
+}
+void Magick::Image::inverseFourierTransform ( const Image &phase_,
+   const bool magnitude_ )
+{
+  ExceptionInfo exceptionInfo;
+  GetExceptionInfo( &exceptionInfo );
+  MagickCore::Image* newImage = InverseFourierTransformImage( image(),
+                phase_.constImage(), magnitude_ == true ? MagickTrue : MagickFalse,
+     &exceptionInfo);
+  replaceImage( newImage );
+  throwException( exceptionInfo );
+  (void) DestroyExceptionInfo( &exceptionInfo );
+}
+
 // Level image. Adjust the levels of the image by scaling the colors
 // falling between specified white and black points to the full
 // available quantum range. The parameters provided represent the
index 9b4f0855bfebe865554a075b49f7f2aa943a979b..5591f735d536bd9640e936af6a5577e753f6f840 100644 (file)
@@ -391,6 +391,12 @@ namespace Magick
     // Implode image (special effect)
     void            implode ( const double factor_ );
     
+    // implements the inverse discrete Fourier transform (DFT) of the image
+    // either as a magnitude / phase or real / imaginary image pair.
+    //
+    void            inverseFourierTransform ( const Image &phase_ );
+    void            inverseFourierTransform ( const Image &phase_,
+                                              const bool magnitude_ );
     // Label image
     void            label ( const std::string &label_ );
 
index facacacfd2a6a6b1b09967fae369ccc1c4a9304d..101c9360f65edf2892ba4898d96f2ec7c25a0521 100644 (file)
@@ -598,6 +598,19 @@ namespace Magick
     double _factor;
   };
 
+  // implements the inverse discrete Fourier transform (IFT) of the image
+  // either as a magnitude / phase or real / imaginary image pair.
+  class MagickDLLDecl inverseFourierTransformImage : public std::unary_function<Image&,void>
+  {
+  public:
+    inverseFourierTransformImage( const Image &phaseImage_ );
+
+    void operator()( Image &image_ ) const;
+
+  private:
+    Image _phaseImage;
+  };
+
   // Set image validity. Valid images become empty (inValid) if
   // argument is false.
   class MagickDLLDecl isValidImage : public std::unary_function<Image&,void>
index 435ff75745e7bc82123eae68d47a4cda98ddd1df..17b80f72a2dc4de5068717de571062465eb50b3a 100644 (file)
@@ -580,6 +580,17 @@ void Magick::implodeImage::operator()( Magick::Image &image_ ) const
   image_.implode( _factor );
 }
 
+// Implements the inverse discrete Fourier transform (IFT) of the image
+// either as a magnitude / phase or real / imaginary image pair.
+Magick::inverseFourierTransformImage::inverseFourierTransformImage( const Magick::Image &phaseImage_ )
+  : _phaseImage( phaseImage_ )
+{
+}
+void Magick::inverseFourierTransformImage::operator()( Magick::Image &image_ ) const
+{
+  image_.inverseFourierTransform( _phaseImage );
+}
+
 // Set image validity. Valid images become empty (inValid) if argument
 // is false.
 Magick::isValidImage::isValidImage( const bool isValid_  )