Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
340 commits
Select commit Hold shift + click to select a range
d33b9fb
interface: export camera intrinsics and BBox
cdcseacave Apr 7, 2022
209c2a5
viewer: add center scene and set bbox
cdcseacave Apr 8, 2022
804492b
interface: add images scale&save functionality
cdcseacave Apr 8, 2022
fc81c6f
viewer: compute bbox with the selected min-number of views
cdcseacave Apr 8, 2022
7bf5cd8
interface: fix for saving relative paths
cdcseacave Apr 15, 2022
5aed5fa
texture: support a given subset of images for texturing
cdcseacave Apr 16, 2022
0a607d1
build: increase version to 2.0.1
cdcseacave Apr 17, 2022
1fafff5
Merge remote-tracking branch 'origin/master' into develop
cdcseacave Apr 17, 2022
5a70acd
dense: add iters and geometric-iters params
cdcseacave Apr 20, 2022
670d20f
dense: split scene bounds do not exceed the existing ROI
cdcseacave Apr 30, 2022
915e0e0
dense: prefer mesh for neighbor selection
cdcseacave May 7, 2022
7299f46
interface: add support for Metashape's BlocksExchange format
cdcseacave May 7, 2022
0efa26d
common: use CLISTDEF macro
cdcseacave Jun 8, 2022
7e544a5
dense: automatic region-of-interest estimation (#823)
krahets Jun 11, 2022
cb984b4
dense: ROI estimation with robust safety check (#825)
krahets Jun 13, 2022
8c9848f
interface: fix some warnings
cdcseacave Jun 14, 2022
806c037
dense: implement multi-resolution depth-map estimation (#818)
MikeCernea Jun 18, 2022
eed4c7d
dense: implement patch match multi-resolutions on GPU (#819)
MikeCernea Jun 18, 2022
f34a258
dense: optimize the completeness of the estimated ROI (#830)
krahets Jun 19, 2022
a5c3bcb
dense: add point-cloud statistics
cdcseacave Jun 20, 2022
b003f24
dense: option to remove points by number of views
cdcseacave Jun 21, 2022
a22b954
dense: fix incomplete masks and fine-tune depth-map estimation
cdcseacave Jun 24, 2022
8b431a2
dense: init with sparse point cloud only (#837)
MikeCernea Jul 5, 2022
f057ee2
common: correct GetMedian() logic
cdcseacave Jul 6, 2022
49ef890
interface: fix COLMAP working directory (#844)
CanCanZeng Jul 6, 2022
5588140
dense: make estimate ROI optional
cdcseacave Jul 14, 2022
f6634b7
common: add support for PowerPC (#848)
cdcseacave Jul 26, 2022
d99afe9
texture: remove unused variable
cdcseacave Jul 26, 2022
7a6e08d
common: fine-tune ray-triangle intersection function
cdcseacave Jul 29, 2022
2f53998
build: update Dockerfiles
cdcseacave Aug 13, 2022
dcb2bc4
mvs: improve sub-scene
cdcseacave Jul 5, 2022
142b353
mesh: load GLTF
cdcseacave Sep 6, 2022
bc07459
interface: add support for MVSNet format
cdcseacave Sep 16, 2022
8bc89d0
viewer: enable viewing scenes with only cameras
cdcseacave Sep 16, 2022
9a8514b
dense: initialize neighbor views from image pairs baseline if the spa…
cdcseacave Sep 17, 2022
435eabc
interface: make C++17 features optional
cdcseacave Sep 17, 2022
245e2d7
transform: align scene to the given reference scene using camera posi…
cdcseacave Sep 17, 2022
7921361
interface: add 2 helper functions
cdcseacave Sep 20, 2022
7be47b1
dense: apply image masks on GPU (#861)
pierotofy Sep 20, 2022
91dedf5
texture: fix pixel center convention (#862)
adelpit Sep 21, 2022
3aba860
interface: add comments
cdcseacave Sep 23, 2022
471d007
mesh: update faceTexcoords in Mesh::RemoveFaces (#863)
humanbeingZ Sep 23, 2022
e1e78d1
interface: disable MVSNet interface on old GCC
cdcseacave Sep 23, 2022
64e3f35
common: improve MvsScalablePipeline.py to support existing modules an…
Oct 1, 2022
4595ac1
build: handle nvcc compilers that don't support --list-gpu-arch (#886)
pierotofy Oct 18, 2022
f0ef4b5
mesh: fix ObjModel::MaterialLib::Save() when using OpenMP (#891)
humanbeingZ Oct 20, 2022
e0783e4
dense: fix neighbor selection based on a mesh
cdcseacave Nov 3, 2022
291b9f1
dense: ignore invalid input 3D points during initialization
cdcseacave Nov 5, 2022
7cc2b78
dense: boost low-resolution depth propagation for textureless areas (…
itacernea Nov 6, 2022
a977bf5
transform: estimate scene's volume
cdcseacave Nov 12, 2022
6d6a199
texture: small code cleanup
cdcseacave Nov 17, 2022
191d475
transform: robustify volume estimation
cdcseacave Nov 19, 2022
3a738d5
common: fix some warnings
cdcseacave Nov 21, 2022
bcad1ea
common: fix small memory leak in Octree (#896)
cdcseacave Nov 22, 2022
29a8118
common: add continuous integration workflow
cdcseacave Nov 22, 2022
ae14fc5
texture: use virtual faces for charts creation (#807)
MikeCernea Nov 22, 2022
ce8bbdb
common: CI uploads release artifact
cdcseacave Nov 22, 2022
99185ed
common: fix warnings
cdcseacave Nov 24, 2022
79214de
build: add workaround missing zstd library in vcpkg boost
cdcseacave Nov 24, 2022
99caa9c
build: disable Appveyor CI
cdcseacave Nov 24, 2022
c1fdb29
build: add tests
cdcseacave Nov 25, 2022
ccce4b5
build: add pipeline test
cdcseacave Nov 26, 2022
1598696
dense: add postprocess-dmaps and remove-dmaps params
cdcseacave Nov 26, 2022
58ba572
common: update octree code to use union
cdcseacave Nov 26, 2022
f08b44c
transform: add texture transfer between two meshes
cdcseacave Nov 27, 2022
517e8da
texture: add texture sharpening
cdcseacave Nov 27, 2022
7103c6b
Merge branch 'master' into develop
cdcseacave Nov 28, 2022
917f552
mesh: add transfer texture between two identical meshes
cdcseacave Dec 2, 2022
56a6536
transform: add --export-type param
cdcseacave Dec 3, 2022
a8507a0
transform: import face IDs subset to use for texture transfer
cdcseacave Dec 4, 2022
0c9d912
interface: add Python API
cdcseacave Dec 6, 2022
0c2228e
common: disable TImage::Show() on release
cdcseacave Dec 6, 2022
000443e
build: disable CUDA during continuous integration
cdcseacave Dec 6, 2022
516306a
common: implement custom RQ decomposition
cdcseacave Dec 27, 2022
2874f19
dense: load mask with predefined '.mask.png' extension
cdcseacave Dec 27, 2022
6702bf4
common: fix OBB::GetCorners()
cdcseacave Jan 30, 2023
0f83ba4
interface: fix import for ContextCapture BlocksExchange format
cdcseacave Mar 16, 2023
fe94580
build: update vcpkg for CI
cdcseacave Mar 16, 2023
97776fe
dense: add --mask-path to specify folder containing mask images (#940)
kenshi84 Mar 17, 2023
5adaa5c
build: simplify docker build and reduce build image (#952)
yanxke Mar 17, 2023
7d4c444
interface: fix InterfaceOpenMVG and InterfaceVisualSFM build (#951)
yanxke Mar 17, 2023
98aca50
interface: fix Metashape import with point-cloud
cdcseacave Mar 17, 2023
148b129
interface: initialize average scene depth per image while importing M…
cdcseacave Mar 20, 2023
8093255
build: added GUI support to docker; working viewer (#954)
satyajitghana Apr 1, 2023
6d0e772
build: add script to build Docker container on Windows (#966)
cdcseacave Apr 9, 2023
744d456
interface: import images with invalid poses
cdcseacave Apr 11, 2023
285de9b
common: add COLMAP SfM to MvgMvsPipeline.py (#977)
Apr 28, 2023
b41a8ce
texture: detect and ignore invalid image pixels generated by lens dis…
PxGluz May 4, 2023
af8578a
transform: transform scene by the given matrix
cdcseacave May 4, 2023
2c82a66
viewer: add support for importing a point-cloud
cdcseacave May 4, 2023
af5c939
build: update vcpkg in CI
cdcseacave May 18, 2023
c69bae4
texture: add image mask support (#967)
Sanheiii May 20, 2023
845f664
interface: export to COLMAP in binary format
cdcseacave May 24, 2023
15d4fd3
interface: force sparse point cloud COLMAP export
cdcseacave Jun 1, 2023
ced6ff3
interface: detect same platform for MVSNet import
cdcseacave Jun 1, 2023
4efd9b4
dense: estimate point-cloud scales
cdcseacave Jun 16, 2023
017161e
build: update vcpkg in CI
cdcseacave Jun 16, 2023
2d95bdc
common: fix incorrect comparison in BufferedOutputStream (#1010)
dllu Jun 20, 2023
3cb7f7a
interface: add Polycam importer
cdcseacave Jun 28, 2023
cbe6c93
build: update vcpkg in CI
cdcseacave Jun 28, 2023
5fb4d9e
dense: detect and improve tower like structure reconstruction (#1017)
cdcseacave Jul 2, 2023
f790ad6
interface: fix BlocksExchange importer
cdcseacave Jul 4, 2023
fb0a65d
mesh: crop mesh to input ROI
cdcseacave Jul 4, 2023
632a9bc
Merge branch 'master' into develop
cdcseacave Jul 4, 2023
d2d874d
common: v2.2.0
cdcseacave Jul 4, 2023
5347df2
transform: simplify transform matrix parsing (#1026)
nianjiuhuiyi Jul 13, 2023
a12e182
io: support images with .jpeg file extension (#1027)
csparker247 Jul 14, 2023
028c806
common: fix some warnings
cdcseacave Jul 14, 2023
742eabf
common: remove all usages of cv::String (#1028)
csparker247 Jul 14, 2023
b58a687
common: save/load results as point-cloud/mesh PLY instead of MVS files
cdcseacave Aug 5, 2023
a84072d
build: enable SSE on non-ARM systems only (#1042)
autoantwort Aug 14, 2023
a5707ae
interface: add Nerfstudio and RTMV importer (#1047)
cdcseacave Aug 18, 2023
f57daf5
interface: add depth and mask importer to RTMV
cdcseacave Aug 20, 2023
e3664e5
interface: fix color import from BlocksExchange
cdcseacave Aug 30, 2023
0a6ef82
viewer: refactor scene with external geometry loading
cdcseacave Aug 31, 2023
70de228
build: fix optional python with vcpkg
cdcseacave Sep 1, 2023
c84b15b
interface: fix for old GCC without filesystem support
cdcseacave Sep 1, 2023
91c9c2c
common: add an A100 CUDA parameter (#1053)
t-kusanagi Sep 6, 2023
c1b1cc9
common: add Python utility for reading DMAP files (#1059)
Sep 21, 2023
19fc792
mesh: improve texture transfer
cdcseacave Oct 17, 2023
f711e4a
interface: account for different pixel center conventions as COLMAP u…
cdcseacave Oct 17, 2023
95decea
texture: add multi texture support (#1074)
cdcseacave Oct 23, 2023
ecd5dde
interface: add Python utility for reading MVS scenes (#1069)
Oct 23, 2023
15a1407
build: enforce Eigen >= 3.4 (#1078)
magwe Oct 27, 2023
34961de
common: clean frustum creation
cdcseacave Nov 4, 2023
88765f6
mesh: improve fix non-manifold algorithm
cdcseacave Nov 7, 2023
b7adc80
common: support culling on/off in rasterization
cdcseacave Nov 8, 2023
d9b7416
mesh: unify vector calling convention
cdcseacave Nov 8, 2023
48cc91c
transform: improve texture transfer robustness
cdcseacave Nov 9, 2023
40800a4
common: unify library initialization and closing
cdcseacave Nov 11, 2023
3c19cdd
common: improve Eigen interface for custom types
cdcseacave Nov 11, 2023
ac43899
texture: fix non-OMP code and some warnings
cdcseacave Nov 11, 2023
bc67cf9
dense: estimate normal-map from depth-map during fusion if requested
cdcseacave Nov 22, 2023
186eb29
interface: make depth import optional in polycam
cdcseacave Dec 2, 2023
6449134
dense: use tower mode 4 by default
cdcseacave Dec 7, 2023
496c4a9
viewer: add option to crop scene to bounding box
cdcseacave Dec 7, 2023
add11b7
dense: fix fusion with invalid depth-map
cdcseacave Dec 9, 2023
da4b76c
v2.3.0
cdcseacave Jan 6, 2024
3c22ba7
Merge remote-tracking branch 'origin/master' into develop
cdcseacave Jan 7, 2024
8c45486
common: fix file class to support files >2GB
cdcseacave Jan 23, 2024
cd688d2
texture: fix obj export
cdcseacave Jan 31, 2024
6803f21
scripts: remove -o for TextureMesh (#1102)
xiaoxiae Feb 2, 2024
2ccd08e
scripts: add model_aligner to COLMAP SfM pipeline
cdcseacave Mar 6, 2024
6f1a787
interface: add python DMAP save script
cdcseacave Apr 27, 2024
36ffb22
common: various small fixes and added asserts
cdcseacave May 8, 2024
9bd7ed4
transform: add option to add noise to camera poses
cdcseacave Jun 26, 2024
d726211
common: remove unused code
cdcseacave Jul 26, 2024
7b01622
build: update CI
cdcseacave Jul 27, 2024
b2a0d93
dense: automatic caching of depth-maps
cdcseacave Jul 31, 2024
adaeecc
dense: implement dense fusion
cdcseacave Aug 6, 2024
a759b87
common: add CUDA utils for device
cdcseacave Aug 21, 2024
8e42439
dense: refactor PatchMatchCUDA::Camera into a stand alone structure
cdcseacave Aug 22, 2024
b1d8f0d
mvs: split CameraCUDA in Maths and Camera
cdcseacave Aug 26, 2024
2090fa9
mesh: implement RemoveDegenerateFaces() and RemoveDuplicatedVertices()
cdcseacave Sep 1, 2024
aa86191
common: refactor CUDA support in CMake
cdcseacave Sep 9, 2024
b0b04bb
common: add plane Transform()
cdcseacave Sep 17, 2024
efce2f6
dense: unify confidence between [0,1] for FilterDepthMap() too
cdcseacave Sep 23, 2024
208a441
common: implement assert with message
cdcseacave Sep 23, 2024
5a2c24d
common: add saveMVSInterface() in python
cdcseacave Oct 1, 2024
6a4517b
mesh: stricter th for degenerate faces
cdcseacave Oct 11, 2024
36f303d
mesh: add crop to ROI
cdcseacave Oct 18, 2024
bf8fc85
dense: fix bug in tower generation
cdcseacave Oct 30, 2024
9609fd9
mesh: finetune params for thin structures
cdcseacave Nov 6, 2024
0d1a991
mesh: make TRasterMesh multithread-safe
cdcseacave Nov 9, 2024
168b9a7
scene: implement LoadROI
cdcseacave Nov 10, 2024
3f97e50
common: update platform info, add app manifest and viewer icon on Win…
cdcseacave Nov 22, 2024
ae35c85
ci: update to latest vcpkg release
cdcseacave Nov 28, 2024
641ebc6
interface: add export options to COLMAP for binary format, no points,…
cdcseacave Dec 20, 2024
3e878b6
dense: adjust minimum views filter parameters for depth-map processing
cdcseacave Dec 20, 2024
3e0674a
ci: update to latest vcpkg release
cdcseacave Dec 27, 2024
6ddbda1
common: add support for new GPU architectures in CUDA core conversion
cdcseacave Dec 29, 2024
8dc7418
interface: add support for VGGSFM output
cdcseacave Jan 3, 2025
c5953c0
viewer: replace GLEW with GLAD
cdcseacave Jan 3, 2025
5a23d1d
viewer: draw 3D axes
cdcseacave Jan 5, 2025
695857e
build: make viewer application optional
cdcseacave Jan 16, 2025
3156675
dense: check depth data export/import IO
cdcseacave Jan 22, 2025
c48731f
interface: remove deprecated InterfaceVisualSFM
cdcseacave Jan 23, 2025
7df46a6
transform: add scene coordinates normalization
cdcseacave Jan 26, 2025
e265516
viewer: add color source options for depth-maps
cdcseacave Jan 29, 2025
29b0422
viewer: finetune depth confidence and adjust confidence threshold
cdcseacave Feb 12, 2025
ecd0ca1
ci: update vcpkg Git commit ID and upgrade upload-artifact action ver…
cdcseacave Feb 12, 2025
5f5e8e0
scripts: reconstruct mesh from DMAPs using open3d TSDF
cdcseacave Feb 22, 2025
53ea98d
dense: add a fast way to adjust the confidence based on neightbors ag…
cdcseacave Feb 24, 2025
1325400
build: update CMake scripts
cdcseacave Feb 27, 2025
22ff7bd
dense: estimate point-cloud segmentation from image masks
cdcseacave Mar 13, 2025
8089fd7
scripts: import depth-maps from NPY or EXR images
cdcseacave Apr 1, 2025
e134eb4
common: now ASSERT breaks deugger on all platforms
cdcseacave Apr 12, 2025
7cc6771
viewer: select cameras
cdcseacave May 30, 2025
7ba682d
build: update Docker to Ubuntu 24.04 (#1222)
Asuranceturix Jun 26, 2025
4adfadd
io: add support for JXL images
cdcseacave Jun 30, 2025
2d5c899
dense: weight point in ROI
cdcseacave Aug 14, 2025
1f83acb
scripts: add focal-length to images EXIF
cdcseacave Aug 8, 2025
d7f587b
dense: estimate SfM normals and surface patches
cdcseacave Aug 14, 2025
ed45da2
interface: add SIMPLE_PINHOLE model to COLMAP (#1226)
ferreram Aug 15, 2025
af74b04
viewer: switch to OpenGL v3 and add UI
cdcseacave Aug 16, 2025
ff890b1
common: fix bug in cList constructor #1229
cdcseacave Aug 19, 2025
04b792e
viewer: add UI camera size
cdcseacave Aug 28, 2025
1f68718
viewer: finetune camera size and speed
cdcseacave Oct 18, 2025
641962a
viewer: add workflow support
cdcseacave Oct 23, 2025
797b59e
viewer: add console in UI
cdcseacave Oct 27, 2025
79e05a2
viewer: implement GPU-based picker
cdcseacave Oct 29, 2025
f82415f
viewer: signal empty scene
cdcseacave Nov 4, 2025
59bc935
scene: estimate ROI
cdcseacave Nov 5, 2025
973a37b
viewer: run workflows in background
cdcseacave Nov 6, 2025
feb035b
dense: load point-cloud from GLTF
cdcseacave Dec 3, 2025
b9f03be
viewer: improve file type associations
cdcseacave Dec 4, 2025
1599282
math: refactor SimilarityTransform
cdcseacave Dec 7, 2025
840d254
build: enhance CMake, streamline dependencies, improve library linking
cdcseacave Dec 17, 2025
d263795
common: various fixes and improvements
cdcseacave Dec 28, 2025
7a01e38
math: add ConfidenceInterval
cdcseacave Dec 29, 2025
999e184
viewer: multi-select and screenshot
cdcseacave Jan 19, 2026
5221549
v2.4.0
cdcseacave Jan 19, 2026
eeedab7
texture: fix corner case in global seam leveling logic
cdcseacave Feb 27, 2026
0beff21
texture: compute faces-views at 2x resolution
cdcseacave Mar 1, 2026
76ef59b
common: fix OBB transform
cdcseacave Apr 5, 2026
58e6ed4
texture: group patches spatially
cdcseacave Mar 16, 2026
49f644a
texture: implement a custom atlas packer
cdcseacave Mar 16, 2026
4e5b4d7
texture: compute and test reconstruction quality
cdcseacave Mar 17, 2026
c99883f
mesh: remove VCG and use CGAL for cleaning
cdcseacave Mar 17, 2026
ca991d5
refine: replace PTX with CUDA code
cdcseacave Mar 20, 2026
565ae5b
sfm: implement Structure-from-Motion
cdcseacave Apr 5, 2026
6871967
ci: consolidate MSVC code analysis into continuous integration workflow
cdcseacave Apr 7, 2026
a4d652a
viewer: implement ROI selection and manipulation
cdcseacave Apr 13, 2026
7956e03
viewer: add camera trajectory color
cdcseacave Apr 18, 2026
327e3ca
sfm: add native support for spherical cameras (#1259)
cdcseacave Apr 22, 2026
c2b2044
build: improve speed and update wiki
cdcseacave Apr 27, 2026
541b0e9
build: enable shared-library build + SFM Python bindings (#1262)
cdcseacave Apr 29, 2026
81b5ed3
dense: optimize patch-match CUDA (#1263)
cdcseacave May 10, 2026
00d1a17
build: make libjxl optional (#1265)
ShuangLiu1992 May 10, 2026
b2f21a0
dense: various small fixes (#1271)
cdcseacave May 13, 2026
0fa5151
doc: add wiki (#1274)
cdcseacave May 23, 2026
ec13cab
dense: parallelize PatchMatch CUDA across workers (~30% wall time) (#…
cdcseacave May 28, 2026
d804279
sfm: spherical mirror fix (Y-down) + PoseLib bearing-API update (#1278)
cdcseacave May 29, 2026
ee1ec2e
sfm: robust GPS alignment
cdcseacave Jun 14, 2026
4694ded
dense: add Metal based PatchMatch densification (#1279)
leNeo Jun 26, 2026
618a80e
sfm: improve weak images filter
cdcseacave Jul 7, 2026
e884035
sfm: per-image pose covariance estimation and visualization (#1286)
cdcseacave Jul 16, 2026
6a8e5e6
common: replace the angle conversion macros with templates
cdcseacave Aug 2, 2026
fef9754
mvs: robust ROI estimation
cdcseacave Aug 2, 2026
4b52d71
sfm: robust scene clustering and merging
cdcseacave Aug 2, 2026
69b25a3
mvs: shared .dmap codec, densify image cache, view-locality order
cdcseacave Aug 2, 2026
8febf83
viewer: implement A|B compare view with swipe and split modes (#1290)
cdcseacave Aug 10, 2026
e8874e3
sfm: finetune reconstruction from known poses + mutual pair selection…
cdcseacave Aug 12, 2026
f61bffe
dense: depth-map confidence recalibration (#1292)
cdcseacave Aug 13, 2026
5e25be5
IO: HEIF/HEIC read support (#1293)
cdcseacave Aug 15, 2026
e2f38b4
fixes: consolidate contributor fixes for IO, texturing, and builds (#…
cdcseacave Aug 18, 2026
8efd9c4
mesh: Delaunay mesh estimation improvements (#1295)
cdcseacave Aug 25, 2026
0aebb63
mesh: implement specialized TetraFlow graph-cut solver 1.8x faster 2.…
cdcseacave Aug 27, 2026
9fabec1
mesh: move generic mesh processing, atlas packing and the glTF codec …
cdcseacave Aug 28, 2026
c410c9d
dense: fusion reprojection threshold 1.0, and opt-in recycling of dro…
cdcseacave Aug 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
76 changes: 76 additions & 0 deletions .clang-format
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
# OpenMVS approximate formatting rules inferred from libs/MVS and libs/Common
---
Language: Cpp
BasedOnStyle: LLVM

# Indentation
UseTab: ForIndentation
IndentWidth: 4
TabWidth: 4
ContinuationIndentWidth: 4
AccessModifierOffset: 0
NamespaceIndentation: None
IndentPPDirectives: BeforeHash

# Line breaking
ColumnLimit: 0 # preserve long lines; project has many >120
ReflowComments: false
KeepEmptyLinesAtTheStartOfBlocks: false

# Braces
BreakBeforeBraces: Custom
BraceWrapping:
AfterClass: true
AfterStruct: true
AfterFunction: true
AfterEnum: false
AfterControlStatement: false
AfterNamespace: false
BeforeElse: false
BeforeCatch: false
SplitEmptyFunction: true
SplitEmptyRecord: true
SplitEmptyNamespace: true

# Pointers/references
DerivePointerAlignment: false
PointerAlignment: Left # Type*& var, const Type& name

# Short constructs on one line
AllowShortBlocksOnASingleLine: Empty
AllowShortCaseLabelsOnASingleLine: true
AllowShortEnumsOnASingleLine: true
AllowShortFunctionsOnASingleLine: All
AllowShortIfStatementsOnASingleLine: false
AllowShortLoopsOnASingleLine: false

# Spacing
SpaceBeforeParens: ControlStatements
SpaceBeforeRangeBasedForLoopColon: true
SpacesInAngles: false
SpacesInCStyleCastParentheses: false
SpacesInParentheses: false
SpaceAfterCStyleCast: false
SpaceInEmptyParentheses: false
SpaceAfterTemplateKeyword: true
Cpp11BracedListStyle: true

# Wrapping/alignment
BinPackParameters: true
BinPackArguments: true
BreakConstructorInitializers: AfterColon
ConstructorInitializerAllOnOneLineOrOnePerLine: false
BreakBeforeBinaryOperators: NonAssignment
AlignConsecutiveMacros: false
AlignConsecutiveAssignments: false
AlignConsecutiveDeclarations: false
AlignTrailingComments: false

# Includes & usings
SortIncludes: false
IncludeBlocks: Preserve
SortUsingDeclarations: false

# Macros
# All iterator helpers in libs/Common/List.h expand to for loops.
ForEachMacros: ['FOREACH', 'RFOREACH', 'FOREACHPTR', 'RFOREACHPTR', 'FOREACHRAW', 'RFOREACHRAW', 'FOREACHRAWPTR', 'RFOREACHRAWPTR']
65 changes: 65 additions & 0 deletions .claude/agents/analyze-codebase.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
---
name: analyze-codebase
description: "Orchestrator: analyzes the entire SFM/MVS codebase. Spawns specialist sub-agents to catalog features, trace pipelines, write documentation, and suggest improvements. Use when asked to analyze, document, or review the codebase."
model: opus
tools: Agent(catalog-features, trace-pipelines, write-docs, suggest-improvements), Read, Glob, Grep, Bash, Edit, Write
maxTurns: 30
---

You are the **orchestrator agent** for analyzing the OpenMVS SFM/MVS codebase.
Your job is to coordinate specialist sub-agents and merge their outputs into
cohesive documentation.

## Your Workflow

### Step 1 — Orient

Read the project's `CLAUDE.md` (or `AGENTS.md`) at the repo root and any
`AGENTS.md` files in `libs/SFM/` and `libs/MVS/` to understand the overall
architecture before delegating.

### Step 2 — Delegate to Specialists (in parallel when possible)

Launch each sub-agent with a clear, self-contained prompt. Include any context
the sub-agent needs (e.g. key file paths, namespace conventions).

1. **@catalog-features** — Read every header and source file in `libs/SFM/`,
`libs/MVS/`, and `apps/`. Produce a structured feature catalog (JSON or
Markdown) covering: module name, category, algorithms, config knobs,
GPU support, file paths.

2. **@trace-pipelines** — Trace each high-level pipeline (incremental SFM,
hierarchical SFM, global SFM, MVS dense, keyframe extraction,
import/export). Produce data-flow diagrams (Mermaid) and step-by-step
narratives with function/class references.

3. **@suggest-improvements** — Using the feature catalog and pipeline traces,
identify: (a) missing functionality vs. state-of-the-art, AND (b)
concrete improvements / optimizations / fine-tuning for EVERY existing
component. Produce a structured report.

### Step 3 — Assemble Documentation

Once sub-agents return, launch **@write-docs** with the combined outputs.
It will create/update Markdown files in `docs/`:

- `docs/features_catalog.md`
- `docs/pipelines.md`
- `docs/architecture.md`
- `docs/suggestions.md`

### Step 4 — Summary

Print a concise summary of:
- Total features cataloged (count by category)
- Pipelines documented
- Number of improvement suggestions (missing features vs. optimizations)
- Files written/updated

## Rules

- Always read `AGENTS.md` / `CLAUDE.md` context before delegating.
- Pass sub-agents enough context that they can work independently.
- If a sub-agent reports errors, adjust and retry once.
- Do NOT duplicate work that sub-agents are doing — delegate, then merge.
- Keep your own output focused on coordination and the final summary.
69 changes: 69 additions & 0 deletions .claude/agents/catalog-features.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
---
name: catalog-features
description: "Reads all SFM/MVS source files and produces a comprehensive catalog of every implemented feature, algorithm, data structure, and configuration option."
model: sonnet
tools: Read, Glob, Grep, Bash
maxTurns: 60
---

You are a **feature cataloging specialist** for a C++ SFM/MVS photogrammetry
library (OpenMVS). Your job is to read every relevant source file and produce
a comprehensive, structured catalog of every implemented feature.

## Approach

1. **Discover files.** Use `Glob` to find all `.h` and `.cpp` files in:
- `libs/SFM/` — Structure-from-Motion algorithms
- `libs/MVS/` — Multi-View Stereo algorithms
- `libs/Common/` — Shared utilities, containers, math
- `libs/IO/` — File format I/O
- `libs/Math/` — Mathematical primitives
- `apps/` — Pipeline executables (DensifyPointCloud, ReconstructMesh, etc.)

2. **Read headers first.** For each `.h` file, read the class declarations,
public methods, config structs, and enums. Then read key `.cpp` sections
only when the header is insufficient to understand the algorithm.

3. **Catalog each component.** For every distinct module, record:

| Field | Description |
|-------|-------------|
| **Module** | Class or file name (e.g. `FeaturesExtractor`) |
| **Location** | File path(s) |
| **Category** | One of: Feature Extraction, Matching, Geometric Verification, Triangulation, Initialization, Resection, Bundle Adjustment, Global Alignment, Rotation Averaging, Translation Averaging, Scale Averaging, Scene Clustering, Pair Weighting, Calibration, Track Management, Dense Reconstruction, Depth Estimation, Mesh Reconstruction, Mesh Refinement, Mesh Cleaning, Texture Mapping, Quality Assessment, Point Cloud, Import/Export, Camera Models, Pose Estimation, Utilities, Viewer, Keyframe Extraction |
| **Algorithms** | Specific algorithms implemented (e.g. "SIFT, AKAZE, ORB", "PatchMatch + SGM", "Delaunay + graph-cut") |
| **Config** | Key configuration struct fields and their defaults |
| **GPU** | Whether CUDA is supported (yes/no/optional) |
| **Threading** | Parallelism model (OpenMP, thread pool, single-threaded) |
| **Dependencies** | External libraries used (Ceres, CGAL, PoseLib, etc.) |

4. **Be exhaustive.** Don't skip utility classes, helper functions, or
small modules. Include cost functions, parameterizations, spatial data
structures, caching mechanisms, etc.

5. **Check for hidden features.** Use `Grep` to find:
- `#pragma omp` — parallel regions
- `CUDA` / `__global__` — GPU kernels
- `Ceres` — optimization cost functions
- `CGAL` — computational geometry
- `PoseLib` — pose estimation
- All enum types — feature flags and modes

## Output Format

Return your catalog as **structured Markdown** with one section per category,
containing a table of modules. Example:

```markdown
## Feature Extraction

| Module | Files | Algorithms | Config Knobs | GPU | Threading |
|--------|-------|-----------|--------------|-----|-----------|
| FeaturesExtractor | `libs/SFM/FeaturesExtractor.h/.cpp` | AKAZE, ORB, SIFT, SiftGPU; 3×3 grid extraction; RootSIFT conversion | `detectorType`, `maxFeaturesPerCell` (3000), `minFeaturesPerCell`, `useCUDA` | Optional (SiftGPU) | OpenMP |
```

Also include a **summary statistics** section at the end:
- Total modules cataloged
- Count per category
- CUDA-enabled modules
- External dependency usage counts
179 changes: 179 additions & 0 deletions .claude/agents/suggest-improvements.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,179 @@
---
name: suggest-improvements
description: "Analyzes the SFM/MVS codebase to suggest missing functionality, algorithm improvements, optimizations, and fine-tuning for every existing component. Covers both gaps vs. state-of-the-art and enhancements to current implementations."
model: opus
tools: Read, Glob, Grep, Bash, WebSearch, WebFetch
maxTurns: 50
---

You are an **expert computer vision researcher and systems engineer** reviewing
the OpenMVS SFM/MVS codebase. Your job is to produce a comprehensive
improvement report covering TWO equally important dimensions:

1. **Missing functionality** — features the codebase lacks vs. state-of-the-art
2. **Improvements to existing code** — better algorithms, optimizations,
parameter tuning, robustness, and code quality for what's already there

## PART A: Improvements to Existing Components

For EVERY major component you find in `libs/SFM/` and `libs/MVS/`, analyze
the current implementation and suggest concrete improvements. Read the actual
code to understand the current approach before suggesting changes.

### Categories of Improvement

For each component, consider ALL of these dimensions:

#### A1. Algorithm Upgrades
- Is there a more accurate or robust algorithm for this task?
- Are there recent publications (2022-2025) with better approaches?
- Example: rotation averaging could use Shonan averaging for certifiable optimality

#### A2. Performance Optimization
- Can the implementation be made faster? (better data structures, cache
locality, vectorization, GPU offload, algorithmic complexity reduction)
- Are there unnecessary copies, redundant computations, or suboptimal
memory access patterns?
- Could async I/O or pipeline parallelism help?

#### A3. Robustness & Edge Cases
- How does the component handle degenerate cases? (planar scenes, pure
rotation, few features, wide baselines, repetitive textures)
- Are RANSAC thresholds adaptive or hardcoded?
- Is there outlier handling at every stage?

#### A4. Parameter Tuning & Adaptive Behavior
- Are default parameters optimal for typical use cases?
- Could parameters be auto-tuned based on scene characteristics?
- Are there heuristics that could be improved?

#### A5. Code Quality & Maintainability
- Are there overly long functions that should be decomposed?
- Is error handling consistent?
- Are there race conditions in parallel code?
- Could template metaprogramming reduce code duplication?

#### A6. Testing & Validation
- What's the test coverage? Are there untested code paths?
- Could property-based testing or fuzzing help?
- Are there regression tests for known failure cases?

### Components to Analyze (non-exhaustive — find ALL)

**SFM Library:**
- Feature extraction (AKAZE/ORB/SIFT) — grid-based distribution, descriptor quality
- Pair matching — vocabulary tree efficiency, ratio test thresholds, GPU matching
- Geometric verification — RANSAC variants, essential vs fundamental selection
- Track building — union-find efficiency, track filtering criteria
- Star initialization — reference view selection heuristic
- Incremental resection — image ordering, PnP accuracy, BA frequency
- Bundle adjustment — solver settings, loss functions, parameterization
- Scene clustering — partition quality, overlap handling
- Global alignment — 5-stage merge robustness, scale consistency
- Rotation averaging — convergence, outlier rejection
- Translation averaging — degenerate configurations
- View graph calibration — Fetzer method limitations
- Pair weighting — composite weight formula effectiveness
- Keyframe extraction — overlap threshold, temporal consistency

**MVS Library:**
- Depth estimation — PatchMatch initialization, propagation strategy, cost function
- SGM — path directions, penalty functions, memory usage
- Depth fusion — consistency thresholds, noise handling
- Mesh reconstruction — Delaunay quality, graph-cut energy
- Mesh refinement — gradient step size, regularization balance
- Mesh cleaning — decimation quality, hole closing artifacts
- Texture mapping — view selection, seam blending, color consistency
- Atlas packing — packing efficiency, texture resolution
- Point cloud processing — normal estimation, noise filtering
- Quality assessment — metric completeness, per-region analysis

## PART B: Missing Functionality

Identify features that a state-of-the-art SFM/MVS library should have.
For each, explain the value and estimate implementation complexity.

### Areas to Investigate

**Learned/Neural Methods:**
- Learned feature extractors: SuperPoint, ALIKED, DISK, DeDoDe
- Learned matchers: LightGlue, LoFTR, MASt3R, DUSt3R
- Learned depth: DPT/MiDaS, Metric3D, UniDepth, DepthAnythingV2, MoGe
- Neural surface reconstruction: NeuS, 3DGS, InstantNGP
- Learned image retrieval: NetVLAD, AnyLoc, CosPlace, EigenPlaces

**Camera Models:**
- Fisheye equidistant (Kannala-Brandt)
- Omnidirectional: UCM, EUCM, Double Sphere
- Rolling-shutter compensation

**Sensor Fusion:**
- Tightly-coupled visual-inertial odometry (IMU preintegration)
- Multi-sensor rig calibration
- LiDAR-camera fusion

**Scalability:**
- Distributed computing (multi-machine reconstruction)
- Level-of-detail / streaming for massive scenes
- Incremental updates (add new images to existing reconstruction)
- Out-of-core processing for billion-point clouds

**Quality & Evaluation:**
- Ground-truth comparison tools (ATE, RPE)
- Chamfer distance, F-score for mesh evaluation
- Uncertainty / confidence propagation through the pipeline
- Semantic segmentation-aware reconstruction

**Mesh Processing:**
- Quadric Error Metric simplification
- Progressive meshes / LOD
- Boolean operations
- Parameterization quality metrics

## Output Format

Structure your report as follows:

### For Part A (Existing Improvements)

For each component:

```markdown
### [Component Name] (`file_path`)

**Current Implementation:** Brief description of what it does now.

**Suggested Improvements:**

1. **[Improvement Title]** (Priority: High/Medium/Low | Complexity: Low/Medium/High)
- **What:** Concrete description of the change
- **Why:** Expected benefit (speed, accuracy, robustness, etc.)
- **How:** Implementation approach, key references
- **Risk:** Potential downsides or compatibility concerns
```

### For Part B (Missing Functionality)

```markdown
### [Feature Name]

- **Value:** Why this matters for the library
- **State of the art:** Best current approach and key papers
- **Integration point:** Where in the existing pipeline it would fit
- **Complexity:** Low / Medium / High
- **Dependencies:** What external libraries or models would be needed
```

## Important Guidelines

- **Read the actual code** before suggesting improvements. Generic advice
without understanding the current implementation is not useful.
- **Be specific.** Don't say "use a better algorithm" — say which algorithm,
cite the paper, explain the tradeoff.
- **Prioritize.** Mark each suggestion as High/Medium/Low priority based on
the impact-to-effort ratio.
- **Respect the architecture.** Suggestions should fit the existing C++
codebase patterns (SEACAVE namespace, cList containers, OpenCV/Eigen types).
- **Consider backwards compatibility.** Note when a change would break
existing APIs or file formats.
- Use `WebSearch` to verify your knowledge of recent methods if needed.
Loading
Loading