c++多边形扫描线填充算法_Map Matching-轨迹相似性度量算法-Discrete Frechet Distance

4ba226e664015d6aa971ccdb68a1c7f4.png

Fréchet distance(弗雷歇距离)是法国数学家Maurice René Fréchet在1906年提出的一种路径空间相似性计算方法。

直观的理解,Fréchet distance就是狗绳距离:主人走路径A,狗走路径B,他们行进的速度可能不同,但是不允许backtracking,各自走完这两条路径过程中所需要的最短狗绳长度

Fréchet distance不仅考虑了曲线的空间位置,同时还考虑了曲线中形状点的顺序。

024748410d2966d0f577d4e4b2a70bd4.png

数学描述

给定Curve 1:

和Curve 2:
,Fréchet distance定义如下:

90cbaf0ed4d75308f1f3df205e91c05b.png

α是将[0,1]映射到[a,b]连续非降函数,β是将[0,1]映射到

连续非降函数。

实际计算中,用多边形曲线逼近连续曲线,转化为Discrete Frechet Distance。

假设多边形曲线为P,Q;

要计算P和Q的Fréchet distance,要先找到对应的点对序列

其中

,为了保证点的顺序,对于所有的i=1,...,q

,令

,然后计算对应点对的最大距离:

2193bb7dbcaaf5778e018ffa5793468a.png

离散弗雷歇距离(Discrete Frechet Distance)的计算如下:

defd4d91cc33cfc09676aaf3846bfb57.png

离散弗雷歇距离(Discrete Frechet Distance)算法

0703dac1065203d8ceeeb4fab2746ded.png

python实现

import numpy as np

def eucl_dist(x,y):
    """
    Usage
    -----
    L2-norm between point x and y
    Parameters
    ----------
    param x : numpy_array
    param y : numpy_array
    Returns
    -------
    dist : float
           L2-norm between x and y
    """
    dist = np.linalg.norm(x-y)
    return dist

def _c(ca,i,j,P,Q):
    if ca[i,j] > -1:
        return ca[i,j]
    elif i == 0 and j == 0:
        ca[i,j] = eucl_dist(P[0],Q[0])
    elif i > 0 and j == 0:
        ca[i,j] = max(_c(ca,i-1,0,P,Q),eucl_dist(P[i],Q[0]))
    elif i == 0 and j > 0:
        ca[i,j] = max(_c(ca,0,j-1,P,Q),eucl_dist(P[0],Q[j]))
    elif i > 0 and j > 0:
        ca[i,j] = max(min(_c(ca,i-1,j,P,Q),_c(ca,i-1,j-1,P,Q),_c(ca,i,j-1,P,Q)),eucl_dist(P[i],Q[j]))
    else:
        ca[i,j] = float("inf")
    return ca[i,j]


def discret_frechet(P,Q):
    """
    Usage
    -----
    Compute the discret frechet distance between trajectories P and Q
    Parameters
    ----------
    param P : px2 numpy_array, Trajectory P
    param Q : qx2 numpy_array, Trajectory Q
    Returns
    -------
    frech : float, the discret frechet distance between trajectories P and Q
    """
    ca = np.ones((len(P),len(Q)))
    ca = np.multiply(ca,-1)
    return _c(ca,len(P)-1,len(Q)-1,P,Q)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
omp_mmv.rar_omp算法是一种基于OMP(Orthogonal Matching Pursuit)算法的多输入多输出(MMV)算法。该算法主要用于基于压缩感知(CS)技术的DoA(方向性到达)估计。 首先,OMP算法是一种稀疏信号重构算法,通过迭代选择与观测信号具有最大相关性的原子(基向量),用于重构稀疏信号。在omp_mmv.rar_omp算法中,这一思想被应用于多个输入信号和多个输出信号的情况。通过OMP的迭代过程,该算法可以有效地提取多路输入信号中的稀疏信息,实现MMV问题的重构。 在DoA_CS-D,DoA-D,DoA-CS_Omp,DoA_Omp和DoA估计等方面,可以理解为应用了压缩感知(CS)技术的DoA估计算法。DoA估计是指在无线通信系统中,通过接收阵列中的信号到达方向来确定信号源的角度。传统的方法需要高成本的硬件设备和复杂的信号处理算法,而CS技术可以通过少量的观测直接获取目标信号的相关信息,从而大大减少了系统的复杂性和成本。 通过OMP算法和CS技术的结合,在DoA估计问题中可以利用少量的观测就能够提取出目标信号的DoA信息,进而实现目标信号的角度估计。其中,DoA_CS-D指的是通过压缩感知(CS)技术进行DoA估计的方法。DoA-D是指通过DoA估计算法计算出的方向,DoA-CS_Omp是利用OMP算法进行DoA估计的一种方法,而DoA_Omp则是指利用OMP算法进行DoA估计的方法,最后,DoA估计是针对信号源角度的估计。 综上所述,omp_mmv.rar_omp算法是一种基于OMP算法和CS技术的多输入多输出(MMV)算法,在DoA估计问题中可以通过少量的观测实现目标信号角度的估计。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值