3D object capture Capture N “views” (parts of the object) –get points on surface of object –create mesh (infer connectivity) Hugues Hoppe –filter data (optional) “Align” views: bring different pieces in common coordinate frame –align each view with “master” view OR –iterate pairwise alignment OR –all - to - all alignment “Stitch” pieces together – overlapping surfaces, then “sew” together ( Greg Turk ) OR –construct volumetric representation, then extract surface (Brian Curless; Kari Pulli)
Point acquisition Manual –magnetic devices –articulated arm Automatic –passive scanning: 2 cameras - hard to do point correspondence –active scanning: camera + projective device laser (Cyberware) : sheet of light moving relative to object LCD projector “tag” each vertical line => need log(Xres) projective images Xp(Xc,Yc) R,T
View alignment Pairwise. Basic Tool: iterated closest point –for every vertex of each mesh, find closest point on other mesh –discard pairs that have at least one point on a boundary –compute rigid body transformation (R, T) for one of the meshes to minimize sum of squares for all distances (=>has closed form solution) –perform movement; repeat until distance below threshold All to all –consider physical model of N bodies where 2 interact if the corresponding meshes have overlapping regions. –compute equilibrium state
Mesh Zippering Combine surfaces –delete overlapping portions (use measurement “confidence” to decide from which mesh) –triangulate space between meshes –if surfaces not close enough => extend mesh boundary with perpendicular “wall”
Volumetric methods Equate each view with volume information –stuff “in front” of surface (between surface and camera / projector) => certainly empty –stuff “behind” surface => probably “full” –combine volume info from different views; extract full/empty boundary More precise: scalar function over space: distance to closest point on object surface –negative = “outside”; positive = “inside” –combine: perfect data => take min(abs(di)) real data: for each sample point, for meshes, compute weighted average (based on confidence) –extract 0-level isosurface, using Marching Cubes Advantages: –“water-tight” objects - can have surfaces not seen by sensor, but inferred from empty/full info
Marching Cubes –scalar samples on uniform grid –for each little cube, creates a surface is sample signs differ at cube corners –fast implementation with table lookup Volume representation –signed distance => smoother surface. Store only near object surface. –hierarchical volume rep (oct-trees) => better memory usage; don’t have to “guess” grid resolution