void Panorama::create_matchs() { KDTree kd; Node *nodes = new Node[features.size()]; kd.KDTree_build(nodes, &(featureData[0]), features.size(), 128); int *numMatchOf_i = new int[images.size()](); #define _K 4 int max_match = min(_K, (int)images.size()-1); for (int i = 0; i < features.size(); ++i) { int *target = &featureData[128*i]; int indice[_K]; kd.find_kNN(indice, target, max_match, i); for (int j = 0; j < max_match; ++j) { int iMatch = indice[j]; Feature f1 = features[i]; Feature f2 = features[iMatch]; if (f1.iid != f2.iid) { MatchPair match = {f1, f2}; matchs.push_back(match); ++(numMatchOf_i[f1.iid]); } } #undef _K } vector<MatchPair>::iterator op = matchs.begin(); vector<MatchPair>::iterator ed = matchs.begin(); for (int i = 0; i < imageNames.size(); ++i) { op = ed; ed += numMatchOf_i[i]; sort(op, ed, compare_match); } create_match_info(); FILE *fp = fopen("matchs_0.txt", "w"); print_matchs(fp, matchs); fclose(fp); fp = fopen("imatchs_0.txt", "w"); print_imatchs(fp, imageMatchInfos); fclose(fp); delete[] numMatchOf_i; // featureData is not needed anymore, it is very large, so free its memory // Note: clear() will not free the memory vector<int> emptyVec(0); emptyVec.swap(featureData); delete[] nodes; }
void xform_test_object_t::test<1>() { LLXform xform_obj; LLVector3 emptyVec(0.f,0.f,0.f); LLVector3 initialScaleVec(1.f,1.f,1.f); ensure("LLXform empty constructor failed: ", !xform_obj.getParent() && !xform_obj.isChanged() && xform_obj.getPosition() == emptyVec && (xform_obj.getRotation()).isIdentity() && xform_obj.getScale() == initialScaleVec && xform_obj.getPositionW() == emptyVec && (xform_obj.getWorldRotation()).isIdentity() && !xform_obj.getScaleChildOffset()); }