Filter Library Camera Interface Physics

ScanFilterFFT.h

00001 /*
00002  * ScanFilterFFT.h - forward FFT.
00003  *
00004  * This file is part of the Camera Filter Library.
00005  * Computer Aided Measurement Environment for Realtime Atomic imaging (Camera)
00006  *
00007  * Copyright (C) 2004-2005, Leiden Probe Microscopy.
00008  * Copyright (C) 2004-2005, Universiteit Leiden.
00009  *
00010  * Authors: M. Seynen (original), Martin J. Moene
00011  *
00012  * $Id: ScanFilterFFT.h 321 2006-02-21 09:15:41Z moene $
00013  */
00014 
00015 #ifndef CFL_ScanFilterFFT_h
00016 #define CFL_ScanFilterFFT_h
00017 
00018 #if _MSC_VER > 1000
00019 #pragma once
00020 #endif // _MSC_VER > 1000
00021 
00022 #include <cfl/ScanFilter.h>             // for base class
00023 #include <cfl/ScanBaseBuffer.h>         // for ValueType
00024 #include <cfl/ProgressDlg.h>            // for class CProgressDlg
00025 #include <cfl/ToolCilImage.h>           // for class Image
00026 
00027 /**
00028  * \addtogroup cfl_filterfft Forward FFT
00029  * \brief forward fft.
00030  *
00031 
00032 <h3>Purpose</h3>
00033 
00034 <h3>Description</h3>
00035 
00036 <h3>Algorithm</h3>
00037 
00038 
00039 \f[
00040    \textrm{B} = \textrm{A}
00041 \f]
00042 
00043 <h3>Examples</h3>
00044 Try to find some interesting pictures for most filters.
00045 
00046 <h3>Contact</h3>
00047 Dipl.phys. M.J. Rost<br>
00048 Huygens Laboratorium<br>
00049 Universiteit Leiden<br>
00050 Niels Bohrweg 2<br>
00051 2333 CA Leiden, The Netherlands<br>
00052 <br>
00053 Tel: +31 71 5275600<br>
00054 Fax: +31 71 5275404<br>
00055 <br>
00056 E-mail: rost@physics.LeidenUniv.nl<br>
00057 Web: http://www.geocities.com/marcel_rost/<br>
00058 
00059  *
00060  * @{
00061  */
00062 
00063 DECLARE_CLASS( CScanFilterFFT );         // create various types
00064 
00065 /**
00066  * \brief forward FFT.
00067  *
00068  */
00069 class CScanFilterFFT : public CScanFilter
00070 {
00071    /**
00072     * declare class serializable.
00073     */
00074    DECLARE_SERIAL( CScanFilterFFT );
00075 
00076 public:
00077    /**
00078     * the parent class.
00079     */
00080    typedef CScanFilter Super;
00081 
00082    /**
00083     * the size type.
00084     */
00085    typedef CScanBaseBuffer::SizeType SizeType;
00086 
00087    /**
00088     * the value type.
00089     */
00090    typedef CScanBaseBuffer::ValueType ValueType;
00091 
00092    /**
00093     * the pointer type.
00094     */
00095    typedef ValueType* Pointer;
00096 
00097    /**
00098     * the pointer type.
00099     */
00100    typedef const ValueType* ConstPointer;
00101 
00102    /**
00103     * the Fourier element type.
00104     */
00105    typedef CScanBaseBuffer::FourierElementType FourierElementType;
00106 
00107    /**
00108     * the real type.
00109     */
00110    typedef FourierElementType RealType;
00111 
00112    /**
00113     * the power image type.
00114     */
00115    typedef cil::Image< RealType > PowerImageType;
00116 
00117    ///
00118    /// \name Construction
00119    /// @{
00120 
00121    /**
00122     * default constructor.
00123     */
00124    CScanFilterFFT();
00125 
00126    /**
00127     * destructor.
00128     */
00129    virtual ~CScanFilterFFT();
00130 
00131    /// @}
00132    /// \name Camera--Filter Interface
00133    /// @{
00134 
00135    /**
00136     * no dialog.
00137     */
00138    virtual BOOL CanDoDialogEntry() const;
00139 
00140 //    /**
00141 //     * \brief configure filter with settings as provided by the application on the
00142 //     * filterlist window (e.g. via registry); see also CScanFilterNull::ReadFilterSettings().
00143 //     */
00144 //    virtual void ReadFilterSettings( );
00145 //
00146 //    /**
00147 //     * \brief save filter settings e.g. for use with the filterlist window (e.g. via registry);
00148 //     * see also ReadFilterSettings().
00149 //     */
00150 //    virtual void WriteFilterSettings( ) const;
00151 //
00152    /**
00153     * no parameters; see also CScanFilterNull::GetParameters().
00154     */
00155    virtual LPCTSTR GetParameters() const;
00156 
00157    /**
00158     * no parameters; see also CScanFilterNull::SetParameters().
00159     */
00160    virtual BOOL SetParameters( LPCTSTR lpParameters );
00161 
00162 //    /**
00163 //     * start filter dialog to edit parameters; no filter operations;
00164 //     * see also CScanFilterNull::EditModeless().
00165 //     */
00166 //    virtual BOOL EditModeless( CWnd *pParentWnd );
00167 //
00168 //    /**
00169 //     * create filter dialog and prepare filter for Apply();
00170 //     * see also CScanFilterNull::RunModeless().
00171 //     */
00172 //    virtual BOOL RunModeless( CWnd *pParentWnd, CDocument *pDoc );
00173 
00174    /**
00175     * check parameters, take care of a properly sized output buffer,
00176     * set its name and copy filter parameters and process;
00177     * see also CScanFilterNull::ApplyCore().
00178     */
00179    virtual BOOL Apply();
00180 
00181    /// @}
00182    /// \name Predicates
00183    /// @{
00184 
00185    /// @}
00186    /// \name Accessors
00187    /// @{
00188 
00189    /// @}
00190    /// \name Mutators
00191    /// @{
00192 
00193    /// @}
00194 
00195 public:
00196    /**
00197     * the filter name.
00198     */
00199    static LPCTSTR m_lpcsFilterName;
00200 
00201    /**
00202     * the class short filtername.
00203     */
00204    static LPCTSTR m_lpcsShortFilterName;
00205 
00206    /*
00207     * the maximum amplitude to scale the power spectrum to.
00208     */
00209    static const ValueType maximumAmplitude; // = 20000;
00210 
00211 protected:
00212    /**
00213     * store or retrieve the object's settings.
00214     */
00215    virtual void Serialize(CArchive& ar);
00216 
00217    /**
00218     * create a thread that computes the result.
00219     */
00220    static UINT ComputationThreadFunction( LPVOID lpContext );
00221 
00222    /**
00223     * called by working thread
00224     */
00225    BOOL Compute( CProgressDlg *pDlg );
00226 
00227    /**
00228     * compute a frame.
00229     */
00230    void ComputePart( CProgressDlg *pDlg, const Image& src, Image& dst, FourierElementType** pFFT );
00231 
00232    /**
00233     * compute power for a frame.
00234     */
00235    RealType ComputePower( CProgressDlg *pDlg, const Image& src, FourierElementType** pFFT, PowerImageType& pwr );
00236 
00237    /**
00238     * compute output for a frame.
00239     */
00240    void ComputeOutput( CProgressDlg *pDlg, RealType maxAmpIn, const PowerImageType& pwr, Image& dst );
00241 
00242    /**
00243     * the computation thread arguments type.
00244     */
00245    class ThreadArgs
00246    {
00247    public:
00248       /**
00249        * constructor
00250        */
00251       ThreadArgs( CProgressDlg* Dlg, CScanFilterFFT* This ) :
00252          pDlg( Dlg ), pThis( This ), bReturn( 0 )
00253       {
00254          ; // do nothing
00255       }
00256 
00257       BOOL bReturn;                     ///< the thread return value
00258       CProgressDlg *pDlg;               ///< the progress dialog
00259       CScanFilterFFT *pThis;            ///< the filter
00260    };
00261    
00262    /**
00263     * progress counter.
00264     */
00265    int m_progress;
00266 };
00267 
00268 /// @} cfl_filterfft
00269 
00270 #endif // CFL_ScanFilterFFT_h
00271 
00272 /*
00273  * end of file
00274  */
00275 

Camera Filter Library documentation © 2004-2007 by Leiden Probe Microscopy