我正在使用extract_patches_2dextract_patches从2d图像中进行局部补丁提取,并且我希望有理论和参考资料来说明补丁提取的实现方法。

最佳答案

我不确定您指的是什么理论,实际上这些方法仅仅是聪明的数组操作(破坏者:numpy数组操作)。


第一个extract_patches_2dextract_patches上的简单2D包装器,它调用

extract_patches(image,
                patch_shape=(p_h, p_w, n_colors),
                extraction_step=1)


并重塑结果(source code)。
第二个也是extract_patches,也是包装器,这次是numpy.as_strided。它只准备2*n形状并大步将工作委托给

as_strided(arr, shape=shape, strides=strides)


这是它的source code
真正有趣的是numpy.as_strided。从文档中:


  as_strided给定确切的步幅并在数组中创建一个视图
  形状。这意味着它将操纵内部数据结构
  ndarray,如果操作不正确,则数组元素可以指向
  无效的内存,可能会破坏结果或使程序崩溃。它是
  建议在计算新的时始终使用原始的x.strides
  努力避免依赖连续的内存布局。


因此,基本上,结果是对内存中同一数组的包装(一个视图),该包装提供索引查找,并且每个索引都在x内部的特定区域中查找。 numpy.ndarray.view是核心numpy函数,它允许在不重新分配内存的情况下查看现有阵列内部。如果您想深入了解numpy如何执行数组操作和视图,那么numpy internals是一个不错的起点。

关于python - scikit-learn的extract_patches函数背后的理论/算法是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46621786/

10-12 22:44
查看更多