00001
00012
00013
00014 #include "pixel_dataset.h"
00015 #include "pixel_metadata.h"
00016
00017 #include <limits>
00018
00019 namespace imedgine
00020 {
00021
00022
00023
00024 bool operator == (matrix_type matrix, identity_matrix_type identity_matrix)
00025 {
00026 if ((matrix.size1() == identity_matrix.size1()) &&
00027 (matrix.size2() == identity_matrix.size2()))
00028 {
00029 matrix_type::const_iterator1 m_iter = matrix.begin1();
00030 identity_matrix_type::const_iterator1 im_iter = identity_matrix.begin1();
00031 for ( ; m_iter != matrix.end1(); ++m_iter, ++im_iter)
00032 {
00033 if (*m_iter != *im_iter)
00034 {
00035 return(false);
00036 }
00037 }
00038 return(true);
00039 }
00040 return(false);
00041 }
00042
00043
00044
00045 bool operator != (matrix_type matrix, identity_matrix_type identity_matrix)
00046 {
00047 return((matrix == identity_matrix) == false);
00048 }
00049
00050
00051
00052
00053 PixelDataset::PixelDataset(dataset_type type, dataset_key_type dataset_key,
00054 unsigned char num_dimensions,
00055 unsigned char num_bytes_per_pixel)
00056 : Dataset(type, dataset_key),
00057 num_dimensions_(num_dimensions),
00058 num_bytes_per_pixel_(num_bytes_per_pixel),
00059 dataset_size_(num_dimensions_),
00060 current_focus_point_(num_dimensions_),
00061 spacings_(num_dimensions_),
00062 min_pixel_value_(0.0),
00063 max_pixel_value_(0.0),
00064 transformation_matrix_(identity_matrix_type(
00065 num_dimensions_, num_dimensions_)),
00066 offset_vector_(num_dimensions_, 0)
00067 {
00068 }
00069
00070
00071
00072 PixelDataset::PixelDataset(PixelDataset const& src)
00073 : Dataset(src)
00074 {
00075 }
00076
00077
00078
00079 PixelDataset::~PixelDataset()
00080 {
00081 }
00082
00083
00084
00085 metadata_pointer_type PixelDataset::getMetadata() const
00086 {
00087 return(metadata_pointer_type(new PixelMetadata(
00088 num_dimensions_, dataset_size_, spacings_, num_bytes_per_pixel_)));
00089 }
00090
00091
00092
00093 size_type PixelDataset::getNumElements() const
00094 {
00095 size_type num_elements = 1;
00096
00097 for (unsigned char dim = 0; dim < num_dimensions_; ++dim)
00098 {
00099 num_elements *= dataset_size_[dim];
00100 }
00101 return(num_elements);
00102 }
00103
00104
00105
00106 unsigned char PixelDataset::getNumDimensions() const
00107 {
00108 return(num_dimensions_);
00109 }
00110
00111
00112
00113 unsigned char PixelDataset::getNumBytesPerPixel() const
00114 {
00115 return(num_bytes_per_pixel_);
00116 }
00117
00118
00119
00120 dataset_position_type const& PixelDataset::getSize() const
00121 {
00122 return(dataset_size_);
00123 }
00124
00125
00126
00127 void PixelDataset::setFocusPoint(
00128 dataset_position_type const& focus_point)
00129 {
00130 current_focus_point_ = focus_point;
00131 }
00132
00133
00134
00135 void PixelDataset::setFocusPointAt(unsigned char dimension, index_type index)
00136 throw(IndexOutOfBoundsException)
00137 {
00138 try
00139 {
00140 if (index >= dataset_size_.at(dimension))
00141 {
00142 throw(IndexOutOfBoundsException("PixelDataset::setFocusPointAt"));
00143 }
00144 current_focus_point_.at(dimension) = index;
00145 }
00146 catch (std::out_of_range const&)
00147 {}
00148 }
00149
00150
00151
00152 dataset_position_type const& PixelDataset::getFocusPoint() const
00153 {
00154 return(current_focus_point_);
00155 }
00156
00157
00158
00159 void PixelDataset::setSpacings(std::vector<double> spacings)
00160 {
00161 try
00162 {
00163 for (unsigned char dim_index = 0; dim_index < num_dimensions_; ++dim_index)
00164 {
00165 spacings_.at(dim_index) = spacings.at(dim_index);
00166 }
00167 }
00168 catch (...)
00169 {}
00170 }
00171
00172
00173
00174 double PixelDataset::getMinPixelValue() const
00175 {
00176 return(min_pixel_value_);
00177 }
00178
00179
00180
00181 double PixelDataset::getMaxPixelValue() const
00182 {
00183 return(max_pixel_value_);
00184 }
00185
00186
00187
00188 void PixelDataset::setTransformationMatrix(matrix_type const& matrix)
00189 {
00190 transformation_matrix_ = matrix;
00191 }
00192
00193
00194
00195 matrix_type const& PixelDataset::getTransformationMatrix() const
00196 {
00197 return(transformation_matrix_);
00198 }
00199
00200
00201
00202 void PixelDataset::setOffsetVector(offset_vector_type const& offset)
00203 {
00204 offset_vector_ = offset;
00205 }
00206
00207
00208
00209 offset_vector_type const& PixelDataset::getOffsetVector() const
00210 {
00211 return(offset_vector_);
00212 }
00213
00214 }