00001
00012
00013
00014 #ifndef IMEDGINE_TWO_BYTE_VOLUME_PIXEL_DATASET_H
00015 #define IMEDGINE_TWO_BYTE_VOLUME_PIXEL_DATASET_H
00016
00017 #include "../global/global_definitions.h"
00018 #include "dataset_definitions.h"
00019 #include "volume_pixel_dataset.h"
00020 #include "../exceptions/null_pointer_exception.h"
00021 #include "../exceptions/index_out_of_bounds_exception.h"
00022
00023 #include <boost/shared_ptr.hpp>
00024
00025 #include <vector>
00026 #include <memory>
00027 #include <itkImage.h>
00028 #include <itkExtractImageFilter.h>
00029 #include <itkResampleImageFilter.h>
00030
00031 namespace imedgine
00032 {
00033
00049
00050
00051 class TwoByteVolumePixelDataset : public VolumePixelDataset
00052 {
00053 protected:
00054
00055
00058 typedef two_byte_volume_type volume_type;
00059
00060
00063 typedef two_byte_volume_pointer_type volume_pointer_type;
00064
00065
00068 typedef const_two_byte_volume_pointer_type const_volume_pointer_type;
00069
00070
00073 typedef const_two_byte_volume_iterator_type const_volume_iterator_type;
00074
00075
00078 typedef two_byte_image_type image_type;
00079
00080
00083 typedef two_byte_pixel_type pixel_type;
00084
00085 public:
00086
00087
00090 typedef volume_type type;
00091
00092
00097
00098 TwoByteVolumePixelDataset(dataset_key_type dataset_key, volume_pointer_type volume = 0);
00099
00100
00103
00104 virtual ~TwoByteVolumePixelDataset();
00105
00106
00110
00111 virtual external_data_pointer_type getData() const
00112 throw(NullPointerException);
00113
00114
00118
00119 void setDataset(volume_pointer_type dataset);
00120
00121
00126
00127 const_volume_pointer_type getDataset() const;
00128
00129
00133
00134 volume_pointer_type getDataset();
00135
00136
00141
00142 virtual void setIntensity(double window, double level);
00143
00144
00148
00149 double getIntensityWindow() const
00150 throw(NullPointerException);
00151
00152
00156
00157 double getIntensityLevel() const
00158 throw(NullPointerException);
00159
00160
00166
00167 external_data_pointer_type getSliceXY(index_type z_index)
00168 throw(NullPointerException, IndexOutOfBoundsException);
00169
00170
00176
00177 external_data_pointer_type getSliceXZ(index_type y_index)
00178 throw(NullPointerException, IndexOutOfBoundsException);
00179
00180
00186
00187 external_data_pointer_type getSliceYZ(index_type x_index)
00188 throw(NullPointerException, IndexOutOfBoundsException);
00189
00190
00197
00198 dataset_pointer_type getImageXY(index_type z_index, dataset_key_type image_key)
00199 throw(NullPointerException, IndexOutOfBoundsException);
00200
00201
00208
00209 dataset_pointer_type getImageXZ(index_type y_index, dataset_key_type image_key)
00210 throw(NullPointerException, IndexOutOfBoundsException);
00211
00212
00219
00220 dataset_pointer_type getImageYZ(index_type x_index, dataset_key_type image_key)
00221 throw(NullPointerException, IndexOutOfBoundsException);
00222
00223
00224 protected:
00225
00226
00229 typedef volume_type::RegionType region_type;
00230
00231
00234 typedef volume_type::SizeType region_size_type;
00235
00236
00239 typedef volume_type::IndexType region_index_type;
00240
00241
00244 typedef itk::ResampleImageFilter<volume_type, volume_type, double> resampling_filter_type;
00245
00246
00249 typedef itk::ExtractImageFilter<volume_type, image_type> slice_extractor_type;
00250
00251
00254 typedef itk::ExtractImageFilter<volume_type, image_type> image_extractor_type;
00255
00256
00259 typedef itk::IntensityWindowingImageFilter<volume_type, external_volume_type>
00260 volume_intensity_filter_type;
00261
00262
00265 typedef itk::IntensityWindowingImageFilter<image_type, external_image_type>
00266 image_intensity_filter_type;
00267
00268
00271
00272 TwoByteVolumePixelDataset(TwoByteVolumePixelDataset const& src);
00273
00274
00278
00279 void setDatasetInternal(volume_pointer_type dataset);
00280
00281
00284 volume_pointer_type dataset_;
00285
00286
00289 resampling_filter_type::Pointer resampling_filter_;
00290
00291
00294 slice_extractor_type::Pointer slice_extractor_;
00295
00296
00299 image_extractor_type::Pointer image_extractor_;
00300
00301
00304 volume_intensity_filter_type::Pointer volume_intensity_filter_;
00305
00306
00309 image_intensity_filter_type::Pointer image_intensity_filter_;
00310
00311
00314 region_type xy_region_to_extract_;
00315
00316
00319 region_type xz_region_to_extract_;
00320
00321
00324 region_type yz_region_to_extract_;
00325
00326 private:
00327
00328
00331
00332 TwoByteVolumePixelDataset& operator = (TwoByteVolumePixelDataset const&) { return(*this); }
00333
00334 };
00335
00336 }
00337
00338 #endif