code: def visual_callback_3d(fig=None, plot_each=1):
      
      
      from mpl_toolkits.mplot3d import Axes3D
      # PyMCubes package is required for `visual_callback_3d`
      try:
          import mcubes
      except ImportError:
          raise ImportError("PyMCubes is required for 3D `visual_callback_3d`")
      
      # Prepare the visual environment.
      if fig is None:
          fig = plt.figure()
      fig.clf()
      ax = fig.add_subplot(111, projection='3d')
      plt.pause(0.001)
      
      counter = [-1]
  
      def callback(levelset):
  
          counter[0] += 1
          if (counter[0] % plot_each) != 0:
              return
  
          if ax.collections:
              del ax.collections[0]
  
          coords, triangles = mcubes.marching_cubes(levelset, 0.5)
          ax.plot_trisurf(coords[:, 0], coords[:, 1], coords[:, 2],
                          triangles=triangles)
          plt.pause(0.1)
  
      return callback
docs: Returns a callback than can be passed as the argument `iter_callback`
      of `morphological_geodesic_active_contour` and
      `morphological_chan_vese` for visualizing the evolution
      of the levelsets. Only works for 3D images.
      
      Parameters
      ----------
      fig : matplotlib.figure.Figure
          Figure where results will be drawn. If not given, a new figure
          will be created.
      plot_each : positive integer
          The plot will be updated once every `plot_each` calls to the callback
          function.
      
      Returns
      -------
      callback : Python function
          A function that receives a levelset and updates the current plot
          accordingly. This can be passed as the `iter_callback` argument of
          `morphological_geodesic_active_contour` and
          `morphological_chan_vese`.