如何调整 N-d numpy 图像的大小?
How to resize N-d numpy image?
如何调整 N-d numpy 图片的大小?
我不只是想对其进行子采样,而是对像素进行插值/平均。
例如,如果我从
开始
array([[[3, 1, 3, 1],
[3, 1, 3, 1],
[3, 1, 3, 1],
[3, 1, 3, 1]],
[[3, 1, 3, 1],
[3, 1, 3, 1],
[3, 1, 3, 1],
[3, 1, 3, 1]]], dtype=uint8)
并在所有维度上将其缩小 2 倍,我希望输出为
array([[[2, 2],
[2, 2]]], dtype=uint8)
尝试的解决方案:
一个。 SciPy 图像:
>>> scipy.ndimage.interpolation.zoom(x, .5, mode='nearest')
array([[[3, 1],
[3, 1]]], dtype=uint8)
(可选的order
参数没有区别)
乙。遍历 2**3
个可能的偏移量:丑陋、缓慢、仅适用于整数缩放因子,并且需要额外的步骤来避免溢出。
C。 OpenCV 和 PIL 仅适用于 2D 图像。
重塑以将每个轴拆分为每个长度 2
的另一个轴,给我们一个 6D
数组,然后沿着后面的那些(轴:1,3,5
)获取平均值-
m,n,r = a.shape
out = a.reshape(m//2,2,n//2,2,r//2,2).mean((1,3,5))
扩展到n-dim
数组,就是-
def shrink(a, S=2): # S : shrink factor
new_shp = np.vstack((np.array(a.shape)//S,[S]*a.ndim)).ravel('F')
return a.reshape(new_shp).mean(tuple(1+2*np.arange(a.ndim)))
样本运行-
In [407]: a
Out[407]:
array([[[1, 5, 8, 2],
[5, 6, 4, 0],
[8, 5, 5, 5],
[1, 0, 0, 0]],
[[0, 0, 7, 6],
[3, 5, 4, 3],
[4, 5, 1, 3],
[6, 7, 4, 0]]])
In [408]: a[:2,:2,:2].mean()
Out[408]: 3.125
In [409]: a[:2,:2,2:4].mean()
Out[409]: 4.25
In [410]: a[:2,2:4,:2].mean()
Out[410]: 4.5
In [411]: a[:2,2:4,2:4].mean()
Out[411]: 2.25
In [412]: shrink(a, S=2)
Out[412]:
array([[[ 3.125, 4.25 ],
[ 4.5 , 2.25 ]]])
如何调整 N-d numpy 图片的大小?
我不只是想对其进行子采样,而是对像素进行插值/平均。
例如,如果我从
开始array([[[3, 1, 3, 1],
[3, 1, 3, 1],
[3, 1, 3, 1],
[3, 1, 3, 1]],
[[3, 1, 3, 1],
[3, 1, 3, 1],
[3, 1, 3, 1],
[3, 1, 3, 1]]], dtype=uint8)
并在所有维度上将其缩小 2 倍,我希望输出为
array([[[2, 2],
[2, 2]]], dtype=uint8)
尝试的解决方案:
一个。 SciPy 图像:
>>> scipy.ndimage.interpolation.zoom(x, .5, mode='nearest')
array([[[3, 1],
[3, 1]]], dtype=uint8)
(可选的order
参数没有区别)
乙。遍历 2**3
个可能的偏移量:丑陋、缓慢、仅适用于整数缩放因子,并且需要额外的步骤来避免溢出。
C。 OpenCV 和 PIL 仅适用于 2D 图像。
重塑以将每个轴拆分为每个长度 2
的另一个轴,给我们一个 6D
数组,然后沿着后面的那些(轴:1,3,5
)获取平均值-
m,n,r = a.shape
out = a.reshape(m//2,2,n//2,2,r//2,2).mean((1,3,5))
扩展到n-dim
数组,就是-
def shrink(a, S=2): # S : shrink factor
new_shp = np.vstack((np.array(a.shape)//S,[S]*a.ndim)).ravel('F')
return a.reshape(new_shp).mean(tuple(1+2*np.arange(a.ndim)))
样本运行-
In [407]: a
Out[407]:
array([[[1, 5, 8, 2],
[5, 6, 4, 0],
[8, 5, 5, 5],
[1, 0, 0, 0]],
[[0, 0, 7, 6],
[3, 5, 4, 3],
[4, 5, 1, 3],
[6, 7, 4, 0]]])
In [408]: a[:2,:2,:2].mean()
Out[408]: 3.125
In [409]: a[:2,:2,2:4].mean()
Out[409]: 4.25
In [410]: a[:2,2:4,:2].mean()
Out[410]: 4.5
In [411]: a[:2,2:4,2:4].mean()
Out[411]: 2.25
In [412]: shrink(a, S=2)
Out[412]:
array([[[ 3.125, 4.25 ],
[ 4.5 , 2.25 ]]])