+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.
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 );
(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
// 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_ );
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>
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_ )