00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
#ifndef __itkImageIORegion_h
00018
#define __itkImageIORegion_h
00019
00020
#include "itkRegion.h"
00021
#include "itkObjectFactory.h"
00022
00023
namespace itk
00024 {
00025
00043 class ITK_EXPORT ImageIORegion:
public Region
00044 {
00045
public:
00047 typedef ImageIORegion
Self;
00048 typedef Region Superclass;
00049
00051
itkTypeMacro(ImageIORegion,
Region);
00052
00054 unsigned int GetImageDimension()
const
00055
{
return m_ImageDimension; }
00056
00060 unsigned int GetRegionDimension()
const
00061
{
00062
unsigned long dim=0;
00063
for (
unsigned long i=0; i<m_ImageDimension; i++)
00064 {
00065
if ( m_Size[i] > 1 ) dim++;
00066 }
00067
return dim;
00068 }
00069
00071
typedef std::vector<long> IndexType;
00072
00074
typedef std::vector<long>
SizeType;
00075
00077
virtual Superclass::RegionType GetRegionType()
const
00078 {
return Superclass::ITK_STRUCTURED_REGION;}
00079
00082 ImageIORegion(
unsigned int dimension)
00083 {
00084 m_ImageDimension = dimension;
00085 m_Index.resize(m_ImageDimension);
00086 m_Size.resize(m_ImageDimension);
00087 std::fill(m_Index.begin(), m_Index.end(), 0);
00088 std::fill(m_Size.begin(), m_Size.end(), 0);
00089 }
00090
00093 ImageIORegion()
00094 {
00095 m_ImageDimension = 2;
00096 m_Index.resize(2);
00097 m_Size.resize(2);
00098 std::fill(m_Index.begin(), m_Index.end(), 0);
00099 std::fill(m_Size.begin(), m_Size.end(), 0);
00100 }
00101
00104
virtual ~ImageIORegion(){};
00105
00108 ImageIORegion(
const Self& region): Region()
00109 {
00110 m_Index =region.m_Index;
00111 m_Size = region.m_Size;
00112 m_ImageDimension = region.m_ImageDimension;
00113 }
00114
00117
void operator=(
const Self& region)
00118 {
00119 m_Index = region.m_Index;
00120 m_Size = region.m_Size;
00121 m_ImageDimension = region.m_ImageDimension;
00122 };
00123
00125
void SetIndex(
const IndexType &index)
00126 { m_Index = index; };
00127
00129
const IndexType& GetIndex()
const
00130
{
return m_Index; };
00131
00134
void SetSize(
const SizeType &size)
00135 { m_Size = size; };
00136
00138
const SizeType& GetSize()
const
00139
{
return m_Size;}
00140
00144
long GetSize(
unsigned long i)
const
00145
{
return m_Size[i]; }
00146
long GetIndex(
unsigned long i)
const
00147 {
return m_Index[i]; }
00148
void SetSize(
const unsigned long i,
long size)
00149 {m_Size[i] = size;}
00150
void SetIndex(
const unsigned long i,
long idx)
00151 {m_Index[i] = idx;}
00152
00154
bool
00155
operator==(
const Self ®ion)
const
00156
{
00157
bool same = 1;
00158 same = (m_Index == region.m_Index);
00159 same = same && (m_Size == region.m_Size);
00160 same = same && (m_ImageDimension == region.m_ImageDimension);
00161
return same;
00162 }
00163
00165
bool
00166
operator!=(
const Self ®ion)
const
00167
{
00168
bool same = 1;
00169 same = (m_Index == region.m_Index);
00170 same = same && (m_Size == region.m_Size);
00171 same = same && (m_ImageDimension == region.m_ImageDimension);
00172
return !same;
00173 }
00174
00176
bool
00177 IsInside(
const IndexType &index)
const
00178
{
00179
for(
unsigned int i=0; i<m_ImageDimension; i++)
00180 {
00181
if( index[i] < m_Index[i] )
00182 {
00183 return false;
00184 }
00185
if( index[i] >= m_Index[i] + m_Size[i] )
00186 {
00187
return false;
00188 }
00189 }
00190
return true;
00191 }
00192
00195
unsigned long GetNumberOfPixels() const;
00196
00197 protected:
00198
00199 private:
00200
unsigned int m_ImageDimension;
00201 std::
vector<
long> m_Index;
00202 std::
vector<
long> m_Size;
00203 };
00204
00205
00206 inline std::ostream & operator<<(std::ostream &os, const ImageIORegion ®ion)
00207 {
00208 os <<
"Dimension: " << region.GetImageDimension() << std::endl;
00209 os <<
"Index: ";
00210
for(ImageIORegion::IndexType::const_iterator i = region.GetIndex().begin();
00211 i != region.GetIndex().end(); ++i)
00212 {
00213 os << *i <<
" ";
00214 }
00215 os << std::endl;
00216 os <<
"Index: ";
00217
for(ImageIORegion::SizeType::const_iterator k = region.GetSize().begin();
00218 k != region.GetSize().end(); ++k)
00219 {
00220 os << *k <<
" ";
00221 }
00222 os << std::endl;
00223
return os;
00224 }
00225
00226 }
00227
00228
#endif
00229