在_denoise.py
的模块skimage
中,我找到了以下代码:
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')
在estimate_sigma
里面有一个estimate_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
似乎没有潜入任何新功能。
答案 0 :(得分:3)
请注意,estimate_sigma
的递归调用位于if子句中:
if multichannel:
sigmas = [estimate_sigma(image[..., c], multichannel=False)...
...
return _sigma_est_dwt(detail_coeffs, distribution='Gaussian')
情况A)如果我们用estimate_sigma
调用multichannel=False
,则该函数不会进入if子句的内部,因此不会调用自身,并将返回到其主体的末尾。 / p>
情况B)如果我们用estimate_sigma
调用multichannel=True
,则条件将成功,因此estimate_sigma
会调用自身。从上面的源代码中可以看出,当estimate_sigma
进行自身调用时,它将multichannel
作为False
传递。这意味着在递归调用期间将发生“情况A”。这次,程序将不会进入上面的if
块,并且递归将结束,从而结束函数的执行并返回。