Slicer 5.9
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 // private routines
71
72 // adds a new element with default values to To_do list
73 skel_branch* AddNewBranchToDo(std::list<skel_branch>& branchesToDo);
74
75 // find all endpoints in image
76 void FindEndpoints(std::deque<Coord3i>& endPoints, const unsigned char* image, const int dim[3]);
77
78 // tests whether (x,y,z) is an endpoint
79 int IsEndpoint(int x, int y, int z, const unsigned char* image, const int dim[3]);
80
81 // returns a list of valid neighbors at act_point
82 // points that exist in skeleton, but are yet unlabeled
83 void GetValidNeighbors(int* label_image, Coord3i& act_point, std::deque<Coord3i>& neighbors, const unsigned char* image, const int dim[3]);
84
85 void ResetGraph();
86
87 // Extracted Graph
88 std::deque<skel_branch> m_Graph;
89
90 // To_Do list, only of temporary use for extract m_Graph
91 // std::deque<skel_branch> * branchesToDo;
92
93 // List of branch IDs that make up the longest path
94 std::deque<int> m_MaximalPath;
95 double m_MaximalPathLength;
96 double m_Spacing[3];
97};
98
99#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