/// <summary>
 /// Extracts the contours around all voxel values in the volume that have the given foreground value.
 /// All other voxel values (zero and anything that is not the foreground value) is treated as background.
 /// Contour extraction will take account of holes and inserts, up to the default nesting level.
 /// </summary>
 /// <param name="volume"></param>
 /// <param name="foregroundId">The voxel value that should be used as foreground in the contour search.</param>
 /// <param name="smoothingType">The smoothing that should be applied when going from a point polygon to
 /// a contour.</param>
 /// <returns></returns>
 public static IReadOnlyList <ContourPolygon> ContoursWithHoles(
     this Volume2D <byte> volume,
     byte foregroundId = 1,
     ContourSmoothingType smoothingType = ContourSmoothingType.Small)
 => ExtractContours.ContoursWithHoles(volume, foregroundId, smoothingType);