2015-11-11 2 views
0

Я хочу подсчитать одну и ту же частоту пикселей изображения. Пульт SRC ndarray:частота подсчета в вложенном массиве numpy

[ 
[1, 2, 3], 
[1, 2, 3], 
[5, 6, 7] 
] 

Результат я хочу это:

[ 
[1, 2, 3, 2], 
[5, 6, 7, 1] 
] 

Но numpy.unique или numpy.bincount не может работать.

+0

возможно дубликат http://stackoverflow.com/questions/30879446/efficiently-count-the-number-of-occurrences-of-unique-subarrays-in-numpy – Divakar

+0

это здорово. но я также хочу считать один и тот же пиксель – Levi

+0

Связанный более релевантный вопрос, который имеет дело с подсчетами. Вы выяснили последний связанный вопрос? – Divakar

ответ

0

Будет ли это работать.

from collections import Counter 
import numpy as np 
In [17]: freq = Counter(np.array(lst).flatten()) 
In [18]: freq 
Out[18]: Counter({1: 2, 2: 2, 3: 2, 5: 1, 6: 1, 7: 1}) 
+0

Не похоже, что это желаемый результат. Каждая строка в матрице считается уникальным «значением», и вы хотите подсчитать, сколько раз вы видите каждое «значение». – rayryeng

0

Имеете ли вы значения RGB в диапазоне [0..255]? В этом случае вы можете попробовать это.

Вы начинаете с:

import numpy as np 
a = np.array([[1,2,3],[1,2,3],[5,6,7]]) 

Создать биекцию ([0..255], [0..255], [0..255]) и [0..16777215]:

a_ = a[:,0]*256**2 + a[:,1]*256 + a[:,0] 

Применить bincount:

b_ = np.bincount(a_) 

Нанести ответный биекция:

h = [] 
for i,e in enumerate(b_): 
    if e: 
     b = i%256 
     g = (i//256)%256 
     r = i/65536 
     h.append([r,g,b,e]) 

То, что вы хотите, будет в час

+0

Действительно спасибо. Infact, что я хочу, преобразует этот код в python: index = (unsigned char) gray-> imageData [i * gray-> widthStep + j]; – Levi

+0

серый - это изображение в оттенках серого. и i - высота, j - ширина – Levi

Смежные вопросы