데이터 세트의 각 이미지에 대해 타임 스탬프와 파일 이름이 저장되는 RGB-D 카메라와 텍스트 파일로 데이터 세트를 얻습니다. 내가하는 일은이 파일을 파싱하고 두 개의 std :: map을 채우는 것이다. 하나는 rgb 이미지 용이고 다른 하나는 깊이 이미지 용이다. 이제는 타임 스탬프가 교차하지 않기 때문에 타임 스탬프를 기반으로 일치하는 이미지를 찾는 루틴을 작성해야합니다. 이것은 내가 지금까지 쓴 것입니다 :두 표준 사이의 일치를 찾는 C++ 효율적인 방법
typedef map<double,string> StampImageMap;
...
vector<string> &vstrImageFilenamesRGB;
vector<string> &vstrImageFilenamesD;
vector<double> &vTimestampsRGB;
vector<double> &vTimestampsDPT;
double tolerance = 0.02;
for(StampImageMap::iterator it=rgb_images.begin(); it != rgb_images.end(); it++) {
bool found = false;
StampImageMap::iterator jt=depth_images.begin();
while(found == false && jt!=depth_images.end()) {
if(fabs(it->first - jt->first) < tolerance) {
found = true;
vstrImageFilenamesRGB.push_back(it->second);
vstrImageFilenamesD.push_back(jt->second);
vTimestampsRGB.push_back(it->first);
vTimestampsDPT.push_back(jt->first);
}
jt++;
}
}
이 작업을 수행하는 더 효율적인 방법이 있는지 궁금합니다. 코드가 현재 기록되면
당신이 RGB 및 D 타임 스탬프에 대한 일대일 관계를 가지고 수행이 경우에 대한 의사 여기
입니까? 그들은 고정 된 규칙을 따릅니 까? RGB 타임 스탬프는 항상 같은 이미지의 D 타임 스탬프보다 작습니까? –
예 카메라의 프레임 속도가 30Hz이므로 해당 RGB 및 DEPTH 이미지의 타임 스탬프가 동일하지는 않지만 그 차이는 1/33을 초과 할 수 없기 때문에 가변 공차를 설정합니다 . –
@FedericoNardi 시퀀스가 "완료"(하나의 간격 없음) 및 일대일로 수행되는 경우 가장 오래된 일치 항목을 찾은 다음 순서대로 나열 할 수 있습니까? (즉, 첫 번째 깊이 이미지가있는 첫 번째 rgb 이미지, 두 번째 이미지가있는 두 번째 이미지 등) – molbdnilo