2016-05-17 51 views
0

我有一個numpy數組的列表,每個數組都來自一個圖像,因此它們是三維的(高度,寬度,通道)。我需要知道哪些(r,w,c)點是平等的。找出numpy數組列表相等的最快方法是什麼?

編輯:更重要的是,我試圖找出這些圖像不同之處。如果有更好的方法來做到這一點,那也是一件好事。

+0

你能否詳細說明一些輸入和預期輸出? –

回答

1

這是你想要做的事嗎?

定義兩個3D「影像」(小爲方便起見):

In [417]: img1=np.zeros((4,5,3),int); img2=np.zeros((4,5,3),int) 

In [418]: img1[1:3,1:4,:]=[1,0,2] # different 'color' in the middle  
In [419]: img2[1:3,1:4,:]=[2,1,0] 

In [421]: img1!=img2 
Out[421]: 
array([[[False, False, False], 
     [False, False, False], 
     [False, False, False], 
     [False, False, False], 
     [False, False, False]], 

     [[False, False, False], 
     [ True, True, True], 
     ..., 
     [False, False, False]]], dtype=bool) 

如果我們在它們之間的區別,而不是顏色的點只是有興趣,我們可以應用allany(我會讓你整理了這一點):

In [422]: (img1!=img2).all(axis=2) 
Out[422]: 
array([[False, False, False, False, False], 
     [False, True, True, True, False], 
     [False, True, True, True, False], 
     [False, False, False, False, False]], dtype=bool) 

,並使用where(或nonzero)找到這些點的指數。

In [423]: np.where((img1!=img2).all(axis=2)) 
Out[423]: 
(array([1, 1, 1, 2, 2, 2], dtype=int32), 
array([1, 2, 3, 1, 2, 3], dtype=int32)) 

對於多張圖片,我們可以「堆」他們,做同樣平等的測試

In [429]: imgs=np.array([img1,img2]) # 4d (2, 4, 5, 3) 

In [430]: (imgs==imgs[0,...]).all(axis=0).all(axis=-1) 
Out[430]: 
array([[ True, True, True, True, True], 
     [ True, False, False, False, True], 
     [ True, False, False, False, True], 
     [ True, True, True, True, True]], dtype=bool) 

再次聲明,我着重就如何跨多個維度進行比較。

相關問題