[docs]classZNormalization(NormalizationTransform):"""Subtract mean and divide by standard deviation. Args: masking_method: See :class:`~torchio.transforms.preprocessing.intensity.NormalizationTransform`. **kwargs: See :class:`~torchio.transforms.Transform` for additional keyword arguments. """def__init__(self,masking_method:TypeMaskingMethod=None,**kwargs):super().__init__(masking_method=masking_method,**kwargs)self.args_names=['masking_method']defapply_normalization(self,subject:Subject,image_name:str,mask:torch.Tensor,)->None:image=subject[image_name]standardized=self.znorm(image.data,mask,)ifstandardizedisNone:message=('Standard deviation is 0 for masked values'f' in image "{image_name}" ({image.path})')raiseRuntimeError(message)image.set_data(standardized)@staticmethoddefznorm(tensor:torch.Tensor,mask:torch.Tensor,)->Optional[torch.Tensor]:tensor=tensor.clone().float()values=tensor[mask]mean,std=values.mean(),values.std()ifstd==0:returnNonetensor-=meantensor/=stdreturntensor