#include "generic.h"
Go to the source code of this file.
Data Structures | |
struct | _VlIKMFilt |
Integer K-Means filter. More... | |
Typedefs | |
typedef vl_int32 | vl_ikm_acc |
typedef vl_uint8 | vl_ikm_data |
Enumerations | |
enum | VlIKMAlgorithms { VL_IKM_LLOYD, VL_IKM_ELKAN } |
IKM algorithms. More... | |
Functions | |
Create and destroy | |
VlIKMFilt * | vl_ikm_new (int method) |
Create a new IKM quantizer. | |
void | vl_ikm_delete (VlIKMFilt *f) |
Delete IKM qunatizer. | |
Process data | |
void | vl_ikm_init (VlIKMFilt *f, vl_ikm_acc const *centers, int M, int K) |
Inintialize quantizer with centers. | |
void | vl_ikm_init_rand (VlIKMFilt *f, int M, int K) |
Inintialize quantizer with random centers. | |
void | vl_ikm_init_rand_data (VlIKMFilt *f, vl_ikm_data const *data, int M, int N, int K) |
Inintialize with centers from random data. | |
int | vl_ikm_train (VlIKMFilt *f, vl_ikm_data const *data, int N) |
Train clusters. | |
void | vl_ikm_push (VlIKMFilt *f, vl_uint *asgn, vl_ikm_data const *data, int N) |
Project data to clusters. | |
vl_uint | vl_ikm_push_one (vl_ikm_acc const *centers, vl_ikm_data const *data, int M, int K) |
Project one datum to clusters. | |
Retrieve data and parameters | |
VL_INLINE int | vl_ikm_get_ndims (VlIKMFilt const *f) |
Get data dimensionality. | |
VL_INLINE int | vl_ikm_get_K (VlIKMFilt const *f) |
Get the number of centers K. | |
VL_INLINE int | vl_ikm_get_verbosity (VlIKMFilt const *f) |
Get verbosity level. | |
VL_INLINE int | vl_ikm_get_max_niters (VlIKMFilt const *f) |
Get maximum number of iterations. | |
VL_INLINE vl_ikm_acc const * | vl_ikm_get_centers (VlIKMFilt const *f) |
Get maximum number of iterations. | |
Set parameters | |
VL_INLINE void | vl_ikm_set_verbosity (VlIKMFilt *f, int verb) |
Set verbosity level. | |
VL_INLINE void | vl_ikm_set_max_niters (VlIKMFilt *f, int max_niters) |
Set maximum number of iterations. |
Use the function vl_ikm_new() to create a IKM quantizer. Initialize the IKM quantizer with K
clusters by vl_ikm_init() or similar function. Use vl_ikm_train() to train the quantizer. Use vl_ikm_push() or vl_ikm_push_one() to quantize new data.
Given data and an a number of clusters
, the goal is to find assigments
and centers
so that the expected distortion
is minimized. Here is the distortion, i.e. the cost we pay for representing
by
. IKM uses the squared distortion
.
K
randomly selected data points (vl_ikm_init_rand_data).
This algorithm is not particularly efficient because all data points need to be compared to all centers, for a complexity , where T is the total number of iterations.
typedef vl_int32 vl_ikm_acc |
IKM accumulator data type
typedef vl_uint8 vl_ikm_data |
IKM data type
enum VlIKMAlgorithms |
void vl_ikm_delete | ( | VlIKMFilt * | f | ) |
f | IKM qunatizer. |
VL_INLINE vl_ikm_acc const * vl_ikm_get_centers | ( | VlIKMFilt const * | f | ) |
f | IKM filter. |
VL_INLINE int vl_ikm_get_K | ( | VlIKMFilt const * | f | ) |
f | IKM filter. |
VL_INLINE int vl_ikm_get_max_niters | ( | VlIKMFilt const * | f | ) |
f | IKM filter. |
VL_INLINE int vl_ikm_get_ndims | ( | VlIKMFilt const * | f | ) |
f | IKM filter. |
VL_INLINE int vl_ikm_get_verbosity | ( | VlIKMFilt const * | f | ) |
f | IKM filter. |
void vl_ikm_init | ( | VlIKMFilt * | f, | |
vl_ikm_acc const * | centers, | |||
int | M, | |||
int | K | |||
) |
f | IKM quantizer. | |
centers | centers. | |
M | data dimensionality. | |
K | number of clusters. |
void vl_ikm_init_rand | ( | VlIKMFilt * | f, | |
int | M, | |||
int | K | |||
) |
f | IKM quantizer. | |
M | data dimensionality. | |
K | number of clusters. |
void vl_ikm_init_rand_data | ( | VlIKMFilt * | f, | |
vl_ikm_data const * | data, | |||
int | M, | |||
int | N, | |||
int | K | |||
) |
f | IKM quantizer. | |
data | data. | |
M | data dimensionality. | |
N | number of data. | |
K | number of clusters. |
VlIKMFilt* vl_ikm_new | ( | int | method | ) |
method | Clustering algorithm. |
method has values in the enumerations VlIKMAlgorithms.
void vl_ikm_push | ( | VlIKMFilt * | f, | |
vl_uint * | asgn, | |||
vl_ikm_data const * | data, | |||
int | N | |||
) |
f | IKM qunatizer. | |
asgn | Assigments (out). | |
data | data. | |
N | number of data (N >= 1). |
vl_uint vl_ikm_push_one | ( | vl_ikm_acc const * | centers, | |
vl_ikm_data const * | data, | |||
int | M, | |||
int | K | |||
) |
centers | centers. | |
data | datum to project. | |
K | number of centers. | |
M | dimensionality of the datum. |
VL_INLINE void vl_ikm_set_max_niters | ( | VlIKMFilt * | f, | |
int | max_niters | |||
) |
f | IKM filter. | |
max_niters | maximum number of iterations. |
VL_INLINE void vl_ikm_set_verbosity | ( | VlIKMFilt * | f, | |
int | verb | |||
) |
f | IKM filter. | |
verb | verbosity level. |
int vl_ikm_train | ( | VlIKMFilt * | f, | |
vl_ikm_data const * | data, | |||
int | N | |||
) |
f | IKM qunatizer. | |
data | data. | |
N | number of data (N >= 1). |