我有一个带有矢量分量的 3D 图像(即从 R3 到 R3 的映射)。我的目标是用其 3x3x3 邻域内最大范数的向量替换每个向量。
事实证明,这项任务具有意想不到的挑战性。我尝试使用 scipy.ndimage.generic_filter,但尽管它的名称如此,该过滤器仅处理标量输入和输出。我还简要探索了 skimage 和 numpy 的 slip_window_view,但似乎都没有提供直接的解决方案。
实施此操作的正确方法是什么?
您正在尝试用 3x3x3 邻域中具有最大范数的向量替换 3D 图像中的向量。出现困难是因为您使用的是 3D 向量,而不是标量,并且像 scipy.ndimage.generic_filter 和 numpy 的 slip_window_view 这样的函数不直接支持多维向量数据。
您可以通过使用 NumPy 计算并根据每个向量的邻域替换每个向量来解决此问题:
计算范数:计算每个向量的长度。 提取邻域:对于每个体素,获取周围的 3x3x3 向量。 查找最大范数:识别该邻域中具有最高范数的向量。 替换原始向量:用最大范数向量更新体素的向量。