VIP: Volume Image Processing


skeleton.h
Go to the documentation of this file.
1/*****************************************************************************
2 * PROJECT : V.I.P. Library
3 * MODULE NAME : vip/skeleton.h * TYPE : Include
4 * AUTHOR : MANGIN J.F. * CREATION : 12/04/97
5 * VERSION : 1.1 * REVISION :
6 * LANGUAGE : C * EXAMPLE :
7 * DEVICE : Linux
8 *****************************************************************************
9 *
10 * DESCRIPTION : various skeletonization algorithms
11 *
12 *****************************************************************************
13 *
14 * USED MODULES :
15 *
16 *****************************************************************************
17 * REVISIONS : DATE | AUTHOR | DESCRIPTION
18 *--------------------|--------------|----------------------------------------
19 * / / | |
20 *****************************************************************************/
21
22#ifndef VIP_SKELETON_H
23#define VIP_SKELETON_H
24
25#ifdef __cplusplus
26extern "C" {
27#endif
28
29#include <stdio.h>
30#include <stdlib.h>
31#include <string.h>
32#include <stdarg.h>
33#include <limits.h>
34#include <errno.h>
35#include <math.h>
36
37#include <vip/util.h>
38#include <vip/volume.h>
39#include <vip/connex.h>
40#include <vip/bucket.h>
41#include <vip/pyramid.h>
42#include <vip/topology.h>
43#include <vip/skeleton/skeleton_gen.h>
44
45#define VIP_INITIAL_FRONT_SIZE 500000
46#define VIP_FRONT_SIZE_INCREMENT 200000
47#define VIP_FRONT -123
48
49#define NON_SIMPLE_AND_NON_VOLUME_BECOME_IMMORTAL 77
50#define SURFACES_BECOME_IMMORTAL 78
51#define CURVES_BECOME_IMMORTAL 79
52#define NOBODY_BECOME_IMMORTAL 80
53
54#define FRONT_6CONNECTIVITY_DIRECTION 88
55
56#define FRONT_RANDOM_ORDER 107
57#define FRONT_RANDOM_AND_DEPTH 108
58
59/*---------------------------------------------------------------------------*/
60// int VipHomotopicErosionFromInside( Volume *vol, int nb_iteration,
61// int object, int inside, int outside, int front_mode);
62/*-------------------------------------------------------------------------*/
63/*---------------------------------------------------------------------------*/
64int VipHomotopicErosionFromInsideSnake( Volume *vol, Volume *graylevel, int nb_iteration,
65 int object, int inside, int outside,
66 float KISING, float mG, float sigmaG, float mW, float sigmaW);
67/*-------------------------------------------------------------------------*/
68/*---------------------------------------------------------------------------*/
69 extern int VipHomotopicInsideDilationSnakeRidge( Volume *ridge,Volume *vol, Volume *graylevel, int nb_iteration,
70 int object, int inside, int outside, int front_mode,
71 float KISING, float mG, float sigmaG, float mW, float sigmaW);
72/*-------------------------------------------------------------------------*/
73
74/*---------------------------------------------------------------------------*/
75extern int VipHomotopicInsideDilationSnake( Volume *vol, Volume *graylevel, int nb_iteration,
76 int object, int inside, int outside, int front_mode,
77 float KISING, float mG, float sigmaG, float mW, float sigmaW);
78/*-------------------------------------------------------------------------*/
79
80/*---------------------------------------------------------------------------*/
81extern int VipHomotopicInsideDilation( Volume *vol, Volume *mask, int nb_iteration,
82 int object, int inside, int outside, int front_mode );
83/*-------------------------------------------------------------------------*/
84
85/*---------------------------------------------------------------------------*/
86extern int VipFoetusHomotopicInsideDilationSnake( Volume *vol, Volume *graylevel, int nb_iteration,
87 int object, int inside, int outside, int front_mode,
88 float KISING, float mG, float sigmaG, float mW, float sigmaW);
89/*-------------------------------------------------------------------------*/
90
91/*---------------------------------------------------------------------------*/
92int VipHomotopicInsideSoftDilationSnake( Volume *vol, Volume *graylevel, int nb_iteration,
93 int object, int inside, int outside, int front_mode,
94 float KISING, float mG, float sigmaG, float mW, float sigmaW);
95/*-------------------------------------------------------------------------*/
96
97/*---------------------------------------------------------------------------*/
98extern int VipHomotopicGeodesicErosionFromOutside( Volume *vol, int nb_iteration,
99 int object, int inside, int outside);
100/*-------------------------------------------------------------------------*/
101
102/*---------------------------------------------------------------------------*/
103extern int VipHomotopicErosionFromInside( Volume *vol, Volume *graylevel, int nb_iteration,
104 int object, int inside, int outside );
105/*-------------------------------------------------------------------------*/
106
107/*--------------------------------------------------------------------*/
108extern Pyramid *VipCreateBoundingBoxLabelPyramid(Pyramid *pdata, int nlevel, int object, int inside, int outside);
109/*--------------------------------------------------------------------*/
110
111/*---------------------------------------------------------------------------*/
112extern int VipHomotopicOutsidePruning( Volume *vol, int inside, int outside );
113/*---------------------------------------------------------------------------*/
114/*--------------------------------------------------------------------*/
115extern int VipHomotopicGeodesicDilation( Volume *vol, int nb_iteration,
116 int object, int domain, int forbiden, int outside, int front_mode );
117/*--------------------------------------------------------------------*/
118
119/*---------------------------------------------------------------------------*/
120extern int VipHomotopicCurvePruning( Volume *vol, int inside, int outside );
121/*---------------------------------------------------------------------------*/
122
123/*--------------------------------------------------------------------*/
124/*Points become immortals according to immortal_elixir*/
125/*The front is managed according to front_mode*/
126extern int VipHomotopicSkeleton( Volume *vol, int immortal_elixir,
127 int front_mode, int keep_immortals );
128
129/*--------------------------------------------------------------------*/
130extern int VipWatershedHomotopicSkeleton( Volume *vol, Volume *altitude, int immortal_elixir, int inside, int outside);
131/*--------------------------------------------------------------------*/
132/*--------------------------------------------------------------------*/
134 Volume *brain,
135 float sigma,
136 float level0,
137 float levelmax,
138 float wave_erosion,
139 int bwidth,
140 float threshold);
141/*--------------------------------------------------------------------*/
142/*--------------------------------------------------------------------*/
144 Volume *meancurv,
145 float level0,
146 float levelmax,
147 float wave_erosion,
148 int bwidth,
149 float threshold);
150/*--------------------------------------------------------------------*/
151/*--------------------------------------------------------------------*/
153 Vip_S16BIT *first_vol_point,
154 VipIntBucket *buck,
155 VipIntBucket *nextbuck,
157 int next_value,
158 int front_value);
159/*--------------------------------------------------------------------*/
160
161/*---------------------------------------------------------------------------*/
162/*Put all non volume point in front*/
163extern VipIntBucket *VipCreateFrontIntBucket( Volume *vol, int connectivity, int front_value);
164
165/*-------------------------------------------------------------------------*/
166/*Assume there is no volume point in front, remove all IMMORTALS (accordind to immortal_elixir) from front*/
169 int immortal_elixir,
170 Vip_S16BIT *first_vol_point,
171 VipIntBucket *buck,
172 VipIntBucket *nextbuck,
173 int *immortals,
174 int front_value);
175
176/*---------------------------------------------------------------------------*/
178 Volume *vol,
179 int connectivity,
180 int front_value,
181 int object,
182 int domain,
183 int front_mode);
184/*-------------------------------------------------------------------------*/
185
186/*-------------------------------------------------------------------------*/
188 Vip_S16BIT *first_vol_point,
189 VipIntBucket *buck,
190 VipIntBucket *nextbuck,
192 int next_value,
193 int front_value,
194 int object);
195/*-------------------------------------------------------------------------*/
196
197/*---------------------------------------------------------------------------*/
198extern VipIntBucket *VipCreateFrontIntBucketForErosionFromOutside( Volume *vol, int connectivity, int front_value,
199 int object, int outside);
200/*---------------------------------------------------------------------------*/
201
202/*-------------------------------------------------------------------------*/
204 Vip_S16BIT *first_vol_point,
205 VipIntBucket *buck,
206 VipIntBucket *nextbuck,
208 int next_value,
209 int front_value,
210 int outside,
211 int inside);
212/*-------------------------------------------------------------------------*/
213/*-------------------------------------------------------------------------*/
215 Vip_S16BIT *first_vol_point,
216 VipIntBucket *buck,
217 VipIntBucket *nextbuck,
219 int next_value,
220 int front_value,
221 int outside,
222 int inside);
223/*-------------------------------------------------------------------------*/
224
225extern VipIntBucket *VipCreateFrontIntBucketHollowObject( Volume *vol, int connectivity, int front_value, int inside, int outside);
226
229 int immortal_elixir,
230 Vip_S16BIT *first_vol_point,
231 VipIntBucket *buck,
232 VipIntBucket *nextbuck,
233 int *immortals,
234 int front_value,
235 int inside,
236 int outside);
237
239 Vip_S16BIT *first_vol_point,
240 VipIntBucket *buck,
241 VipIntBucket *nextbuck,
243 int front_value,
244 int inside,
245 int outside);
246/*---------------------------------------------------------------------------*/
247extern int VipRandomizeFrontOrder(VipIntBucket *front, int nloop);
248
249extern int VipWatershedFrontPropagation( Volume *vol, Volume *altitude, Volume *plan_hemi, int int_min, int int_max, int domain, int outside, int nb_interval, int connectivity);
250
252 Vip_S16BIT *first_vol_point,
253 VipIntBucket *buck,
254 VipIntBucket *nextbuck,
256 int front_value,
257 int domain,
258 int outside);
259
260extern VipIntBucket *VipCreateFrontIntBucketVoronoiObject( Volume *vol, int connectivity, int front_value, int domain, int outside);
261
262int
264 int nb_iteration,
265 Vip_S16BIT object,
266 Vip_S16BIT inside,
267 Vip_S16BIT outside);
268int
270 int nb_iteration,
271 Vip_S16BIT object,
272 Vip_S16BIT inside,
273 Vip_S16BIT forbidden,
274 Vip_S16BIT outside,
275 int front_mode);
276
277
278#ifdef __cplusplus
279}
280#endif
281
282#endif
struct vipintBucket VipIntBucket
struct pyramid Pyramid
int VipFillNextFrontFromOldFrontForErosion(Vip_S16BIT *first_vol_point, VipIntBucket *buck, VipIntBucket *nextbuck, VipConnectivityStruct *vcs, int next_value, int front_value, int outside, int inside)
int VipHomotopicWellComposedDilationTowardInside(Volume *vol, int nb_iteration, Vip_S16BIT object, Vip_S16BIT inside, Vip_S16BIT forbidden, Vip_S16BIT outside, int front_mode)
int VipHomotopicInsideDilationSnakeRidge(Volume *ridge, Volume *vol, Volume *graylevel, int nb_iteration, int object, int inside, int outside, int front_mode, float KISING, float mG, float sigmaG, float mW, float sigmaW)
Volume * ConvertMeanCurvToAltitude(Volume *meancurv, float level0, float levelmax, float wave_erosion, int bwidth, float threshold)
int VipFoetusHomotopicInsideDilationSnake(Volume *vol, Volume *graylevel, int nb_iteration, int object, int inside, int outside, int front_mode, float KISING, float mG, float sigmaG, float mW, float sigmaW)
int VipFillNextFrontFromOldFrontForErosionFromOutside(Vip_S16BIT *first_vol_point, VipIntBucket *buck, VipIntBucket *nextbuck, VipConnectivityStruct *vcs, int next_value, int front_value, int outside, int inside)
int VipCleanUpFrontFromImmortals(Topology26Neighborhood *topo26, int immortal_elixir, Vip_S16BIT *first_vol_point, VipIntBucket *buck, VipIntBucket *nextbuck, int *immortals, int front_value)
int VipHomotopicInsideDilation(Volume *vol, Volume *mask, int nb_iteration, int object, int inside, int outside, int front_mode)
int VipWatershedHomotopicSkeleton(Volume *vol, Volume *altitude, int immortal_elixir, int inside, int outside)
int VipRandomizeFrontOrder(VipIntBucket *front, int nloop)
int VipCleanUpFrontFromImmortalsHollowObject(Topology26Neighborhood *topo26, int immortal_elixir, Vip_S16BIT *first_vol_point, VipIntBucket *buck, VipIntBucket *nextbuck, int *immortals, int front_value, int inside, int outside)
VipIntBucket * VipCreateFrontIntBucketForErosionFromOutside(Volume *vol, int connectivity, int front_value, int object, int outside)
int VipHomotopicInsideDilationSnake(Volume *vol, Volume *graylevel, int nb_iteration, int object, int inside, int outside, int front_mode, float KISING, float mG, float sigmaG, float mW, float sigmaW)
VipIntBucket * VipCreateFrontIntBucketForDilation(Volume *vol, int connectivity, int front_value, int object, int domain, int front_mode)
Pyramid * VipCreateBoundingBoxLabelPyramid(Pyramid *pdata, int nlevel, int object, int inside, int outside)
Volume * ConvertBrainToAltitude(Volume *brain, float sigma, float level0, float levelmax, float wave_erosion, int bwidth, float threshold)
VipIntBucket * VipCreateFrontIntBucket(Volume *vol, int connectivity, int front_value)
int VipHomotopicGeodesicErosionFromOutside(Volume *vol, int nb_iteration, int object, int inside, int outside)
VipIntBucket * VipCreateFrontIntBucketVoronoiObject(Volume *vol, int connectivity, int front_value, int domain, int outside)
int VipHomotopicErosionFromInside(Volume *vol, Volume *graylevel, int nb_iteration, int object, int inside, int outside)
int VipFillNextFrontFromOldFront(Vip_S16BIT *first_vol_point, VipIntBucket *buck, VipIntBucket *nextbuck, VipConnectivityStruct *vcs, int next_value, int front_value)
int VipFillNextFrontFromOldFrontForDilation(Vip_S16BIT *first_vol_point, VipIntBucket *buck, VipIntBucket *nextbuck, VipConnectivityStruct *vcs, int next_value, int front_value, int object)
int VipHomotopicGeodesicDilation(Volume *vol, int nb_iteration, int object, int domain, int forbiden, int outside, int front_mode)
int VipHomotopicOutsidePruning(Volume *vol, int inside, int outside)
VipIntBucket * VipCreateFrontIntBucketHollowObject(Volume *vol, int connectivity, int front_value, int inside, int outside)
int VipHomotopicInsideSoftDilationSnake(Volume *vol, Volume *graylevel, int nb_iteration, int object, int inside, int outside, int front_mode, float KISING, float mG, float sigmaG, float mW, float sigmaW)
int VipHomotopicCurvePruning(Volume *vol, int inside, int outside)
int VipFillNextFrontFromOldFrontVoronoiObject(Vip_S16BIT *first_vol_point, VipIntBucket *buck, VipIntBucket *nextbuck, VipConnectivityStruct *vcs, int front_value, int domain, int outside)
int VipHomotopicSkeleton(Volume *vol, int immortal_elixir, int front_mode, int keep_immortals)
int VipFillNextFrontFromOldFrontHollowObject(Vip_S16BIT *first_vol_point, VipIntBucket *buck, VipIntBucket *nextbuck, VipConnectivityStruct *vcs, int front_value, int inside, int outside)
int VipHomotopicWellComposedErosionFromOutside(Volume *vol, int nb_iteration, Vip_S16BIT object, Vip_S16BIT inside, Vip_S16BIT outside)
int VipWatershedFrontPropagation(Volume *vol, Volume *altitude, Volume *plan_hemi, int int_min, int int_max, int domain, int outside, int nb_interval, int connectivity)
int VipHomotopicErosionFromInsideSnake(Volume *vol, Volume *graylevel, int nb_iteration, int object, int inside, int outside, float KISING, float mG, float sigmaG, float mW, float sigmaW)
struct topology26 Topology26Neighborhood
signed short Vip_S16BIT
Definition structure.h:93