Ejemplo n.º 1
0
        // Метод вычисляет значения показателей надежности отслеживания точек
        // и сохраняет их в индексированный список.
        private void m_CalcErrorList(
            List <PointF> srcPts,                 // координаты точек на предыдущем кадре
            List <PointF> retPts,                 // координаты точек после отслеживания точек
                                                  // с предыдущего кадра на следующий и обратно
            List <byte> retStatus,                // признаки успешного отслеживания retPts
            List <float> dstError,                // погрешность отслеживания точек с
                                                  // предыдущего кадра на следующий
            List <float> retError,                // погрешность отслеживания точек со
                                                  // следующего кадра на предыдущий
            out List <IndexedDouble> indexedError // сводные показатели
            )                                     // надежности отслеживания точек
        {
            IndexedDouble error;

            indexedError = new List <IndexedDouble>();

            for (int i = 0; i < srcPts.Count; i++)
            {
                if (retStatus[i] == 1)
                {
                    double distX = retPts[i].X - srcPts[i].X;
                    double distY = retPts[i].Y - srcPts[i].Y;
                    double dist  = Math.Sqrt(distX * distX + distY * distY);
                    error       = new IndexedDouble();
                    error.Value = dist;
                    error.Index = i;
                    indexedError.Add(error);
                }
            }
        }
Ejemplo n.º 2
0
        // Метод сортировки индексированного списка ошибок по возрастанию
        private void m_SortErrorList(List <IndexedDouble> indexedError,
                                     out List <IndexedDouble> sortedIndexedError)
        {
            sortedIndexedError = new List <IndexedDouble>();
            IndexedDouble[] indexedErrorArr = indexedError.ToArray();
            int             numel           = indexedError.Count;
            IndexedDouble   minError        = new IndexedDouble();
            int             minIndex;

            for (int i = 0; i < numel - 1; i++)
            {
                minError = indexedErrorArr[i];
                minIndex = i;
                for (int j = i + 1; j < numel; j++)
                {
                    if (indexedErrorArr[j].Value < minError.Value)
                    {
                        minError = indexedErrorArr[j];
                        minIndex = j;
                    }
                }
                // Переставляем местами текущий элемент с наименьшим
                if (minIndex != i)
                {
                    indexedErrorArr[minIndex] = indexedErrorArr[i];
                    indexedErrorArr[i]        = minError;
                }
                // Добавляем наименьший элемент в результирующий список
                sortedIndexedError.Add(minError);
            }
        }