15#ifndef SKELETON_MAKER_VOLUME_H
16#define SKELETON_MAKER_VOLUME_H
18#define MAX_SHEETS 100000
19#define MAX_QUEUELEN 5000000
25 namespace SkeletonMaker {
27 const int neighbor6[6][3]={{0,0,1},{0,0,-1},{0,1,0},{0,-1,0},{1,0,0},{-1,0,0}} ;
28 const int neighbor4[4][2]={{0,1},{0,-1},{1,0},{-1,0}} ;
30 {{0,1,0},{0,-1,0},{1,0,0},{-1,0,0}},
31 {{0,1,0},{0,-1,0},{1,0,0},{-1,0,0}},
32 {{0,0,1},{0,0,-1},{1,0,0},{-1,0,0}},
33 {{0,0,1},{0,0,-1},{1,0,0},{-1,0,0}},
34 {{0,0,1},{0,0,-1},{0,1,0},{0,-1,0}},
35 {{0,0,1},{0,0,-1},{0,1,0},{0,-1,0}}} ;
38 {{0,-1,-1},{0,-1,0},{0,0,-1},{0,0,0}},
39 {{0,-1,0},{0,-1,1},{0,0,0},{0,0,1}},
40 {{0,0,-1},{0,0,0},{0,1,-1},{0,1,0}},
41 {{0,0,0},{0,0,1},{0,1,0},{0,1,1}},
43 {{-1,0,-1},{-1,0,0},{0,0,-1},{0,0,0}},
44 {{-1,0,0},{-1,0,1},{0,0,0},{0,0,1}},
45 {{0,0,-1},{0,0,0},{1,0,-1},{1,0,0}},
46 {{0,0,0},{0,0,1},{1,0,0},{1,0,1}},
48 {{-1,-1,0},{-1,0,0},{0,-1,0},{0,0,0}},
49 {{-1,0,0},{-1,1,0},{0,0,0},{0,1,0}},
50 {{0,-1,0},{0,0,0},{1,-1,0},{1,0,0}},
51 {{0,0,0},{0,1,0},{1,0,0},{1,1,0}}
54 const int faceCells[12][2]={{0,4},{1,5},{2,6},{3,7},{0,2},{1,3},{4,6},{5,7},{0,1},{2,3},{4,5},{6,7}};
57 { {1,5,7,3},{0,2,6,4},{2,3,7,6},{0,4,5,1},{5,4,6,7},{0,1,3,2}};
59 const int faceEdges[12][2] = {{3,1},{3,0},{2,1},{2,0},
60 {5,1},{5,0},{4,1},{4,0},
61 {5,3},{5,2},{4,3},{4,2}};
63 const int edgeFaces[6][4] = {{1,3,5,7},{0,2,4,6},{2,3,9,11},{0,1,8,10},{6,7,10,11},{4,5,8,9}} ;
74 Volume(
int x,
int y,
int z,
float val);
75 Volume(
int x,
int y,
int z,
int offx,
int offy,
int offz,
Volume * vol);
91 void setSpacing(
float spx,
float spy,
float spz );
92 void setOrigin(
float orgX,
float orgY,
float orgZ);
102 void pad (
int padBy,
double padValue);
125 int hasCell(
int ox,
int oy,
int oz);
149 int isSimple(
int ox,
int oy,
int oz );
160 int countExt(
double vox[3][3][3] );
161 int countInt(
double vox[3][3][3] );
171 void skeleton(
float thr,
int off );
192 void threshold(
double thr,
int out,
int in );
193 void threshold(
double thr,
int out,
int in,
int boundary);
194 void threshold(
double thr,
int out,
int in,
int boundary,
bool markBoundary);
EMData stores an image's data and defines core image processing routines.
void skeleton(float thr, int off)
int components6(int vox[3][3][3])
int isHelixEnd(int ox, int oy, int oz, Volume *nvol)
void setOrigin(float orgX, float orgY, float orgZ)
int isSimple(int ox, int oy, int oz)
int countInt(double vox[3][3][3])
int getIndex(int x, int y, int z)
int hasCell(int ox, int oy, int oz)
int countIntEuler(int ox, int oy, int oz)
int isPiercable(int ox, int oy, int oz)
void pad(int padBy, double padValue)
int isSheetEnd(int ox, int oy, int oz, Volume *nvol)
int getNumPotComplex(int ox, int oy, int oz)
int hasCompleteHelix(int ox, int oy, int oz)
void curveSkeleton(Volume *grayvol, float lowthr, float highthr, Volume *svol)
insert them back into priority queue
int components26(int vox[3][3][3])
void surfaceSkeletonPres(float thr, Volume *preserve)
for ( int m = 0 ; m < 6 ; m ++ )
int countExt(double vox[3][3][3])
int getNumPotComplex2(int ox, int oy, int oz)
int hasCompleteSheet(int ox, int oy, int oz, Volume *fvol)
int isFeatureFace(int ox, int oy, int oz)
void curveSkeleton2D(float thr, Volume *svol)
void threshold(double thr)
double getDataAt(int x, int y, int z)
void setSpacing(float spx, float spy, float spz)
int getNumNeighbor6(int ox, int oy, int oz)
void setDataAt(int x, int y, int z, double d)
VolumeData * getVolumeData()
const int neighbor64[6][4][3]
const int neighbor6[6][3]
const int edgeFaces[6][4]
const int faceCells[12][2]
const int cubeFaces[6][4]
const int sheetNeighbor[12][4][3]
const int faceEdges[12][2]
const int neighbor4[4][2]