繁体   English   中英

python-numpy矩阵中的平均像素

[英]Average over pixels in python-numpy matrix

假设我有一个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到第二个蓝色像素

谢谢

在我看来,你不知道自己真正想要什么。 但你对左上角玉米的描述可以用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]])

您似乎想重新采样图像,使其尺寸不同。 如果是这样,那么你可以使用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 ,查看“源兔代码”的完美包装,这是一个功能齐全的重新采样库。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM