为什么这个看似递归的代码在skirage的源代码中工作?

2024-09-27 09:28:19 发布

您现在位置:Python中文网/ 问答频道 /正文

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

似乎没有任何新的功能。你知道吗


Tags: 模块代码frompyimageimportfalseas
1条回答
网友
1楼 · 发布于 2024-09-27 09:28:19

请注意,^{}的递归调用位于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。这意味着在递归调用期间将发生“case A”。这一次程序将不会进入上面的if块,递归将结束,结束函数的执行并返回。


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

相关问题 更多 >

    热门问题