Git Product home page Git Product logo

peterzs / fastspectrum Goto Github PK

View Code? Open in Web Editor NEW

This project forked from a-nasikun/fastspectrum

0.0 0.0 0.0 22.79 MB

We approximate the lowest part of the eigenvalues and eigenfunctions of Laplace-Beltrami operator, to have faster speed, less storage, and quicker mapping to world coordinates. This program requires Eigen, LibIGL, and an eigensolver (either CUDA's cuSOLVER or Matlab's eigs function).

License: MIT License

C++ 95.72% CMake 4.28%

fastspectrum's Introduction

Fast Approximation of Eigenproblem of Laplace-Beltrami Operator from Triangle Mesh

We approximate the lowest part of the eigenvalues and eigenfunctions of Laplace-Beltrami operator, to have a faster speed, less storage, and quicker mapping to world coordinates. Our general idea is to construct a subspace (from the original space) that can approximate the low frequency (smooth) functions on the manifold. Then we will solve the eigenproblem restricted to such subspace.

Here is main component of our approximation scheme:

  1. Construct a subspace
    1. sampling
    2. radial basis functions
    3. partition of unity
  2. Solve the eigenproblem in subpace
    1. low-dim eigenproblem
    2. lift the eigenfunction (only when necessary/as requested since it's expensive for memory)

Please note that this program requires Eigen, LibIGL, and an eigensolver (e.g. CUDA's cuSOLVER function).

How to compile and run our implementation

We use CMake for easy installation/deployment on your machine, by creating a CMakeFiles.txt that hopefully do (almost) everything to make our code runs in your machine. Here are the steps to get our program runs:

  1. Clone our repository recursively using git clone https://github.com/a-nasikun/FastSpectrum --recursive.
  2. Ensure that you have CUDA set-up on your machine. You can download from here if you haven't done so.
  3. Update dependency submodule(s). Among many external libraries in LibIGL, we'll be using eigen, glfw, glad, and imgui only. During our test, the commit version of eigen in libIGL is an old one and doesn't support Eigen::SparseMatrix. We can solve this by simply updating the eigen, using git submodule update --remote external\eigen.
  4. Run the Cmake command and it should be working and running without any problem. If some headers/libraries are missing (perhaps because you locate the wrong folder), you could specify it directly in your application. For example, in Visual Studio you could go to Project > Properties > C/C++ > General > Additional Include Directories.

Having followed those steps, our program should compile and run as expected. This program is still under continuous development, so please expect some errors/bugs/mistakes while exploring it it. If you have any problem compiling it or having some nice suggestion(s) or question(s), please drop me an email at a.nasikun[at]tudelft.nl.

Note: parameter support in ConstructBasis() function controls the sparsity of the basis matrix U, approximating the number of non-zero entries per row. It is currently hard-coded to have approximately 8-15 non-zero entries on each row. If a user prefers to have a different support number, s/he is welcomed to do so. We are a bit conservative (as as the effect of Euclidean distance), so that actual value would be higher than the input value.

SGP 2018 (Symposium on Geometry Processing 2018)

This work was presented at SGP 2018 at Paris TelecomTech, organized by EuroGraphics and ACM SIGGRAPH, and will be published at Computer Graphics Forum (CGF) Vol.37(5). You can read the paper from our website for a more detailed explation of our approximation algorithm.

If you use our application in your work, please kindly cite our work.

@article{nasikun2018fastspectrum,
  title={Fast Approximation of Laplace-–Beltrami Eigenproblems},
  author={Nasikun, Ahmad and Brandt, Christopher and Hildebrandt, Klaus},
  journal={Computer Graphics Forum},
  volume={37},
  number={5},
  year={2018},
  publisher={Wiley}
}

fastspectrum's People

Contributors

a-nasikun avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.