source: trunk/src/Utils/GaussSmooth.hh @ 526

Last change on this file since 526 was 526, checked in by MatthewWhiting, 15 years ago

Adding a bool parameter to the GaussSmooth? smooth function that allows the user to select whether or not to scale by the kernel coverage. It defaults to true and will be set that way by all Duchamp calls.

File size: 3.4 KB
Line 
1// -----------------------------------------------------------------------
2// GaussSmooth.hh: Definition of GaussSmooth class, used to smooth a
3//                 2D image with a Gaussian kernel.
4// -----------------------------------------------------------------------
5// Copyright (C) 2006, Matthew Whiting, ATNF
6//
7// This program is free software; you can redistribute it and/or modify it
8// under the terms of the GNU General Public License as published by the
9// Free Software Foundation; either version 2 of the License, or (at your
10// option) any later version.
11//
12// Duchamp is distributed in the hope that it will be useful, but WITHOUT
13// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
15// for more details.
16//
17// You should have received a copy of the GNU General Public License
18// along with Duchamp; if not, write to the Free Software Foundation,
19// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
20//
21// Correspondence concerning Duchamp may be directed to:
22//    Internet email: Matthew.Whiting [at] atnf.csiro.au
23//    Postal address: Dr. Matthew Whiting
24//                    Australia Telescope National Facility, CSIRO
25//                    PO Box 76
26//                    Epping NSW 1710
27//                    AUSTRALIA
28// -----------------------------------------------------------------------
29#ifndef GAUSSSMOOTH_H
30#define GAUSSSMOOTH_H
31
32/**
33 *  Define a Gaussian to smooth a 2D array.
34 *
35 *  A simple class to define a Gaussian kernel that can be used to
36 *  smooth a two-dimensional array.
37 */
38
39template <class Type>
40class GaussSmooth
41{
42public:
43  GaussSmooth();          ///< Basic constructor: no kernel defined.
44  virtual ~GaussSmooth(); ///< Destructor
45  GaussSmooth(const GaussSmooth& g);
46  GaussSmooth& operator=(const GaussSmooth& g);
47 
48
49  /** Specific constructor that sets up kernel.*/
50  GaussSmooth(float maj, float min, float pa); 
51  /** Specific constructor that sets up kernel: assuming circular gaussian.*/
52  GaussSmooth(float maj); 
53
54  /** Define the size and the array of coefficients. */
55  void   define(float maj, float min, float pa);
56
57  /** Smooth an array with the Gaussian kernel*/
58  Type *smooth(Type *input, int xdim, int ydim, bool scaleByCoverage=false); 
59  /** Smooth an array with the Gaussian kernel, using a mask to define
60      blank pixels*/
61  Type *smooth(Type *input, int xdim, int ydim, bool *mask, bool scaleByCoverage=false); 
62 
63  void   setKernMaj(float f){kernMaj=f;};
64  void   setKernMin(float f){kernMin=f;};
65  void   setKernPA(float f){kernPA=f;};
66
67  Type   getKernelPt(int i){return kernel[i];};
68  Type  *getKernel(){return kernel;};
69
70  int    getKernWidth(){return kernWidth;};
71  float  getStddevScale(){return stddevScale;};
72
73private:
74  float  kernMaj;      ///< The FWHM of the major axis of the
75                       ///   elliptical Gaussian.
76  float  kernMin;      ///< The FWHM of the minor axis of the
77                       ///   elliptical Gaussian.
78  float  kernPA;       ///< The position angle of the elliptical
79                       ///   Gaussian.
80  int    kernWidth;    ///< The width of the kernel (in pixels).
81  float  stddevScale;  ///< The factor by which the rms of the input
82                       ///   array gets scaled by (assuming iid
83                       ///   normally)
84  Type  *kernel;       ///< The coefficients of the smoothing kernel
85  bool   allocated;    ///< Have the coefficients been allocated in memory?
86
87};
88
89#endif  // HANNING_H
Note: See TracBrowser for help on using the repository browser.