我有一个numpy数组列表,每个数组来自一个图像,因此它们是三维的(高度,宽度,通道)。我需要知道哪些(r,w,c)点相等。
编辑:更重要的是,我试图找出这些图片的不同之处。如果有更好的方法,那也很好。
答案 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)
如果我们只是对它们不同的点而不是颜色感兴趣,我们可以应用all
或any
(我可以让您对其进行排序):
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)
我再次关注如何跨多个维度进行比较。