深入理解光流法外推雷达回波

背景介绍

鉴于本人实在太过疲惫和劳累,一些简单的便于理解的废话就不在记录,耗费两天时间研究了一下光流法,本帖用于记录学习过程中源码的难点细节。

使用光流预测的核心有两个利用多张连续回波图像(变分)或者相邻两张回波图(交叉相关,LK等)计算出光流场(速度矢量场),之后利用半拉格朗日方法进行外推。

半拉格朗日方法

三时间步半拉格朗日方法,其核心公式如下
在这里插入图片描述
但这个有点难理解,但看一维的图就很好理解
在这里插入图片描述
它的核心就是迭代求Am(位移矢量),如果理解困难的话,其实质上就是通过未来迭代(猜)出当前时刻的Am找到过去的假设标量值(回波值)不变的点,延伸到二维就是两个方向迭代,ok实在是so easy~

源码中lk直接调用cv的lk,没什么好说的,需要注意的是img要转成灰度图,主要是交叉相关:

    m, n = R.shape[1:]
    X, Y = np.meshgrid(np.arange(n), np.arange(m))
    print(X)
    def f(v):
        XYW = [Y + v[1], X + v[0]]
        R_w = ip.map_coordinates(
            R[-2, :, :], XYW, mode="constant", cval=np.nan, order=0, prefilter=False
        )

        mask = np.logical_and(np.isfinite(R[-1, :, :]), np.isfinite(R_w))

        return -np.corrcoef(R[-1, :, :][mask], R_w[mask])[0, 1]

    options = {"initial_simplex": (np.array([(0, 1), (1, 0), (1, 1)]))}
    result = op.minimize(f, (1, 1), method="Nelder-Mead", options=options)

    return np.stack([-result.x[0] * np.ones((m, n)), -result.x[1] * np.ones((m, n))])

首先是np.meshgrid插出坐标,其次核心公式是ip.map_coordinates,这个很难理解,查阅scipy官方文档:scipy.ndimage.map_coordinates这个函数看看,output的shape是根据坐标插值的,如果坐标不变那么output还是原来的shape,只是数值进行移动,边界进行填充:
在这里插入图片描述
在这里插入图片描述
-------未完待续---------

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值