【问题标题】:What is the theory/algorithm behind extract_patches function of scikit-learn?scikit-learn 的 extract_patches 函数背后的理论/算法是什么?
【发布时间】:2018-03-19 04:58:36
【问题描述】:

我正在使用 extract_patches_2dextract_patches 从 2d 图像中提取局部补丁,我希望获得解释补丁提取实施方法的理论和参考资料。

【问题讨论】:

    标签: python image-processing multidimensional-array scikit-learn data-science


    【解决方案1】:

    我不确定你指的是什么理论,这些方法实际上只是巧妙的数组操作(剧透:numpy 数组操作)。

    • 第一个 extract_patches_2dextract_patches 上的简单二维包装器,它调用

      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 是一个不错的起点。

    【讨论】:

      猜你喜欢
      • 2015-06-09
      • 2011-11-04
      • 2012-10-02
      • 1970-01-01
      • 1970-01-01
      • 2021-05-29
      • 1970-01-01
      • 2017-02-25
      • 1970-01-01
      相关资源
      最近更新 更多