one_byte_image_pixel_dataset.cpp

Go to the documentation of this file.
00001 //--------------------------------------------------
00012 //---------------------------------------------------
00013 
00014 #include "one_byte_image_pixel_dataset.h"
00015 
00016 #include <limits>
00017 
00018 namespace imedgine 
00019 {
00020   //---------------------------------------------------
00021   
00022   OneByteImagePixelDataset::OneByteImagePixelDataset(dataset_key_type dataset_key, 
00023       image_pointer_type image)
00024   : ImagePixelDataset(ONE_BYTE_IMAGE_PIXEL_DATASET, dataset_key, 1),
00025     image_intensity_filter_(image_intensity_filter_type::New())
00026   {
00027     if (image.IsNull() == false)
00028     {
00029       this->setDataset(image);
00030     }
00031   }
00032   
00033   //---------------------------------------------------
00034   
00035   OneByteImagePixelDataset::OneByteImagePixelDataset(OneByteImagePixelDataset const& src)
00036   : ImagePixelDataset(src),
00037     image_intensity_filter_(image_intensity_filter_type::New())
00038   {
00039   }
00040   
00041   //---------------------------------------------------
00042   
00043   OneByteImagePixelDataset::~OneByteImagePixelDataset()
00044   {
00045   }
00046 
00047   //---------------------------------------------------
00048   
00049   external_data_pointer_type OneByteImagePixelDataset::getData() const
00050       throw(NullPointerException)
00051   {
00052     if (dataset_.IsNull())
00053     {
00054       throw(NullPointerException("OneByteImagePixelDataset::getData()"));
00055     }
00056  
00057     image_intensity_filter_->UpdateLargestPossibleRegion();
00058     
00059     external_image_type::Pointer image = image_intensity_filter_->GetOutput();
00060     image->DisconnectPipeline();
00061     image->GetPixelContainer()->ContainerManageMemoryOff();
00062     
00063     return(external_data_pointer_type(image->GetBufferPointer()));
00064   }
00065 
00066   //--------------------------------------------------
00067   
00068   OneByteImagePixelDataset::image_pointer_type 
00069       OneByteImagePixelDataset::getDataset()
00070   {
00071     return(dataset_);
00072   }
00073   
00074   //--------------------------------------------------
00075   
00076   OneByteImagePixelDataset::const_image_pointer_type 
00077       OneByteImagePixelDataset::getDataset() const
00078   {
00079     return(dataset_);
00080   }
00081   
00082   //--------------------------------------------------
00083   
00084   void OneByteImagePixelDataset::setDataset(image_pointer_type dataset)
00085   {
00086     setDatasetInternal(dataset);
00087     is_dirty_ = true;
00088   }
00089   
00090   //--------------------------------------------------
00091   
00092   void OneByteImagePixelDataset::setDatasetInternal(image_pointer_type dataset)
00093   {
00094     dataset_ = dataset;
00095     is_data_set_ = true;
00096     
00097     const_image_iterator_type image_iter(
00098         dataset_, dataset_->GetLargestPossibleRegion());
00099     for (image_iter.GoToBegin(); !image_iter.IsAtEnd(); ++image_iter)
00100     {
00101       if (image_iter.Value() > max_pixel_value_)
00102       {
00103         max_pixel_value_ = image_iter.Value();
00104       }  
00105       if (image_iter.Value() < min_pixel_value_)
00106       {
00107         min_pixel_value_ = image_iter.Value();
00108       }
00109     }
00110     
00111     region_type image_region = dataset_->GetLargestPossibleRegion();
00112     region_size_type image_size = image_region.GetSize();
00113     dataset_size_[X_DIMENSION] = image_size[X_DIMENSION];
00114     dataset_size_[Y_DIMENSION] = image_size[Y_DIMENSION];
00115     
00116     image_intensity_filter_->SetInput(dataset_);
00117     
00118     image_intensity_filter_->SetWindowMinimum(static_cast<pixel_type>(min_pixel_value_));
00119     image_intensity_filter_->SetWindowMaximum(static_cast<pixel_type>(max_pixel_value_));
00120     image_intensity_filter_->SetOutputMinimum(0);
00121     image_intensity_filter_->SetOutputMaximum(
00122         std::numeric_limits<external_pixel_type>::max());
00123   }
00124     
00125   //--------------------------------------------------
00126  
00127   void OneByteImagePixelDataset::setIntensity(double window, double level)
00128   {
00129     if (level > max_pixel_value_)
00130     {
00131       level = max_pixel_value_;
00132     }
00133     else if (level < min_pixel_value_)
00134     {
00135       level = min_pixel_value_;
00136     }
00137     
00138     double new_window_min = level - static_cast<int>(window / 2.0);
00139     double new_window_max = level + static_cast<int>(window / 2.0);
00140     
00141 
00142     if (new_window_min < std::numeric_limits<pixel_type>::min())
00143     {
00144       new_window_min = std::numeric_limits<pixel_type>::min();
00145     }
00146     else if (new_window_max > std::numeric_limits<pixel_type>::max())
00147     {
00148       new_window_max = std::numeric_limits<pixel_type>::max();
00149     }
00150     
00151     image_intensity_filter_->SetWindowMinimum(
00152         static_cast<pixel_type>(new_window_min));
00153     
00154     image_intensity_filter_->SetWindowMaximum(
00155         static_cast<pixel_type>(new_window_max));
00156   }
00157   
00158   //--------------------------------------------------
00159   
00160   double OneByteImagePixelDataset::getIntensityWindow() const
00161     throw(NullPointerException)
00162   {
00163     if (image_intensity_filter_.IsNull())
00164     {
00165       throw(NullPointerException("OneByteVolumePixelDataset::getIntensityWindow()"));
00166     }
00167     return(static_cast<double>(image_intensity_filter_->GetWindow()));
00168   }
00169 
00170   //--------------------------------------------------
00171 
00172   double OneByteImagePixelDataset::getIntensityLevel() const
00173       throw(NullPointerException)
00174   {
00175     if (image_intensity_filter_.IsNull())
00176     {
00177       throw(NullPointerException("OneByteVolumePixelDataset::getIntensityLevel()"));
00178     }
00179     return(static_cast<double>(image_intensity_filter_->GetLevel()));
00180   }
00181 
00182 } // namespace imedgine

Generated on Sun Aug 13 18:19:38 2006 for iMEDgine by  doxygen 1.4.6