32 #include <nifti1_io.h>
37 #include "sirf/iUtilities/iutilities.h"
40 class BSplineTransformation;
53 template<
class dataType>
62 bool is_complex()
const {
return _imag_sptr !=
nullptr; }
64 const std::shared_ptr<const NiftiImageData<dataType> >
real()
const {
return _real_sptr; }
66 std::shared_ptr<NiftiImageData<dataType> > &
real() {
return _real_sptr; }
68 const std::shared_ptr<const NiftiImageData<dataType> >
imag()
const {
return _imag_sptr; }
70 std::shared_ptr<NiftiImageData<dataType> > &
imag() {
return _imag_sptr; }
74 const std::shared_ptr<const NiftiImageData<dataType> >
at(
const unsigned idx)
const { check_bounds(idx);
return idx == 0 ?
real() :
imag(); }
76 std::shared_ptr<NiftiImageData<dataType> >
at(
const unsigned idx) { check_bounds(idx);
return idx == 0 ?
real() :
imag(); }
79 void check_bounds(
const unsigned idx)
const
82 throw std::runtime_error(
"ComplexNiftiImageData::at(): Exceeds index range");
84 throw std::runtime_error(
"ComplexNiftiImageData::at(): Trying to access imaginary part of non-complex image");
86 std::shared_ptr<NiftiImageData<dataType> > _real_sptr;
87 std::shared_ptr<NiftiImageData<dataType> > _imag_sptr;
100 template<
class dataType>
115 virtual std::shared_ptr<ImageData>
forward(
const std::shared_ptr<const ImageData> input_sptr);
118 virtual void forward(std::shared_ptr<ImageData> output_sptr,
const std::shared_ptr<const ImageData> input_sptr);
121 virtual std::shared_ptr<ImageData>
adjoint(
const std::shared_ptr<const ImageData> input_sptr);
124 virtual void adjoint(std::shared_ptr<ImageData> output_sptr,
const std::shared_ptr<const ImageData> input_sptr);
126 std::shared_ptr<const ImageData> reference_image_sptr()
const
131 virtual float norm(
int num_iter,
int verb)
const;
Abstract resampling base class.
Resampling class based on nifty resample.
Definition: NiftyResample.h:102
std::shared_ptr< NiftiImageData3DDeformation< dataType > > _deformation_sptr
Deformation.
Definition: NiftyResample.h:157
detail::ComplexNiftiImageData< dataType > _output_image_adjoint_niftis
Adjoint resampled image as a NiftiImageData.
Definition: NiftyResample.h:154
detail::ComplexNiftiImageData< dataType > _floating_image_niftis
Floating image as a NiftiImageData.
Definition: NiftyResample.h:150
virtual std::shared_ptr< ImageData > adjoint(const std::shared_ptr< const ImageData > input_sptr)
Do the adjoint transformation.
Definition: NiftyResampler.cpp:298
std::shared_ptr< NiftyMoMo::BSplineTransformation > _adjoint_transformer_sptr
Needed for the adjoint transformation.
Definition: NiftyResample.h:159
virtual ~NiftyResampler()
Destructor.
Definition: NiftyResample.h:109
virtual void set_up()
Set up.
Definition: NiftyResampler.cpp:101
detail::ComplexNiftiImageData< dataType > _reference_image_niftis
Reference image as a NiftiImageData.
Definition: NiftyResample.h:148
virtual void set_up_adjoint()
Set up adjoint.
Definition: NiftyResampler.cpp:145
std::shared_ptr< NiftiImageData< dataType > > _adjoint_output_weights_sptr
Adjoint output weights. Vector as may be complex.
Definition: NiftyResample.h:163
detail::ComplexNiftiImageData< dataType > _output_image_forward_niftis
Forward resampled image as a NiftiImageData.
Definition: NiftyResample.h:152
virtual void set_up_forward()
Set up forward.
Definition: NiftyResampler.cpp:129
virtual void process()
Process. Equivalent of calling forward(floating_image). Use get_output to get resampled image.
Definition: NiftyResampler.cpp:192
NiftyResampler()
Constructor.
Definition: NiftyResample.h:106
std::shared_ptr< NiftiImageData< dataType > > _adjoint_input_weights_sptr
Adjoint reference weights. Vector as may be complex.
Definition: NiftyResample.h:161
virtual std::shared_ptr< ImageData > forward(const std::shared_ptr< const ImageData > input_sptr)
Do the forward transformation.
Definition: NiftyResampler.cpp:255
void set_up_input_images()
Set up the input images (convert from ImageData to NiftiImageData if necessary)
Definition: NiftyResampler.cpp:198
Definition: Resample.h:58
std::shared_ptr< const ImageData > _reference_image_sptr
Reference image.
Definition: Resample.h:162
This is an internal class requied by NiftyResampler to handle complex images.
Definition: NiftyResample.h:55
std::shared_ptr< NiftiImageData< dataType > > at(const unsigned idx)
at
Definition: NiftyResample.h:76
size_t size() const
size
Definition: NiftyResample.h:72
const std::shared_ptr< const NiftiImageData< dataType > > imag() const
Get imaginary component.
Definition: NiftyResample.h:68
std::shared_ptr< NiftiImageData< dataType > > & imag()
Get imaginary component.
Definition: NiftyResample.h:70
const std::shared_ptr< const NiftiImageData< dataType > > at(const unsigned idx) const
at
Definition: NiftyResample.h:74
bool is_complex() const
is complex
Definition: NiftyResample.h:62
const std::shared_ptr< const NiftiImageData< dataType > > real() const
Get real component.
Definition: NiftyResample.h:64
virtual ~ComplexNiftiImageData()
Destructor.
Definition: NiftyResample.h:60
std::shared_ptr< NiftiImageData< dataType > > & real()
Get real component.
Definition: NiftyResample.h:66
ComplexNiftiImageData()
Constructor.
Definition: NiftyResample.h:58
Abstract data container.
Definition: GeometricalInfo.cpp:141