[英]Multi-dimensional filtering using scipy.ndimage_generic_filter
我想使用通用過濾器來計算給定窗口(或內核)中滿足幾個條件的值的平均值。 我期望以下代碼在3層窗口中生成第一個數組的均值過濾器,並使用其他兩個數組掩蓋均值計算中的值。
from scipy import ndimage
import numpy as np
#some test data
tstArr = np.random.rand(3,7,7)
tstArr = tstArr*10
tstArr = np.int_(tstArr)
tstArr[1] = tstArr[1]*100
tstArr[2] = tstArr[2] *1000
#mean function
def testFun(tstData,processLayer,nLayers,kernelSize):
funData= tstData.reshape((nLayers,kernelSize,kernelSize))
meanLayer = funData[processLayer]
maskedData = meanLayer[(funData[1]>1)&(funData[2]<9000)]
returnMean = np.mean(maskedData)
return returnMean
#number of layers in the array
nLayers = np.shape(tstArr)[0]
#window size
kernelSize = 5
#create a sampling window of 5x5 elements from each array
footprnt = np.ones((nLayers,kernelSize,kernelSize),dtype = np.int)
# calculate the mean of the first layer in the array (other two are for masking)
processLayer = 0
tstOut = ndimage.generic_filter(tstArr, testFun, footprint=footprnt, extra_arguments = (processLayer,nLayers,kernelSize))
我認為這會從輸入數組的第一層產生一個7x7的蒙版均值數組。 輸出是一個3x7x7的數組,我不明白這些值代表什么。 我不確定如何產生“蒙版”均值過濾數組,或者如何解釋給出的輸出。
您的代碼使用三層以上的數組掩蓋平均值計算中的值,從而生成3層窗口中第一個數組的平均值過濾器。 您將在tstOut[1]
找到結果。
到底是怎么回事 ? 當你調用ndimage.generic_filter
與tstArr
形狀的(3, 7, 7)
和footprint=np.ones((3, 5, 5))
那么對於所有i
從0到2,對於所有j
從0到6和用於所有從0到6的k
testFun
被調用, testFun
子tstArr
以(i, j, k)
為中心, tstArr
為(i, j, k)
tstArr
(3, 5, 5)
(該數組在邊界處反射以提供缺失值)。
到底:
tstOut[0]
是平均濾波器tstArr[0]
與tstArr[0]
和tstArr[1]
作為掩模 tstOut[1]
是tstArr[0]
的均值濾波器,其中tstArr[1]
和tstArr[2]
為掩碼 tstOut[2]
是tstArr[1]
的均值濾波器,其中tstArr[2]
和tstArr[2]
為掩碼 同樣,所需結果在tstOut[1]
。
我希望這能幫到您。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.