00001
00012
00013
00014 #ifndef IMEDGINE_ONE_BYTE_VOLUME_PIXEL_DATASET_H
00015 #define IMEDGINE_ONE_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 #include <itkAffineTransform.h>
00031
00032 namespace imedgine
00033 {
00034
00052
00053
00054
00055 class OneByteVolumePixelDataset : public VolumePixelDataset
00056 {
00057 protected:
00058
00059
00062 typedef one_byte_volume_type volume_type;
00063
00064
00067 typedef one_byte_volume_pointer_type volume_pointer_type;
00068
00069
00072 typedef const_one_byte_volume_pointer_type const_volume_pointer_type;
00073
00074
00077 typedef const_one_byte_volume_iterator_type const_volume_iterator_type;
00078
00079
00082 typedef one_byte_image_type image_type;
00083
00084
00087 typedef one_byte_pixel_type pixel_type;
00088
00089 public:
00090
00091
00094 typedef volume_type type;
00095
00096
00101
00102 OneByteVolumePixelDataset(dataset_key_type dataset_key, volume_pointer_type volume = 0);
00103
00104
00107
00108 virtual ~OneByteVolumePixelDataset();
00109
00110
00114
00115 virtual external_data_pointer_type getData() const
00116 throw(NullPointerException);
00117
00118
00122
00123 void setDataset(volume_pointer_type dataset);
00124
00125
00130
00131 const_volume_pointer_type getDataset() const;
00132
00133
00137
00138 volume_pointer_type getDataset();
00139
00140
00145
00146 virtual void setIntensity(double window, double level);
00147
00148
00152
00153 double getIntensityWindow() const
00154 throw(NullPointerException);
00155
00156
00160
00161 double getIntensityLevel() const
00162 throw(NullPointerException);
00163
00164
00170
00171 external_data_pointer_type getSliceXY(index_type z_index)
00172 throw(NullPointerException, IndexOutOfBoundsException);
00173
00174
00180
00181 external_data_pointer_type getSliceXZ(index_type y_index)
00182 throw(NullPointerException, IndexOutOfBoundsException);
00183
00184
00190
00191 external_data_pointer_type getSliceYZ(index_type x_index)
00192 throw(NullPointerException, IndexOutOfBoundsException);
00193
00194
00195
00202
00203 dataset_pointer_type getImageXY(index_type z_index, dataset_key_type image_key)
00204 throw(NullPointerException, IndexOutOfBoundsException);
00205
00206
00213
00214 dataset_pointer_type getImageXZ(index_type y_index, dataset_key_type image_key)
00215 throw(NullPointerException, IndexOutOfBoundsException);
00216
00217
00224
00225 dataset_pointer_type getImageYZ(index_type x_index, dataset_key_type image_key)
00226 throw(NullPointerException, IndexOutOfBoundsException);
00227
00228
00229 protected:
00230
00231
00234 typedef volume_type::RegionType region_type;
00235
00236
00239 typedef volume_type::SizeType region_size_type;
00240
00241
00244 typedef volume_type::IndexType region_index_type;
00245
00246
00249 typedef itk::ResampleImageFilter<volume_type, volume_type, double> resampling_filter_type;
00250
00251
00254 typedef itk::ExtractImageFilter<volume_type, image_type> slice_extractor_type;
00255
00256
00259 typedef itk::ExtractImageFilter<volume_type, image_type> image_extractor_type;
00260
00261
00264 typedef itk::IntensityWindowingImageFilter<volume_type, external_volume_type>
00265 volume_intensity_filter_type;
00266
00267
00270 typedef itk::IntensityWindowingImageFilter<image_type, external_image_type>
00271 image_intensity_filter_type;
00272
00273
00276
00277 OneByteVolumePixelDataset(OneByteVolumePixelDataset const& src);
00278
00279
00283
00284 void setDatasetInternal(volume_pointer_type dataset);
00285
00286
00289 one_byte_volume_pointer_type dataset_;
00290
00291
00294 resampling_filter_type::Pointer resampling_filter_;
00295
00296
00299 slice_extractor_type::Pointer slice_extractor_;
00300
00301
00304 image_extractor_type::Pointer image_extractor_;
00305
00306
00309 volume_intensity_filter_type::Pointer volume_intensity_filter_;
00310
00311
00314 image_intensity_filter_type::Pointer image_intensity_filter_;
00315
00316
00319 region_type xy_region_to_extract_;
00320
00321
00324 region_type xz_region_to_extract_;
00325
00326
00329 region_type yz_region_to_extract_;
00330
00331 private:
00332
00333
00336
00337 OneByteVolumePixelDataset& operator = (OneByteVolumePixelDataset const&) { return(*this); }
00338
00339 };
00340
00341 }
00342
00343 #endif // IMEDGINE3D_DATASET_H