1 /** @file hikmeans.h
2  ** @brief Hierarchical Integer K-Means Clustering
3  ** @author Brian Fulkerson
4  **/
5 
6 /*
7 Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson.
8 All rights reserved.
9 
10 This file is part of the VLFeat library and is made available under
11 the terms of the BSD license (see the COPYING file).
12 */
13 
14 #ifndef VL_HIKMEANS_H
15 #define VL_HIKMEANS_H
16 
17 #include "generic.h"
18 #include "ikmeans.h"
19 
20 struct _VLHIKMTree ;
21 struct _VLHIKMNode ;
22 
23 /** @brief HIKM tree node
24  **
25  ** The number of children @a K is not bigger than the @a K parameter
26  ** of the HIKM tree.
27  **/
28 typedef struct _VlHIKMNode
29 {
30   VlIKMFilt *filter ; /**< IKM filter for this node*/
31   struct _VlHIKMNode **children ; /**< Node children (if any) */
32 } VlHIKMNode ;
33 
34 /** @brief HIKM tree */
35 typedef struct _VlHIKMTree {
36   vl_size M ; /**< IKM: data dimensionality */
37   vl_size K ; /**< IKM: K */
38   vl_size depth ; /**< Depth of the tree */
39   vl_size max_niters ;  /**< IKM: maximum # of iterations */
40   int method ; /**< IKM: method */
41   int verb ; /**< Verbosity level */
42   VlHIKMNode * root; /**< Tree root node */
43 } VlHIKMTree ;
44 
45 /** @name Create and destroy
46  ** @{
47  **/
48 VL_EXPORT VlHIKMTree *vl_hikm_new (int method) ;
49 VL_EXPORT void vl_hikm_delete (VlHIKMTree *f) ;
50 /** @} */
51 
52 /** @name Retrieve data and parameters
53  ** @{
54  **/
55 VL_EXPORT vl_size vl_hikm_get_ndims (VlHIKMTree const *f) ;
56 VL_EXPORT vl_size vl_hikm_get_K (VlHIKMTree const *f) ;
57 VL_EXPORT vl_size vl_hikm_get_depth (VlHIKMTree const *f) ;
58 VL_EXPORT int vl_hikm_get_verbosity (VlHIKMTree const *f) ;
59 VL_EXPORT vl_size vl_hikm_get_max_niters (VlHIKMTree const *f) ;
60 VL_EXPORT VlHIKMNode const * vl_hikm_get_root (VlHIKMTree const *f) ;
61 /** @} */
62 
63 /** @name Set parameters
64  ** @{
65  **/
66 VL_EXPORT void vl_hikm_set_verbosity (VlHIKMTree *f, int verb) ;
67 VL_EXPORT void vl_hikm_set_max_niters (VlHIKMTree *f, int max_niters) ;
68 /** @} */
69 
70 /** @name Process data
71  ** @{
72  **/
73 VL_EXPORT void vl_hikm_init (VlHIKMTree *f, vl_size M, vl_size K, vl_size depth) ;
74 VL_EXPORT void vl_hikm_train (VlHIKMTree *f, vl_uint8 const *data, vl_size N) ;
75 VL_EXPORT void vl_hikm_push (VlHIKMTree *f, vl_uint32 *asgn, vl_uint8 const *data, vl_size N) ;
76 /** @} */
77 
78 
79 /* VL_HIKMEANS_H */
80 #endif
81