Python 在skimage';谁的消息来源?

Python 在skimage';谁的消息来源?,python,scikit-image,Python,Scikit Image,在浏览的模块\u denoise.py中,我找到了以下代码: def estimate_sigma(image, average_sigmas=False, multichannel=False): # some more code here sigmas = [estimate_sigma(image[..., c], multichannel=False)... return _sigma_est_dwt(detail_coeffs, distribu

浏览
的模块
\u denoise.py
中,我找到了以下代码:

def estimate_sigma(image, average_sigmas=False, multichannel=False):
        # some more code here
        sigmas = [estimate_sigma(image[..., c], multichannel=False)...
    return _sigma_est_dwt(detail_coeffs, distribution='Gaussian')
估计值\u sigma
内部有一个
估计值\u sigma
?这是如何以及为什么起作用的?进口商品是

import scipy.stats
import numpy as np
from math import ceil
from .. import img_as_float
from ..restoration._denoise_cy import _denoise_bilateral, _denoise_tv_bregman
from .._shared.utils import skimage_deprecation, warn
import pywt
import skimage.color as color
import numbers

它似乎没有潜入任何新函数。

注意,的递归调用在if子句中:

if multichannel:
    sigmas = [estimate_sigma(image[..., c], multichannel=False)...
...
return _sigma_est_dwt(detail_coeffs, distribution='Gaussian')
案例A)如果我们使用
multichannel=False
调用
estimate\u sigma
,函数将不会进入If子句,因此不会调用自身,并将返回到其主体的末尾

案例B)如果我们使用
multichannel=True
调用
estimate\u sigma
,条件将成功,因此
estimate\u sigma
将调用自身。从上面的源代码中可以看出,当
estimate\u sigma
调用自身时,它将
multi channel
作为
False
传递。这意味着在递归调用期间,将发生“案例A”。这一次程序将不会进入上述
if
块,递归将结束,结束函数的执行并返回。

基本上,我们的想法是:如果我们有多个通道,让我们将它们分成单独的通道,并对每个通道执行sigma估计

使用递归的函数有什么神秘之处?我真的不明白你的要求。哦,现在说得通了!当
nchannels=image.shape[-1]
检查多个通道时,它似乎有点复杂,但我想肯定有一些特殊的场景可以证明这一点。“特殊场景”是灰度三维体积图像。在这些情况下,
image.shape[-1]
是最后一个维度的大小。(当
multichannel=False时
;也有多通道3D图像!)