Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/gattia/pyfocusr
https://github.com/gattia/pyfocusr
graph graph-theory laplacian point-cloud pointcloud registration spectral spectral-embedding
Last synced: about 1 month ago
JSON representation
- Host: GitHub
- URL: https://github.com/gattia/pyfocusr
- Owner: gattia
- License: mit
- Created: 2020-04-21T20:36:26.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2024-04-22T21:02:18.000Z (8 months ago)
- Last Synced: 2024-04-23T22:18:21.102Z (8 months ago)
- Topics: graph, graph-theory, laplacian, point-cloud, pointcloud, registration, spectral, spectral-embedding
- Language: Python
- Size: 12.8 MB
- Stars: 5
- Watchers: 2
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
# PyFOCUSR
![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)
![Build Status](https://github.com/gattia/pyfocusr/actions/workflows/build-test.yml/badge.svg?branch=master)
|[Documentation](https://anthonygattiphd.com/pyfocusr/)|Python implementation of the FOCUSR
FOCUSR = Feature Oriented Correspondence using Spectral Regularization and is described in [1].# Introduction / Background
This package will find correspondence between points on two surfaces using spectral coordinate information to regularize the surface matching. Non-rigid registration between surface points is conducted using Coherent Point Drift (CPD) as described in [2] and impelmented in CyCPD [3]. More recent versions/updated versions of this (spectral alignment/registration) algorithm were developed by the original authors [4], [5] but are not covered here.
[1] Lombaert H, Grady L, Polimeni JR, Cheriet F. FOCUSR: Feature Oriented Correspondence Using Spectral Regularization--A Method for Precise Surface Matching. IEEE Transactions on Pattern Analysis and Machine Intelligence. 2013;35(9):2143-2160. doi:10.1109/TPAMI.2012.276
[2] Myronenko A, Xubo Song. Point Set Registration: Coherent Point Drift. IEEE Transactions on Pattern Analysis and Machine Intelligence. 2010;32(12):2262-2275. doi:10.1109/TPAMI.2010.46
An open-source version of the manuscript can be found here: https://tinyurl.com/tph4u7e[3] https://github.com/gattia/cycpd
[4] Lombaert H, Sporring J, Siddiqi K. Diffeomorphic Spectral Matching of Cortical Surfaces. In: Gee JC, Joshi S, Pohl KM, Wells WM, Zöllei L, eds. Information Processing in Medical Imaging. Vol 7917. Lecture Notes in Computer Science. Berlin, Heidelberg: Springer Berlin Heidelberg; 2013:376-389. doi:10.1007/978-3-642-38868-2_32
[5] Lombaert H, Arcaro M, Ayache N. Brain Transfer: Spectral Analysis of Cortical Surfaces and Functional Maps. In: Ourselin S, Alexander DC, Westin C-F, Cardoso MJ, eds. Information Processing in Medical Imaging. Vol 9123. Lecture Notes in Computer Science. Cham: Springer International Publishing; 2015:474-487. doi:10.1007/978-3-319-19992-4_37
# Installation
It is recommended that installtion is performed in a new environment.```bash
conda create --name focusr python=3.7
git clone https://github.com/gattia/pyfocusr
cd pyfocusr# install dependencies
make requirements# install pyfocusr
make install
```# Examples
Jupyter notebook *Example_registering_two_bone_meshes* in /examples shows extended example with visualizations along the way. Some example steps include:
### Spectral coordinates
Normalized spectral coordinates (eigenvectors) are calculated for each mesh. Below shows examples for the first 3 eigenvectors.| *Eigen Vector 1 - Fiedler vector* | *Eigen Vector 2* | *Eigen Vector 3* |
| :---: | :---: | :---: |
|![](https://raw.githubusercontent.com/gattia/pyfocusr/master/images/eig_vec_1_fiedler.png) | ![](https://raw.githubusercontent.com/gattia/pyfocusr/master/images/eig_vec_2.png) | ![](https://raw.githubusercontent.com/gattia/pyfocusr/master/images/eig_vec_3.png) |Next, the spectral coordinates (eigenvectors) for each node of the mesh (shown above) are used as xyz positions and are aligned.
####
![](https://raw.githubusercontent.com/gattia/pyfocusr/master/images/ezgif.com-gif-maker.gif)The following includes the meshes at various steps of the registration process as well as one mesh calculated as the average of the source & target.
|*Source Mesh* | *Target Mesh* |
|:---: |:---: |
|![](https://raw.githubusercontent.com/gattia/pyfocusr/master/images/source.png) | ![](https://raw.githubusercontent.com/gattia/pyfocusr/master/images/target.png) |
|*Source Transformed to Target* | *Average Mesh* |
| ![](https://raw.githubusercontent.com/gattia/pyfocusr/master/images/mesh_transformed_to_target.png) | ![](https://raw.githubusercontent.com/gattia/pyfocusr/master/images/average_mesh.png) |MIT License.