Clustered Error Correction with Grouped 4D Gaussian Splatting

Find where a dynamic scene renders wrong, put a splat there, and move splats with the object they belong to.

Taeho Kang1, Jaeyeon Park1, Kyungjin Lee1, Youngki Lee1

1Seoul National University

Presented at SIGGRAPH Asia 2025

Abstract

Existing 4D Gaussian Splatting (4DGS) methods struggle to accurately reconstruct dynamic scenes, often failing to resolve ambiguous pixel correspondences and inadequate densification in dynamic regions. We address these issues by introducing a novel method composed of two key components: (1) Elliptical Error Clustering and Error Correcting Splat Addition that pinpoints dynamic areas to improve and initialize fitting splats, and (2) Grouped 4D Gaussian Splatting that improves consistency of mapping between splats and represented dynamic objects.

Specifically, we classify rendering errors into missing-color and occlusion types, then apply targeted corrections via backprojection or foreground splitting guided by cross-view color consistency. Evaluations on Neural 3D Video and Technicolor datasets demonstrate state-of-the-art perceptual rendering quality, improving 0.39 dB PSNR on the Technicolor Light Field dataset, with better temporal consistency and object–splat alignment.

Problem

Extending 3D Gaussian Splatting to moving scenes breaks two things at once: densification stops finding the regions that need splats, and a single splat can no longer tell which pixels it matches in the next frame.

3D Gaussian Splatting (3DGS) renders a captured static scene in real time; 4D Gaussian Splatting (4DGS) extends it to scenes that move, and the moving parts are where detail is lost.

Densification fails first. 3DGS adds splats where the viewpoint gradient is large; in 4D that gradient is dominated by temporal transform error and visibility changes and no longer points at the moving regions.

Frame t Frame t+1 Reference Mark Candidate Mark Candidate Transform

The same striped pattern in two consecutive frames, matched as a whole and through one splat.

Correspondence fails second. The blue squares crop the same stripes from frame t and frame t+1. Seen whole, the motion is obvious. Seen through one splat, the filled reference mark, the three dashed candidate marks and their candidate transforms are equally plausible, and nothing in the loss objects to the wrong one.

E-D3DGS and STG attack densification with a multi-view DSSIM loss and uniformly sampled error patches. Neither localises the error or tracks which splat belongs to which object, so their renderings flicker and lose fine texture.

Key idea

Find the errors in the rendered image instead of in the gradient, and give a splat its motion from the group it belongs to instead of from itself.

A lower densification threshold does not help: Baseline Lower Threshold in the ablation below grows Ex4DGS from 426K to 593K splats for no PSNR gain. Instead, compare the rendered frame with the ground truth and go where the pixels are wrong.

A splat projects to an ellipse, so error pixels are clustered into elliptical, single-colour pieces, each the footprint of one splat that is missing or misplaced. A second camera tells which, and the fix is to add a splat or split one.

Correspondence is resolved by the whole pattern rather than the single splat. Splats that move together share one dynamic transform at the group level, each keeping only a static offset. A new splat joins the nearest group and inherits its motion.

Method

CEM-4DGS first trains a Grouped 4D Gaussian Splatting model, then repeatedly clusters its rendering errors into ellipses and corrects each cluster with a new or split splat.

Grouped dynamic splats

Grouped 4D Gaussian Splatting Three bands on Grouped 4D Gaussian Splatting, all schematic except the fabric photograph. Band one: a group of five splats inside a dashed group envelope with a group-frame glyph at frame t, and the same group at t+1 after one shared rotation and translation; thin spokes from the frame origin to every member's centre are the members' relative poses; the star they form is the same shape in both frames, only rotated with the group. Band two: gradual group splitting, one static group, drawn as a dotted grey outline around every splat, in which three overlapping splats carry coherent but distinct large displacements, a fourth splat overlapping them carries a large displacement in a clearly different direction, and an isolated splat a large displacement elsewhere; edges join only the overlapping and coherent neighbours, so the adjacent incoherent splat and the isolated splat are nodes without edges; the connected component becomes a new dynamic group inside a blue dashed rounded outline fitted to its three members, with its own group frame; the incoherent neighbour, whose tip overlaps the middle member, stays outside that outline, while the other two keep their displacements and stay static. Band three: two 3x enlargements of one window of the Painter's striped shirt, cut at native resolution from the ground-truth frame; hollow marks are four splats at frame t, filled marks their positions at t+1. Left, each splat has its own transform and lands on a neighbouring, equally plausible stripe. Right, one shared transform, drawn once per member as four identical navy arrows, carries every member to the correct stripe. Marks and the displacement are schematic: the t+1 marks sit on measured stripe maxima, the frame-t marks are those positions minus one common displacement, the drifted positions are illustrative, and none are recovered splat geometry. {"grouping": {"source": "/private/tmp/claude-501/-Users-th-Documents-GitHub-tho-kn-github-io/836bd40a-6c27-4884-8bb4-ea9e3c60053f/scratchpad/papers/cem4dgs/Sections/04_method.tex", "source_sha256": "ae8bb8b86b25ef5a2fa6e219ca3d25e8c4c62e4fe66ac27a111952c5f7f73576", "kind": "schematic splat marks over one native-resolution frame of the striped shirt; not recovered splat geometry, not a consecutive-frame pair, and the drifted positions in the Independent Splats panel are illustrative, not an observed optimisation trajectory", "fabric": {"file": "group_fabric.png", "deck": "/private/tmp/claude-501/-Users-th-Documents-GitHub-tho-kn-github-io/836bd40a-6c27-4884-8bb4-ea9e3c60053f/scratchpad/papers/cem4dgs/images/inject_viz.pptx", "deck_sha256": "fa4116c3f4ee6bc6bf9bcf0cb9567c58b2620a843e2b0332613eed9a3e22ebf5", "member": "ppt/media/image5.png (ground-truth frame, the same member as the lower row's GT)", "member_sha256": "f31a95ecd2d0fc630a02d3196945ceb8b21155490d177e77569e0e95e634edd9", "original_size": [2048, 1088], "crop_xyxy_half_open": [717, 606, 1003, 738], "processing": "1:1 crop, no resampling, no tone adjustment"}, "window_crop_xywh": [145.3, 28.6, 95, 44], "zoom": 3.0, "stripes": {"normal_angle_deg_from_x_axis": 60.0, "period_px": 4.1, "method": "brightness profile along the stripe normal over the window, angle maximising profile contrast (60 deg at every probe), median peak spacing 4.0 to 4.25 px", "note": "the shirt's stripes are 4 px apart at native resolution, so the window is enlarged 3x for the marks to sit on individual stripes"}, "displacement_t_to_t1_px": {"value_across_along": [1.5, 14.0], "value_xy": [12.87, -5.7], "kind": "schematic; a single frame is drawn, standing for t+1, and the frame-t positions are the t+1 positions minus this displacement"}, "marks_crop_px": {"m3": {"t": [187.1, 41.44], "t1_grouped": [199.97, 35.74], "t1_independent": [197.64, 41.7]}, "m1": {"t": [188.5, 49.87], "t1_grouped": [201.37, 44.17], "t1_independent": [205.36, 47.06]}, "m2": {"t": [188.65, 56.13], "t1_grouped": [201.53, 50.43], "t1_independent": [179.97, 57.1]}, "m5": {"t": [190.55, 65.42], "t1_grouped": [203.43, 59.72], "t1_independent": [205.64, 55.56]}}, "mark_rule": "grouped and independent t+1 marks are snapped within +-2 px across the stripe to the local brightness maximum; independent marks sit one stripe period across from the grouped position (or slid along a wrong stripe); frame-t marks are the grouped marks minus the shared displacement", "mark_shape": "ellipse rx 3 ry 9 figure units, long axis along the measured stripe direction", "bands": {"A": "schematic (the group-frame glyph, a dot with two stubs, is named in the figure as Group Frame x_G(t), r_G(t)): five non-overlapping member splats on a ring in one group at frame t, the same group under one rotation (-28 deg) and translation at t+1; the frame glyph is the group frame, the five thin spokes from its origin to every member's centre are the members' relative poses, drawn above the members with white halos, so the star is the same shape in both frames; no measured geometry", "B": "schematic: state 1 encloses every splat in a dotted grey static-group outline; two background static splats, three overlapping splats with coherent but distinct displacement vectors (directions 20 degrees apart, different lengths), one splat overlapping the component with a displacement about 100 degrees away (cosine about -0.17, fails coherence), and one isolated splat with a large displacement in another direction (fails overlap and coherence); edges, component and new group drawn per Graph-based Dynamic Grouping; no measured geometry", "C": "fabric marks as described in marks_crop_px and mark_rule"}}, "last_verified": "2026-09-06"} Shared Dynamic Transform, Static Relative Pose Shared Dynamic Transform Group Frame xG(t), rG(t) Frame t Relative Pose x, r Frame t+1 Same Relative Pose Gradual Group Splitting d One Static Group Graph over Displaced Splats New Dynamic Group Per Connected Component Repeated Throughout Training Correspondence on a Striped Fabric Independent Splats Grouped Splats Splat at t Splat at t+1 Independent Transform Shared Transform

The representation, how groups form, and what they buy.

A splat's motion is split in two. The group carries a position and rotation over time, xG(t) and rG(t), shared by every member; each splat keeps its own position and rotation relative to that frame, and those never change. The top band applies one rigid motion between Frame t and Frame t+1, so the envelope, the Group Frame and all five members turn together, and the spokes from that frame to each member keep their shape exactly, only rotated. A splat has no per-frame freedom of its own, which is what stops it drifting.

Groups are not given in advance. All splats begin as One Static Group, and a regulariser keeps a splat's displacement d small while it moves with that group, so a d that grows marks a splat that no longer does. An edge joins two of those displaced splats only when they both overlap and point the same way. The three in the middle satisfy both and become a New Dynamic Group; the splat just beneath them overlaps but pulls the other way, and the one off to the left neither overlaps nor agrees. Both keep their d and stay static. This repeats throughout training.

The bottom band is what grouping buys, on the shirt from the Problem section. Hollow marks are four splats at t, filled marks the same four at t+1. Left, Independent Splats: each carries its own transform, and nothing stops it landing a stripe across. Right, Grouped Splats: one shared transform carries all four along the stripes they started on.

Error correction cycle

Error Clustering and Splat Addition The Painter render, the paper's own elliptical error-cluster visualization, and its after-addition render, from the same frame and camera. Broad crimson corner brackets identify the same cloth region, not individual algorithm clusters. Photograph brightness is adjusted identically before and after. Cluster colors are native source annotations. Arrows indicate operations, not camera rays. {"lacking": {"source": {"deck": "/private/tmp/claude-501/-Users-th-Documents-GitHub-tho-kn-github-io/836bd40a-6c27-4884-8bb4-ea9e3c60053f/scratchpad/papers/cem4dgs/images/inject_viz.pptx", "deck_sha256": "fa4116c3f4ee6bc6bf9bcf0cb9567c58b2620a843e2b0332613eed9a3e22ebf5", "gt_member": "ppt/media/image5.png", "render_member": "ppt/media/image1.png", "after_member": "ppt/media/image2.png", "clusters_member": "ppt/media/image4.png", "original_size": [2048, 1088], "crop_xyxy_half_open": [840, 640, 1240, 960], "registration": "none; full-frame GT/render RMSE 0.021 on a shared pixel grid, render vs after-addition RMSE 0.005"}, "display": {"photographs": "round(255 * (RGB / 255)^0.7), identical for GT, render and after", "clusters": "source cluster visualization, round(255 * (RGB / 255)^0.55)", "absolute_error": "round(255 * min(mean(abs(GT - render)) / 64, 1)^0.6); measured before photograph adjustment"}, "region": {"kind": "broad cloth-region corner brackets, not an algorithm cluster or a connected component", "selection_roi_full_xyxy": [940, 730, 1150, 935], "bounds_full_xyxy": [949, 733, 1115, 939], "selection": "2.5 to 97.5 coordinate percentiles of all error pixels above 12 after sigma 0.7 smoothing inside the cloth ROI, padded 12 native pixels; same bounds in every panel", "selected_error_pixels": 3547}}, "occl": {"source": {"deck": "/private/tmp/claude-501/-Users-th-Documents-GitHub-tho-kn-github-io/836bd40a-6c27-4884-8bb4-ea9e3c60053f/scratchpad/papers/cem4dgs/images/split_viz.pptx", "deck_sha256": "9a96c3d9ca37a34a822e3d5ff5799a3bba83767cfbdde5850f446a2c18a782d1", "gt_member": "ppt/media/image3.png", "render_member": "ppt/media/image4.png", "ellipses_member": "ppt/media/image1.png", "split_member": "ppt/media/image2.png", "original_size": [2048, 1088], "crop_xyxy_half_open": [1049, 564, 1343, 781], "registration": "none; full-frame GT/render RMSE 0.014 on a shared pixel grid"}, "measurement": {"scalar": "mean(abs(GT_RGB - Render_RGB)) on uint8 values", "threshold_strictly_greater_than": 12, "connectivity": 8, "morphology": "Gaussian smoothing sigma=0.7 px before thresholding; no dilation or closing", "display": "round(255 * min(mean(abs(GT - render)) / 64, 1)^0.6); measured before photograph adjustment", "ellipse": "axes from the covariance of the largest component; radii are sqrt(2) times the half-extents of its oriented bounding box, so the ellipse contains every pixel corner; minor radius padded to at least 7 figure units for legibility; not the method clustering algorithm"}, "largest_component": {"area": 1927, "centroid_crop": [129.1, 104.6], "bbox_xyxy_crop": [49, 83, 189, 139], "peak": 99.0, "centroid_full": [1178.1, 668.6], "method_ellipse_px_within_10px": 440, "split_mark_px_within_10px": 272}, "ellipse_crop_px": {"center": [129.57420861442657, 105.06201349247534], "radii": [113.96451041681591, 39.51812813103356], "angle_deg": -171.49888593280366}, "runner_up_components": [{"area": 131, "centroid_crop": [229.1, 120.0], "bbox_xyxy_crop": [224, 105, 236, 133], "peak": 56.0}, {"area": 56, "centroid_crop": [217.3, 127.4], "bbox_xyxy_crop": [212, 124, 223, 132], "peak": 43.3}], "note": "The globally largest component of this frame, 845 px at (1378,905) on the collar edge, lies outside this crop; the crop follows the paper's own hair example from split_viz.pptx."}, "last_verified": "2026-09-06"} Render Elliptical Error Clustering Error-Correcting Splat Addition Before Correction Error Clusters After Addition

Render, cluster, correct.

The correction cycle runs on the trained model. Grouped 4D Gaussian Splatting renders the left panel, elliptical error clustering takes its difference from the ground truth to give the middle panel, and error-correcting splat addition places a splat in the bracketed region to give the right panel.

Adding or splitting splats

Lacking-Splat and Occlusion Errors Same-frame, same-camera ground truth, render, measured mean absolute RGB error, laid out as two self-contained titled blocks, each with its own column labels, whose fourth panel differs: for Lacking Splats, After Addition is the render after backproject addition, at the same crop and brightness adjustment as its ground truth and render; for Occlusion, Split Splats is the paper's own visualization, the render with the splats that foreground splitting split drawn in red, so it marks which splats were split rather than showing a corrected image. The wider Painter crop includes the sleeve, torso, and surrounding scene. Broad crimson corner brackets identify the cloth region rather than a single connected component, and sit at the same place in every panel of the row. The Fabien occlusion crop and ellipse are unchanged; its three photographic panels now carry the same brightness adjustment as the Lacking Splats block. All photograph comparisons use matched brightness; error images use a common monotonic levels and gamma adjustment computed from unadjusted source pixels. No generated detail is added. {"lacking": {"source": {"deck": "/private/tmp/claude-501/-Users-th-Documents-GitHub-tho-kn-github-io/836bd40a-6c27-4884-8bb4-ea9e3c60053f/scratchpad/papers/cem4dgs/images/inject_viz.pptx", "deck_sha256": "fa4116c3f4ee6bc6bf9bcf0cb9567c58b2620a843e2b0332613eed9a3e22ebf5", "gt_member": "ppt/media/image5.png", "render_member": "ppt/media/image1.png", "after_member": "ppt/media/image2.png", "clusters_member": "ppt/media/image4.png", "original_size": [2048, 1088], "crop_xyxy_half_open": [840, 640, 1240, 960], "registration": "none; full-frame GT/render RMSE 0.021 on a shared pixel grid, render vs after-addition RMSE 0.005"}, "display": {"photographs": "round(255 * (RGB / 255)^0.7), identical for GT, render and after", "clusters": "source cluster visualization, round(255 * (RGB / 255)^0.55)", "absolute_error": "round(255 * min(mean(abs(GT - render)) / 64, 1)^0.6); measured before photograph adjustment", "after": "lacking_wide_after.png, the after-addition member at the same crop, round(255 * (RGB / 255)^0.7) like GT and render"}, "region": {"kind": "broad cloth-region corner brackets, not an algorithm cluster or a connected component", "selection_roi_full_xyxy": [940, 730, 1150, 935], "bounds_full_xyxy": [949, 733, 1115, 939], "selection": "2.5 to 97.5 coordinate percentiles of all error pixels above 12 after sigma 0.7 smoothing inside the cloth ROI, padded 12 native pixels; same bounds in every panel", "selected_error_pixels": 3547}}, "occl": {"source": {"deck": "/private/tmp/claude-501/-Users-th-Documents-GitHub-tho-kn-github-io/836bd40a-6c27-4884-8bb4-ea9e3c60053f/scratchpad/papers/cem4dgs/images/split_viz.pptx", "deck_sha256": "9a96c3d9ca37a34a822e3d5ff5799a3bba83767cfbdde5850f446a2c18a782d1", "gt_member": "ppt/media/image3.png", "render_member": "ppt/media/image4.png", "ellipses_member": "ppt/media/image1.png", "split_member": "ppt/media/image2.png", "original_size": [2048, 1088], "crop_xyxy_half_open": [1049, 564, 1343, 781], "registration": "none; full-frame GT/render RMSE 0.014 on a shared pixel grid"}, "measurement": {"scalar": "mean(abs(GT_RGB - Render_RGB)) on uint8 values", "threshold_strictly_greater_than": 12, "connectivity": 8, "morphology": "Gaussian smoothing sigma=0.7 px before thresholding; no dilation or closing", "display": "round(255 * min(mean(abs(GT - render)) / 64, 1)^0.6); measured before photograph adjustment", "ellipse": "axes from the covariance of the largest component; radii are sqrt(2) times the half-extents of its oriented bounding box, so the ellipse contains every pixel corner; minor radius padded to at least 7 figure units for legibility; not the method clustering algorithm"}, "largest_component": {"area": 1927, "centroid_crop": [129.1, 104.6], "bbox_xyxy_crop": [49, 83, 189, 139], "peak": 99.0, "centroid_full": [1178.1, 668.6], "method_ellipse_px_within_10px": 440, "split_mark_px_within_10px": 272}, "ellipse_crop_px": {"center": [129.57420861442657, 105.06201349247534], "radii": [113.96451041681591, 39.51812813103356], "angle_deg": -171.49888593280366}, "runner_up_components": [{"area": 131, "centroid_crop": [229.1, 120.0], "bbox_xyxy_crop": [224, 105, 236, 133], "peak": 56.0}, {"area": 56, "centroid_crop": [217.3, 127.4], "bbox_xyxy_crop": [212, 124, 223, 132], "peak": 43.3}], "note": "The globally largest component of this frame, 845 px at (1378,905) on the collar edge, lies outside this crop; the crop follows the paper's own hair example from split_viz.pptx.", "after": {"file": "occl_after.png", "member": "ppt/media/image2.png", "member_sha256": "97e4b38ef66b7617398573f3a40d32692bd617aff83e86ed1e250732a2bbac9c", "crop_xyxy_half_open": [1049, 564, 1343, 781], "processing": "1:1 crop, no resampling; round(255 * (RGB / 255)^0.7) like the block's GT and render", "meaning": "the paper's Fig. 6 'Split Splats' panel: the render with the splats that foreground splitting split drawn in red; it marks which splats were split and is not a corrected render (it differs from the render only on the red marks, 4146 of 2.2M full-frame pixels)"}, "display": {"photographs": "round(255 * (RGB / 255)^0.7), identical for GT, render and split-splats panels, applied 2026-09-07 so the block matches the Lacking Splats block; raw GT and render have equal mean luminance (74.5 vs 73.9 of 255), so the earlier visual mismatch was texture, not exposure"}}, "last_verified": "2026-09-07", "layout": {"blocks": [{"title": "Lacking Splats", "columns": ["Ground Truth", "Render", "Absolute Error", "After Addition"]}, {"title": "Occlusion", "columns": ["Ground Truth", "Render", "Absolute Error", "Split Splats"]}], "panel_width": 176, "panel_x": [16, 211, 405, 600]}} Lacking Splats Ground Truth Render Absolute Error After Addition Occlusion Ground Truth Render Absolute Error Split Splats

Each error type as ground truth, render, difference, and the fix.

Each block shows one frame four times: ground truth, render, the absolute difference between them, brightened so it is visible, and the fix. The marks sit in the same place in all four. In Lacking Splats the brackets enclose a region where the render loses the folds of the fabric because nothing covers them, and After Addition puts them back. In Occlusion the ellipse encloses a hair band that a foreground splat has grown over, and in Split Splats the red inside the ellipse marks the splats that were split, not the annotation.

Which fix applies is decided by a second camera. The ellipse centre is back-projected at its rendered depth into another view; if the ground-truth colour there matches, backproject addition adds a thin-disk splat aligned with the ellipse and joins it to the nearest group, as in Lacking Splats. If it does not, the point is off the true surface, so foreground splitting splits the occluding splat instead, uncovering what was behind it, as in Occlusion.

Interactive 3D Viewer

The viewer plays a trained model in the browser at reduced quality: drag to orbit, scroll to zoom, scrub the timeline.

Results

The gains are in the dynamic details: clearer teeth and a button, stripes on clothing, sharper car window boundaries.

Splat-Object Correspondence over Time Splat-object correspondence over time in the Train scene, from the paper's Fig. 8. One reference render on the left shows the scene; to its right, two rows of three panels show the same region at +0.0, +0.1 and +0.2 s (every third frame) with every dynamic splat drawn in its own random colour. The colours are the source's own per-splat random colours, not a palette of ours, and are the data: a colour pattern that holds across the row means the same splats stay on the same part of the object. Grouped Splats is the paper's Group row, ours; Independent Splats is its No Group row, the baseline with per-splat motion. The crimson box on the render marks the railroad-car region the zoom panels show at +0.0 s; the deck's box moves with the car at later times. No tone adjustment, no generated detail. {"source": {"paper_figure": "Fig. 8, images/qualitative_consistency.pdf (the Train example; the Fabien example was dropped because its render panel is near-black at page scale and its row difference does not read); Sections/05_evaluation.tex sec:consistency", "train_deck": {"file": "/private/tmp/claude-501/-Users-th-Documents-GitHub-tho-kn-github-io/836bd40a-6c27-4884-8bb4-ea9e3c60053f/scratchpad/papers/cem4dgs/images/qualitative_consistency.pptx", "sha256": "cbc5277833b7d8c9eb1f217fce81a8045b88f4d4d4b9762177338c314c31543c"}}, "train": {"render": {"file": "train_render.png", "member": "ppt/media/image7.png", "size": [220, 144], "note": "the deck's Render panel in the Group row, copied as is; the deck places it beside the +0.0 s column"}, "grouped": {"t0": "ppt/media/image9.png", "t1": "ppt/media/image10.png", "t2": "ppt/media/image11.png (deck srcRect r=1.176%, so the rightmost 2 px are cropped: 127x100)"}, "independent": {"t0": "ppt/media/image12.png", "t1": "ppt/media/image13.png", "t2": "ppt/media/image14.png"}, "zoom_panels": "the deck's own zoom insets (129x100 or 129x101), copied as is and drawn at 129x100 with preserveAspectRatio slice, so at most one row of pixels is hidden", "red_box": "the deck's red box on the +0.0 s frame, redrawn in crimson on the render at the same fractional position (x 0.187, y 0.139, w 0.220, h 0.270 of the frame); in the deck the box tracks the railroad car and moves left at +0.1 s and +0.2 s", "full_frame_columns_not_shown": "ppt/media/image2/3/5 (Group +0.0/+0.1/+0.2 s), image1/4/6 (No Group), image8 (No Group render)"}, "display": {"tone": "none; per-splat colours are the source's own random unique colours, not adjusted or recoloured", "row_labels": {"Grouped Splats": "paper: Group (ours)", "Independent Splats": "paper: No Group (baseline, per-splat motion)"}}, "last_verified": "2026-09-07"} Render +0.0 s +0.1 s +0.2 s Grouped Splats Independent Splats

Each dynamic splat in its own random colour, stepped 0.1 s at a time.

Every dynamic splat is drawn in a colour of its own, so a splat that stays on the same part of the object keeps that colour in the same place. The box on the Render marks a patch of the railroad car, and the three zooms step 0.1 s apart across it. Under Grouped Splats the pattern in that patch holds its shape; under Independent Splats it churns, because each splat is free to slide onto a neighbouring part of the car between frames. The colours are the renderer's own per-splat labels, not a scale of ours.

Video Results

Ground truth, the Ex4DGS baseline and ours on a dynamic detail.

Ground truth against ours, Ex4DGS, E-D3DGS and STG.

Quantitative Results

CEM-4DGS has the highest PSNR on both benchmarks; the margin is larger on Technicolor, where dynamic objects fill more of the frame.

DSSIM1 and DSSIM2 follow the two data_range conventions in prior work; other methods' numbers are their official results.

Technicolor Light Field, five scenes at full resolution with one held-out camera: in the PSNR column ours reaches 34.04 dB, 0.39 dB above SWinGS at 33.65, the best prior method. Ours also leads DSSIM2 and LPIPS.

Technicolor Light Field

Method PSNR ↑ DSSIM1 ↓ DSSIM2 ↓ LPIPS ↓
DyNeRF31.80—0.0210.140
HyperReel32.730.047—0.109
4DGS29.540.0650.0320.149
4DGaussians30.790.0790.0400.178
STG33.560.0400.0190.084
SWinGS33.650.033—0.117
E-D3DGS33.240.047—0.100
Ex4DGS33.620.0420.0190.088
CEM-4DGS (Ours)34.040.0400.0180.081

Neural 3D Video, six scenes at half resolution, Gaussian-splatting rows only: dynamic regions are small and so are the differences. Ours leads the PSNR column at 32.23; STG leads DSSIM, E-D3DGS LPIPS.

Neural 3D Video (selected methods)

Method PSNR ↑ DSSIM1 ↓ DSSIM2 ↓ LPIPS ↓
4DGS32.01—0.0140.055
4DGaussians31.15—0.0160.049
STG32.050.0260.0140.044
E-D3DGS31.310.028—0.037
Ex4DGS32.110.0300.0150.048
CEM-4DGS (Ours)32.230.0280.0150.047

The ablation is on the same Technicolor scenes; Baseline is Ex4DGS and each row removes one component. In the PSNR column, Without Group, error correction alone, reaches 33.81 dB; Without Error-based Correction, grouping alone, 33.66; together, 34.04.

Ablation on Technicolor Light Field

Method PSNR ↑ DSSIM1 ↓ LPIPS ↓ N splats ↓
Baseline33.620.04180.0878426K
Baseline Lower Threshold33.610.04100.0845593K
Without Group33.810.04070.0840502K
Pixel-wise Backprojection33.760.04090.0807600K
Patch-wise Backprojection33.780.04110.0820551K
Without Color-aware Clustering33.810.04080.0813561K
Without Shape-based Division33.930.04040.0813558K
Only Backproject Addition33.890.04040.0804561K
Only Foreground Splitting33.840.04080.0821551K
Without Error-based Correction33.660.04150.0860550K
CEM-4DGS (Ours)34.040.04010.0809565K

Limitations

The formulation suits rigid or geometrically contiguous deformation, and the correction stage adds training time.

Each splat has a fixed colour and motion is keyframed, so large appearance changes cannot be modelled; translucent objects and volumetric effects such as flames remain hard, as for 3DGS and 4DGS generally. Correction lengthens training on Technicolor from 1.90 h to 3.21 h.

BibTeX

@inproceedings{kang2025cem4dgs,
  title        = {Clustered Error Correction with Grouped 4D Gaussian Splatting},
  author       = {Kang, Taeho and Park, Jaeyeon and Lee, Kyungjin and Lee, Youngki},
  booktitle    = {SIGGRAPH Asia 2025 Conference Papers},
  month        = {December},
  year         = {2025},
  pages        = {1--12},
  publisher    = {Association for Computing Machinery},
  address      = {New York, NY, USA},
  doi          = {10.1145/3757377.3763858},
  url          = {https://doi.org/10.1145/3757377.3763858}
}