<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Lingfeng Xuan | Chang Nie</title><link>https://changnie.top/authors/lingfeng-xuan/</link><atom:link href="https://changnie.top/authors/lingfeng-xuan/index.xml" rel="self" type="application/rss+xml"/><description>Lingfeng Xuan</description><generator>HugoBlox Kit (https://hugoblox.com)</generator><language>en-us</language><lastBuildDate>Sat, 31 Jan 2026 00:00:00 +0000</lastBuildDate><item><title>MRASfM: Multi-Camera Reconstruction and Aggregation through Structure-from-Motion in Driving Scenes</title><link>https://changnie.top/publications/mrasfm/</link><pubDate>Sat, 31 Jan 2026 00:00:00 +0000</pubDate><guid>https://changnie.top/publications/mrasfm/</guid><description>&lt;h2 id="driving-is-the-wrong-shape-for-photogrammetry"&gt;Driving is the wrong shape for photogrammetry&lt;/h2&gt;
&lt;p&gt;Image-based reconstruction for driving is usually handled by visual SLAM, and for HD mapping and novel-view synthesis the SLAM route has a structural limitation. Its estimates are incremental and locally optimized, which blocks global refinement, and the result is drift that accumulates over a long trajectory. Structure-from-motion does the opposite: it processes everything in a batch with a global bundle adjustment at the end. The offline nature that makes SfM impractical for a live robot is exactly what makes it attractive here, because it can spend computation a real-time system cannot.&lt;/p&gt;
&lt;p&gt;So the obvious move is to use SfM for driving. Three facts about driving data make that harder than it should be.&lt;/p&gt;
&lt;p&gt;The first is the capture geometry. Classic SfM assumes you walk around the subject and photograph it from many directions. A car drives down a corridor. Viewpoints are almost collinear, which is the worst case for the translation estimation that SfM depends on.&lt;/p&gt;
&lt;p&gt;The second is that data arrives fragmented. Driving scenes are captured over short durations with limited overlap, and drives covering the same area may be recorded weeks apart. There are often no shared images at all between two datasets that need to end up in the same map.&lt;/p&gt;
&lt;p&gt;The third is calibration, and this is the one that changed how we designed everything. Vehicle calibration is difficult, initial values contain errors, and those errors get worse on uneven terrain. So the extrinsics you have at the start of a drive are not the extrinsics you need, and they are also the strongest prior available. That tension runs through the whole design.&lt;/p&gt;
&lt;h2 id="what-prior-methods-assume"&gt;What prior methods assume&lt;/h2&gt;
&lt;p&gt;Multi-camera SLAM systems are accurate and require precise internal relative poses and intrinsics as input. They need calibration done before deployment, and they struggle to accommodate different camera configurations, which restricts flexibility in practice.&lt;/p&gt;
&lt;p&gt;Incremental SfM is the closest baseline, and our criticism of it is specific. It ignores camera-set priors during incremental reconstruction and applies them only afterward, in rigid bundle adjustment once the reconstruction is already complete. By that point, errors that accumulated during incremental estimation cannot be corrected. Rigid BA cannot undo drift that has already been baked into the structure. Per-image bundle adjustment has a related problem: it can leave the internal relative poses inconsistent from frame to frame.&lt;/p&gt;
&lt;p&gt;Global multi-camera SfM does fix the relative camera poses from the start, and it is sensitive to outlier matches and tends to degenerate when the estimated relative translations are collinear. In a driving scene the trajectory is close to collinear by default, so this is a structural hazard rather than an edge case.&lt;/p&gt;
&lt;p&gt;Odometry-guided SfM takes the opposite bet and uses odometry poses and camera extrinsics directly for registration. That demands highly precise extrinsic calibration and accurate odometry, which are exactly the two things field deployment cannot reliably supply. We borrow this line of work&amp;rsquo;s idea of using homography to identify overlapping image pairs. We do not borrow the assumption that the priors can be trusted.&lt;/p&gt;
&lt;p&gt;There is also a matching problem specific to the setting. Traditional descriptors produce limited feature points in low-texture images, and road scenes are full of low-texture surfaces.&lt;/p&gt;
&lt;p&gt;Finally, existing aggregation modules for merging reconstructions typically assume shared imagery between the segments being merged. In practice that imagery usually does not exist.&lt;/p&gt;
&lt;h2 id="what-makes-it-hard"&gt;What makes it hard&lt;/h2&gt;
&lt;p&gt;Priors have to be used without being trusted. Extrinsics and odometry are the strongest signal available and the least reliable thing on the vehicle. Trust them entirely and you get one family of failures; ignore them and you get another. The design space in between is narrow.&lt;/p&gt;
&lt;p&gt;Collinearity is a real degeneracy, not a numerical nuisance. Fixed-rig global methods hinge on relative translation estimates, and straight-line driving makes those ill-conditioned.&lt;/p&gt;
&lt;p&gt;The failure modes sit exactly where the useful signal is. The road surface occupies a large part of every image and has almost no texture, so it produces both few matches and bad ones. Worse, the edges of vehicle shadows are high-contrast and get detected as feature points. A shadow edge is not a scene point. When the shadow moves, that feature moves, which injects motion into the road surface precisely where the structure matters most.&lt;/p&gt;
&lt;p&gt;Occlusion behaves differently on a rig than on a single camera. One blocked camera on a monocular system is a total failure; on a surround rig the other cameras still see the world. But that redundancy is only worth anything if registration actually shares the pose, and per-camera estimation throws the advantage away.&lt;/p&gt;
&lt;p&gt;And robustness has a price. More cameras mean more poses to optimize in bundle adjustment, which reduces efficiency. The coverage that buys robustness is paid for in optimization size, and cancelling that cost is what a large part of our design exists to do.&lt;/p&gt;
&lt;h2 id="the-camera-set-is-the-unit"&gt;The camera set is the unit&lt;/h2&gt;
&lt;p&gt;Our idea is to change the atomic element of reconstruction. Instead of treating each image as an independent camera to be solved, we take the rigid unit, every image captured at the same instant, as the thing that gets a pose. That pose is by definition the vehicle&amp;rsquo;s pose at that moment.&lt;/p&gt;
&lt;p&gt;The benefit is that the pose of a rig factorizes into a time-varying vehicle pose and a static internal relative pose. One well-observed camera can carry the poses of the cameras that see nothing useful. The rig is estimated once rather than re-learned at every frame.&lt;/p&gt;
&lt;p&gt;The important part is how that factorization is applied. We use it as a reparameterization inside registration and bundle adjustment, not as a constraint imposed afterward. That single decision does three things at once. It reduces the pose variables from one per camera per timestamp down to one per timestamp plus one per camera. It keeps the optimized rig consistent across frames, because there is only one rig to be consistent. And it turns calibration from an input that must be correct into a quantity that can be corrected.&lt;/p&gt;
&lt;h2 id="building-a-reconstruction"&gt;Building a reconstruction&lt;/h2&gt;
&lt;p&gt;Correspondence search comes first. SuperPoint detects and SuperGlue matches, pairs whose matched points fall into different semantic categories are discarded, and geometric verification removes the rest. Pairs are not all tried: with the rough internal relative poses and vehicle poses in hand, we compute the approximate field of view of each image and only match pairs that could plausibly overlap. Filtering this way improves both efficiency and accuracy, since matching everything against everything is expensive and injects noise from pairs that were never going to share content.&lt;/p&gt;
&lt;p&gt;Registration then runs in three steps. PnP is estimated on the images with the richest correspondences. Those per-image estimates are converted into per-unit estimates and fused by local robust rotation averaging and translation averaging into a single unit pose. Every remaining image in that unit gets its pose by composing the unit pose with the calibration.&lt;/p&gt;
&lt;p&gt;That middle step is where the method sits between the two failure modes described earlier. It averages, like the global family, but it averages over unit hypotheses derived from reliable images rather than over raw relative translations, which is what makes it survive collinearity.&lt;/p&gt;
&lt;p&gt;The honest accounting of this module is narrow. It has minimal effect on average pose accuracy and efficiency, and it is particularly useful for handling occluded viewpoints. In scenes with rich correspondences the impact is less noticeable. We state that tradeoff rather than presenting the module as uniformly beneficial, because the value of redundancy is concentrated in the tail.&lt;/p&gt;
&lt;p&gt;
&lt;figure id="figure-occlusion-on-one-camera-no-longer-fails-the-unit"&gt;
&lt;div class="flex justify-center"&gt;
&lt;div class="w-full"&gt;&lt;img
alt="Registration estimates a few well-observed cameras and derives the rest from rig geometry."
srcset="https://changnie.top/publications/mrasfm/camera-set-registration_hu_15bd2d6c03d3c2fd.webp 320w, https://changnie.top/publications/mrasfm/camera-set-registration_hu_e94cc5b258840200.webp 480w, https://changnie.top/publications/mrasfm/camera-set-registration_hu_29c5c9ef2f2a51f.webp 768w, https://changnie.top/publications/mrasfm/camera-set-registration_hu_3a53e7ff654a13d6.webp 1024w, https://changnie.top/publications/mrasfm/camera-set-registration_hu_6684702da025f980.webp 1080w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1279px) 88vw, 928px"
src="https://changnie.top/publications/mrasfm/camera-set-registration_hu_15bd2d6c03d3c2fd.webp"
width="1080"
height="625"
loading="lazy"
data-zoomable&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;a class="paper-image-original" href="https://changnie.top/publications/mrasfm/camera-set-registration_hu_ed2109669bad9638.webp" target="_blank" rel="noopener"&gt;View full-size image ↗&lt;/a&gt;
&lt;figcaption&gt;Occlusion on one camera no longer fails the unit.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 id="getting-the-road-out-of-the-way"&gt;Getting the road out of the way&lt;/h2&gt;
&lt;p&gt;After a unit is registered, we fit a plane model to the road points with LO-RANSAC and remove them. This targets the shadow-edge problem directly. A moving shadow edge produces a feature that is not attached to the scene, and it lands on the largest and least textured surface in view, so the triangulation noise concentrates there by default. Removing those points improves reconstruction accuracy and accelerates convergence.&lt;/p&gt;
&lt;p&gt;The assumption being made is local flatness of the road, and our own real-world scenes include slope changes, so this is an approximation rather than a guarantee.&lt;/p&gt;
&lt;p&gt;
&lt;figure id="figure-removing-shadow-driven-and-texture-poor-points-where-the-noise-concentrates"&gt;
&lt;div class="flex justify-center"&gt;
&lt;div class="w-full"&gt;&lt;img
alt="Road-surface points are filtered with a plane model before triangulation."
srcset="https://changnie.top/publications/mrasfm/road-filtering_hu_2fdd79d6221cc441.webp 320w, https://changnie.top/publications/mrasfm/road-filtering_hu_7f5e12d343a2756b.webp 480w, https://changnie.top/publications/mrasfm/road-filtering_hu_d555188bccd5e091.webp 768w, https://changnie.top/publications/mrasfm/road-filtering_hu_f0f498a58b673a65.webp 1024w, https://changnie.top/publications/mrasfm/road-filtering_hu_a4e020bd76b5cdae.webp 1080w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1279px) 88vw, 928px"
src="https://changnie.top/publications/mrasfm/road-filtering_hu_2fdd79d6221cc441.webp"
width="1080"
height="329"
loading="lazy"
data-zoomable&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;a class="paper-image-original" href="https://changnie.top/publications/mrasfm/road-filtering_hu_a78118426cf63e4f.webp" target="_blank" rel="noopener"&gt;View full-size image ↗&lt;/a&gt;
&lt;figcaption&gt;Removing shadow-driven and texture-poor points where the noise concentrates.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 id="bundle-adjustment-on-the-rig"&gt;Bundle adjustment on the rig&lt;/h2&gt;
&lt;p&gt;Camera set bundle adjustment optimizes vehicle poses and internal relative poses under substitution constraints that express each camera pose in terms of the vehicle pose and the rig geometry, with a Cauchy loss for the local stage. The variables include intrinsics, vehicle poses, internal relative poses and scene points.&lt;/p&gt;
&lt;p&gt;There are two modes and the split matters. Local CSBA fixes intrinsics and internal relative poses and touches only newly registered units and their neighbours. Global CSBA optimizes everything across all registered units, and we trigger it when many units remain unoptimized.&lt;/p&gt;
&lt;p&gt;Global CSBA re-optimizing intrinsics and relative poses is the online recalibration capability claimed in the paper. It is also the practical payoff, because it converts the field&amp;rsquo;s least reliable input into an output. Local CSBA is cheaper, and it freezes exactly those parameters, which is the tradeoff: the cheap mode cannot fix calibration, and the mode that can fix it costs more.&lt;/p&gt;
&lt;p&gt;The variable reduction from one pose per camera per timestamp to one per timestamp plus one per camera is worth dwelling on. Six cameras over a long trajectory means the per-image formulation optimizes six times as many poses as it needs to, and every extra variable is another degree of freedom that noise can hide in. Fewer variables makes convergence faster and the result more consistent. Robustness and efficiency turn out to be the same lever here, which is not usually the case.&lt;/p&gt;
&lt;p&gt;
&lt;figure id="figure-vehicle-poses-and-internal-relative-poses-are-refined-jointly-which-is-what-allows-calibration-to-improve-in-the-field"&gt;
&lt;div class="flex justify-center"&gt;
&lt;div class="w-full"&gt;&lt;img
alt="The rig is optimized once rather than re-estimated at every frame."
srcset="https://changnie.top/publications/mrasfm/camera-set-ba_hu_391a21fdb2ae00d7.webp 320w, https://changnie.top/publications/mrasfm/camera-set-ba_hu_3055e59701d6c74b.webp 480w, https://changnie.top/publications/mrasfm/camera-set-ba_hu_30675cf7ac5742e2.webp 768w, https://changnie.top/publications/mrasfm/camera-set-ba_hu_b2d2d986141c6f07.webp 1024w, https://changnie.top/publications/mrasfm/camera-set-ba_hu_6f03584da827f2b9.webp 1080w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1279px) 88vw, 928px"
src="https://changnie.top/publications/mrasfm/camera-set-ba_hu_391a21fdb2ae00d7.webp"
width="1080"
height="1029"
loading="lazy"
data-zoomable&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;a class="paper-image-original" href="https://changnie.top/publications/mrasfm/camera-set-ba_hu_d2b24cbe094d9e3f.webp" target="_blank" rel="noopener"&gt;View full-size image ↗&lt;/a&gt;
&lt;figcaption&gt;Vehicle poses and internal relative poses are refined jointly, which is what allows calibration to improve in the field.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 id="merging-drives-that-share-no-images"&gt;Merging drives that share no images&lt;/h2&gt;
&lt;p&gt;Aggregation has to work without shared imagery, so the whole strategy is coarse-to-fine. Scenes are first placed in a global frame using satellite positioning, represented by trajectory midpoints: one scene sits at the geometric centre, its nearest neighbours become candidates, and homography-guided spatial pairs pick whichever candidate has the greatest visual overlap.&lt;/p&gt;
&lt;p&gt;The coarse placement is wrong by an unknown transform, because positioning error is larger than the alignment tolerance. So the transform itself becomes the variable. One image from the incoming scene is relocalized to get a refined pose, which yields the transform between the coarse placement and the true one, and that transform registers the entire rigid unit at once. Triangulation follows, then a transformation-based bundle adjustment optimizes the transform and the scene points while keeping the reference scene&amp;rsquo;s camera poses fixed.&lt;/p&gt;
&lt;p&gt;Registration, triangulation and adjustment iterate until every unit of the incoming scene has been absorbed. The merged result then becomes the new reference for the next scene, so aggregation proceeds as a chain rather than against a single global anchor. The reason is simple: chaining keeps error from originating at one fallible alignment.&lt;/p&gt;
&lt;p&gt;The whole stage is designed so aggregation never has to be exact at the coarse step, only close enough to relocalize.&lt;/p&gt;
&lt;p&gt;
&lt;figure id="figure-satellite-positioning-places-the-scene-vision-refines-the-placement"&gt;
&lt;div class="flex justify-center"&gt;
&lt;div class="w-full"&gt;&lt;img
alt="Separately collected drives are bound together from coarse alignment to refined transform."
srcset="https://changnie.top/publications/mrasfm/multi-scene-aggregation_hu_862a8ae5a668a769.webp 320w, https://changnie.top/publications/mrasfm/multi-scene-aggregation_hu_735f3b73e75077d6.webp 480w, https://changnie.top/publications/mrasfm/multi-scene-aggregation_hu_f1a7db34e45bc66c.webp 768w, https://changnie.top/publications/mrasfm/multi-scene-aggregation_hu_7c340760013fc14d.webp 1024w, https://changnie.top/publications/mrasfm/multi-scene-aggregation_hu_45954c91809187d9.webp 1080w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1279px) 88vw, 928px"
src="https://changnie.top/publications/mrasfm/multi-scene-aggregation_hu_862a8ae5a668a769.webp"
width="1080"
height="967"
loading="lazy"
data-zoomable&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;a class="paper-image-original" href="https://changnie.top/publications/mrasfm/multi-scene-aggregation_hu_b5d8bdb2f368dd04.webp" target="_blank" rel="noopener"&gt;View full-size image ↗&lt;/a&gt;
&lt;figcaption&gt;Satellite positioning places the scene; vision refines the placement.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 id="what-we-take-from-this"&gt;What we take from this&lt;/h2&gt;
&lt;p&gt;A physical invariant is best used as a reparameterization rather than a constraint. Enforcing rigidity after the fact cannot prevent the error that accumulated before. Making rigidity part of the variable structure prevents it from accumulating in the first place.&lt;/p&gt;
&lt;p&gt;Priors should prune, not conclude. Rough poses decide which pairs to match and where to start, and the geometry still comes from matched evidence. That is the line between our approach and the one we criticize.&lt;/p&gt;
&lt;p&gt;Design so priors can be corrected rather than merely trusted. Making relative poses optimizable is what turns the least reliable input into an output.&lt;/p&gt;
&lt;p&gt;And judge a module where its failure mode lives. Camera set registration barely moves average pose error, and it is the difference between working and failing when a camera is occluded. Aggregate metrics can hide a module&amp;rsquo;s entire value.&lt;/p&gt;
&lt;h2 id="what-it-still-assumes"&gt;What it still assumes&lt;/h2&gt;
&lt;p&gt;The method takes rough trajectories, rough calibration and semantic information as inputs. The semantic source is assumed rather than specified, and we report no sensitivity to the quality of those labels.&lt;/p&gt;
&lt;p&gt;Multi-scene aggregation is not ablated. The choice of roughly three candidate scenes and the geometric-centre reference heuristic are stated without justification or failure analysis.&lt;/p&gt;
&lt;p&gt;The rigid unit is defined purely by simultaneity, and we do not test what happens when that assumption weakens. Camera time-synchronization error and rig flex would both violate it, and neither is discussed. Online calibration is claimed but not characterized: we do not say under what motion diversity or camera count the global stage&amp;rsquo;s refinement of intrinsics and relative poses is well posed.&lt;/p&gt;
&lt;p&gt;The plane model presumes a locally flat road while our own deployment includes slope changes. Generality across different multi-camera configurations is asserted but exercised only on six- and seven-camera rigs. Dynamic objects beyond shadows appear in the motivation but have no dedicated treatment.&lt;/p&gt;
&lt;h2 id="where-it-leads"&gt;Where it leads&lt;/h2&gt;
&lt;p&gt;The contribution we would state is a change of unit, and everything else follows from it. What the change buys is worth spelling out: camera sets as atomic units for registration and refinement give robust pose estimation in complex environments and better efficiency than conventional per-camera methods. Combined with the road filtering and the aggregation stage, the pipeline produces a single map from drives that were never meant to be merged.&lt;/p&gt;
&lt;p&gt;We validated it in two directions on purpose. Real instrumented vehicles demonstrate that it holds up outside a dataset, and public benchmarks establish the accuracy claim against a conventional baseline. The practical statement of the stake is that intelligent vehicles can perceive their environment and estimate their own pose more reliably, which is what the downstream tasks actually consume.&lt;/p&gt;</description></item></channel></rss>