【发布时间】:2017-10-12 12:33:26
【问题描述】:
我正在编写一个估计光流的模块。在每个时间步,它使用一个 std::vector,其中向量的每个元素是当前像素位置和前一个像素位置。向量未排序。以前未看到的新像素将出现,而未找到的流动位置将消失。是否有正确的方法将新向量中的元素与正在估计的光流位置集合匹配?
向量大约有 2000 个元素。
这些是我正在考虑的方法:
- 天真地迭代每个估计的光流位置的新向量
- 天真地迭代新向量,但删除每个匹配的位置,以便搜索在进行时变得更快
- 在我的列表和每个时间步的新列表上运行 std::sort。然后从最后一个匹配的索引 +1 开始遍历新向量
我怀疑有一种公认的方法可以解决这个问题,但我没有接受过任何 Comp sci 培训。
如果相关的话,我在 c++ 11 中。
// each element in the new vector is an int. I need to check if
// there are matches between the new vec and old vec
void Matcher::matchOpticalFlowNaive(std::vector<int> new_vec)
{
for(int i = 0; i < this->old_vec.size(); i++)
for(int j =0; j < new_vec.size(); j++)
if(this->old_vec[i] == new_vec[j]){
do_stuff(this->old_vec[i], new_vec[j])
j = new_vec.size();
}
}
【问题讨论】:
-
一些代码好吗? minimal reproducible example
-
@holmeski - 不确定但...你确定不是
std::vector、std::set(或std::multi_set)更适合你吗? -
你最好用纯数据来表达。 c++中没有光流的概念。所以你不能有它的向量。您需要将现实世界的数据建模为 c++ 类型,然后解释您想要从这两个向量中提取的确切内容。编辑:你的功能没有意义。它只接受
new_flow,old_flow在哪里? -
@max66,套装看起来确实更好,但这不是我通过的。我会考虑将新信息转换成一个集合。
-
听起来你想找到两个向量的交集。我建议这篇文章:geeksforgeeks.org/…