Repository navigation
E57 dataset - #101
E57 dataset#101
Conversation
Adds `spirula e57` and File > Create Dataset from E57: a scan's registered images, poses and point cloud written out as a transforms.json dataset, with no reconstruction. - data/E57Reader: standalone E57 reader (XML, paged binary sections, bitPackCodec point records, image blobs). - app/E57Dataset: pinhole and panorama cameras, voxel-thinned seed points (or all of them), a check of the photos' alignment against the scan's colours, gauge.txt (oriented, metric). - app/ScanDepth: depth and normal maps rendered from the laser points. - GUI: an E57 screen with a 3D preview of the scan, the dataset screen's masking (prompt seeded from the 360-camera preset) run as part of the job, and its step row and film reels as progress. Masking that fails or is cancelled leaves the dataset unmasked. - Shared: OutputWatch moved into FilmReel, draw_masking_options and the step/view helpers made reusable, gauge.txt read for Nerfstudio datasets too, double-precision PLY seed points. - Tests: e57_reader_test, e57_dataset_test, scan_depth_test.
|
Related to #99 |
harry7557558
left a comment
There was a problem hiding this comment.
Thanks for contributing! I tuned it on a number of publicly available datasets and made some improvements to the alignment, as well as some UI changes, and I think it's now ready to merge. If you notice regression on your datasets, please let me know.
|
Stupid Question, but are XGRID Camera Datasets supported? I didnt find any info specifically on what settings or how to import them. |
|
@Myarcer I've only tested on two XGRIDS datasets, both private ones shared by users for testing only. The datasets are in the following format: If your dataset is the same case, drag and drop the |
Summary
Laser scanners that also take photos have already registered every image. This adds a way to turn an E57 scan straight into a training dataset (images, poses and a seed point cloud) with no SfM.
spirula e57 <scan.e57> [<folder>] [--points <n>|all] [--no-depth] [--no-pinhole] [--no-panoramas] [--overwrite] [--info].e57on the window.The output is a
transforms.jsondataset, one of the three layouts the trainer already reads, so it opens and trains like any other.What's in it
Reading and converting
src/data/E57Reader.{h,cpp}: a standalone E57 reader with no libE57Format or Xerces. It reads the XML section, the paged binary sections,bitPackCodecpoint records across packets, and image blobs. Invalid points and points at the scanner origin are dropped. Colour is normalised, and a scan without colour is seeded grey from its intensity.src/app/E57Dataset.{h,cpp}: pinhole images becomePINHOLEcameras and full-sphere panoramas becomeEQUIRECTANGULARcameras. Cylindrical, partial-sphere and uncalibrated images are skipped, with the reason logged. Poses and intrinsics are written in full double precision.--points(default 500,000), or all of them with--points all("Use every point"). They are written as a double-precision PLY so geo-referenced scans keep millimetre precision.src/app/ScanDepth.{h,cpp}): rendered from the laser points for every image, as 16-bit millimetres and normals facing the camera. They feed the trainer's existing supervision: normals are on by default, depth needs--depth-supervision-weight.--no-depthleaves them out.gauge.txtmarks the frame as oriented and metric, since E57 is in metres and scanners level their frame.GUI (
E57Runner, and the E57 screen inGuiApp)Changes to shared code
gauge.txt.read_gaugemoved fromColmapParser.cpptodsparseand is called by both parsers. A Nerfstudio dataset without agauge.txtbehaves as before.OutputWatchmoved fromGeometryRunner.cppintoFilmReel.{h,cpp}and gained an optionalfresh_onlyflag. The geometry step behaves as before.draw_run_steps,draw_view_tabsanddraw_masking_options(MaskingPanel). No behaviour change is intended.write_ply_pointshas a new optionaldouble_xyzparameter; the default is unchanged.src/i18n/catalog/E57.hwith all 13 languages, plus menu, Home and tool-list entries inGui.handCli.h.docs/datasets.md, a README bullet, and theAGENTS.mdrepo map.No new dependencies.
Testing
e57_reader_test: synthetic E57 files with multi-packet and empty-packet vectors, JPEG and PNG blobs, and a truncated file.e57_dataset_test: the camera round trip throughtransforms.jsonstays within 0.002 px, and the alignment check turns a wrongly oriented photo back.scan_depth_test: a plane, a sparse patch in front of it, and a sphere around a panorama.Not tested: a masking run to completion (SAM 3 takes about 9 s per frame on the Mac used), a video dataset run after the shared-helper refactor, Linux, and the CUDA backend.
Known limitations
background_mode shis the setting for outdoor scans.