# Welcome to radioSphere
[![license](https://img.shields.io/badge/license-GPLv3-blue.svg)](https://gricad-gitlab.univ-grenoble-alpes.fr/ttk/radioSphere/-/blob/main/LICENSE.md)
[![pipeline status](https://gricad-gitlab.univ-grenoble-alpes.fr/ttk/radioSphere/badges/main/pipeline.svg)](https://gricad-gitlab.univ-grenoble-alpes.fr/ttk/radioSphere/-/pipelines)
[![pypi](https://badge.fury.io/py/radioSphere.svg)](https://pypi.org/project/radioSphere/)
[Join the chat room for support here.](https://matrix.to/#/#radioSphere:matrix.org)
This project contains a series of tools for the analysis of divergent radiographs containing spherical particles, in particular to measure 3D positions from *a single radiograph* like this one:
![Sample Radiograph](https://gricad-gitlab.univ-grenoble-alpes.fr/ttk/radioSphere/-/raw/main/figures/nano/sample.jpg "Radiography of a small collection of same-size spheres")
The reconstruction technique proposed is a two-step approach:
- **Step 1**: is a technique called `tomopack` which is an FFT-based pattern matching approach.
It uses a template image, or "structuring element" that we call ψ to pick out spheres.
Since the size of ψ needs to be very close to the correct size, this allows us to distinguish different sized projections of spheres.
- **Step 2**: Position optimisation: Starting from a guess of particle positions, the projection is computed and compared to the measured projection. Particle positions are modified iteratively in order to minimise the difference between computed projection and measured one.
Geometry in `radioSphere` is everything: the coordinate systems defined are as follows:
![Geometry](figures/projectedCoords_v2.png "Coordinate Systems")
See the [online documentation](https://ttk.gricad-pages.univ-grenoble-alpes.fr/radioSphere/) to learn about the functions.
## Contributors
The technique has been developed by Edward Andò (EPFL), [Benjy Marks](http://www.benjymarks.com/), and Stéphane Roux (CNRS) and published in [Measurement Science and Technology](https://doi.org/10.1088/1361-6501/abfbfe).
The technique has been developed thanks to UGA Tec21 funding further by Olga Stamati (ESRF), resulting in a publication in [The Journal of Multiphase Flow](https://doi.org/10.1016/j.ijmultiphaseflow.2023.104406), and by Leonard Turpin (Diamond).
The numba projector was contributed by [Youssef Haouchat](https://github.com/HaouchatY) (EPFL),which is faster than the original C code and allows us to distribute the package on pypi, thanks!
## Notes on the repository
- `src/radioSphere`: this folder contains the core functions of radioSphere:
- `detectSpheres`: functions related to `tomopack` (Step 1)
- `optimisePositions`: functions related to the optimiser (Step 2)
- `projectSphere`: The tools to create projections (units mm)
- `tests`: contains tests to test the functionality of what is in tools
- `examples` and `paper/figureScripts`: examples of the use of `radioSphere` on both synthetic and experimental data
- `data`: where the presented experimental and synthetic data is stored to run the examples
- `figures`: figures for paper and this website
- `paper`: will contain final sources to the paper
- `presentations`: sources for presentations given about this topic
## Installing radioSphere
### For users:
`pip install radioSphere`
### For developers:
Please clone this repository once checked out, activate your virtual environment, and then:
`pip install -e ".[dev]"`
run the tests to make sure everything is OK:
`pytest`
Raw data
{
"_id": null,
"home_page": "",
"name": "radioSphere",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.7",
"maintainer_email": "Edward And\u00f2 <edward.ando@epfl.ch>, Benjy Marks <benjy.marks@sydney.edu.au>",
"keywords": "reconstruction,deconvolution,spheres,image analysis,synthetic images",
"author": "",
"author_email": "Edward And\u00f2 <edward.ando@epfl.ch>, Benjy Marks <benjy.marks@sydney.edu.au>",
"download_url": "https://files.pythonhosted.org/packages/8a/00/6cd1512a952d5e0b71929b3691feddd75cd1cd315c0c81fe7ac7eb04ad6d/radioSphere-2.0.1.tar.gz",
"platform": null,
"description": "# Welcome to radioSphere\n\n[![license](https://img.shields.io/badge/license-GPLv3-blue.svg)](https://gricad-gitlab.univ-grenoble-alpes.fr/ttk/radioSphere/-/blob/main/LICENSE.md)\n[![pipeline status](https://gricad-gitlab.univ-grenoble-alpes.fr/ttk/radioSphere/badges/main/pipeline.svg)](https://gricad-gitlab.univ-grenoble-alpes.fr/ttk/radioSphere/-/pipelines)\n[![pypi](https://badge.fury.io/py/radioSphere.svg)](https://pypi.org/project/radioSphere/)\n\n[Join the chat room for support here.](https://matrix.to/#/#radioSphere:matrix.org)\n\nThis project contains a series of tools for the analysis of divergent radiographs containing spherical particles, in particular to measure 3D positions from *a single radiograph* like this one:\n\n![Sample Radiograph](https://gricad-gitlab.univ-grenoble-alpes.fr/ttk/radioSphere/-/raw/main/figures/nano/sample.jpg \"Radiography of a small collection of same-size spheres\")\n\nThe reconstruction technique proposed is a two-step approach:\n\n - **Step 1**: is a technique called `tomopack` which is an FFT-based pattern matching approach.\n It uses a template image, or \"structuring element\" that we call \u03c8 to pick out spheres.\n Since the size of \u03c8 needs to be very close to the correct size, this allows us to distinguish different sized projections of spheres.\n\n - **Step 2**: Position optimisation: Starting from a guess of particle positions, the projection is computed and compared to the measured projection. Particle positions are modified iteratively in order to minimise the difference between computed projection and measured one.\n\nGeometry in `radioSphere` is everything: the coordinate systems defined are as follows:\n\n![Geometry](figures/projectedCoords_v2.png \"Coordinate Systems\")\n\nSee the [online documentation](https://ttk.gricad-pages.univ-grenoble-alpes.fr/radioSphere/) to learn about the functions.\n\n## Contributors\n\nThe technique has been developed by Edward And\u00f2 (EPFL), [Benjy Marks](http://www.benjymarks.com/), and St\u00e9phane Roux (CNRS) and published in [Measurement Science and Technology](https://doi.org/10.1088/1361-6501/abfbfe).\n\nThe technique has been developed thanks to UGA Tec21 funding further by Olga Stamati (ESRF), resulting in a publication in [The Journal of Multiphase Flow](https://doi.org/10.1016/j.ijmultiphaseflow.2023.104406), and by Leonard Turpin (Diamond).\n\nThe numba projector was contributed by [Youssef Haouchat](https://github.com/HaouchatY) (EPFL),which is faster than the original C code and allows us to distribute the package on pypi, thanks!\n\n\n## Notes on the repository\n\n - `src/radioSphere`: this folder contains the core functions of radioSphere:\n\n - `detectSpheres`: functions related to `tomopack` (Step 1)\n\n - `optimisePositions`: functions related to the optimiser (Step 2)\n\n - `projectSphere`: The tools to create projections (units mm)\n\n - `tests`: contains tests to test the functionality of what is in tools\n\n - `examples` and `paper/figureScripts`: examples of the use of `radioSphere` on both synthetic and experimental data\n\n - `data`: where the presented experimental and synthetic data is stored to run the examples\n\n - `figures`: figures for paper and this website\n\n - `paper`: will contain final sources to the paper\n\n - `presentations`: sources for presentations given about this topic\n\n## Installing radioSphere\n\n### For users:\n`pip install radioSphere`\n\n\n### For developers:\nPlease clone this repository once checked out, activate your virtual environment, and then:\n`pip install -e \".[dev]\"`\n\nrun the tests to make sure everything is OK:\n`pytest`\n\n\n",
"bugtrack_url": null,
"license": "GPLv3",
"summary": "Software for the Practical Analysis of Materials",
"version": "2.0.1",
"project_urls": {
"Blog": "https://medium.com/@RadioSphere",
"Repository": "https://gricad-gitlab.univ-grenoble-alpes.fr/ttk/radioSphere"
},
"split_keywords": [
"reconstruction",
"deconvolution",
"spheres",
"image analysis",
"synthetic images"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "f641c84ae5f81b911f3fe33816d41ef34af099c55d29d18f7a7bb3ebbccf86a7",
"md5": "46c3040d15f17a9c486cf0663c77a749",
"sha256": "3f714014eb024dd3af44b1acbf6a4097ad517ad27cac0d4bad1e713f4dbc5261"
},
"downloads": -1,
"filename": "radioSphere-2.0.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "46c3040d15f17a9c486cf0663c77a749",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.7",
"size": 65121,
"upload_time": "2023-07-26T11:13:42",
"upload_time_iso_8601": "2023-07-26T11:13:42.115606Z",
"url": "https://files.pythonhosted.org/packages/f6/41/c84ae5f81b911f3fe33816d41ef34af099c55d29d18f7a7bb3ebbccf86a7/radioSphere-2.0.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "8a006cd1512a952d5e0b71929b3691feddd75cd1cd315c0c81fe7ac7eb04ad6d",
"md5": "0ebd5d9129d31b994889fc07daf83c21",
"sha256": "e4f8a600dcbed4a401f61b86f3cdfe66fd8fda98fdbf4d6eafdaf9016f59135f"
},
"downloads": -1,
"filename": "radioSphere-2.0.1.tar.gz",
"has_sig": false,
"md5_digest": "0ebd5d9129d31b994889fc07daf83c21",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.7",
"size": 629223,
"upload_time": "2023-07-26T11:13:44",
"upload_time_iso_8601": "2023-07-26T11:13:44.415889Z",
"url": "https://files.pythonhosted.org/packages/8a/00/6cd1512a952d5e0b71929b3691feddd75cd1cd315c0c81fe7ac7eb04ad6d/radioSphere-2.0.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-07-26 11:13:44",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "radiosphere"
}