【发布时间】:2011-04-07 21:23:21
【问题描述】:
我有一个 3D 数据立方体,具有两个空间维度,第三个是 2D 图像每个点的多波段光谱。
H[x, y, bands]
给定一个波长(或波段编号),我想提取与该波长对应的二维图像。这只是一个像H[:,:,bnd] 这样的数组切片。同样,给定一个空间位置 (i,j),该位置的频谱为H[i,j]。
我还想对图像进行光谱“平滑”,以消除光谱中的低光噪声。对于波段bnd,我选择了一个大小为wind 的窗口,并将n 次多项式拟合到该窗口中的频谱。使用 polyfit 和 polyval,我可以找到频带 bnd 的拟合光谱值。
现在,如果我想从拟合值中获得bnd 的整个图像,那么我必须在图像的每个(i,j) 处执行此窗口拟合。我还要bnd的二阶导数图像,也就是每个点的拟合光谱二阶导数的值。
遍历这些点,我可以对每个x*y 光谱进行 polyfit-polyval-polyder。虽然这有效,但这是一个逐点操作。有没有一些 pytho-numponic 方法可以更快地做到这一点?
【问题讨论】:
-
在玩 RTFM 游戏时,我发现 np.polyfit 函数可以采用 y 列数组来适应
x[i], y[i]。这将我的操作加速了一维,因为我可以逐行处理多维数据集。这半回答了我自己的问题——但有更好的方法吗? -
听起来你只是在一维上平滑...为什么不直接打电话给
scipy.ndimage.gaussian_filter1d(data, window, axis=2)?
标签: numpy performance curve-fitting smoothing