Beispiel #1
0
            public double getMetric(CompressedTrack t1, CompressedTrack t2, int fps)
            {
                TimeSpan dt = new TimeSpan(0, 0, 0, 0, (int)Math.Floor(1000.0 / fps));

                DateTime startTime1 = t1.startTime;
                DateTime startTime2 = t2.startTime;

                DateTime endTime1 = t1.endTime;
                DateTime endTime2 = t2.endTime;

                //is there any overlap at all?
                if (startTime1 > endTime2 || startTime2 > endTime1)
                {
                    return(0);
                }

                //find overlap times

                DateTime commonStartTime = startTime1;

                if (startTime2 > startTime1)
                {
                    commonStartTime = startTime2;
                }
                DateTime commonEndTime = endTime1;

                if (endTime2 < endTime1)
                {
                    commonEndTime = endTime2;
                }

                //now compute the integral

                double sum = 0;

                for (DateTime t = commonStartTime; t <= commonEndTime; t += dt)
                {
                    SpaceTime l1      = t1.getSpaceTimeAt(t);
                    SpaceTime l2      = t2.getSpaceTimeAt(t);
                    double    overlap = BoundingBox.ComputeOverlapArea(l1.region, l2.region);
                    sum += (overlap * dt.Milliseconds) / 1000; //pixel-sec
                }
                return(sum);
            }
Beispiel #2
0
            public double getMetric(CompressedTrack t1, CompressedTrack t2, int fps)
            {
                TimeSpan dt = new TimeSpan(0, 0, 0, 0, (int)Math.Floor(1000.0 / fps));

                DateTime startTime1 = t1.startTime;
                DateTime startTime2 = t2.startTime;

                DateTime endTime1 = t1.endTime;
                DateTime endTime2 = t2.endTime;

                //is there any overlap at all?
                if (startTime1 > endTime2 || startTime2 > endTime1)
                {
                    return(0);
                }

                //find overlap times

                DateTime commonStartTime = startTime1;

                if (startTime2 > startTime1)
                {
                    commonStartTime = startTime2;
                }
                DateTime commonEndTime = endTime1;

                if (endTime2 < endTime1)
                {
                    commonEndTime = endTime2;
                }

                if (commonEndTime - commonStartTime < dt)
                {
                    return(0);
                }

                //now compute the integral

                double IntersectionVolume = 0;

                for (DateTime t = commonStartTime; t <= commonEndTime; t += dt)
                {
                    SpaceTime l1      = t1.getSpaceTimeAt(t);
                    SpaceTime l2      = t2.getSpaceTimeAt(t);
                    double    overlap = BoundingBox.ComputeOverlapArea(l1.region, l2.region);
                    IntersectionVolume += (overlap * dt.Milliseconds);
                }

                double UnionVolume = 0;

                for (DateTime t = startTime1; t <= endTime1; t += dt)
                {
                    SpaceTime l1 = t1.getSpaceTimeAt(t);
                    UnionVolume += (l1.region.ComputeArea() * dt.Milliseconds);
                }
                for (DateTime t = startTime2; t <= endTime2; t += dt)
                {
                    SpaceTime l2 = t2.getSpaceTimeAt(t);
                    UnionVolume += (l2.region.ComputeArea() * dt.Milliseconds);
                }
                UnionVolume -= IntersectionVolume;

                return(IntersectionVolume / UnionVolume);
            }