【发布时间】:2020-11-22 16:58:19
【问题描述】:
我有一个HxW“特征图”,F。让我们假设它是一个HxWx1 映射。通过其他一些操作,我得到了一组我感兴趣的像素(比如N 像素)。这些像素中的每一个都与不同的值相关联,因此我的集合的形式为 Nx3,其中每个像素的形式为 x、y 和 val。请注意,这个val 与该位置的特征图值不同。
这是我的问题。是否可以为这些点中的每一个向量化邻域操作?对于N 中的每个像素n,我希望将对应的val 乘以特征图F 中的3x3 邻域。对于 3x3 邻域,这给出了一组新的 3x3 元素 new val。我想将xy替换为3x3窗口中最大为new val(乘特征图)的像素。
这听起来类似于卷积(这里稍微滥用了术语),然后是最大池操作,但不完全是因为每个像素位置都有不同的 val 要相乘。
输入和输出示例,以及所需解决方案的演练
让我们假设H=10 和W=10
这是一个示例 F
0.635955 0.922379 0.993406 0.007837 0.818661 0.983730 0.199866 0.757519 0.073152 0.015831
0.397718 0.097353 0.231351 0.177886 0.343099 0.419940 0.017342 0.087294 0.402266 0.366337
0.978686 0.476594 0.067836 0.148977 0.058994 0.810586 0.542894 0.797419 0.386559 0.225982
0.479860 0.033354 0.353366 0.431562 0.336208 0.674272 0.398151 0.713732 0.598623 0.829230
0.940838 0.869564 0.287100 0.669844 0.631836 0.748982 0.762292 0.597999 0.540236 0.758802
0.925995 0.141296 0.466772 0.672663 0.929746 0.544029 0.991860 0.197474 0.762866 0.798973
0.543519 0.128332 0.624323 0.876569 0.050709 0.223705 0.708381 0.380842 0.818092 0.163447
0.283125 0.329618 0.283481 0.672950 0.136922 0.897785 0.385479 0.764824 0.132671 0.091148
0.661984 0.369459 0.501181 0.352681 0.554113 0.133283 0.593048 0.108534 0.397813 0.836065
0.654929 0.928576 0.539204 0.931213 0.344114 0.591214 0.126809 0.456681 0.036531 0.725228
我的像素结构,让我们说N=3
按行、列、值顺序排列的三个值:(为简单起见,我假设 x 是行,y 是列,尽管不一定如此)。 这完全独立于上一步中的特征图。
3,2,0.38
4,4,0.602
7,5,0.9647
(3,2) 周围的社区是:
[[0.4765941 , 0.06783561, 0.14897662],
[0.03335438, 0.35336647, 0.4315618 ],
[0.86956374, 0.28709952, 0.66984412]]
因此val * 邻域收益率。 (这里val 是 0.38)
[[0.18110576, 0.02577753, 0.05661112],
[0.01267466, 0.13427926, 0.16399349],
[0.33043422, 0.10909782, 0.25454077]]
这里最大值的位置是(2,0),即(1,-1)相对于中心像素。因此我更新的(x,y) 应该是(3,2) + (1,-1) = (4,1)。
其他两个类似,更新后的像素为:(5,4) 和 (7,5)
我怎样才能并行化整个事情? (希望能用 Pytorch 加载到 GPU 上,但不一定,我还没到那个阶段。)
注意:我几天前曾问过这个问题,但没有适当的信息,它的框架很差。希望这能解决问题。
编辑:对于这个特定的实例,F 可以作为一个随机数组产生:
F = np.random.rand(10,10)
【问题讨论】:
-
当您提供
F(或任何数组)时,如果您提供它的代码 sn-p 会更容易。谢谢。 -
嗨@Ehsan 虽然我知道这会有所帮助,但我获得
F和x,y,vals 列表的方式是通过另一个不同的过程,所以对于这个问题,随机数组可以被假定。我已对我的问题进行了编辑! -
我明白这一点。如果可能提供随机数组和相应的所需输出,这将变得更容易。谢谢。
-
您是否要更新
F的值,例如(3,2)与0.33043422或(4,1)与0.33043422?
标签: python arrays numpy opencv pytorch