Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 高效地计算图像像素差异_Python_Image_Numpy_Image Processing_Pixel - Fatal编程技术网

Python 高效地计算图像像素差异

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

假设我有一个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,-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,我刚刚意识到。我将尝试调整图像的大小