Предполагая, что у вас есть потоковые изображения и вы хотите автоматически отслеживать капли потоков, которые идут в одном направлении.
Итак, вы получаете разреженный поток, который будет выглядеть как sth ниже
Вы можете использовать для этого раздел opencv.Разделение похоже на алгоритм кластеризации на основе расстояния, который лучше, чем kmean, потому что вам не нужно вводить число k.Проблема в том, что он подвержен шуму и ложным ассоциациям.Поэтому я предпочитаю использовать его на наборе вектора потока, который больше порога.
Вы можете найти образец ниже
int th_distance = 18; // radius tolerance
int th2 = th_distance * th_distance; // squared radius tolerance
vector<int> labels;
int n_labels = partition(pts, labels, [th2](const Point& lhs, const Point& rhs) {
return ((lhs.x - rhs.x)*(lhs.x - rhs.x) + (lhs.y - rhs.y)*(lhs.y - rhs.y)) < th2;
});
->
, где каждый цветозначает сегменты.Вы можете настроить параметр для вашего видео
Затем, основываясь на начальной кластеризации, используйте выпуклый корпус, чтобы получить правильную форму каждого автомобиля.
вот пример https://docs.opencv.org/2.4/doc/tutorials/imgproc/shapedescriptors/hull/hull.html
Наконец, агрегируйте вектор движенияв конечный вектор K и обозначим на последнем векторе K в центре корпуса.
Затем объедините конечный вектор K каждого изображения, чтобы сформировать траекторию.