EMD距离——使用实例

Rubner的C语言实现
我们尝试使用Rubner公开的C语言代码(example1.c),
编译依赖emd.c和emd.h。
其中特征量类型feature_t在emd.h中定义如下:
typedef struct { int X,Y,Z; } feature_t;
具体实现代码见emd.c。

对于上述例子的解答如下:

# include <stdio.h>
# include <math.h>
# include "emd.h"

/* 欧几里得距离 */
float dist(feature_t *F1, feature_t *F2) {
    int dX = F1->X - F2->X;
    int dY = F1->Y - F2->Y;
    int dZ = F1->Z - F2->Z;
    return sqrt(dXdX + dY*dY + dZ*dZ);
}

int main() {

    /* 分布P的特征矢量 */
    feature_t f1[4] = { {100,40,22}, {211,20,2}, {32,190,150}, {2,100,100} };
    /*分布Q的特征矢量 */
    feature_t f2[3] = { {0,0,0}, {50,100,80}, {255,255,255} };
    /*分布P的权重 */
    float w1[5] = { 0.4, 0.3, 0.2, 0.1 };
    /*分布Q的权重 */
    float w2[3] = { 0.5, 0.3, 0.2 };
    /*分布P的签名 */
    signature_t s1 = { 4, f1, w1 };
    /*分布Q的签名 */
    signature_t s2 = { 3, f2, w2};
    /* 计算EMD */
    float e;
    e = emd(&s1, &s2, dist, 0, 0);
    printf("emd = %f\n", e); return 0;

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值