【问题标题】:Compute image pixel differences in efficient way以有效的方式计算图像像素差异
【发布时间】:2020-03-31 17:20:13
【问题描述】:

假设我有一个 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]

【问题讨论】:

  • 你能举一个简短的例子吗?如arrayother_array 将被计算为answer。数组可以很小,比如 2x2 或 3x3。

标签: python image numpy image-processing pixel


【解决方案1】:

这是我的方法:

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

【讨论】:

  • 谢谢!这正是我想要的:)
  • 我尝试了几次(在我的本地机器和 Google Collab 上),它占用了两者的所有 RAM,然后崩溃。有什么技巧可以解决这个问题?
  • 这可能是因为您的图像不是 24x24?
  • 是的,它实际上是 178x218,我才意识到。我会尝试调整图像大小
【解决方案2】:

如果您愿意在数组中添加一些零,您可以创建一个 4D 数组,告诉您像素[i, j] 和原始数组[m, n] 位置[i, j, m, n] 之间的差异。您将在 ai == m 和 j == n` 的对角线上有零,但您始终可以将其屏蔽或以其他方式消除它:

img[..., None, None] - img[None, None, ...]

【讨论】:

    猜你喜欢
    • 2015-05-09
    • 1970-01-01
    • 1970-01-01
    • 2013-02-27
    • 2020-09-26
    • 2012-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多