mit-acl / clipper Goto Github PK
View Code? Open in Web Editor NEWgraph-theoretic framework for robust pairwise data association
Home Page: https://arxiv.org/abs/2011.10202
License: MIT License
graph-theoretic framework for robust pairwise data association
Home Page: https://arxiv.org/abs/2011.10202
License: MIT License
Hi, Thanks for opening great work. I tried to run the python example but I got the error "[Open3D WARNING] Read PLY failed: unable to open file: ../data/bun1k.ply" and the number of points in the point cloud was zero. I tested with another irrelevant PLY file and open3d just worked fine. Are there any suggestions to fix the problem?
Hi,
Thanks a lot for your great work! I have a question regarding the diagonal values in the affinity matrix. The function CLIPPER::setMatrixData sets to zero all of the values in the diagonal entries of M and C matrices. However, in the paper it is explicated that those values measure the similarity of the data points that association
. As I have that information, I'd like to be able to use it.
I have tried commenting those lines and making clipper work with my forced values in M_ and C_. However, I'm getting wrong results. Could you please let me know how should I set those values? Thanks in advance!
Hi,
My goal is to find plane correspondences from two sets of planes that are extracted from two different lidar sensors. Is there some maximum rotation that Clipper cannot handle. In my case rotation around z axis is about 90 degrees between lidar sensors
Hi,
Thanks for your great work! I have a question regarding the invariant choices. I am using the python API and cannot find a documentation that list different invariant choices.
Right now I am using this clipper.invariants.EuclideanDistanceParams()
as in the tutorial. Is there any other already implemented invariant? I know we can implement ourselves.
Hi, I would like to know how to uninstall clipper safely. I have installed the python bindings and I would like to uninstall it.
Hello there,
Many thanks for open-soure this very nice work. I really enjoy reading your papers.
I am wondering whether the current version of CLIPPER in this repository supports setting weights for M_{ii} based on descriptor similarity instead of setting as "1". I try to simply add such weights (range: [0,1]) by the following code (but it works pretty bad, resulting in many repeated items in the clique):
void CLIPPER::scorePairwiseConsistency_withweight(const invariants::Data& D1,const invariants::Data& D2,const std::vector<double>& weights, const Association& A)
{
if (A.size() == 0) A_ = utils::createAllToAll(D1.cols(), D2.cols());
else A_ = A;
const size_t m = A_.rows();
Eigen::MatrixXd M = Eigen::MatrixXd::Zero(m, m);
#pragma omp parallel for shared(A_, D1, D2, M_, C_) if(parallelize_)
for (size_t k=0; k<m*(m-1)/2; ++k) {
size_t i, j; std::tie(i, j) = utils::k2ij(k, m);
if (A_(i,0) == A_(j,0) || A_(i,1) == A_(j,1)) {
// violates distinctness constraint
continue;
}
//
// Evaluate the consistency of geometric invariants associated with ei, ej
//
// points to extract invariant from in D1
const auto& d1i = D1.col(A_(i,0));
const auto& d1j = D1.col(A_(j,0));
// points to extract invariant from in D2
const auto& d2i = D2.col(A_(i,1));
const auto& d2j = D2.col(A_(j,1));
const double scr = (*invariant_)(d1i, d1j, d2i, d2j);
if (scr > params_.affinityeps) { // does not violate inconsistency constraint
M(i,j) = scr;
}
}
//**************** for diagonal weights
for (int i = 0; i < weights.size(); ++i)
{
M(i,i) = weights[i];
// std::cout<<"weights["<<i<<"] = "<<weights[i]<<std::endl;
}
//****************
// Identity on diagonal is taken care of implicitly in findDenseClique()
// M += Eigen::MatrixXd::Identity(m, m);
M_ = M.sparseView();
C_ = M_;
C_.coeffs() = 1;
}
int main(int argc, char **argv){
clipper::invariants::EuclideanDistancePtr invariant =
std::make_shared<clipper::invariants::EuclideanDistance>(iparams);
clipper::Params params;
clipper::CLIPPER clipper(invariant, params);
//
// Identify data association
//
clipper::Association A = clipper::Association(association_num, 2);
for (int i = 0; i < association_num; i++) {
A(i, 0) = i;
A(i, 1) = i;
}
//get model, data, weights
...
clipper.scorePairwiseConsistency_withweight(model, data,weights, A);
// find the densest clique of the previously constructed consistency graph
clipper.solve();
}
Could you please give me some suggestions about how to correctly set weights for diagonal weights? Considering such diagonal weights are quite different from non-diagonal weights (EuclideanDistance based in CLIPPER), do we need to scale the diagonal weights to handel such difference?
Thanks and regards,
weixin
Hello~Thanks for your open source work.
You mentioned in your paper, orthogonal projected gradient ascent are applied. However, in this code
Line 179 in e101541
From the C++ code, I don’t seem to see how to get the rotation and translation matrix. How can I get this correspondence ?
Thank you so much!
Hello,
I'm trying to compile the MATLAB binaries on Ubuntu 22.04 and I get the following errors:
clipper/bindings/matlab/finddensecluster_mex.cpp:65:37: error: ‘clipper::utils’ has not been declared
65 | if (u0.size() == 0) u0 = clipper::utils::randvec(m);
| ^~~~~
clipper/bindings/matlab/finddensecluster_mex.cpp:74:21: error: ‘findDenseCluster’ is not a member of ‘clipper’
74 | soln = clipper::findDenseCluster(Ms, Cs, u0, params);
| ^~~~~~~~~~~~~~~~
clipper/bindings/matlab/finddensecluster_mex.cpp:76:21: error: ‘findDenseCluster’ is not a member of ‘clipper’
76 | soln = clipper::findDenseCluster(M, C, u0, params);
| ^~~~~~~~~~~~~~~~
On inspection, it seems findDenseCluster is not a declared function in the C++ code. Am I missing something? How did you compile the MATLAB binaries?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.