我有一个二维数组,我想向下采样,以比较它与另一个。在
假设我的数组x
是512x512
,我想要一个数组y
128x128
,其中{4x4
上的x
块上的值的插值来构建的(这种插值可以取平均值,但是其他方法,比如几何平均值,可能会很有趣)
到目前为止,我查看了scipy.ndimage.interpolation.zoom
,但没有得到我想要的结果
>> x = np.arange(16).reshape(4,4)
>> print(x)
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
>> y = scipy.ndimage.interpolation.zoom(x, 0.5)
>> print(y)
[[ 0 3]
[12 15]]
我希望y
是
注意,仅仅设置dtype=np.float32
并不能解决这个问题。。。在
sklearn.feature_extraction.image.extract_patches
巧妙地使用np.lib.stride_tricks.as_strided
生成一个可操作的窗口数组。在sliding_window
函数,可在此处找到 Efficient Overlapping Windows with Numpy,生成有或无重叠的窗口数组 同时,让我们来看看引擎盖下发生了什么。在
^{pr2}$step_height,step_width
确定窗口的重叠-在您的例子中,步骤与窗口大小相同,没有重叠。在在车窗上操作:
你需要根据窗户的数量来决定最终的形状。在
搜索
numpy
,window,array应该会产生许多其他答案和可能的解决方案。在您似乎在寻找的是4的块上的平均值,这是不能用
zoom
获得的,因为zoom
使用了插值(参见其docstring)要获得您显示的内容,请尝试以下操作
这就产生了
^{pr2}$或者,可以使用
sklearn.feature_extraction.image.extract_patches
来完成此操作但是,如果您的目标是以一种优雅的方式对图像进行子采样,那么对图像的块取平均值是而不是正确的方法:它很可能会导致锯齿效应。在这种情况下,您应该做的是使用
scipy.ndimage.gaussian_filter
(例如sigma=0.35 * subsample_factor
)稍微平滑图像,然后简单地通过索引[::2, ::2]
对图像进行子采样相关问题 更多 >
编程相关推荐