[![Documentation Status](https://readthedocs.org/projects/pyidi/badge/?version=latest)](https://pyidi.readthedocs.io/en/latest/?badge=latest)
![example workflow](https://github.com/ladisk/pyidi/actions/workflows/python_package_testing.yaml/badge.svg)
# pyidi
Image-based Displacement Identification (IDI) implementation in python.
See the [documentation](https://pyidi.readthedocs.io/en/latest/index.html) for `pyIDI`.
### Use Napari UI for quick displacement identification:
<img src="docs/source/quick_start/gifs/napari_full_sof.gif" width="800" />
# BASIC USAGE:
Create an instance:
```
video = pyidi.pyIDI(input_file='video.cih')
```
The `pyIDI` method works with various formats: `.cih`, `.cihx`, `.png`, `.avi` etc. Additionally, it can also work with `numpy.ndarray` as input.
If an array is passed, it must have a shape of: ``(n time points, image height, image width)``.
Set the points where displacements will be determined:
```
p = np.array([[0, 1], [1, 1], [2, 1]]) # example of points
video.set_points(points=p)
```
Or use point selection UI to set individual points or grid inside selected area. For more information about UI see [documentation](https://pyidi.readthedocs.io/en/quick_start/napari.html). Launch viewer with:
```
video.gui()
```
The method of identification has to be specified:
```
video.set_method(method='sof', **method_kwargs)
```
After points are set, displacements can be calculated (using method, set in `set_method`):
```
displacements = video.get_displacements()
```
Multiprocessing can also be used by passing the `processes` argument:
```
displacements = video.get_displacements(processes=4)
```
# DEVELOPER GUIDELINES:
* Add _name_of_method.py with class that inherits after `IDIMethods`
* This class must have methods:
* `calculate_displacements` with attribute `displacements`
* `get_points` (static method - sets attribute video.points)
* In `pyIDI` add a new method of identification in `avaliable_methods` dictionary.
# Citing
If you are using the `pyIDI` package for your research, consider citing our articles:
- Čufar, K., Slavič, J., & Boltežar, M. (2024). **Mode-shape magnification in high-speed camera measurements**. Mechanical Systems and Signal Processing, 213, 111336. https://doi.org/10.1016/J.YMSSP.2024.111336
- Zaletelj, K., Gorjup, D., Slavič, J., & Boltežar, M. (2023). **Multi-level curvature-based parametrization and model updating using a 3D full-field response**. Mechanical Systems and Signal Processing, 187, 109927. https://doi.org/10.1016/j.ymssp.2022.109927
- Zaletelj, K., Slavič, J., & Boltežar, M. (2022). **Full-field DIC-based model updating for localized parameter identification**. Mechanical Systems and Signal Processing, 164. https://doi.org/10.1016/j.ymssp.2021.108287
- Gorjup, D., Slavič, J., & Boltežar, M. (2019). **Frequency domain triangulation for full-field 3D operating-deflection-shape identification**. Mechanical Systems and Signal Processing, 133. https://doi.org/10.1016/j.ymssp.2019.106287
[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.4017153.svg)](https://doi.org/10.5281/zenodo.4017153)
[![Build Status](https://travis-ci.com/ladisk/pyidi.svg?branch=master)](https://travis-ci.com/ladisk/pyidi)
Raw data
{
"_id": null,
"home_page": null,
"name": "pyidi",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.10",
"maintainer_email": "\"Klemen Zaletelj, Domen Gorjup, Janko Slavi\u010d et al.\" <janko.slavic@fs.uni-lj.si>",
"keywords": "computer vision, dic, displacement identification, gradient-based",
"author": null,
"author_email": "\"Klemen Zaletelj, Domen Gorjup, Janko Slavi\u010d et al.\" <janko.slavic@fs.uni-lj.si>",
"download_url": "https://files.pythonhosted.org/packages/d9/af/6d90d9e83b45dbd738cdba0cf071abdbe2e19ab49d5f645e93e6d14b26bc/pyidi-0.30.2.tar.gz",
"platform": null,
"description": "[![Documentation Status](https://readthedocs.org/projects/pyidi/badge/?version=latest)](https://pyidi.readthedocs.io/en/latest/?badge=latest)\n![example workflow](https://github.com/ladisk/pyidi/actions/workflows/python_package_testing.yaml/badge.svg)\n\n# pyidi\nImage-based Displacement Identification (IDI) implementation in python.\n\nSee the [documentation](https://pyidi.readthedocs.io/en/latest/index.html) for `pyIDI`.\n\n### Use Napari UI for quick displacement identification:\n<img src=\"docs/source/quick_start/gifs/napari_full_sof.gif\" width=\"800\" />\n\n\n# BASIC USAGE:\nCreate an instance:\n```\nvideo = pyidi.pyIDI(input_file='video.cih')\n```\n\nThe `pyIDI` method works with various formats: `.cih`, `.cihx`, `.png`, `.avi` etc. Additionally, it can also work with `numpy.ndarray` as input.\nIf an array is passed, it must have a shape of: ``(n time points, image height, image width)``.\n\nSet the points where displacements will be determined:\n```\np = np.array([[0, 1], [1, 1], [2, 1]]) # example of points\nvideo.set_points(points=p)\n```\nOr use point selection UI to set individual points or grid inside selected area. For more information about UI see [documentation](https://pyidi.readthedocs.io/en/quick_start/napari.html). Launch viewer with:\n\n```\nvideo.gui()\n```\n\nThe method of identification has to be specified:\n```\nvideo.set_method(method='sof', **method_kwargs)\n```\nAfter points are set, displacements can be calculated (using method, set in `set_method`):\n```\ndisplacements = video.get_displacements()\n```\nMultiprocessing can also be used by passing the `processes` argument:\n```\ndisplacements = video.get_displacements(processes=4)\n```\n\n# DEVELOPER GUIDELINES:\n* Add _name_of_method.py with class that inherits after `IDIMethods`\n* This class must have methods:\n\t* `calculate_displacements` with attribute `displacements`\n\t* `get_points` (static method - sets attribute video.points)\n* In `pyIDI` add a new method of identification in `avaliable_methods` dictionary.\n\n# Citing\nIf you are using the `pyIDI` package for your research, consider citing our articles:\n- \u010cufar, K., Slavi\u010d, J., & Bolte\u017ear, M. (2024). **Mode-shape magnification in high-speed camera measurements**. Mechanical Systems and Signal Processing, 213, 111336. https://doi.org/10.1016/J.YMSSP.2024.111336\n- Zaletelj, K., Gorjup, D., Slavi\u010d, J., & Bolte\u017ear, M. (2023). **Multi-level curvature-based parametrization and model updating using a 3D full-field response**. Mechanical Systems and Signal Processing, 187, 109927. https://doi.org/10.1016/j.ymssp.2022.109927\n- Zaletelj, K., Slavi\u010d, J., & Bolte\u017ear, M. (2022). **Full-field DIC-based model updating for localized parameter identification**. Mechanical Systems and Signal Processing, 164. https://doi.org/10.1016/j.ymssp.2021.108287\n- Gorjup, D., Slavi\u010d, J., & Bolte\u017ear, M. (2019). **Frequency domain triangulation for full-field 3D operating-deflection-shape identification**. Mechanical Systems and Signal Processing, 133. https://doi.org/10.1016/j.ymssp.2019.106287\n\n[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.4017153.svg)](https://doi.org/10.5281/zenodo.4017153)\n[![Build Status](https://travis-ci.com/ladisk/pyidi.svg?branch=master)](https://travis-ci.com/ladisk/pyidi)\n\n",
"bugtrack_url": null,
"license": null,
"summary": "Python Image Displacement Identification.",
"version": "0.30.2",
"project_urls": {
"documentation": "https://pyidi.readthedocs.io/en/latest/",
"homepage": "https://github.com/ladisk/pyidi",
"source": "https://github.com/ladisk/pyidi"
},
"split_keywords": [
"computer vision",
" dic",
" displacement identification",
" gradient-based"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "093fb4f1cf779f9578c7da065bd12112689d7937cb37cfacdd8cef4cc53b06e7",
"md5": "070342131f7ed844a521411cd47a9362",
"sha256": "079c823972cd9031dfa0e09043c079da62df791c549932de51266b9912bbe579"
},
"downloads": -1,
"filename": "pyidi-0.30.2-py3-none-any.whl",
"has_sig": false,
"md5_digest": "070342131f7ed844a521411cd47a9362",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.10",
"size": 53251,
"upload_time": "2024-05-20T09:21:50",
"upload_time_iso_8601": "2024-05-20T09:21:50.346727Z",
"url": "https://files.pythonhosted.org/packages/09/3f/b4f1cf779f9578c7da065bd12112689d7937cb37cfacdd8cef4cc53b06e7/pyidi-0.30.2-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "d9af6d90d9e83b45dbd738cdba0cf071abdbe2e19ab49d5f645e93e6d14b26bc",
"md5": "5e835bc885c77cae697cda2d17495769",
"sha256": "6e79c01c2236c5279d693120af740fcee2abd19dd5f4db87418c5d30ba512b35"
},
"downloads": -1,
"filename": "pyidi-0.30.2.tar.gz",
"has_sig": false,
"md5_digest": "5e835bc885c77cae697cda2d17495769",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.10",
"size": 42370,
"upload_time": "2024-05-20T09:21:52",
"upload_time_iso_8601": "2024-05-20T09:21:52.311478Z",
"url": "https://files.pythonhosted.org/packages/d9/af/6d90d9e83b45dbd738cdba0cf071abdbe2e19ab49d5f645e93e6d14b26bc/pyidi-0.30.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-05-20 09:21:52",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "ladisk",
"github_project": "pyidi",
"travis_ci": true,
"coveralls": false,
"github_actions": true,
"requirements": [],
"lcname": "pyidi"
}