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图像!)