code: def test_opencv_rgb(self, device, dtype):
      img = [
          [
              [170, 189, 182, 255],
              [169, 209, 216, 215],
              [196, 213, 228, 191],
              [207, 126, 224, 249],
          ],
          [
              [61, 104, 74, 225],
              [65, 112, 176, 148],
              [78, 147, 176, 120],
              [124, 61, 155, 211],
          ],
          [
              [73, 111, 90, 175],
              [77, 117, 163, 130],
              [83, 139, 163, 120],
              [132, 84, 137, 155],
          ],
      ]
      img = (
          torch.tensor(img, device=device, dtype=dtype).view(1, 3, 4, 4)
          / 255
      )
  
      guide = [
          [
              [136, 196, 198, 21],
              [149, 185, 196, 141],
              [115, 110, 87, 155],
              [126, 82, 109, 207],
          ],
          [
              [188, 42, 48, 0],
              [73, 200, 58, 173],
              [53, 140, 130, 34],
              [129, 3, 41, 73],
          ],
          [
              [85, 36, 51, 0],
              [33, 82, 37, 87],
              [35, 70, 57, 36],
              [50, 10, 30, 43],
          ],
      ]
      guide = (
          torch.tensor(guide, device=device, dtype=dtype).view(
              1, 3, 4, 4
          )
          / 255
      )
  
      kernel_size = 5
      sigma_color = 0.1
      sigma_distance = (0.5, 0.5)
  
      # Expected output generated with OpenCV:
      # import cv2
      # expected = cv2.ximgproc.jointBilateralFilter(
      #   guide.squeeze().permute(1, 2, 0).numpy(),
      #   img.squeeze().permute(1, 2, 0).numpy(),
      #   kernel_size,
      #   sigma_color,
      #   sigma_distance[0],
      # ).transpose(2, 0, 1)
      expected = [
          [
              [0.6671455, 0.74172455, 0.7328562, 1.0],
              [0.66403687, 0.81948805, 0.8357967, 0.8431371],
              [0.7673652, 0.836736, 0.8925936, 0.7494889],
              [0.8120746, 0.49431974, 0.8778994, 0.9764218],
          ],
          [
              [0.23984201, 0.40574068, 0.35012922, 0.88235295],
              [0.2555589, 0.43905944, 0.65692204, 0.58039117],
              [0.30529743, 0.5791127, 0.68724936, 0.47124338],
              [0.48745763, 0.23940866, 0.6072882, 0.82737976],
          ],
          [
              [0.2868149, 0.43398118, 0.39570162, 0.6862745],
              [0.30228183, 0.45868847, 0.6153678, 0.50980365],
              [0.3252297, 0.5474381, 0.6367775, 0.47098273],
              [0.51799667, 0.32952034, 0.53696644, 0.6078228],
          ],
      ]
      expected = torch.tensor(
          expected, device=device, dtype=dtype
      ).view(1, 3, 4, 4)
  
      out = joint_bilateral_blur(
          img, guide, kernel_size, sigma_color, sigma_distance
      )
      self.assert_close(out, expected)
  
imports: import pytest
  import torch
  from kornia.filters import BilateralBlur, JointBilateralBlur, bilateral_blur, joint_bilateral_blur
  from kornia.testing import BaseTester, tensor_to_gradcheck_var
label_desc: Use image node_id 10 for calling the TestJointBilateralBlur obj's underlying member method code with example usage: obj.test_opencv_rgb(device, dtype) without return types