source: trunk/src/Utils/GaussSmooth1D.hh @ 1393

Last change on this file since 1393 was 1393, checked in by MatthewWhiting, 10 years ago

A large changeset that moves all use of bool arrays (ie. bool *) to std::vector<bool>. This will be a bit safer, plus potentially cheaper in memory usage. Interfaces to all stats functions with masks have changed accordingly, as well as the Gaussian smoothing functions and some spectral utility functions.

File size: 3.0 KB
Line 
1// -----------------------------------------------------------------------
2// GaussSmooth1D.hh: Definition of GaussSmooth1D 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 GAUSSSMOOTH1D_H
30#define GAUSSSMOOTH1D_H
31#include <vector>
32/// @brief
33///  Define a Gaussian to smooth a 2D array.
34/// @details
35///  A simple class to define a Gaussian kernel that can be used to
36///  smooth a two-dimensional array.
37
38template <class Type>
39class GaussSmooth1D
40{
41public:
42  GaussSmooth1D();          ///< Basic constructor: no kernel defined.
43  virtual ~GaussSmooth1D(); ///< Destructor
44  GaussSmooth1D(const GaussSmooth1D& g);
45  GaussSmooth1D& operator=(const GaussSmooth1D& g);
46 
47
48  /// @brief Specific constructor that sets up kernel.
49  GaussSmooth1D(float fwhm); 
50
51  /// @brief Define the size and the array of coefficients.
52  void   define(float fwhm);
53
54  /// @brief Smooth an array with the Gaussian kernel
55  Type *smooth(Type *input, int dim, bool normalise=false, bool scaleByCoverage=false); 
56  /// @brief Smooth an array with the Gaussian kernel, using a mask to define blank pixels
57  Type *smooth(Type *input, int dim, std::vector<bool> mask, bool normalise=false, bool scaleByCoverage=false); 
58 
59  void   setKernFWHM(float f){kernFWHM=f;};
60
61  Type   getKernelPt(int i){return kernel[i];};
62  Type  *getKernel(){return kernel;};
63
64  int    getKernWidth(){return kernWidth;};
65  float  getStddevScale(){return stddevScale;};
66
67private:
68  float  kernFWHM;     ///< The FWHM of the Gaussian.
69  int    kernWidth;    ///< The width of the kernel (in pixels).
70  float  stddevScale;  ///< The factor by which the rms of the input array gets scaled by (assuming iid normally)
71  Type  *kernel;       ///< The coefficients of the smoothing kernel
72  bool   allocated;    ///< Have the coefficients been allocated in memory?
73
74};
75
76#endif  // GAUSSSMOOTH1D_H
Note: See TracBrowser for help on using the repository browser.