Triangulation Scanner Design Options Triangulation System Options • Single-stripe systems most robust, but slowest • To go faster, project multiple stripes – But which stripe is which? • In limit, project 2D pattern, determine projector/camera correspondence Time-Coded Light Patterns • Assign each stripe a unique illumination code over time [Posdamer 82] Time Space Gray-Code Patterns • To minimize effects of quantization error: each point may be a boundary only once Time Space Accounting for Reflectance • Because of surface reflectance and ambient light, distinguishing between black and white not always easy • Solution: project all-white (and sometimes all-black) frame • Permits multiple shades of gray Multiple Shades of Gray Multiple Shades of Gray Intensity Wedges • Limiting case: intensity wedges Temporal vs. Spatial Continuity • Structured-light systems make certain assumptions about the scene: • Temporal continuity assumption: – Assume scene is static – Assign stripes a code over time • Spatial continuity assumption: – Assume scene is one object – Project a grid, pattern of dots, etc. Grid Methods • Assume exactly one continuous surface • Count dots or grid lines • Occlusions cause problems • Some methods use dynamic programming [Maas] Codes Assuming Local Spatial Continuity Codeword Codes Assuming Local Spatial Continuity [Zhang] [Ozturk] Spatio-Temporal Continuity • Another possible assumption: – Object may move – Velocity low enough to permit tracking – “Spatio-temporal” continuity Designing a Code for Moving Scenes Camera Projector Designing a Code for Moving Scenes t Designing a Code for Moving Scenes Codeword t Codes for Moving Scenes • Assign time codes to stripe boundaries • Perform frame-to-frame tracking of corresponding boundaries – Propagate illumination history Illumination history = (WB),(BW),(WB) [Hall-Holt & Rusinkiewicz, ICCV 2001] Code Designing a Code • Want many “features” to track: lots of black/white edges at each frame • Try to minimize ghosts – WW or BB “boundaries” that can’t be seen directly Designing a Code • Design a code to make tracking possible: – Do not allow two spatially adjacent ghosts – Do not allow two temporally adjacent ghosts t Designing a Code • Graph (for 4 frames): 0000 1101 – Nodes: stripes (over time) – Edges: boundaries (over time) 1010 0101 1011 1111 0010 0001 1100 0100 Time 1110 Space 0111 1000 0110 1001 0011 Designing a Code • Graph (for 4 frames): 0000 1101 – Nodes: stripes (over time) – Edges: boundaries (over time) Boundary visible at even times 1010 0101 0111 1111 0010 0001 1100 1000 Boundary visible at odd times 1011 0100 1001 0110 • Path with alternating colors: 1110 0011 55 edges in graph maximal-length traversal has 110 boundaries (111 stripes) Designing a Code • Many solutions to the graph problem as stated, so we can add more constraints – Maximize effect of errors – No static boundaries – Even distribution of stripes of width 1 and 2 Implementation • Pipeline: Project Code Capture Images Find Boundaries Match Boundaries Decode • DLP projector illuminates scene @ 60 Hz. • Synchronized NTSC camera captures video • Pipeline returns range images @ 60 Hz. Compute Range Results Video frames Stripe boundaries unknown known ghosts More Options: Shadow Scanning • Variant of single-stripe triangulation • Use a simple lamp, stick to create a shadow [Bouguet] More Options: Active Stereo • Benefit: only camera/camera calibration, not camera/projector • Projection possibilities: – Random texture – Single stripe – Others (space-time codes?) [Davis]