Skeletonize работает только для двоичных / логических изображений, что означает изображения только с двумя значениями. По соглашению эти значения должны быть 0 или 1, либо False или True.
В вашем случае, хотя ваше изображение выглядит как будто оно имеет только черный и белый, на самом деле оно имеет некоторые промежуточные значения серого:
In [1]: import numpy as np
In [2]: from skimage import io
In [3]: image = io.imread('https://i.stack.imgur.com/awMuQ.png')
In [4]: np.unique(image)
Out[3]:
array([ 0, 14, 23, 27, 34, 38, 46, 53, 57, 66, 69, 76, 79,
86, 89, 102, 105, 114, 120, 124, 135, 142, 145, 150, 158, 162,
169, 172, 181, 183, 189, 199, 207, 213, 220, 226, 232, 235, 238,
239, 244, 245, 249, 252, 255], dtype=uint8)
Чтобы получить двоичное изображение, вы можете использовать пороговое значение, также из scikit-image:
In [5]: from skimage import morphology, filters
In [6]: binary = image > filters.threshold_otsu(image)
In [7]: np.unique(binary)
Out[7]: array([False, True])
In [8]: skeleton = morphology.skeletonize(binary)
In [9]: