Algoritmo per abbinare gli eventi con data e ora da due fonti

2

Ho due diversi dispositivi fisici (uno è una telecamera, uno è un altro dispositivo) che osservano la stessa scena e il marchio quando si verifica un evento specificato. (registra il timestamp)

Quindi producono ciascuno una serie di timestamp "quando l'evento è stato osservato". In teoria, i timestamp registrati dovrebbero essere allineati molto bene:

Visualizzazione della situazione ideale su due linee temporali "s" e "r" come registrate dai due dispositivi:

mapiùprobabilmentenonsarannocosìbenallineatiepotrebberoessercieventimancantidallatimelinesor:

Sto cercando un algoritmo per abbinare gli eventi di "s" e "r" come questo:

Inmodocheilrisultatosaràqualcosadisimile:(S1,null);(S2,r1);(S3,null);(S4,r2);(S5,r3);(Null,r4);(S6,r5);Oqualcosadisimile.Forseconqualchevotodi"sicurezza".

Ho alcune idee, ma credo che questo potrebbe essere probabilmente un problema ben noto, che ha alcune soluzioni note, ma non conosco la terminologia giusta. Sono un po 'fuori dal mio elemento qui, questa non è la mia principale area di programmazione. Qualsiasi aiuto, suggerimento, ecc. Sarà apprezzato.

    
posta urza.cc 30.05.2014 - 01:34
fonte

1 risposta

1

Ecco la mia soluzione in C #, funziona abbastanza bene per i miei scopi:

///compute reasonably aligned pairs
        var max_tolerable_offset = 500; //do not match more then 500 miliseconds distant timestamps

        Dictionary<long, long> alignedPairs = new Dictionary<long, long>();

        foreach(var s in s_timestamps)
        {
            //for every timestamp in first timeline find the nearest one from r
            var nearest_r = r_timestamps.OrderBy(r => Math.Abs(r - s)).First(); 

            //if that is closer than allowed offset
            if ((Math.Abs(nearest_r - s)) <= max_tolerable_offset * 10000)
            {
                //so now I need to find nearest s mark for this r mark
                var closest_s = s_timestamps.OrderBy(s=> Math.Abs(s- nearest_r )).First();

                //if they are mutually in love, marry them
                if (closest_s == s)
                    alignedPairs.Add(s, nearest_r);
            }
        }

    
risposta data 30.05.2014 - 11:38
fonte

Leggi altre domande sui tag