首页 > 解决方案 > 给定一个向量场 (dx, dy),将位置 (Row, Col) 的矩阵值移动到新位置 (Row + dx, Column + dy)

问题描述

给定一个矩阵

[   a   b   -  ]
[   -   e   f  ]
[   g   h   -  ]

其中,为了演示, - 表示零条目。

我们还使用向量场

[   (0,1)   (0,1)   (0,0)  ]
[   (0,0)  (0,-1)  (0,-1)  ]
[   (0,1)   (0,1)   (0,0)  ]

其中每个元组指定移动矩阵中相应元素的数量(行、列)。什么是通过相应的向量移动每个元素以实现的 Pythonic/高效方法:

[   -   a   b  ]
[   e   f   -  ]
[   -   g   h  ]

这是由一个 coregistration 问题启发的,但是除了循环遍历元素之外,我还没有找到一个优雅的解决这个问题的方法。我是图像处理的新手,也是 Python 编程的新手——什么是有效/可接受的方式来做到这一点?

标签: pythonpandasnumpyimage-processing

解决方案


这可以使用np.add.at

A = np.array([["a","b",""],["","c","d"],["e","f",""]])
l,n,r = [[0,-1],[0,0],[0,1]]
B = np.array([[r,r,n],[n,l,l],[r,r,n]])

out = np.zeros_like(A)
i,j = np.ogrid[:3,:3]
np.add.at(out.view('u4'),(i+B[...,0],j+B[...,1]),A.view('u4'))

out
# array([['', 'a', 'b'],
#        ['c', 'd', ''],
#        ['', 'e', 'f']], dtype='<U1')

推荐阅读