2015-08-06 3 views
0

Я помечен образ для создания массива numpy с метками, например.Создание набора данных ярлыка из сегментированного изображения с использованием Python

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

Вы можете использовать np.meshgrid и np.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]]) 
+0

Что такое матрица 'A' ​​здесь? – kungfujam

+0

@kungfujam К сожалению, это была опечатка. Проверьте изменения. – Divakar

+0

Perfect, приветствия. – kungfujam