use main image describer as reference.

This commit is contained in:
Jordan
2024-04-03 07:39:37 -07:00
parent 301fc2ca75
commit e1137844ac
4 changed files with 184 additions and 25 deletions

View File

@ -72,16 +72,18 @@ Frame *new_frame_from_handle(FILE *stream, int w, int h, int depth)
return f;
}
void clean_frame(Frame *f) {
void clean_frame(Frame *f)
{
fclose(f->stream);
free(f);
}
#ifdef __cplusplus
DartOpenMvg::Frame::Frame(const DartOpenMvg::Frame &frame) {
DartOpenMvg::Frame::Frame(const DartOpenMvg::Frame &frame)
{
cFrame = frame.cFrame;
mRegions = std::unique_ptr<openMVG::features::Regions>(frame.mRegions.get());
// mRegions = std::unique_ptr<openMVG::features::Regions>(frame.mRegions.get());
}
openMVG::image::Image<u_char> DartOpenMvg::imageFromFrame(const CFrame *frame)
@ -107,20 +109,15 @@ DartOpenMvg::Frames::Frames(openMVG::sfm::Bundle_Adjustment_Ceres::BA_Ceres_opti
mAdjustment = openMVG::sfm::Bundle_Adjustment_Ceres(options);
}
void DartOpenMvg::Frames::add_frame(FILE *handle, int w, int h, int depth) {
void DartOpenMvg::Frames::add_frame(FILE *handle, int w, int h, int depth)
{
CFrame *f = new_frame_from_handle(handle, w, h, depth);
mFrames.push_back(
Frame(f)
);
Frame(f));
}
void DartOpenMvg::Frames::computeMatches()
{
#ifdef OPENMVG_USE_OPENMP
OPENMVG_LOG_INFO << "Using the OPENMP thread interface";
const bool b_multithreaded_pair_search = (eMatcherType_ == CASCADE_HASHING_L2);
// -> set to true for CASCADE_HASHING_L2, since OpenMP instructions are not used in this matcher
#endif
// Match the pairs as a sequence
// Within openMvg::matching_image_collection::Matcher
@ -129,16 +126,17 @@ void DartOpenMvg::Frames::computeMatches()
for (size_t i = 0; i < mFrames.size() - 1; ++i)
{
const Frame &frame1 = mFrames[i];
const Frame &frame2 = mFrames[i+1];
auto *regions1 = frame1.mRegions.get();
auto *regions2 = frame2.mRegions.get();
if (!regions1) {
const Frame &frame2 = mFrames[i + 1];
auto regions1 = frame1.mRegions.get();
auto regions2 = frame2.mRegions.get();
if (!regions1)
{
std::string msg = std::string("Did you remember to calculate regions for frame ") + std::to_string(i) + "?";
throw std::out_of_range(msg);
}
regions1->Load();
std::cerr << "Loading " << std::to_string(regions1->RegionCount()) << " regions" << endl;
// regions1->Load();
std::cerr << "Loading " << std::to_string(regions1->RegionCount()) << " regions" << std::endl;
auto is_binary = regions1->IsBinary();
@ -147,10 +145,6 @@ void DartOpenMvg::Frames::computeMatches()
openMVG::matching::RegionMatcherFactory(openMVG::matching::EMatcherType::HNSW_L2, *regions1);
if (!matcher)
continue;
#ifdef OPENMVG_USE_OPENMP
#pragma omp parallel for schedule(dynamic) if (b_multithreaded_pair_search)
#endif
openMVG::matching::IndMatches vec_putative_matches;
matcher->MatchDistanceRatio(0.5, *regions2, vec_putative_matches);
if (vec_putative_matches.empty())
@ -186,12 +180,17 @@ void DartOpenMvg::Frame::calculateFeatures()
{
using namespace openMVG::image;
using namespace openMVG::features;
auto desc = SIFT_Anatomy_Image_describer(SIFT_Anatomy_Image_describer::Params());
auto image = imageFromFrame(cFrame);
mRegions = desc.Describe(image);
MvgOverride::AKAZE_OCV_Image_describer desc;
auto im = imageFromFrame(cFrame);
mRegions = std::make_shared<Regions>(std::move(desc.Describe(im)));
if (!mRegions.get()) {
throw std::range_error("Could not set regions member.");
}
}
void DartOpenMvg::Frames::resection() {
void DartOpenMvg::Frames::resection()
{
// openMVG::tracks::TracksUtilsMap::GetFeatIndexPerViewAndTrackId(
// mTracks;
// )