Comments (1)
I'm working on this currently. To deal with the first max_path_length error resulting from looped filaments, I added a check before running "analyze_skeletons":
# define two functions to identify junctions and endpoints:
def find_junctions(skel):
"""Finds pixels with exactly three neighbors."""
kernel = np.array([
[1, 1, 1],
[1, 10, 1],
[1, 1, 1]
])
neighbors_count = convolve(skel.astype(int), kernel, mode='constant', cval=0)
return (neighbors_count - 10 == 3) & skel
def find_endpoints(skel):
# Define a kernel that counts the number of neighbors
kernel = np.array([
[1, 1, 1],
[1, 10, 1],
[1, 1, 1]
])
neighbors_count = convolve(skel.astype(int), kernel, mode='constant', cval=0)
# Endpoints are skeleton points with only one neighbor
return (neighbors_count == 11) & skel
def make_skeletons(binary_image):
"""
This function uses the FilFinder package to find and prune skeletons of images.
Args:
image: 2D numpy array or list of points that make up polygon mask
Returns:
skeleton: 2D numpy array with skeletons
skeleton_longpath: 2D numpy array with skeletons that have been pruned to a single line
"""
# Load in skeleton class for skeleton pruning
fil = FilFinder2D(binary_image, beamwidth=0 * u.pix, mask=binary_image)
# This is a necessary step for the fil object. It does nothing.
fil.preprocess_image(skip_flatten=True)
# This makes the skeleton
fil.medskel(verbose=False)
# find junctions and endpoints
junctions = np.asarray(np.nonzero(find_junctions(fil.skeleton))).shape[1]
endpoints = np.asarray(np.nonzero(find_endpoints(fil.skeleton))).shape[1]
print(f'Number of junctions is {junctions}')
print(f'Number of endpoints is {endpoints}')
print('-----------------------------------------------')
if junctions == 0 and endpoints == 0:
return fil.skeleton, fil.skeleton
else:
# This prunes the skeleton
fil.analyze_skeletons(branch_thresh=BRANCH_THRESH * u.pix, prune_criteria='length',
skel_thresh=MIN_CAP_LEN * u.pix)
return fil.skeleton, fil.skeleton_longpath
A circle with have zero endpoints and zero junctions, so if I don't find them then I don't run the pruning algorithm and just return the circle.
from filfinder.
Related Issues (20)
- Some attributes are not described in the docs HOT 8
- Performance tests
- networkx2.4: Graph Object methods removed HOT 3
- Return individual skeletons over the full original image.
- Outdated version of FilFinder in PyPI HOT 3
- Assertion error in skeleton_analysis HOT 1
- Error in fil_finder setup command: use_2to3 is invalid HOT 2
- Longest path starting from the left HOT 2
- find_widths() AttributeError: No distance has not been given. HOT 1
- example script HOT 1
- Cannot show the skeleton and long path HOT 2
- 'FilFinder2D' object has no attribute 'flat_img' HOT 1
- fil.create_mask(verbose=True, border_masking=False)
- errors using Plummer1D as fit_model for find_widths HOT 1
- fil.create_mask in example script not working HOT 2
- identify branches pixels contaning endpoint HOT 1
- ANN: Please migrate away from pytest-openfiles
- is/== issue in width.py HOT 1
- ImportError: cannot import name 'update_default_config' from 'astropy.config.configuration' HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from filfinder.