{ "info": { "author": "Casper van der Wel", "author_email": "caspervdw@gmail.com", "bugtrack_url": null, "classifiers": [], "description": "# pimsviewer\n[![Anaconda-Server Badge](https://anaconda.org/conda-forge/pimsviewer/badges/version.svg)](https://anaconda.org/conda-forge/pimsviewer)\n\nA graphical user interface (GUI) for PIMS (screenshot below)\n\nThis viewer was based on `skimage.viewer.CollectionViewer` ([docs](http://scikit-image.org/docs/dev/user_guide/viewer.html))\nand is able to work with N-dimensional image files that are opened by PIMS.\n\nAlso, it exposes a matplotlib plotting area on which images can be (dynamically)\nannotated, making use of the `Plugin` infrastructure.\n\n## Installation\n\nPimsviewer can be installed using conda:\n\n```\nconda install -c conda-forge pimsviewer\n```\n\nAlternatively, it can also be installed using pip:\n\n```\npip install pimsviewer \n```\n\n## Starting the viewer\n\nAfter installing the viewer, an executable `pimsviewer` is available. Simply run the command via your terminal/command line interface.\nIt is also possible to specify a reader. `pimsviewer --help` will list all installed readers, for example:\n\n```\n$ pimsviewer --help\nUsage: pimsviewer [OPTIONS] [FILE]\n\nOptions:\n --reader-class [ImageSequenceND|NorpixSeq|SpeStack|TiffStack_pil|MoviePyReader|ImageReaderND|ReaderSequence|ImageIOReader|ImageSequence|TiffStack_tifffile|TiffSeries|TiffStack_libtiff|BioformatsReader|PyAVReaderTimed|PyAVReaderIndexed|MM_TiffStack|ImageReader|FramesSequenceND|Cine]\n Reader with which to open the file.\n --help Show this message and exit.\n```\n\n## Using the viewer from Python\nYou can use the viewer in a Python script as follows:\n\n```\nfrom pimsviewer import Viewer\nviewer = Viewer()\nviewer.show()\n```\nOptionally you may include a reader:\n\n```\nimport pims\nfrom pimsviewer import Viewer\nviewer = Viewer(pims.open('path/to/file'))\nviewer.show()\n```\n\n## Example: evaluating the effect of a processing function\nThis example adds a processing function that adds an adjustable amount of noise\nto an image. The amount of noise is tunable with a slider, which is displayed\non the right of the image window.\n\n```\nimport numpy as np\nimport pims\nfrom pimsviewer import Viewer, ProcessPlugin, Slider\n\nreader = pims.open('path/to/file')\n\ndef add_noise(img, noise_level):\n return img + np.random.random(img.shape) * noise_level / 100 * img.max()\n\nAddNoise = ProcessPlugin(add_noise, 'Add noise', dock='right')\nAddNoise += Slider('noise_level', low=0, high=100, value=10,\n orientation='vertical')\nviewer = Viewer(reader) + AddNoise\nviewer.show()\n```\n\n## Example: annotating features on a video\nThis example annotates features that were obtained via trackpy onto a video.\n\n```\nimport trackpy as tp\nfrom pimsviewer import Viewer, AnnotatePlugin\nreader = pims.open('path/to/file')\nf = tp.batch(reader, diameter=15)\n(Viewer(reader) + AnnotatePlugin(f)).show()\n```\n\n## Example: selecting features on a video\nThis example annotates features on a video, allows to hide and move\nfeatures, and returns the adapted dataframe.\n\n```\nimport trackpy as tp\nfrom pimsviewer import Viewer, SelectionPlugin\nreader = pims.open('path/to/file')\nf = tp.batch(reader, diameter=15)\nf = tp.link_df(f, search_range=10)\nviewer = Viewer(reader) + SelectionPlugin(f)\nf_result = viewer.show()\n```\n\n## Example: designing a custom plotting function\nThis dynamically shows the effect of `tp.locate`.\n\n```\nimport trackpy as tp\nfrom pimsviewer import Viewer, Slider, PlottingPlugin\n\ndef locate_and_plot(image, radius, minmass, separation, ax):\n f = tp.locate(image, diameter=radius * 2 + 1, minmass=minmass,\n separation=separation)\n if len(f) == 0:\n return\n return ax.plot(f['x'], f['y'], markersize=15, markeredgewidth=2,\n markerfacecolor='none', markeredgecolor='r',\n marker='o', linestyle='none')\n\nreader = pims.open('path/to/file')\nLocate = PlottingPlugin(locate_and_plot, 'Locate', dock='right')\nLocate += Slider('radius', 2, 20, 7, value_type='int', orientation='vertical')\nLocate += Slider('separation', 1, 100, 7, value_type='float', orientation='vertical')\nLocate += Slider('minmass', 1, 10000, 100, value_type='int', orientation='vertical')\nviewer = Viewer(reader) + Locate\nviewer.show()\n```\n\n## Screenshot\n\n![Screenshot](/screenshot.png?raw=true)\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/soft-matter/pimsviewer", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "pimsviewer", "package_url": "https://pypi.org/project/pimsviewer/", "platform": "", "project_url": "https://pypi.org/project/pimsviewer/", "project_urls": { "Homepage": "https://github.com/soft-matter/pimsviewer" }, "release_url": "https://pypi.org/project/pimsviewer/1.1/", "requires_dist": [ "scikit-image (>=0.11)", "matplotlib", "pims (>=0.4)", "pillow", "click" ], "requires_python": "", "summary": "Viewer for Python IMage Sequence (PIMS).", "version": "1.1" }, "last_serial": 3949461, "releases": { "1.0": [ { "comment_text": "", "digests": { "md5": "623a81adcee7d486c6c1443db629e0e8", "sha256": "f78fc0d3431d4c9c19a5e20d05a429cce01fe9c645aa6da7c446b538e5a0473b" }, "downloads": -1, "filename": "pimsviewer-1.0.tar.gz", "has_sig": false, "md5_digest": "623a81adcee7d486c6c1443db629e0e8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18994, "upload_time": "2017-06-06T15:46:12", "url": "https://files.pythonhosted.org/packages/99/a9/95cfd2e45bef01dbf476a86b8dafa8f4c0c7d090cde147dd8b36e4b8b72b/pimsviewer-1.0.tar.gz" } ], "1.1": [ { "comment_text": "", "digests": { "md5": "7bdff7a90176c0a4a5994de3c74fd5af", "sha256": "deae4b2ae29f302e02104f11b999c494d686d1d2b887e6650e8303028f79e998" }, "downloads": -1, "filename": "pimsviewer-1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "7bdff7a90176c0a4a5994de3c74fd5af", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 24047, "upload_time": "2018-06-11T09:09:17", "url": "https://files.pythonhosted.org/packages/97/0e/3f3655d3ccdd90720cd5c201f4292fdc345758da55e1166a56b04a8adf95/pimsviewer-1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4f2c1998fc62b9a1dcd8d367d74b10be", "sha256": "7f9f41ed1c4e54fbe531aeda412a5b5f96c198faff24149088b1402507aee6ff" }, "downloads": -1, "filename": "pimsviewer-1.1.tar.gz", "has_sig": false, "md5_digest": "4f2c1998fc62b9a1dcd8d367d74b10be", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23709, "upload_time": "2018-06-11T09:09:18", "url": "https://files.pythonhosted.org/packages/eb/a3/6383f0c4525cfb8e19267121213489d86bab69a38b08b93699d4d7ed0c4a/pimsviewer-1.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "7bdff7a90176c0a4a5994de3c74fd5af", "sha256": "deae4b2ae29f302e02104f11b999c494d686d1d2b887e6650e8303028f79e998" }, "downloads": -1, "filename": "pimsviewer-1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "7bdff7a90176c0a4a5994de3c74fd5af", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 24047, "upload_time": "2018-06-11T09:09:17", "url": "https://files.pythonhosted.org/packages/97/0e/3f3655d3ccdd90720cd5c201f4292fdc345758da55e1166a56b04a8adf95/pimsviewer-1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4f2c1998fc62b9a1dcd8d367d74b10be", "sha256": "7f9f41ed1c4e54fbe531aeda412a5b5f96c198faff24149088b1402507aee6ff" }, "downloads": -1, "filename": "pimsviewer-1.1.tar.gz", "has_sig": false, "md5_digest": "4f2c1998fc62b9a1dcd8d367d74b10be", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23709, "upload_time": "2018-06-11T09:09:18", "url": "https://files.pythonhosted.org/packages/eb/a3/6383f0c4525cfb8e19267121213489d86bab69a38b08b93699d4d7ed0c4a/pimsviewer-1.1.tar.gz" } ] }