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/04 12:48] wissotskytamiwiki:projects:scanning-tami [2025/04/04 18:18] (current) wissotsky
Line 3: Line 3:
 </WRAP> </WRAP>
  
-{{tamiwiki:projects:mermaid-diagram-2025-04-03-220229.png}}+{{tamiwiki:projects:enqvwett3dgqvudxdpmwrsozaihfjyfszimqkpblh0dqy5wdsgwpgmx5jzlhqva_b7ckp2bga2quwfkr3_11i0yqzbjg2slv5bxgz9s3uwbvakx-eecnut0ycxoec2m1s0kv0tdhr79uaj7qhpzn2837ln67eslxckxzwc3rbzaafyc6tjgf0jaorpvpqbf5iixtewrphb1zzmvnyc.svg}}
  
 <blockquote> <blockquote>
-flowchart TB 
 flowchart TB flowchart TB
     subgraph sg1["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"]     subgraph sg2["Depth Estimation"]
         direction LR         direction LR
-        pm["Patchmatch"] --RANSAC Polyfit--> nde["Monocular Depth Estimate"] --> gsd["3D Gaussian Splat Depth"] --> kde["KDE Outlier Filtering"]+        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)]         kde --> storergbd[(RGBD Images)]
     end     end
Line 28: Line 105:
         storergbd2[(RGBD Images)]         storergbd2[(RGBD Images)]
         gpuintgr["GPU VoxelBlockGrid Integration"]         gpuintgr["GPU VoxelBlockGrid Integration"]
-        isvram{"VRAM Occupation"}+        isvram{"VRAM Usage"}
         cpuintgr["CPU Uniform Voxel Grid Trilinear Interpolation"]         cpuintgr["CPU Uniform Voxel Grid Trilinear Interpolation"]
         exportmesh[(GLTF Mesh)]         exportmesh[(GLTF Mesh)]
  
-        storergbd2 <==> gpuintgr+        storergbd2 -.- gpuintgr
         gpuintgr --> isvram         gpuintgr --> isvram
         isvram --Low--> gpuintgr         isvram --Low--> gpuintgr
tamiwiki/projects/scanning-tami.1743760088.txt.gz · Last modified: 2025/04/04 12:48 by wissotsky