【问题标题】:Matlab - calculate average of non-NaN framesMatlab - 计算非NaN帧的平均值
【发布时间】:2017-09-25 11:50:18
【问题描述】:

我希望在检测到 blob 后检测它的平均速度,直到它移出屏幕为止,我在如何设置要使用的值的边界时遇到了麻烦。

以下是一些示例数据:

#35 x_cen=NaN  y_cen=NaN  curSpeed=0
Elapsed time is 0.263965 seconds.
#36 x_cen=NaN  y_cen=NaN  curSpeed=0
Elapsed time is 0.263827 seconds.
#37 x_cen=NaN  y_cen=NaN  curSpeed=0
Elapsed time is 0.420120 seconds.
#38 x_cen=3.052941e+01  y_cen=1.147059e+01  curSpeed=0
Elapsed time is 0.302205 seconds.
#39 x_cen=30  y_cen=1.104167e+01  curSpeed=6.813593e-01
Elapsed time is 0.294330 seconds.
#40 x_cen=30  y_cen=1.104167e+01  curSpeed=6.813593e-01
Elapsed time is 0.281333 seconds.
#41 x_cen=30  y_cen=1.104167e+01  curSpeed=6.813593e-01
Elapsed time is 0.293527 seconds.
#42 x_cen=NaN  y_cen=NaN  curSpeed=0
Elapsed time is 0.272795 seconds.
#43 x_cen=NaN  y_cen=NaN  curSpeed=0
Elapsed time is 0.271102 seconds.
#44 x_cen=NaN  y_cen=NaN  curSpeed=0

在这个示例数据中,我想要对象从第 39 帧到第 41 帧的平均速度。

目前我可以使用以下代码计算指定帧数的平均速度:

   avgSpeed = (curSpeed + sum(speedData(end-2:end))) / 4;

如果我能找到使用可变行号的方法,我计划将上述行包含在 if 语句中。

【问题讨论】:

  • 如果您有一个包含所有数据的矩阵,您可以使用逻辑索引来提取非 NaN 值。

标签: matlab blob average


【解决方案1】:

我用下面的代码来确定帧数和平均速度:

moving = false;
startFrame = 0;
endFrame = 0;
counter = 0;
        speedTotal = 0;
        if curSpeed > 0 && moving == false
            counter = counter + 1;
            speedTotal = speedTotal + curSpeed;
        elseif curSpeed == 0
            moving = false;
            avgSpeed = speedTotal / counter
            counter = 0;
            avgSpeed = 0;
            speedTotal = 0;
        end

【讨论】:

    猜你喜欢
    • 2014-09-03
    • 2011-07-25
    • 2017-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-23
    • 1970-01-01
    相关资源
    最近更新 更多