假设我有一个5x5矩阵:
arr = np.arange(25).reshape((5,5))
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19],
[20, 21, 22, 23, 24]])
我希望通过对其进行平均来制作一个3x3矩阵。
这应该以这样的方式完成,即蓝色像素应该由包含的黑色像素组成,数字用蓝色像素内的区域加权。
这意味着第二个黑色像素的值(值1)3/5(?)应该添加到第一个蓝色像素,2/5到第二个蓝色像素
感谢
答案 0 :(得分:2)
在我看来,你不知道自己真正想要什么。但你所描述的左上角玉米可以用scipy.signal.correlate
扩展到整个数组,虽然它产生4x4输出,你的数学错误:
>>> import scipy.signal
>>> scipy.signal.correlate(np.arange(25).reshape(5, 5),
... [[1, 3/5], [3/5, 9/25]], 'valid') / 4
array([[ 1.44, 2.08, 2.72, 3.36],
[ 4.64, 5.28, 5.92, 6.56],
[ 7.84, 8.48, 9.12, 9.76],
[ 11.04, 11.68, 12.32, 12.96]])
答案 1 :(得分:2)
您似乎希望重新取样您的图片,以使其尺寸不同。如果是,那么您可以使用scipy.ndimage.zoom
:
import numpy as np
import scipy.ndimage
arr = np.arange(25).reshape((5,5))
resized_arr = scipy.ndimage.zoom(arr, 3. / 5)
print resized_arr.shape
print resized_arr
输出:
(3, 3)
[[ 0 2 4]
[10 12 14]
[20 22 24]]
您的想法是将函数拟合到图像中像素定义的2d曲面 - 在zoom
的情况下,函数是参数样条曲线拟合。然后,一旦有适合表面的函数,就可以在任何网格点获得样本。
您还可以使用更复杂的功能来适应原始图像。查看scikits.samplerate
以获取“源兔代码”的完美包装,这是一个功能齐全的重新采样库。