簡體   English   中英

使用scipy.ndimage_generic_filter進行多維過濾

[英]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_filtertstArr形狀的(3, 7, 7)footprint=np.ones((3, 5, 5))那么對於所有i從0到2,對於所有j從0到6和用於所有從0到6的k testFun被調用, testFuntstArr(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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM