Обратите внимание, что рекурсивный вызов 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, поэтому не вызовет себя и вернется к концу своего тела.
Случай B) Если мы вызовем estimate_sigma
с multichannel=True
, условие выполнится успешно, поэтому estimate_sigma
вызовет себя. Как видно из вышеприведенного фрагмента, когда estimate_sigma
вызывает себя, он передает multichannel
как False
. Это означает, что во время рекурсивного вызова произойдет «случай А». На этот раз программа не войдет в указанный выше блок if
, и рекурсия завершится, завершив выполнение функции и вернувшись.
По сути, идея такова: если у нас есть несколько каналов, давайте разделим их на отдельные каналы и проведем оценку сигма на каждом канале