用撇除器和过滤器测量骨骼长度



我试图测量香蕉图片的最长和横向分支,使用skimage获得骨架,然后使用filt_finder获得最长分支的长度,代码改编自这个后

如何使用python 测量骨骼长度的想法

但我无法让它filt_finder处理skimage的骨架输出,我得到了以下错误:

raise TypeError("Data must be 2D. Please re-check the inputs.")
TypeError: Data must be 2D. Please re-check the inputs.

用撇渣做成的骨架代码中使用的香蕉图片

如果需要测量最长和横向长度的长度,可以帮助解决错误并更新代码

from skimage import io,img_as_float
from skimage.morphology import skeletonize
from matplotlib import pyplot as plt
from skimage.util import invert
import numpy as np
from fil_finder import FilFinder2D
import astropy.units as u
image=img_as_float(io.imread('C:/python/fruits/banana.jpg'))

gray = invert(image)
skeleton=skeletonize(gray)

fil = FilFinder2D(skeleton, distance=250 * u.pc, mask=skeleton)
fil.preprocess_image(flatten_percent=85)
fil.create_mask(border_masking=True, verbose=False,
use_existing_mask=True)
fil.medskel(verbose=False)
fil.analyze_skeletons(branch_thresh=40* u.pix, skel_thresh=10 * u.pix, prune_criteria='length')
plt.imshow(fil.skeleton, cmap='gray')
plt.contour(fil.skeleton_longpath, colors='r')
plt.axis('off')
plt.show()

(1(您的图像可能是RGB(彩色(,并且

(2( 它需要是二进制(黑色和白色,甚至不是灰色(才能被骨架化。

所以,你需要做:

from skimage.color import rgb2gray
from skimage import filters
image_rgb = img_as_float(io.imread('C:/python/fruits/banana.jpg'))
image_gray = invert(rgb2gray(image_rgb))
image_binary = image_gray > filters.threshold_otsu(image_gray)  # for example
skeleton = skeletonize(image_binary)

(3( 免责声明:我是skan的主要作者,但我只是想把它作为filfinder的替代品:一种n维骨架分析工具:https://jni.github.io/skan/

最新更新