Python 高效地计算图像像素差异
假设我有一个24 x 24的图像作为numpy数组 我想计算图像中每个像素和所有其他像素之间的像素差,不包括该像素。这将给我(24*24)*(24*24-1)个值 如何在循环之外以高效的方式执行此操作 例如: 图像数组:Python 高效地计算图像像素差异,python,image,numpy,image-processing,pixel,Python,Image,Numpy,Image Processing,Pixel,假设我有一个24 x 24的图像作为numpy数组 我想计算图像中每个像素和所有其他像素之间的像素差,不包括该像素。这将给我(24*24)*(24*24-1)个值 如何在循环之外以高效的方式执行此操作 例如: 图像数组: [[1,5], [8,3]] 差异: Pixel 1 (Value = 1) : [-4,-7,-2] Pixel 2 (Value = 5) : [4,-3,2] Pixel 3 (Value = 8): [7,3,5] Pixel 4 (Value = 3):[2,-2
[[1,5],
[8,3]]
差异:
Pixel 1 (Value = 1) : [-4,-7,-2]
Pixel 2 (Value = 5) : [4,-3,2]
Pixel 3 (Value = 8): [7,3,5]
Pixel 4 (Value = 3):[2,-2,-5]
最终结果:
[-4, -7, -2, 4, -3, 2, 7, 3, 5, 2, -2, -5]
如果您希望阵列中有一些零,您可以创建一个4D阵列,告诉您像素
[i,j]
与原始阵列[m,n]
位置[i,j,m,n]
之间的差异。在沿对角线的方向上有0,其中ai==m和j==n`,但您可以始终掩盖这一点或以其他方式消除它:
img[..., None, None] - img[None, None, ...]
以下是我的方法:
ret = img.ravel()
ret = ret[:,None] - ret
mask = np.arange(len(ret)) != np.arange(len(ret))[:,None]
# masking
ret[np.where(mask)]
输出:
array([-4, -7, -2, 4, -3, 2, 7, 3, 5, 2, -2, -5])
你能举个简单的例子吗?例如
数组
和其他数组
将被计算为答案
。阵列可以很小,比如2x2或3x3。谢谢!这正是我想要的:)我尝试过几次(在我的本地机器和Google Collab上)实现它,它占用了这两台机器中的所有RAM,然后崩溃。有什么办法可以解决这个问题吗?这可能是因为你的图像不是24x24?是的,实际上是178x218,我刚刚意识到。我将尝试调整图像的大小