Tags: jni/skan
Tags
This is a minor step forward from v0.12.x which adds a new API: `skan.csr.PathGraph` is a more abstract version of a Skeleton, which only needs a pixel adjacency matrix to work, rather than a full skeleton image. The motivations for PathGraph are numerous: - a simpler dataclass object that doesn't require complex instantiation logic. See e.g. Glyph's [Stop Writing `__init__` Methods](https://blog.glyph.im/2025/04/stop-writing-init-methods.html) - making it easier to compute the pixel adjacency matrix separately, for example [using dask when the images don't fit in memory](https://blog.dask.org/2021/05/07/skeleton-analysis), and having an API for which you can provide this matrix (rather than having to modify a Skeleton instance in-place). - allowing more flexible use cases, for example to use skan to measure tracks, as in [live-image-tracking-tools/traccuracy#251](live-image-tracking-tools/traccuracy#251). Due to some urgent need to use this code in the wild, this release doesn't provide any documentation examples. Indeed, the new class may see some changes in upcoming releases based on user feedback. See the discussion in [#246](#246) for details. Look for further refinement of this idea in the 0.13.x releases! - [#246](#246): New API: PathGraph dataclass
This minor release updates the minimum numba version to 0.58 to fix a pip resolution error ([issue #248](#248), fixed by [PR #249](#249), with thanks to new contributor [Alister Burt](https://github.com/alisterburt)!). This minor release added an important bug fix from Neil Shephard ([#235](#235)), preventing a crash when working with float32 images. This minor release fixed issues with the version switcher in the documentation. This release adds NumPy 2.0 compatibility (while remaining compatible with 1.x) ([#229](#229)). It also lays the groundwork for new skeleton editing features with bidirectional Skeleton to NetworkX conversion functions ([#224](#224). We also have a minor deprecation that should improve quality of life in the future: column names in the summary dataframe can now use `_` as the separator (instead of `-`), which allows one to use the pandas attribute access for columns (for example, `summary.branch_distance` instead of `summary['branch-distance']`. Use the `separator='_'` keyword argument to `summarize` to take advantage of this feature (which will become the default in a future version), or `separator='-'` to maintain the current behavior even when new versions come out ([#215](#215)). The napari plugin now lets you make a Shapes layer fully backed by a Skeleton dataset, including coloring the edges by features in the summary table ([#201](#201)). Thanks to [Neil Shephard](https://github.com/ns-rse), [James Ryan](https://github.com/jamesyan-git), [Jarod Hanko](https://github.com/jarodhanko-crafco), and [Tim Monko](https://github.com/TimMonko) for their contributions to this release! 🙏 You can find the full list of changes below: - [#215](#215): The separators used for column names are configurable, and will transition to `_` in the future. This is to make it easier to use the dataframe attribute interface, e.g. `summary.branch_distance` - [#229](#229): NumPy 2 compatibility - [#224](#224): Create a networkx summary graph from a Skeleton - [#201](#201): Add napari widget to generate shapes layer from a skeletonized label layer - [#220](#220): Allow mean pixel value calculation from integer values, not just floats - [#212](#212): Improved error reporting and tests for prune_paths methods - [#221](#221): Fix documentation builds - [#210](#210): Cache skeleton_image shape for use by the path_label_image method - [#231](#231): Add 0.12 release notes - [#232](#232): Use python -m build for wheel and sdist - [#218](#218): Fix pyproject.toml metadata formatting - [#217](#217): Migrate from setup.cfg to pyproject.toml
This minor release added an important bug fix from Neil Shephard ([#235](#235)), preventing a crash when working with float32 images. This minor release fixed issues with the version switcher in the documentation. This release adds NumPy 2.0 compatibility (while remaining compatible with 1.x) ([#229](#229)). It also lays the groundwork for new skeleton editing features with bidirectional Skeleton to NetworkX conversion functions ([#224](#224). We also have a minor deprecation that should improve quality of life in the future: column names in the summary dataframe can now use `_` as the separator (instead of `-`), which allows one to use the pandas attribute access for columns (for example, `summary.branch_distance` instead of `summary['branch-distance']`. Use the `separator='_'` keyword argument to `summarize` to take advantage of this feature (which will become the default in a future version), or `separator='-'` to maintain the current behavior even when new versions come out ([#215](#215)). The napari plugin now lets you make a Shapes layer fully backed by a Skeleton dataset, including coloring the edges by features in the summary table ([#201](#201)). Thanks to [Neil Shephard](https://github.com/ns-rse), [James Ryan](https://github.com/jamesyan-git), [Jarod Hanko](https://github.com/jarodhanko-crafco), and [Tim Monko](https://github.com/TimMonko) for their contributions to this release! 🙏 You can find the full list of changes below: - [#215](#215): The separators used for column names are configurable, and will transition to `_` in the future. This is to make it easier to use the dataframe attribute interface, e.g. `summary.branch_distance` - [#229](#229): NumPy 2 compatibility - [#224](#224): Create a networkx summary graph from a Skeleton - [#201](#201): Add napari widget to generate shapes layer from a skeletonized label layer - [#220](#220): Allow mean pixel value calculation from integer values, not just floats - [#212](#212): Improved error reporting and tests for prune_paths methods - [#221](#221): Fix documentation builds - [#210](#210): Cache skeleton_image shape for use by the path_label_image method - [#231](#231): Add 0.12 release notes - [#232](#232): Use python -m build for wheel and sdist - [#218](#218): Fix pyproject.toml metadata formatting - [#217](#217): Migrate from setup.cfg to pyproject.toml
This release adds NumPy 2.0 compatibility (while remaining compatible… … with 1.x) ([#229](#229)). It also lays the groundwork for new skeleton editing features with bidirectional Skeleton to NetworkX conversion functions ([#224](#224). We also have a minor deprecation that should improve quality of life in the future: column names in the summary dataframe can now use `_` as the separator (instead of `-`), which allows one to use the pandas attribute access for columns (for example, `summary.branch_distance` instead of `summary['branch-distance']`. Use the `separator='_'` keyword argument to `summarize` to take advantage of this feature (which will become the default in a future version), or `separator='-'` to maintain the current behavior even when new versions come out ([#215](#215)). The napari plugin now lets you make a Shapes layer fully backed by a Skeleton dataset, including coloring the edges by features in the summary table ([#201](#201)). Thanks to [Neil Shephard](https://github.com/ns-rse), [James Ryan](https://github.com/jamesyan-git), [Jarod Hanko](https://github.com/jarodhanko-crafco), and [Tim Monko](https://github.com/TimMonko) for their contributions to this release! 🙏 You can find the full list of changes below: - [#215](#215): The separators used for column names are configurable, and will transition to `_` in the future. This is to make it easier to use the dataframe attribute interface, e.g. `summary.branch_distance` - [#229](#229): NumPy 2 compatibility - [#224](#224): Create a networkx summary graph from a Skeleton - [#201](#201): Add napari widget to generate shapes layer from a skeletonized label layer - [#220](#220): Allow mean pixel value calculation from integer values, not just floats - [#212](#212): Improved error reporting and tests for prune_paths methods - [#221](#221): Fix documentation builds - [#210](#210): Cache skeleton_image shape for use by the path_label_image method - [#231](#231): Add 0.12 release notes - [#232](#232): Use python -m build for wheel and sdist - [#218](#218): Fix pyproject.toml metadata formatting - [#217](#217): Migrate from setup.cfg to pyproject.toml
This release adds NumPy 2.0 compatibility (while remaining compatible… … with 1.x) ([#229](#229)). It also lays the groundwork for new skeleton editing features with bidirectional Skeleton to NetworkX conversion functions ([#224](#224). We also have a minor deprecation that should improve quality of life in the future: column names in the summary dataframe can now use `_` as the separator (instead of `-`), which allows one to use the pandas attribute access for columns (for example, `summary.branch_distance` instead of `summary['branch-distance']`. Use the `separator='_'` keyword argument to `summarize` to take advantage of this feature (which will become the default in a future version), or `separator='-'` to maintain the current behavior even when new versions come out ([#215](#215)). The napari plugin now lets you make a Shapes layer fully backed by a Skeleton dataset, including coloring the edges by features in the summary table ([#201](#201)). Thanks to [Neil Shephard](https://github.com/ns-rse), [James Ryan](https://github.com/jamesyan-git), [Jarod Hanko](https://github.com/jarodhanko-crafco), and [Tim Monko](https://github.com/TimMonko) for their contributions to this release! 🙏 You can find the full list of changes below: - [#215](#215): The separators used for column names are configurable, and will transition to `_` in the future. This is to make it easier to use the dataframe attribute interface, e.g. `summary.branch_distance` - [#229](#229): NumPy 2 compatibility - [#224](#224): Create a networkx summary graph from a Skeleton - [#201](#201): Add napari widget to generate shapes layer from a skeletonized label layer - [#220](#220): Allow mean pixel value calculation from integer values, not just floats - [#212](#212): Improved error reporting and tests for prune_paths methods - [#221](#221): Fix documentation builds - [#210](#210): Cache skeleton_image shape for use by the path_label_image method - [#231](#231): Add 0.12 release notes - [#232](#232): Use python -m build for wheel and sdist - [#218](#218): Fix pyproject.toml metadata formatting - [#217](#217): Migrate from setup.cfg to pyproject.toml
This release adds NumPy 2.0 compatibility (while remaining compatible… … with 1.x) ([#229](#229)). It also lays the groundwork for new skeleton editing features with bidirectional Skeleton to NetworkX conversion functions ([#224](#224). We also have a minor deprecation that should improve quality of life in the future: column names in the summary dataframe can now use `_` as the separator (instead of `-`), which allows one to use the pandas attribute access for columns (for example, `summary.branch_distance` instead of `summary['branch-distance']`. Use the `separator='_'` keyword argument to `summarize` to take advantage of this feature (which will become the default in a future version), or `separator='-'` to maintain the current behavior even when new versions come out ([#215](#215)). The napari plugin now lets you make a Shapes layer fully backed by a Skeleton dataset, including coloring the edges by features in the summary table ([#201](#201)). Thanks to [Neil Shephard](https://github.com/ns-rse), [James Ryan](https://github.com/jamesyan-git), [Jarod Hanko](https://github.com/jarodhanko-crafco), and [Tim Monko](https://github.com/TimMonko) for their contributions to this release! 🙏 You can find the full list of changes below: - [#215](#215): The separators used for column names are configurable, and will transition to `_` in the future. This is to make it easier to use the dataframe attribute interface, e.g. `summary.branch_distance` - [#229](#229): NumPy 2 compatibility - [#224](#224): Create a networkx summary graph from a Skeleton - [#201](#201): Add napari widget to generate shapes layer from a skeletonized label layer - [#220](#220): Allow mean pixel value calculation from integer values, not just floats - [#212](#212): Improved error reporting and tests for prune_paths methods - [#221](#221): Fix documentation builds - [#210](#210): Cache skeleton_image shape for use by the path_label_image method - [#231](#231): Add 0.12 release notes - [#232](#232): Use python -m build for wheel and sdist - [#218](#218): Fix pyproject.toml metadata formatting - [#217](#217): Migrate from setup.cfg to pyproject.toml
This release adds NumPy 2.0 compatibility (while remaining compatible… … with 1.x) ([#229](#229)). It also lays the groundwork for new skeleton editing features with bidirectional Skeleton to NetworkX conversion functions ([#224](#224). We also have a minor deprecation that should improve quality of life in the future: column names in the summary dataframe can now use `_` as the separator (instead of `-`), which allows one to use the pandas attribute access for columns (for example, `summary.branch_distance` instead of `summary['branch-distance']`. Use the `separator='_'` keyword argument to `summarize` to take advantage of this feature (which will become the default in a future version), or `separator='-'` to maintain the current behavior even when new versions come out ([#215](#215)). The napari plugin now lets you make a Shapes layer fully backed by a Skeleton dataset, including coloring the edges by features in the summary table ([#201](#201)). Thanks to [Neil Shephard](https://github.com/ns-rse), [James Ryan](https://github.com/jamesyan-git), [Jarod Hanko](https://github.com/jarodhanko-crafco), and [Tim Monko](https://github.com/TimMonko) for their contributions to this release! 🙏 You can find the full list of changes below: - [#215](#215): The separators used for column names are configurable, and will transition to `_` in the future. This is to make it easier to use the dataframe attribute interface, e.g. `summary.branch_distance` - [#229](#229): NumPy 2 compatibility - [#224](#224): Create a networkx summary graph from a Skeleton - [#201](#201): Add napari widget to generate shapes layer from a skeletonized label layer - [#220](#220): Allow mean pixel value calculation from integer values, not just floats - [#212](#212): Improved error reporting and tests for prune_paths methods - [#221](#221): Fix documentation builds - [#210](#210): Cache skeleton_image shape for use by the path_label_image method - [#231](#231): Add 0.12 release notes - [#218](#218): Fix pyproject.toml metadata formatting - [#217](#217): Migrate from setup.cfg to pyproject.toml
This is a bugfix release. It adds napari.yaml to the manifest so that it is correctly shipped with skan, and it fixes compatibility issues with more recent versions of openpyxl. With thanks to [James Ryan](https://github.com/jamesyan-git)! - [#202](#202): 🐞 Bug Fix: Include napari.yaml in build - [#203](#203): Remove deprecated code from `io.py` This release of skan incorporates several bug fixes, new API features, and documentation improvements. It also finalizes an API change started in 0.10.0: now junction points are always resolved using a minimum spanning tree, and the `uniquify_junctions` and `junction_mode` arguments to `Skeleton` are deprecated (see our [FAQ](../faq)). Finally, this is the first release containing a [napari plugin](https://napari.org/stable/plugins/index.html)! Currently all it does is skeletonize a Labels layer, but this is just the beginning for GUI-based skeleton analysis. Thanks to everyone who has helped make this release possible, including [Kushaan Gupta](https://github.com/kushaangupta), [Lucy Liu](https://github.com/lucyleeow), [Ryan Ly](https://github.com/rly), [James Ryan](https://github.com/jamesyan-git), and [Simon Savary](https://github.com/ssavary)! Not to speak of all the contributors who make our upstream libraries possible! 🙏 - [#143](#143): the `unique_junctions` and `junction_mode` keyword arguments are removed. Junctions are always resolved by finding the minimum spanning tree of the junction pixels. This PR also speeds up building of the pixel graph. - [#150](#150), [#164](#164): add Sholl analysis. (Thanks to [Kushaan Gupta](https://github.com/kushaangupta) for the collaboration that led to this feature!) - [#184](#184): add napari plugin. - [#152](#152): Some pixel graphs had missing paths in their skeletons because of a mistake in how the graphs were traversed. Thanks [Simon Savary](https://github.com/ssavary) for the detailed report that led to the fix! ([#147](#147)) - [#193](#193), [#183](#183): fix the calculation of the buffer size needed for the pixel path graph in the presence of 0-degree nodes (isolated pixels). - [#135](#135): the `unique_junctions` keyword argument to the Skeleton class is deprecated. Use instead `junction_mode`. Note however that this option will be removed in 0.11, so you should pin your skan dependency if you need this behavior. - [#139](#139): the skan GUI and corresponding skan.gui module and skan command have all been removed. A new, much more sophisticated napari plugin is in development at https://github.com/kevinyamauchi/napari-skeleton-curator and will be folded into a future version of skan (probably v0.11). - [#155](#155), [#156](#156), [#159](#159): Add documentation on 3D display of skeletons in napari. - [#173](#173), [#175](https://github.com/jni/skan/pull/), [#177](#177): support multiple versions of documentation. (!) (This series of PRs in particular is close to my heart because deprecations and API changes like those listed above are much more painful if the old versions are just *erased*! Thanks to [Lucy Liu](https://github.com/lucyleeow) for her efforts and expertise here!) - [#194](#194), [#195](#195): overhaul of documentation and build infrastructure. - [#167](#167): drop Python 3.7 support. - [#188](#188), [#189](#189), [#190](#190): update requirements.
This release of skan incorporates several bug fixes, new API features… …, and documentation improvements. It also finalizes an API change started in 0.10.0: now junction points are always resolved using a minimum spanning tree, and the `uniquify_junctions` and `junction_mode` arguments to `Skeleton` are deprecated (see our [FAQ](../faq)). Finally, this is the first release containing a [napari plugin](https://napari.org/stable/plugins/index.html)! Currently all it does is skeletonize a Labels layer, but this is just the beginning for GUI-based skeleton analysis. Thanks to everyone who has helped make this release possible, including [Kushaan Gupta](https://github.com/kushaangupta), [Lucy Liu](https://github.com/lucyleeow), [Ryan Ly](https://github.com/rly), [James Ryan](https://github.com/jamesyan-git), and [Simon Savary](https://github.com/ssavary)! Not to speak of all the contributors who make our upstream libraries possible! 🙏 - [#143](#143): the `unique_junctions` and `junction_mode` keyword arguments are removed. Junctions are always resolved by finding the minimum spanning tree of the junction pixels. This PR also speeds up building of the pixel graph. - [#150](#150), [#164](#164): add Sholl analysis. (Thanks to [Kushaan Gupta](https://github.com/kushaangupta) for the collaboration that led to this feature!) - [#184](#184): add napari plugin. - [#152](#152): Some pixel graphs had missing paths in their skeletons because of a mistake in how the graphs were traversed. Thanks [Simon Savary](https://github.com/ssavary) for the detailed report that led to the fix! ([#147](#147)) - [#193](#193), [#183](#183): fix the calculation of the buffer size needed for the pixel path graph in the presence of 0-degree nodes (isolated pixels). - [#135](#135): the `unique_junctions` keyword argument to the Skeleton class is deprecated. Use instead `junction_mode`. Note however that this option will be removed in 0.11, so you should pin your skan dependency if you need this behavior. - [#139](#139): the skan GUI and corresponding skan.gui module and skan command have all been removed. A new, much more sophisticated napari plugin is in development at https://github.com/kevinyamauchi/napari-skeleton-curator and will be folded into a future version of skan (probably v0.11). - [#155](#155), [#156](#156), [#159](#159): Add documentation on 3D display of skeletons in napari. - [#173](#173), [#175](https://github.com/jni/skan/pull/), [#177](#177): support multiple versions of documentation. (!) (This series of PRs in particular is close to my heart because deprecations and API changes like those listed above are much more painful if the old versions are just *erased*! Thanks to [Lucy Liu](https://github.com/lucyleeow) for her efforts and expertise here!) - [#194](#194), [#195](#195): overhaul of documentation and build infrastructure. - [#167](#167): drop Python 3.7 support. - [#188](#188), [#189](#189), [#190](#190): update requirements.
PreviousNext