Getting started with VLAD

本篇博客介绍了如何使用C API计算一副图像的VLAD,更多细节请看http://www.vlfeat.org/api/vlad-fundamentals.html(VLAD的定义和计算)

函数vl_vlad_encode能够获得一系列的VLAD特征,数据类型可以是float或者double。它需要一个视觉词典,比如说从K-means聚类中得到的,进一步,词典元素的特征分配必须是预处理的,比如通过KD-trees和forests。

void vl_vlad_encode(void *  enc,
  vl_type  dataType,
  void const *  means,
  vl_size  dimension,
  vl_size  numClusters,
  void const *  data,
  vl_size  numData,
  void const *  assignments,
  int  flags 
 )  
Parameters
encoutput VLAD encoding (out).
dataTypethe type of the input data (VL_TYPE_DOUBLE or VL_TYPE_FLOAT).
numDatanumber of data vectors to encode.
meanscluster means.
numClustersnumber of clusters.
datathe data vectors to encode.
dimensiondimensionality of the data.
assignmentsdata to cluster soft assignments.
flagsoptions.

在后面的例子中,词典时首先通过Kmeans聚类产生的,然后是点被分配到它的相关临近的词典中, 替代了原始的VLAD特征。最后编码存储在enc变量中。


vl_uint32 * indexes;
float * assignments;
float * enc
int i;
// create a KMeans object and run clustering to get vocabulary words (centers)
kmeans = vl_kmeans_new (VLDistanceL2, VL_TYPE_FLOAT) ;
data,
dimension,
numData,
numCenters) ;
// find nearest cliuster centers for the data that should be encoded
indexes = vl_malloc( sizeof( vl_uint32) * numDataToEncode);
vl_kmeans_quantize(kmeans,indexes,dataToEncode,numDataToEncode);
// convert indexes array to assignments array,
// which can be processed by vl_vlad_encode
assignments = vl_malloc( sizeof( float) * numDataToEncode * numCenters);
memset(assignments, 0, sizeof( float) * numDataToEncode * numCenters);
for(i = 0; i < numDataToEncode; i++) 
{
assignments[i * numCenters + indexes[i]] = 1.;
}
// allocate space for vlad encoding
enc = vl_malloc( sizeof(TYPE) * dimension * numCenters);
// do the encoding job
vl_vlad_encode (enc, VL_F_TYPE,
vl_kmeans_get_centers(kmeans), dimension, numCenters,
data, numData,
assignments,
0) ;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值