给定一个形状的ndarray(批量大小,w,h,c)和一个补丁大小(p,p),我想从每个3D矩阵(即形状,p,c)中提取补丁。没有补丁会重叠,所以步幅可以被认为是P。
这将返回一个数组,其中包含(批处理大小*p*p,p,p,c)
使用
skimage.view_as_windows
下面是一个最小的例子
import numpy as np
import skimage
a = np.arange(8*8*2).reshape((8, 8, 2))
b = a * 2
c = np.concatenate((a[np.newaxis, :, :, :], b[np.newaxis, :, :, :]), axis = 0)
d = skimage.util.view_as_windows(c, 2, step = 2).reshape((8*2*2, 2, 2, 2))
但是,只有备用值才是我期望的:
d[0]
Out[183]:
array([[[ 0, 1],
[ 2, 3]],
[[16, 17],
[18, 19]]])
d[1]
Out[184]:
array([[[ 0, 2],
[ 4, 6]],
[[32, 34],
[36, 38]]])
d[2]
Out[185]:
array([[[ 4, 5],
[ 6, 7]],
[[20, 21],
[22, 23]]])
d[3]
Out[186]:
array([[[ 8, 10],
[12, 14]],
[[40, 42],
[44, 46]]])
d[4]
Out[187]:
array([[[ 8, 9],
[10, 11]],
[[24, 25],
[26, 27]]])
因此,
d[::2]
接近我的解决方案,但一半的值丢失
我不确定问题是窗口大小还是步骤,或者即使我的问题可以使用
view_as_windows
,所以我愿意接受任何有效的建议。