diff options
| author | Willem Jan Palenstijn <Willem.Jan.Palenstijn@cwi.nl> | 2018-07-12 12:11:52 +0200 | 
|---|---|---|
| committer | Willem Jan Palenstijn <Willem.Jan.Palenstijn@cwi.nl> | 2018-07-17 11:30:05 +0200 | 
| commit | d32df3bcd1910f56195e828a0f7fba8fc04b90ab (patch) | |
| tree | 56963d80f825af10639dee0e1c7c439bbffd1f76 /include | |
| parent | d58f6b51493c7931cbc02feb3ffeb0eca6ea3a4e (diff) | |
| download | astra-d32df3bcd1910f56195e828a0f7fba8fc04b90ab.tar.gz astra-d32df3bcd1910f56195e828a0f7fba8fc04b90ab.tar.bz2 astra-d32df3bcd1910f56195e828a0f7fba8fc04b90ab.tar.xz astra-d32df3bcd1910f56195e828a0f7fba8fc04b90ab.zip  | |
Refactor filter config
Diffstat (limited to 'include')
| -rw-r--r-- | include/astra/CudaFilteredBackProjectionAlgorithm.h | 6 | ||||
| -rw-r--r-- | include/astra/Filters.h | 21 | ||||
| -rw-r--r-- | include/astra/cuda/2d/fbp.h | 4 | ||||
| -rw-r--r-- | include/astra/cuda/2d/fft.h | 4 | 
4 files changed, 23 insertions, 12 deletions
diff --git a/include/astra/CudaFilteredBackProjectionAlgorithm.h b/include/astra/CudaFilteredBackProjectionAlgorithm.h index 974914a..8ef5a57 100644 --- a/include/astra/CudaFilteredBackProjectionAlgorithm.h +++ b/include/astra/CudaFilteredBackProjectionAlgorithm.h @@ -46,11 +46,7 @@ public:  	static std::string type;  private: -	E_FBPFILTER m_eFilter; -	float * m_pfFilter; -	int m_iFilterWidth;	// number of elements per projection direction in filter -	float m_fFilterParameter;  // some filters allow for parameterization (value < 0.0f -> no parameter) -	float m_fFilterD;	// frequency cut-off +	SFilterConfig m_filterConfig;  	bool m_bShortScan; // short-scan mode for fan beam  public: diff --git a/include/astra/Filters.h b/include/astra/Filters.h index ff3f5c8..eec2ba2 100644 --- a/include/astra/Filters.h +++ b/include/astra/Filters.h @@ -30,6 +30,9 @@ along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>.  namespace astra { +struct Config; +class CAlgorithm; +  enum E_FBPFILTER  {  	FILTER_ERROR,			//< not a valid filter @@ -58,14 +61,28 @@ enum E_FBPFILTER  }; +struct SFilterConfig { +	E_FBPFILTER m_eType; +	float m_fD; +	float m_fParameter; + +	float *m_pfCustomFilter; +	int m_iCustomFilterWidth; + +	SFilterConfig() : m_eType(FILTER_ERROR), m_fD(1.0f), m_fParameter(-1.0f), +	                  m_pfCustomFilter(0), m_iCustomFilterWidth(0) { }; +}; +  // Generate filter of given size and parameters. Returns newly allocated array. -float *genFilter(E_FBPFILTER _eFilter, float _fD, int _iProjectionCount, +float *genFilter(const SFilterConfig &_cfg, int _iProjectionCount,                   int _iFFTRealDetectorCount, -                 int _iFFTFourierDetectorCount, float _fParameter = -1.0f); +                 int _iFFTFourierDetectorCount);  // Convert string to filter type. Returns FILTER_ERROR if unrecognized.  E_FBPFILTER convertStringToFilter(const char * _filterType); +SFilterConfig getFilterConfigForAlgorithm(const Config& _cfg, CAlgorithm *_alg); +  }  #endif diff --git a/include/astra/cuda/2d/fbp.h b/include/astra/cuda/2d/fbp.h index 7febe69..1adf3b1 100644 --- a/include/astra/cuda/2d/fbp.h +++ b/include/astra/cuda/2d/fbp.h @@ -75,9 +75,7 @@ public:  	// FILTER_COSINE, FILTER_HAMMING, and FILTER_HANN)  	// have a D variable, which gives the cutoff point in the frequency domain.  	// Setting this value to 1.0 will include the whole filter -	bool setFilter(astra::E_FBPFILTER _eFilter, -                   const float * _pfHostFilter = NULL, -                   int _iFilterWidth = 0, float _fD = 1.0f, float _fFilterParameter = -1.0f); +	bool setFilter(const astra::SFilterConfig &_cfg);  	bool setShortScan(bool ss) { m_bShortScan = ss; return true; } diff --git a/include/astra/cuda/2d/fft.h b/include/astra/cuda/2d/fft.h index f5f8477..33612a0 100644 --- a/include/astra/cuda/2d/fft.h +++ b/include/astra/cuda/2d/fft.h @@ -60,9 +60,9 @@ void applyFilter(int _iProjectionCount, int _iFreqBinCount,  int calcFFTFourierSize(int _iFFTRealSize); -void genCuFFTFilter(astra::E_FBPFILTER _eFilter, float _fD, int _iProjectionCount, +void genCuFFTFilter(const astra::SFilterConfig &_cfg, int _iProjectionCount,                     cufftComplex * _pFilter, int _iFFTRealDetectorCount, -                   int _iFFTFourierDetectorCount, float _fParameter = -1.0f); +                   int _iFFTFourierDetectorCount);  void genIdenFilter(int _iProjectionCount, cufftComplex * _pFilter,                     int _iFFTRealDetectorCount, int _iFFTFourierDetectorCount);  | 
