A dataset was obtained by ftp from Brian Corner (Army Natick). It is said to come directly from a demonstration of the TC2 digitizing system. It is a whole body scan of Joe Nurre (OSU).
The conditions under which the scan was made are unknown to us. Nor do I know what sort of processing was performed on the data prior to receiving it here. The dataset appears to be a point cloud consisting of 6 separate aligned views.
The file is JoeNurrey.xyz [sic] and comprises 7181774 bytes.
The file appears to be an ASCII list of XYZ coordinates. Values are one per line. Line separators are a single ASCII CR (015). The first line is a single 'U' character. Brian pointed out that the different views were delimited by a triplet with a Z coordinate value of 5000.0. The X coordinate value seems to be the number of points in the view.
The first few lines look like this:
U 55039.0 0.0 5000.0 108.2 584.6 2014.1 111.4 585.5 2012.8 19.7 348.4 1147.3 ...
This Tcl script reformats the vertices into an Open Inventor file:
#!/usr/local/bin/tclsh7.6
puts "#Inventor V2.1 ascii"
set tc2File [open "JoeNurrey.xyz" r]
set colorList {
{1.0 0.0 0.0}
{1.0 1.0 0.0}
{0.0 1.0 0.0}
{0.0 1.0 1.0}
{0.0 0.0 1.0}
{1.0 0.0 1.0}
}
set colorIndex 0
set headerLine [gets $tc2File]
set x [gets $tc2File]
set y [gets $tc2File]
set z [gets $tc2File]
while {1} {
puts "Coordinate3 \{"
puts " point \["
set x [gets $tc2File]
set y [gets $tc2File]
set z [gets $tc2File]
puts -nonewline "$x $y $z"
while {1} {
set x [gets $tc2File]
set y [gets $tc2File]
set z [gets $tc2File]
if {$z == "" || $z > 4000.} break
puts -nonewline ",\n$x $y $z"
}
puts " \]"
puts "\}"
puts "Material \{diffuseColor [lindex $colorList $colorIndex]\}"
incr colorIndex
puts "PointSet \{\}"
if {$z == ""} break
}
close $tc2File
exit
When it is run and the output directed into the file JoeNurre.iv the dataset can be rendered as a point set using ivview. Joe is holding onto some bars to stabilize his body. There are 6 views in the file. Here they are rendered in 6 different colors. Joe appears to be wearing only briefs. Click on these images to see a larger view:
If I knew the positions of the 6 cameras I could probably tessellate each as a range map using CyScan. The Wrap software, because it knows nothing of the structure of the point cloud, must tessellate it the hard way. It took a long time and a lot of memory. I did not record the amounts, but it was on the order of an hour and 200Mb of RAM - and this for just one view. I suspect that all six view would be very much slower.
The 6 views do not appear to be "parallel" in the Cyberware/CyPie sense and would therefore need to be merged using CyEat or similar software.
This Tcl script, tc2vertex.tcl, reformats the file into a simple list of vertices. It is rather hack. One vertex per line, space separated components. It stops after the first view is translated. The output is redirected into JoeNurreSmall.vtx and may be read into Raindrop Geomagic's Wrap software for surfacing.
#!/usr/local/bin/tclsh7.6
set tc2File [open "JoeNurre.xyz" r]
set headerLine [gets $tc2File]
set x [gets $tc2File]
set y [gets $tc2File]
set z [gets $tc2File]
while {1} {
set x [gets $tc2File]
set y [gets $tc2File]
set z [gets $tc2File]
puts "$x $y $z"
if {$z > 4000.} break
}
close $tc2File
The Wrap software was then used to generate a triangle surface. Outlying points were first clipped away. The process generates a number of incorrect triangles which were deleted. Primarily between the torso, face and arms.
This is one view of the point set as displayed in Wrap:
...and a close-up of the shoulder region:
The surface tessellated by Wrap. This is a different projection from the point images above:
The same region from a typical Cyberware scan (with 3d bodymarks). Both this and the above are flat shaded to show the noise:
Additional information and comments are welcome.
David Addleman, Cyberware