skimage的view_as_window和sklearn的extract_patch_2d在提取图像块时有什么区别?

0 投票
1 回答
29 浏览
提问于 2025-04-14 17:01

我有一个包含二维图像的数组,形状是[n x w x h],其中n是图像的数量。我想从每个二维图像中提取小块。由于小块的大小可能不均匀地切分图像,所以我需要使用填充(padding)。而且,我不想要重叠的小块。我发现了两个函数,分别在skimage和sklearn库中可以使用:view_as_window()extract_patches_2d()。我有两个问题:

  1. 为什么会有两个方法?
  2. 哪个方法更适合我的需求?

1 个回答

0

因为你想从一张二维图像中提取小块,所以使用 sklearn.feature_extraction.image.extract_patches_2d 是最合适的选择。这个函数就是专门用来做这件事的,其他的事情它不管,所以你可以期待它在这个任务上已经经过优化。

虽然像 skimage.util.view_as_windows 这样的函数也能达到你想要的效果,但它并不是专门为这个目的写的。这个函数提供了一个滚动窗口的视图,可以用在多维数组上,虽然在你的情况下,'n' 可能是 2,但它其实适用于任何维度。

因此,skimage.util.view_as_windows 可能并没有针对你想要的使用场景进行优化,未来可能还会增加一些额外的逻辑,这样反而会对你的使用造成负面影响。

即使 sklearn.feature_extraction.image.extract_patches_2d 在后台调用了 skimage.util.view_as_windows,使用更具体的函数调用仍然是有意义的,这样可以享受到未来可能的优化,或者避免偏离你的使用场景。

可以想象一下,有一个数学库里有一个函数专门用来解二次方程,还有一个函数可以在特定条件下解任何多项式方程。如果你只需要解二次方程,你肯定会选择第一个,虽然第二个也能用。但这两个函数存在的原因是显而易见的,类似的道理也适用于你问的这个情况。

撰写回答