使用Python从分段图像创建标签数据集

时间:2015-08-06 12:02:33

标签: python numpy scikit-learn scikit-image

我已将图像标记为生成带有标记的numpy数组,例如

array([[0, 1, 0, ..., 0, 0, 0],
        [0, 1, 0, ..., 0, 0, 0],
        [0, 1, 0, ..., 0, 0, 0],
        ..., 
        [0, 0, 0, ..., 0, 0, 0],
        [2, 2, 0, ..., 0, 0, 0],
        [2, 2, 0, ..., 0, 0, 0]], dtype=uint8)}

将此转换为数据集的最有效方法是什么:

x-coord | y-coord | label 
-------------------------
0       | 0       | 0
0       | 1       | 1
0       | 2       | 0
...
1024    | 0       | 2
1024    | 1       | 2

我不介意输出格式是什么,但我希望字典最方便。

这是我当前的代码,它遍历图像的坐标:

(x, y) = img.shape
for x1, x2 in np.ndindex((x, y)):
    data[(x1, x2)] = img[x1, x2]

我这样做的原因是我想为每个像素为数组添加其他功能。

1 个答案:

答案 0 :(得分:1)

您可以使用np.meshgridnp.vstack创建一个Nx3 numpy数组,其格式与所需的格式相同,并采用矢量化方式,如下所示 -

In [103]: img
Out[103]: 
array([[0, 1, 1, 0, 0],
       [0, 1, 0, 0, 1],
       [1, 1, 1, 1, 2],
       [2, 1, 1, 0, 2]])

In [104]: M,N = img.shape

In [105]: Y,X = np.meshgrid(np.arange(N),np.arange(M))

In [106]: np.vstack((X,Y,img)).reshape(3,-1).T
Out[106]: 
array([[0, 0, 0],
       [0, 1, 1],
       [0, 2, 1],
       [0, 3, 0],
       [0, 4, 0],
       [1, 0, 0],
       [1, 1, 1],
       [1, 2, 0],
       [1, 3, 0],
       [1, 4, 1],
       [2, 0, 1],
       [2, 1, 1],
       [2, 2, 1],
       [2, 3, 1],
       [2, 4, 2],
       [3, 0, 2],
       [3, 1, 1],
       [3, 2, 1],
       [3, 3, 0],
       [3, 4, 2]])