광학 플로우를 추정하는 모듈을 작성 중입니다. 각 타임 스텝에서 벡터의 각 요소가 현재 픽셀 위치와 이전 픽셀 위치 인 std :: vector를 사용합니다. 벡터가 정렬되지 않았습니다. 이전에 표시되지 않은 새 픽셀이 표시되고 찾을 수없는 위치가 사라집니다. 새 벡터의 요소를 예상되는 옵티컬 플로 위치 집합과 일치시키는 올바른 방법이 있습니까?두 개의 std :: vectors 사이의 요소를 일치 시키십시오.
벡터는 2000 개 요소의 순서입니다.
는- 순진하게도
- 는 순진 새로운 벡터를 반복 각각 추정 광학 플로우 위치에 대한 새로운 벡터를 반복하지만, 검색이 더 빠르게 얻을 수 있도록 각 일치하는 위치를 제거 :
이
은 접근 내가 고려하고 있습니다 그것은 - 내 목록에있는 std :: sort와 매 시간 단계마다 새 목록을 실행합니다. 그런 다음 마지막으로 일치하는 색인에서 시작하는 새 벡터를 반복합니다. +1
나는 받아들이는 방법이 있다고 의심 스럽지만 어떤 Comp Sci 훈련도받지 못했습니다.
관련성이 높은 경우 C++ 11입니다. 중요한 순서가 ins't 있고 다른 벡터와이 벡터 (방법 matchOpticalFlowNaive()
을 확인해야한다는, 당신의 Matcher
정수의 벡터로 구성되어 있다고 가정하면,하지만 당신이 필요합니까 이해하기
// 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();
}
}
일부 코드를 입력하십시오. [mcve] –
@holmeski - 이해할 수는 없지만 ... 대신 std :: vector 대신 std :: set (또는 std :: multi_set')이 더 좋지는 않은지 확신 할 수 있습니까? ? – max66
순수 데이터로 표현하는 것이 좋습니다. C++에는 옵티컬 플로우 개념이 없습니다. 그래서 당신은 그것의 벡터를 가질 수 없습니다. 실세계 데이터를 C++ 유형으로 모델링 한 다음 정확하게 두 벡터에서 추출 할 내용을 설명해야합니다. 편집 : 귀하의 기능을 이해하지 않습니다. 그것은'new_flow'만을 받아들입니다, 어디에서'old_flow'입니까? – luk32