# PyFOCUSR
![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)<br>
![Build Status](https://github.com/gattia/pyfocusr/actions/workflows/build-test.yml/badge.svg?branch=master)<br>
|[Documentation](https://anthonygattiphd.com/pyfocusr/)|
Python implementation of the FOCUSR <br>
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<br>
[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<br>
An open-source version of the manuscript can be found here: https://tinyurl.com/tph4u7e<br>
[3] https://github.com/gattia/cycpd<br>
[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 <br>
[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.
Raw data
{
"_id": null,
"home_page": null,
"name": "pyfocusr",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.7",
"maintainer_email": null,
"keywords": "python, graph, laplacian, spectral coordinates, point cloud, registration, mesh, surface",
"author": null,
"author_email": "Anthony Gatti <anthony.a.gatti@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/cd/a5/0157b136bcb53060693128ac8120521e9b8e3faa205b3872b56c11fb32ad/pyfocusr-0.0.14.tar.gz",
"platform": null,
"description": "# PyFOCUSR\n![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)<br>\n![Build Status](https://github.com/gattia/pyfocusr/actions/workflows/build-test.yml/badge.svg?branch=master)<br>\n|[Documentation](https://anthonygattiphd.com/pyfocusr/)|\n\nPython implementation of the FOCUSR <br>\nFOCUSR = Feature Oriented Correspondence using Spectral Regularization and is described in [1]. \n\n# Introduction / Background\n\nThis 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. \n\n[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<br>\n\n[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<br>\n An open-source version of the manuscript can be found here: https://tinyurl.com/tph4u7e<br>\n\n[3] https://github.com/gattia/cycpd<br>\n\n[4] Lombaert H, Sporring J, Siddiqi K. Diffeomorphic Spectral Matching of Cortical Surfaces. In: Gee JC, Joshi S, Pohl KM, Wells WM, Z\u00f6llei 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 <br>\n\n[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\n\n\n# Installation\nIt is recommended that installtion is performed in a new environment. \n\n```bash\nconda create --name focusr python=3.7\ngit clone https://github.com/gattia/pyfocusr\ncd pyfocusr\n\n# install dependencies\nmake requirements\n\n# install pyfocusr\nmake install\n```\n\n# Examples\n\nJupyter notebook *Example_registering_two_bone_meshes* in /examples shows extended example with visualizations along the way. Some example steps include:\n\n### Spectral coordinates\nNormalized spectral coordinates (eigenvectors) are calculated for each mesh. Below shows examples for the first 3 eigenvectors. \n\n\n| *Eigen Vector 1 - Fiedler vector* | *Eigen Vector 2* | *Eigen Vector 3* |\n| :---: | :---: | :---: |\n|![](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) |\n\n\nNext, the spectral coordinates (eigenvectors) for each node of the mesh (shown above) are used as xyz positions and are aligned. \n#### \n![](https://raw.githubusercontent.com/gattia/pyfocusr/master/images/ezgif.com-gif-maker.gif)\n\n\nThe following includes the meshes at various steps of the registration process as well as one mesh calculated as the average of the source & target. \n\n|*Source Mesh* | *Target Mesh* |\n|:---: |:---: |\n|![](https://raw.githubusercontent.com/gattia/pyfocusr/master/images/source.png) | ![](https://raw.githubusercontent.com/gattia/pyfocusr/master/images/target.png) |\n|*Source Transformed to Target* | *Average Mesh* |\n| ![](https://raw.githubusercontent.com/gattia/pyfocusr/master/images/mesh_transformed_to_target.png) | ![](https://raw.githubusercontent.com/gattia/pyfocusr/master/images/average_mesh.png) |\n\n\nMIT License.\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Feature Oriented Correspondence Using Spectral Regularization",
"version": "0.0.14",
"project_urls": {
"Documentation": "https://anthonygattiphd.com/pyfocusr/",
"Homepage": "https://github.com/gattia/pyfocusr/"
},
"split_keywords": [
"python",
" graph",
" laplacian",
" spectral coordinates",
" point cloud",
" registration",
" mesh",
" surface"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "cda50157b136bcb53060693128ac8120521e9b8e3faa205b3872b56c11fb32ad",
"md5": "ddb5d0443b3580a854ee8eefc623fe8c",
"sha256": "d1dc7fe38d93a9327d90b65275ccb2da7eb030486671fc1a7580317ef94617cd"
},
"downloads": -1,
"filename": "pyfocusr-0.0.14.tar.gz",
"has_sig": false,
"md5_digest": "ddb5d0443b3580a854ee8eefc623fe8c",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.7",
"size": 13588397,
"upload_time": "2024-03-25T03:49:14",
"upload_time_iso_8601": "2024-03-25T03:49:14.806433Z",
"url": "https://files.pythonhosted.org/packages/cd/a5/0157b136bcb53060693128ac8120521e9b8e3faa205b3872b56c11fb32ad/pyfocusr-0.0.14.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-03-25 03:49:14",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "gattia",
"github_project": "pyfocusr",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [
{
"name": "matplotlib",
"specs": []
},
{
"name": "vtk",
"specs": []
},
{
"name": "itkwidgets",
"specs": []
},
{
"name": "notebook",
"specs": []
},
{
"name": "numpy",
"specs": []
},
{
"name": "scipy",
"specs": []
},
{
"name": "itk",
"specs": []
},
{
"name": "cycpd",
"specs": []
}
],
"lcname": "pyfocusr"
}