User Tools

Site Tools


tamiwiki:projects:scanning-tami

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
tamiwiki:projects:scanning-tami [2025/04/03 21:38] wissotskytamiwiki:projects:scanning-tami [2025/04/04 18:18] (current) wissotsky
Line 3: Line 3:
 </WRAP> </WRAP>
  
 +{{tamiwiki:projects:enqvwett3dgqvudxdpmwrsozaihfjyfszimqkpblh0dqy5wdsgwpgmx5jzlhqva_b7ckp2bga2quwfkr3_11i0yqzbjg2slv5bxgz9s3uwbvakx-eecnut0ycxoec2m1s0kv0tdhr79uaj7qhpzn2837ln67eslxckxzwc3rbzaafyc6tjgf0jaorpvpqbf5iixtewrphb1zzmvnyc.svg}}
 +
 +<blockquote>
 flowchart TB flowchart TB
-    subgraph "Global Registration" +    subgraph sg1["Global Registration"] 
-    direction LR +        direction LR 
-    fd["Feature Detection"] --> fm["Feature Matching"] --> pte["Pairwise Essential Matrix"] --> pgo["Bundle Adjustment"]+        vf[(Video Frames)] --> undistort["Undistort Frames"] --> fd 
 +        fd["Feature Detection"] --> fm 
 +         
 +            subgraph fm["Feature Matching"] 
 +                direction LR 
 +                curframe@{ shape: circle, label: "Frame t" } 
 +                lcpairs[("Loop Closure Groups")] 
 +                mne["Match to all frames between t-15 and t+15"
 +                islcp{"Is frame in a loop closure group"
 +                mlcp["Match to all frames in the same loop closure group"
 +                findtransitivepairs["Find transitive pairs, If A-B and B-C match, attempt to match A-C"
 +                imgpairs[(Successfully Matched Image Pairs)] 
 + 
 +                curframe --> mne 
 +                lcpairs -..- islcp 
 +                mne --> islcp 
 +                mlcp --> findtransitivepairs 
 +                islcp --Yes--> mlcp 
 +                islcp -->|No| findtransitivepairs 
 +                findtransitivepairs --> imgpairs 
 +            end 
 + 
 + 
 +        imgpairs --> imgpair[("Image pair")]  
 +            subgraph ComputeEssentialMatrix["Compute Essential Matrix"] 
 +                direction LR 
 +                 
 +                imgpair --> ransacLoop["RANSAC Loop"
 +                 
 +                subgraph RANSACProcess["RANSAC Process"
 +                    direction LR 
 +                    ransacLoop --> randomSample["Randomly select 5 point-to-point matches"
 +                    randomSample --> computeE["Compute 10 candidate essential matrices using 5-point algorithm"
 +                    computeE --> countInliers["Count the amount of points where the algebraic epipolar error is lower than a set threshold"
 +                    countInliers --> updateBest["Update best essential matrix if more inliers found in any of the candidates"
 +                    updateBest --> checkIteration{"Max iterations 
 +                    reached?"
 +                    checkIteration -->|No| ransacLoop 
 +                end 
 +                 
 +                checkIteration -->|Yes| output[("Image Pairs With Estimated Essential Matricies and Keypoint Inlier Masks")] 
 +            end 
 +         
 +        output --> pgo["Bundle Adjustment"]
     end     end
 +
 +    
 +    subgraph sg2["Depth Estimation"]
 +        direction LR
 +        pm["PatchMatch Multi-View Depth Estimation"]
 +        nde["DepthAnything v2 Neural Monocular Depth Estimate"]
 +        pm & nde --> preprocessing
 +
 +        subgraph ConfidenceWeightedDepthCorrection["Confidence-Weighted Depth Map Correction"]
 +            direction LR
 +            
 +            preprocessing["Downscale Neural Estimate to PatchMatch resolution"] --> ransacLoopPolyfit["RANSAC Loop"]
 +            
 +            subgraph RANSACProcessPolyfit["RANSAC Polynomial Fitting"]
 +                ransacLoopPolyfit --> sampleSelection
 +                sampleSelection["Random sample selection
 +                from depth maps"] --> weightSamples
 +                
 +                weightSamples["Weight samples by
 +                confidence map values"] --> fitModel
 +                
 +                fitModel["Fit polynomial offset model
 +                to weighted samples"] --> evaluateModel
 +                
 +                evaluateModel["Evaluate model by weighted error"] --> checkConvergence
 +                
 +                checkConvergence{"Max Iterations Reached?"} -->|No| ransacLoopPolyfit
 +                
 +                checkConvergence -->|Yes| bestModel["Select best polynomial
 +                offset model"]
 +            end
 +            
 +            bestModel --> applyCorrection["Apply polynomial correction to full-res neural depth map"]
 +            
 +            applyCorrection --> outputPolyfit["Merge Depth and Color into RGBD"]
 +        end
 +
 +        outputPolyfit --> rgbdpcd["RGBD Point Cloud Projection"] --> gsd["3D Gaussian Splat Training + Depth Rasterization"]
 +        gsd --> kde["KDE Outlier Filtering"]
 +        kde --> storergbd[(RGBD Images)]
 +    end
 +
 +    subgraph sg3["Meshing"]
 +        direction LR
 +        tsdf --> gltfq["Quantize and Compress using the Draco GLTF Transcoder"]
 +    end
 +
 +    subgraph tsdf["Hybrid RGBD TSDF Integration"]
 +        direction LR
 +        storergbd2[(RGBD Images)]
 +        gpuintgr["GPU VoxelBlockGrid Integration"]
 +        isvram{"VRAM Usage"}
 +        cpuintgr["CPU Uniform Voxel Grid Trilinear Interpolation"]
 +        exportmesh[(GLTF Mesh)]
 +
 +        storergbd2 -.- gpuintgr
 +        gpuintgr --> isvram
 +        isvram --Low--> gpuintgr
 +        isvram --High--> cpuintgr
 +        cpuintgr --> gpuintgr
 +        gpuintgr -.Move Data.-o cpuintgr
 +
 +        cpuintgr --> exportmesh
 +    end
 +
 +    sg1 --> sg2 --> sg3
 +</blockquote>
  
 3d scan of tami 3d scan of tami
tamiwiki/projects/scanning-tami.1743705492.txt.gz · Last modified: 2025/04/03 21:38 by wissotsky