Попробую ещё раз объяснить идею
Идея: Location treeСоздаём первый экземпляр AVM для хранения в качестве ассоциации двух координат (P[0], P[1]) в формате float (точка, куда мы можем отправиться).
Файл: AssociativeMemory192u.h
- Код: Выделить всё • Развернуть
// Definition of coordinate structure
struct CvXYZ32F {
float x,y,z;
// Set a coordinate
void Set(float aX, float aY, float aZ) { x = aX; y = aY; z = aZ; }
};
// Definition of data type
#define cType192U_c 24
#define cType192U_s 12
#define cType192U_f 6
#define cType192U_p 2
union CvType192U {
char c[cType192U_c];
short s[cType192U_s];
float f[cType192U_f];
CvXYZ32F p[cType192U_p];
};
Запоминаем центральную часть экрана в AVM как начало отсчёта. Если расстояние от центра этого распознаваемого маркера превысит некое пороговое значение, то создаём новый маркер, в который записываем координаты смещения относительно начала отсчёта. Если расстояние от центра ближайшего маркера превысит порог, то снова создаём новый маркер и т.д. Таким образом, создаём экранные привязки (маркеры), наблюдение за которыми (как в случае с энкодерами) поможет дать ответ на вопросы: На какой угол повернулась камера? Сколько проехали от последнего сохранённого местоположения?
Создаём второй экземпляр AVM для хранения в качестве ассоциации текущего местоположения видеокамеры (точка, где мы находимся).
Файл: AssociativeMemory160u.h
- Код: Выделить всё • Развернуть
// Definition of location structure
struct CvLocation {
CvXYZ32F p; // Location point
float hA; // Horizontal survey angle
float vA; // Vertical survey angle
};
// Definition of data type
#define cType160U_c 20
#define cType160U_s 10
#define cType160U_f 5
union CvType160U {
char c[cType160U_c];
short s[cType160U_s];
float f[cType160U_f];
CvLocation l;
};
Изначально указываем наше местоположение, как начало отсчёта (x=0,y=0, z=0; горизонтальный угол hA=0, вертикальный угол vA=0), и ассоциируем изображение с камеры с текущим местоположением (пишем во второй экземпляр AVM). Как только положение камеры изменится настолько, что новый вид из камеры уже не будет распознаваться AVM, формируем новую запись местоположения (координаты и угол наблюдения камеры определяем согласно пройденных привязок на этом интервале) и т.д.
Демонстрационная версия с исходными текстами (обновил):
http://edv-detail.narod.ru/Navigator_Tool_Kit.zipПроект:
Navigator_Tool_Kit\samples\src\LocationTree