/usr/include/ITK-4.5/itkOctree.h is in libinsighttoolkit4-dev 4.5.0-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 | /*=========================================================================
*
* Copyright Insight Software Consortium
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0.txt
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*=========================================================================*/
#ifndef __itkOctree_h
#define __itkOctree_h
#include "itkOctreeNode.h"
#include "itkImage.h"
/**
* Octree data structure
*/
namespace itk
{
enum {
B2_MASKFILE_BLACK = 0,
B2_MASKFILE_WHITE = 1,
B2_MASKFILE_GRAY = 2
};
/**
* The enumeration to define the planar orientation of the octree
*/
enum OctreePlaneType {
UNKNOWN_PLANE, /** < The plane is Unknown */
SAGITAL_PLANE, /** < The plane is Sagital */
CORONAL_PLANE, /** < The plane is Coronal */
TRANSVERSE_PLANE /** < The plane is Transverse */
};
/**
* \class OctreeBase
* \brief Provides non-templated access to templated instances of Octree.
*
* \ingroup ITKCommon
*/
class OctreeBase:public Object
{
public:
/** Standard class typedefs. */
typedef OctreeBase Self;
typedef SmartPointer< Self > Pointer;
/** Get the actual tree base
*
* Returns the tree, or 0 if the Octree isn't built yet
*/
virtual OctreeNode * GetTree() = 0;
/** Get tree depth.
*
* Depth represents x, for the smallest 2^x >= largest image dimension
*/
virtual unsigned int GetDepth() = 0;
/** Get tree width.
*
* Width == smallest 2^x >= largest image dimension
* i.e. 2^Depth == Width
*/
virtual unsigned int GetWidth() = 0;
/** Set the depth, e.g. when reading tree from a file. */
virtual void SetDepth(unsigned int depth) = 0;
/** Set width, e.g. when reading from a file. */
virtual void SetWidth(unsigned int width) = 0;
/** Build an Octree from an Image's pixel buffer.
*
* Method needed for ImageIO class, which has no handle on image, just
* the pixel buffer.
*/
virtual void BuildFromBuffer(const void *buffer,
const unsigned int xsize, const unsigned int ysize, const unsigned int zsize) = 0;
/** Get the ColorTable Pointer
*
* Returns color table pointer for this tree.
*
* Each Octree has an array of char whose size = the number of color table
* entries. Each Node in the Octree points either to 8 sub-nodes, or
* into the ColorTable; The color table isn't actually used to hold
* data; it simply provides a range of unique addresses that are distinct
* from the address of any valid subtree.
*/
virtual const char * GetColorTable() const = 0;
/** Get the size of the Color Table */
virtual int GetColorTableSize() const = 0;
};
/**
* \class Octree
* \brief Represent a 3D Image with an Octree data structure.
*
* Parameterized on Pixel type of the image, number of colors in color
* table, and a Mapping function, derived from itk::FunctionBase
* \ingroup ITKCommon
*/
template< typename TPixel, unsigned int ColorTableSize, typename MappingFunctionType >
class Octree:public OctreeBase
{
public:
/** Standard class typedefs. */
typedef Octree Self;
typedef OctreeBase Superclass;
typedef SmartPointer< Self > Pointer;
typedef Image< TPixel, 3 > ImageType;
typedef typename ImageType::Pointer ImageTypePointer;
/** Method for creation through the object factory. */
itkNewMacro(Self);
/** Run-time type information (and related methods). */
itkTypeMacro(Octree, Superclass);
ImageTypePointer GetImage();
virtual void BuildFromBuffer(const void *buffer, const unsigned int xsize, const unsigned int ysize, const unsigned int zsize);
void BuildFromImage(Image< TPixel, 3 > *fromImage);
Octree(void);
~Octree(void);
void SetColor(unsigned int color) { m_Tree.SetColor(color); }
void SetTree(OctreeNodeBranch *branch) { m_Tree.SetBranch(branch); }
void SetTrueDims(const unsigned int Dim0, const unsigned int Dim1,
const unsigned int Dim2);
int GetValue(const unsigned int Dim0, const unsigned int Dim1,
const unsigned int Dim2);
virtual void SetWidth(unsigned int width);
virtual void SetDepth(unsigned int depth);
virtual unsigned int GetWidth();
virtual unsigned int GetDepth();
virtual OctreeNode * GetTree();
virtual const char * GetColorTable() const;
virtual int GetColorTableSize() const;
private:
Octree(const Self &); // purposely not implemented
void operator=(const Self &); // purposely not implemented
OctreeNodeBranch * maskToOctree(const TPixel *Mask, unsigned width, unsigned x,
unsigned y, unsigned z, unsigned xsize,
unsigned ysize, unsigned zsize);
enum OctreePlaneType m_Plane; // The orientation of the plane for this octree
unsigned int m_Width; // The width of the Octree
// ( This is always a power of 2, and large
// enough to contain MAX(DIMS[1,2,3]))
unsigned int m_Depth; // < The depth of the Octree
unsigned int m_TrueDims[3]; // The true dimensions of the image
char m_ColorTable[ColorTableSize];
OctreeNode m_Tree;
// OctreeColorMapFunction m_ColorMapFunction;
MappingFunctionType m_MappingFunction;
};
}
#ifndef ITK_MANUAL_INSTANTIATION
#include "itkOctree.hxx"
#endif
#endif /* __itkOctree_h */
|