【发布时间】:2014-12-25 14:44:39
【问题描述】:
我希望能够找到图片中路径的长度,这可能是一条蠕虫、一根卷曲的头发、亚马逊河等的长度。考虑这张亚马逊河图片:
我试图在二值化后制作我的图片的骨架,但问题是骨架(通过两种方法获得)有许多小分支,导致它们的面积远远超过路径的大致长度。我使用scikit-image 来做到这一点。这是代码和结果:
from skimage.filter import threshold_otsu
from skimage import io
from skimage.filter.rank import median
from skimage.morphology import disk,skeletonize,medial_axis,remove_small_objects
import matplotlib.pyplot as plt
input_image = io.imread('Amazon-river2.jpg',
as_grey=True, plugin=None, flatten=None)
image = median(input_image, disk(15))
thresh = threshold_otsu(image)
image = image < thresh
skel1=skeletonize(image)
skel2=medial_axis(image)
min_size=sum(sum(skel1))/2
remove_small_objects(skel1,min_size=min_size,connectivity=5,in_place=True)
remove_small_objects(skel2,min_size=min_size,connectivity=5,in_place=True)
fig2, ax = plt.subplots(2, 2, figsize=(24, 12))
ax[0,0].imshow(input_image,cmap=plt.cm.gray)
ax[0,0].set_title('Input image')
ax[0,0].axis('image')
ax[0,1].imshow(image, cmap=plt.cm.gray)
ax[0,1].set_title('Binary image')
ax[0,1].axis('image')
ax[1,0].imshow(skel1, cmap=plt.cm.gray)
ax[1,0].set_title('Skeleton')
ax[1,0].axis('image')
ax[1,1].imshow(skel2,cmap=plt.cm.gray)
ax[1,1].set_title('Sleleton - Medial axis')
ax[1,1].axis('image')
plt.show()
print ("Length 1: {0}".format(sum(sum(skel1))))
print ("Length 2: {0}".format(sum(sum(skel2))))
有解决这个问题的建议吗?测量弧长的任何其他想法?
【问题讨论】:
标签: image-processing measure scikit-image