【问题标题】:Smoothing directional (angular) data in R在 R 中平滑方向(角度)数据
【发布时间】:2015-05-31 06:01:48
【问题描述】:

我正在尝试处理一些motion analysis 软件跟踪错误数据导出之后。对于某些帧,方向从“真实”方向旋转 180 度。

我想对数据集进行平滑处理,以便在单帧中方向变化约 180 度时,对其进行变换以反映实际角度。

是否有人知道使用R 语言(例如CircStats)的任何循环统计包来解决此问题的方法?或者,我可以想象一个脚本检查帧到帧的变化是否接近 180 度,如果是这样,减去 180,然后移动到下一帧。这听起来像是一种合理的方法吗?它是否可以在 R 中轻松实现?

恐怕我没有代表上传描述问题的图(很容易看到),但here 是一个示例数据集。

感谢您的帮助。我一直是堆栈溢出的长期用户,但在需要询问之前从未找到我的答案。

大卫

编辑 - 附加图像

【问题讨论】:

  • 感谢@alessadro 的标签
  • 您可以使用dat <- ts(dat); diffs <- dat - lag(dat, k = 1); hist(diffs) 轻松查看差异。你是否有一个“差异范围”,或者更确切地说是一个简单的阈值——比如 abs(diffs) > 170——你想对其应用转换?
  • 阈值可以很好地工作。我自己尝试使用 90 来解决这个问题。感谢您提醒我有关 lag() 的信息,这将有助于解决那些讨厌的 NA。

标签: r rotation motion-detection


【解决方案1】:

这是一个有趣的问题要解决!它需要迭代,因为每当一个值发生变化时,它可以解决一个问题,但会产生另一个问题......如果它成功了,请告诉我。

threshold <- 90
correction <- 180

dat <- read.table("angle_data.txt", header=TRUE)
dat <- ts(dat)

repeat {
    diffs <- dat - lag(dat, k = 1)
    probl <- which(abs(diffs[,2]) > threshold)

    if(length(probl)==0)
        break

    obs.1 <- dat[probl[1], 2]
    obs.2 <- dat[probl[1] + 1, 2]

    dat[probl[1] + 1, 2] <- obs.2 + sign(obs.1 - obs.2) * 180
}

【讨论】:

  • 谢谢!这肯定解决了我的问题。不过,仍在努力弄清楚这里发生了什么。
  • 不客气!弄清楚问题发生的原因或建议的解决方案中发生了什么?
  • 解决方案,但我现在明白了。
猜你喜欢
  • 2015-02-15
  • 2015-03-06
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 2022-09-24
  • 2015-08-09
相关资源
最近更新 更多