2015-11-11 54 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

您是否正在處理[0..255]範圍內的RGB值?在這種情況下,你可以試試這個。

你開始從:

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]) 

你想會在H什麼

+0

真的很感謝。事實上,我想要的是將此代碼轉換爲python:index =(unsigned char)gray-> imageData [i * gray-> widthStep + j]; – Levi

+0

灰色是灰度圖像。我是身高,j是寬度 – Levi