Full text: Proceedings, XXth congress (Part 5)

  
   
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
    
  
  
  
    
    
   
  
   
  
  
  
   
  
  
   
   
  
  
  
  
  
International Archives of the Photogrammetry, Remote Sensing and Spatial Information Sciences, Vol XXXV, Part B5. Istanbul 2004 
  
Figure 5: Skeletonization. Left: rasterized points; right: skeleton 
branches. As suggested by [Palägyi, 2003] this step is based on 
Dijkstra’s algorithm, a well-known method for finding shortest 
routes in a weighted directed graph (representing, for example, a 
road network). 
First, the graph is created. Its nodes are the voxels that par- 
ticipate in the skeleton, and any pair of adjacent voxels gen- 
erates two arcs between the nodes, one in either direction (see 
Fig. 6.B, but there each pair of arcs is represented by only one 
line). Arcs are assigned weights of either 3, 4 or 5, depending on 
whether the two voxels share a face, an edge or a point respec- 
tively [Verwer, 1991]. 
A ds - 
e 
e 
  
   
Figure 6: 2D illustration of skeleton segmentation. A. input 
skeleton; B. graph nodes and edges; C. spanning tree with short- 
est distances; D. segments and topology. 
Given such a graph, Dijkstra's algorithms finds the shortest route 
to a destination node (the root!) from all other nodes in the graph. 
In our application, the lowest voxel of the tree trunk typically 
serves as the destination. The collection of shortest routes leading 
  
from anywhere to the root forms a spanning tree of the graph. 
The term ‘tree’ in the graph-theoretical sense is not chosen by 
accident: the spanning tree that we find provides a logical model 
for a tree in a rasterized laser point cloud. Any ambiguities, such 
as loops caused by falsely-connected branches, which may still 
exist after skeletonization, are resolved now (Fig. 6.C) — how 
realistic the results are depends mostly on the success of previous 
steps. 
After the algorithm finishes, each node (except the root) knows 
its parent, the next node along the shortest route to the root. By 
traversing the tree once more it is easy to find branches and their 
junctions, being nodes (voxels) that appear as a parent more than 
once. During this traversal each voxel is assigned a unique branch 
identification number. Each time a junction is found, a new iden- 
tification number is given to this voxel and to the other voxels in 
the same branch closer to the root.(Fig. 6.D). 
3.5 Connected component labeling 
A problem occurs during skeleton segmentation (3.4) if the scene 
contains several (disconnected) trees. Dijkstra's algorithm needs 
to be provided with a single root voxel, after which it will find 
shortest routes only for voxels that are connected to that root. All 
other trees will be omitted. 
To overcome this problem, conncected component labeling has to 
be applied, followed by compenent separation (3.6). Connected 
component labeling uses a slightly modified segmentation algo- 
rithm, which scans the entire voxel space, starting at the bottom 
(i.e. at the plane with the highest number). Each time an unas- 
signed voxel is encountered, Dijkstra's algorithm is started with 
that voxel as root. One tree is then traversed and all voxels in- 
volved will be assigned a label, which is unique for that tree. 
After that, the algorithm continues to scan for unassigned voxels 
etcetera, until the top of the space is reached. 
This algorithm can be regarded a general 3D connected compo- 
nent labelling, since it does not rely on the input data being skele- 
tonized trees. 
3.6 Component Separation 
[n case of a scene with multiple trees, Connected Component La- 
belling (3.5) had to be applied to label the trees uniquely. Subse- 
quently, the data set has to be subdivided into several sets, such 
that each of these contains only one tree, which can than be seg- 
mented into braches, as described in 3.4. 
During the component separation step, components are sorted ac- 
cording to descending number of voxels and output into different 
data sets one by one. It may happen that certain components do 
not contain trees, but “loose” branches or other kinds of noise. 
The user may request that only a certain number of components 
is generated, or that only components with more than a certain 
number of voxels are considered. 
3.7 Raster tree segmentation 
At this stage the skeleton has been subdivided into trees and 
branches, and each skeleton voxel has been labelled with a unique 
branch identification. Now we will label all other tree voxels ac- 
cording to the nearest skeleton label. 
There would be several ways to accomplish this by raster 
operations, such as iterative dilation or distance transform 
[Borgefors, 1996]. We use a Nearest Neighbor search algorithm, 
as it is known from database environments, where the problem 
is sometimes to find & nearest neighbors (database records) of a 
given query record, in an vector space of arbitrary dimension. 
   
Intern 
Usual 
record 
tion; t 
ality. 
In our 
skelet 
(skele 
voxels 
Figure 
mente 
38 | 
Finall: 
all the 
to see 
order 
In a ra 
sen se 
algorii 
tools, 
Scene 
[Borg 
for 
der 
[Borg 
Ga 
me 
  
	        
Waiting...

Note to user

Dear user,

In response to current developments in the web technology used by the Goobi viewer, the software no longer supports your browser.

Please use one of the following browsers to display this page correctly.

Thank you.