图像在skimage中包含0或1错误以外的值

时间:2019-07-02 07:11:00

标签: python image-processing scikit-image

我有这张图片:

enter image description here

我想使用sckimage的这段代码来获取我的图像的骨架和细化信息,

from skimage.morphology import skeletonize, thin
import cv2 

image =cv2.imread('1.png',0)


skeleton = skeletonize(image)
thinned = thin(image)
thinned_partial = thin(image, max_iter=25)

fig, axes = plt.subplots(2, 2, figsize=(8, 8), sharex=True, sharey=True)
ax = axes.ravel()

ax[0].imshow(image, cmap=plt.cm.gray, interpolation='nearest')
ax[0].set_title('original')
ax[0].axis('off')

ax[1].imshow(skeleton, cmap=plt.cm.gray, interpolation='nearest')
ax[1].set_title('skeleton')
ax[1].axis('off')

ax[2].imshow(thinned, cmap=plt.cm.gray, interpolation='nearest')
ax[2].set_title('thinned')
ax[2].axis('off')


fig.tight_layout()
plt.show()

但是它给我的错误是“第98行,以骨架化方式显示,VaueError:图像包含0和1以外的值”

有人可以帮我解决吗?

1 个答案:

答案 0 :(得分:1)

骨骼化仅适用于二进制/布尔图像,这意味着只有两个值的图像。按照惯例,这些值应为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]: