32 #include <nifti1_io.h> 37 #include "sirf/iUtilities/iutilities.h" 40 class BSplineTransformation;
53 template<
class dataType>
54 class ComplexNiftiImageData
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; }
72 size_t size()
const {
return is_complex() ? 2 : 1; }
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");
83 if (idx == 1 && !is_complex())
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>
112 virtual void process();
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);
129 virtual void set_up();
132 virtual void set_up_forward();
135 virtual void set_up_adjoint();
138 void set_up_input_images();
150 std::shared_ptr<NiftiImageData3DDeformation<dataType> > _deformation_sptr;
152 std::shared_ptr<NiftyMoMo::BSplineTransformation> _adjoint_transformer_sptr;
154 std::shared_ptr<NiftiImageData<dataType> > _adjoint_input_weights_sptr;
156 std::shared_ptr<NiftiImageData<dataType> > _adjoint_output_weights_sptr;
virtual ~NiftyResampler()
Destructor.
Definition: NiftyResampler.h:109
Definition: NiftyResample.h:39
const std::shared_ptr< const NiftiImageData< dataType > > at(const unsigned idx) const
at
Definition: NiftyResampler.h:74
bool is_complex() const
is complex
Definition: NiftyResampler.h:62
const std::shared_ptr< const NiftiImageData< dataType > > imag() const
Get imaginary component.
Definition: NiftyResampler.h:68
Definition: Resample.h:55
std::shared_ptr< NiftiImageData< dataType > > at(const unsigned idx)
at
Definition: NiftyResampler.h:76
This is an internal class requied by NiftyResampler to handle complex images.
Definition: NiftyResample.h:54
ComplexNiftiImageData()
Constructor.
Definition: NiftyResampler.h:58
std::shared_ptr< NiftiImageData< dataType > > & imag()
Get imaginary component.
Definition: NiftyResampler.h:70
Abstract resampling base class.
virtual ~ComplexNiftiImageData()
Destructor.
Definition: NiftyResampler.h:60
Abstract data container.
Definition: GeometricalInfo.cpp:141
std::shared_ptr< NiftiImageData< dataType > > & real()
Get real component.
Definition: NiftyResampler.h:66
size_t size() const
size
Definition: NiftyResampler.h:72
Resampling class based on nifty resample.
Definition: NiftyResample.h:101
const std::shared_ptr< const NiftiImageData< dataType > > real() const
Get real component.
Definition: NiftyResampler.h:64
NiftyResampler()
Constructor.
Definition: NiftyResampler.h:106