需要同步两个具有属性时间的列表,但时间不相等

时间:2013-10-24 03:47:20

标签: algorithm list sorting synchronization

我会尽力描述我的问题。我有两个列表,一个带有音频帧,另一个带有彩色帧(不相关)。它们都有时间戳,它们是在同一时刻但在不同时刻被捕获的。所以,我喜欢这个:

index  COLOR  AUDIO
0      841    846
1      873    897
2      905    948
3      940    1000
...     ...    ...

框架以高数字开始,因为它们被捕获然后被修剪到特定部分,但即时拍摄,第0帧同步仅相隔5ms(时间戳以毫秒为单位)。

在每种情况下,音频帧数都小于颜色数。我需要让它们具有相同的数量。起始帧可以是颜色>音频,颜色

编辑: 我在每个列表上有超过4帧。 帧之间的时间不是恒定的。

EDIT2: 这是使用kinect捕获的,虽然我认为它无关紧要,我无法再次捕获数据

edit3:有人问为什么我需要同步时间。我正在使用它来开发一个多模态情感识别系统,我需要训练一个决策级别分类器(KNN),所以我需要两个分类器上的输入数据来及时匹配相同的时间。我不能在我没有的帧上提供“零”数据。

EDIT4:试图描述我的问题以及我想要做得更好的事情: 我有两个框架列表,音频和颜色。它们都对应于相同长度的录音,例如,它们都“描述”5s的录音。 问题是,我的音频样本比我的颜色样本少(因为采样率)。现在,我需要在Multimodal分类器上输入这些帧,音频和颜色。 thinf,我需要知道哪个颜色帧对应于音频帧,以便我可以将它们作为“单帧”发送到分类器进行分类。我不能这样做,因为我不知道列表音频的哪个索引对应于列表颜色上的另一个索引(反之亦然)。所以我要做的是将较小的列表(音频)扩展为与较大列表(颜色)相同的计数。要做到这一点,我需要复制一些音频帧。我的问题是解决这个问题,我怎么知道哪个帧最好被复制?我有时间戳,但我无法对algortihm进行自动排序。

1 个答案:

答案 0 :(得分:1)

我相信你可以将音频帧对齐到最接近(时间)的颜色框架。

void align(long[] colorTimes, ColorFrame[] colorFrames,
           long[] audioTimes, AudioFrame[] audioFrames)
{
    assert colorTimes.length == colorFrames.length;
    assert audioTimes.length == audioFrames.length;
    assert audioTimes.length <= colorTimes.length;

    // We assume all times and frames are sorted.
    // Otherwise you can sort them here.

    int lastAlignedColorIndex = -1;

    for (int index = 0; index < audioTimes.length; index++) {
        int timeToAlign = audioTimes[index];
        int alignedIndex = lastAlignedColorIndex + 1;

        int colorIndex = lastAlignedColorIndex + 2;
        while (colorIndex < colorTimes.length) {
            if (colorTimes[alignedIndex] > timeToAlign)
                break;

            int timeDiff = Math.abs(colorTimes[colorIndex] - timeToAlign);
            if (timeDiff < Math.abs(colorTimes[alignedIndex] - timeToAlign))
                alignedIndex = colorIndex;

            colorIndex++;
        }

        enterData(colorFrames[alignedIndex], audioFrames[index]);

        lastAlignedColorIndex = alignedIndex;
    }
}