Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带Python ndimage通用过滤器的条件逻辑_Python_Python 3.x_Numpy_Scipy_Ndimage - Fatal编程技术网

带Python ndimage通用过滤器的条件逻辑

带Python ndimage通用过滤器的条件逻辑,python,python-3.x,numpy,scipy,ndimage,Python,Python 3.x,Numpy,Scipy,Ndimage,我正在尝试编写一个python函数来删除2D图像数据中的热像素。我正在尝试生成一个函数,该函数将取2D数组中每个元素周围相邻元素的平均值,如果该元素的值超过其相邻元素的平均值特定的量(例如3西格玛),则有条件地覆盖该元素。这就是我的处境: def myFunction(values): if np.mean(values) + 3*np.std(values) < origin: return np.mean(values) footprint = np.arra

我正在尝试编写一个python函数来删除2D图像数据中的热像素。我正在尝试生成一个函数,该函数将取2D数组中每个元素周围相邻元素的平均值,如果该元素的值超过其相邻元素的平均值特定的量(例如3西格玛),则有条件地覆盖该元素。这就是我的处境:

def myFunction(values):
    if np.mean(values) + 3*np.std(values) < origin:
        return np.mean(values)

footprint = np.array([[1,1,1],
                      [1,0,1],
                      [1,1,1]])
correctedData = ndimage.generic_filter(data, myFunction, footprint = footprint)
def myFunction(值):
如果np.平均值+3*np.标准值<原点:
返回np.平均值(值)
footprint=np.数组([[1,1,1],
[1,0,1],
[1,1,1]])
correctedData=nImage.generic_过滤器(数据、myFunction、footprint=footprint)
上述代码中的“来源”是说明性的。我知道这是不对的,我只是想展示我想做什么。是否有方法将当前元素的值传递给泛型函数


谢谢

您的
footprint
没有将中心值传递回您的函数

我发现使用
size
(相当于使用封装外形中的所有尺寸),然后在回调函数中处理所有问题更容易。因此,在您的例子中,我将提取回调函数中的中心值。大概是这样的:

from scipy.ndimage import generic_filter

def despike(values):
    centre = int(values.size / 2)
    avg = np.mean([values[:centre], values[centre+1:]])
    std = np.std([values[:centre], values[centre+1:]])
    if avg + 3 * std < values[centre]:
        return avg
    else:
        return values[centre]
这将产生(例如):

现在,您可以应用过滤器:

correctedData = generic_filter(data, despike, size=3)
这消除了我添加的尖峰:

array([[2, 8, 4, 2, 4],
       [9, 4, 7, 6, 5],
       [9, 9, 5, 7, 3],
       [0, 1, 0, 8, 0],
       [9, 9, 7, 6, 0]])

啊,这很有道理!谢谢
correctedData = generic_filter(data, despike, size=3)
array([[2, 8, 4, 2, 4],
       [9, 4, 7, 6, 5],
       [9, 9, 5, 7, 3],
       [0, 1, 0, 8, 0],
       [9, 9, 7, 6, 0]])