在skimage的模块_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')在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它似乎并没有引入任何新的函数。
发布于 2018-10-31 18:44:31
请注意,estimate_sigma的递归调用位于if子句中:
if multichannel:
sigmas = [estimate_sigma(image[..., c], multichannel=False)...
...
return _sigma_est_dwt(detail_coeffs, distribution='Gaussian')情况A)如果我们用multichannel=False调用estimate_sigma,函数将不会进入If -子句内部,因此不会调用自身,并将返回到其主体的末尾。
情况B)如果我们使用multichannel=True调用estimate_sigma,则条件将成功,因此estimate_sigma将调用自身。从上面的源代码可以看出,当estimate_sigma调用自己时,它将multichannel作为False传递。这意味着在递归调用期间,将发生“案例A”。这一次,程序不会进入上面的if块,递归将结束,结束函数的执行并返回。
基本上的想法是:如果我们有多个通道,让我们将它们分成单独的通道,并对每个通道进行sigma估计
https://stackoverflow.com/questions/53081248
复制相似问题