class_docstr: Denormalize Torch Tensor into np image format.
docstr: Denormalize the input.
  
  Args:
      tensor (Tensor): Input tensor image (C, H, W)
  
  Returns:
      Denormalized numpy array (H, W, C).
code: def __call__(self, tensor: Tensor) -> np.ndarray:
      """Denormalize the input.
  
      Args:
          tensor (Tensor): Input tensor image (C, H, W)
  
      Returns:
          Denormalized numpy array (H, W, C).
      """
      if tensor.dim() == 4:
          if tensor.size(0):
              tensor = tensor.squeeze(0)
          else:
              raise ValueError(
                  f"Tensor has batch size of {tensor.size(0)}. Only single batch is supported."
              )
  
      denormalized_per_channel = [
          (tnsr * std) + mean
          for tnsr, mean, std in zip(tensor, self.mean, self.std)
      ]
      denormalized_tensor = torch.stack(denormalized_per_channel)
  
      denormalized_array = (
          (denormalized_tensor * 255)
          .permute(1, 2, 0)
          .cpu()
          .numpy()
          .astype(np.uint8)
      )
      return denormalized_array
  
file_path: anomalib/src/anomalib/pre_processing/transforms/custom.py
imports: from __future__ import annotations
  import warnings
  import numpy
  import torch
  from torch import Tensor
label_desc: Use image node_id 2 for calling the Denormalize obj's underlying member method code with example usage: obj.__call__(tensor) and returns: denormalized_array