Slicer 5.6
Slicer is a multi-platform, free and open source software package for visualization and medical image computing
Loading...
Searching...
No Matches
SkelGraph.h
Go to the documentation of this file.
1/*=========================================================================
2
3 Program: Extract Skeleton
4 Module: $HeadURL$
5 Language: C++
6 Date: $Date$
7 Version: $Revision$
8
9 Copyright (c) Brigham and Women's Hospital (BWH) All Rights Reserved.
10
11 See License.txt or http://www.slicer.org/copyright/copyright.txt for details.
12
13==========================================================================*/
14#ifndef _SKEL_GRAPH_H_
15#define _SKEL_GRAPH_H_
16
17#include <deque>
18#include <list>
19#include "coordTypes.h"
20
22 {
24 {
25 branchID = -1;
26 length = 0;
27 acc_length = 0;
29 }
30 int branchID; // == position in m_Graph
31 double length; // length between end points
32 std::deque<Coord3i> points;
33
34 double acc_length; // for temporary use when searching maximal path
35 std::deque<int> acc_path;
36
38 std::deque<int> max_path; // maximal path
39
42 std::deque<int> end_1_neighbors; // id's == one can use advance for random access
43 std::deque<int> end_2_neighbors;
44 };
45
47{
48public:
50 virtual ~SkelGraph();
51
52 // Print info on all m_Graph nodes to standard output
53 void PrintGraph();
54
55 // Extract skeletal m_Graph
56 // Limitation: currently image spacing is not taken into account.
57 // If image spacing is highly anisotropic then longest path computation
58 // may not give optimal results, and sampling distance (when calling
59 // SampleAlongMaximalPath) may be uneven.
60 void ExtractSkeletalGraph(const unsigned char *image, const int dim[3], const double spacing[3]);
61
62 // Extract maximal path between 2 points in the m_Graph
64
65 // Sample points along the maximal path.
66 // requestedNumberOfPoints is an approximate number of points to be returned.
67 void SampleAlongMaximalPath(int requestedNumberOfPoints, std::deque<Coord3i> &axis_points);
68
69private:
70
71 // private routines
72
73 // adds a new element with default values to To_do list
74 skel_branch* AddNewBranchToDo(std::list<skel_branch> &branchesToDo);
75
76 // find all endpoints in image
77 void FindEndpoints(std::deque<Coord3i> &endPoints, const unsigned char *image, const int dim[3]);
78
79 // tests whether (x,y,z) is an endpoint
80 int IsEndpoint(int x, int y, int z, const unsigned char *image, const int dim[3]);
81
82 // returns a list of valid neighbors at act_point
83 // points that exist in skeleton, but are yet unlabeled
84 void GetValidNeighbors(int* label_image, Coord3i &act_point, std::deque<Coord3i> &neighbors, const unsigned char *image, const int dim[3]);
85
86 void ResetGraph();
87
88 // Extracted Graph
89 std::deque<skel_branch> m_Graph;
90
91 // To_Do list, only of temporary use for extract m_Graph
92 //std::deque<skel_branch> * branchesToDo;
93
94 // List of branch IDs that make up the longest path
95 std::deque<int> m_MaximalPath;
96 double m_MaximalPathLength;
97 double m_Spacing[3];
98
99};
100
101#endif
void ExtractSkeletalGraph(const unsigned char *image, const int dim[3], const double spacing[3])
void FindMaximalPath()
void SampleAlongMaximalPath(int requestedNumberOfPoints, std::deque< Coord3i > &axis_points)
void PrintGraph()
virtual ~SkelGraph()
Coord3i end_1_point
Definition SkelGraph.h:40
double length
Definition SkelGraph.h:31
std::deque< int > end_2_neighbors
Definition SkelGraph.h:43
Coord3i end_2_point
Definition SkelGraph.h:41
double acc_length
Definition SkelGraph.h:34
std::deque< int > max_path
Definition SkelGraph.h:38
double max_path_length
Definition SkelGraph.h:37
std::deque< int > acc_path
Definition SkelGraph.h:35
std::deque< Coord3i > points
Definition SkelGraph.h:32
std::deque< int > end_1_neighbors
Definition SkelGraph.h:42