Пример #1
0
def PreparePcForGogma(scanApath, scanBpath):
  print "preparing for Gogma"
  print scanApath
  print scanBpath
  plyA = PlyParse()
  plyA.parse(scanApath)
  pcA = plyA.getPc()
  plyB = PlyParse()
  plyB.parse(scanBpath)
  pcB = plyB.getPc()
  with open(re.sub(".ply",".txt",scanApath),'w') as f:
    print pcA.shape
    np.random.shuffle(pcA)
    np.savetxt(f, pcA)
  with open(re.sub(".ply",".txt",scanBpath),'w') as f:
    np.random.shuffle(pcB)
    np.savetxt(f, pcB)
Пример #2
0
def DisplayPcs(scanApath, scanBpath, q,t, plotCosies, stopToDisplay,
    displayNormals):
  from js.data.plyParse import PlyParse
  from js.utils.plot.colors import colorScheme
  from js.geometry.rotations import plotCosy
  import mayavi.mlab as mlab
  colors = colorScheme("label")
  print "parsing", scanApath
  plyA = PlyParse();
  plyA.parse(scanApath)
  pcA = plyA.getPc()
  nA = plyA.getNormals()
  print "parsing", scanBpath
  plyB = PlyParse();
  plyB.parse(scanBpath)
  pcB = plyB.getPc()
  nB = plyB.getNormals()

  R = q.toRot().R

  figm = mlab.figure(bgcolor=(1,1,1))
  mlab.points3d(pcA[:,0], pcA[:,1], pcA[:,2], mode="point",
      color=colors[0])
#  if plotCosies:
#    plotCosy(figm, np.eye(3), np.zeros(3), 0.5)
#    plotCosy(figm, R.T, -R.T.dot(t), 0.5)

  R = R.T
  t = -R.dot(t)
  pcB = (1.001*R.dot(pcB.T)).T + t
  nB = (1.001*R.dot(nB.T)).T

  mlab.points3d(pcB[:,0], pcB[:,1], pcB[:,2], mode="point",
        color=colors[1])

  if displayNormals:
    figm = mlab.figure(bgcolor=(1,1,1))
    mlab.points3d(nA[:,0], nA[:,1], nA[:,2], mode="point",
        color=colors[0])
    mlab.points3d(nB[:,0], nB[:,1], nB[:,2], mode="point",
          color=colors[1])

  if stopToDisplay:
    mlab.show(stop=True)
Пример #3
0
def PreparePcForGoICP(scanApath, scanBpath):
  plyA = PlyParse()
  plyA.parse(scanApath)
  pcA = plyA.getPc()
#  for i in range(3):
#    pcA[i,:] = 2.*(pcA[i,:]-np.min(pcA[i,:]))/(np.max(pcA[i,:])-np.min(pcA[i,:])) - 1.

  plyB = PlyParse()
  plyB.parse(scanBpath)
  pcB = plyB.getPc()

#  pcA -= np.mean(pcA, axis=0)
#  pcB -= np.mean(pcB, axis=0)
#  scale = max([np.max(pcA), np.max(pcB), np.max(-pcA), np.max(-pcB)])
#  pcA *= 1./scale
#  pcB *= 1./scale
#  print "min/maxes after scaling", [np.max(pcA), np.max(pcB), np.min(pcA), np.min(pcB)]

  with open(re.sub(".ply",".txt",scanApath),'w') as f:
    print pcA.shape
    np.random.shuffle(pcA)
    if pcA.shape[0] > 30000:
      pcA = pcA[:30000,:]
      print pcA.shape
    print pcA.shape
    f.write("{}\n".format(pcA.shape[0]))
    np.savetxt(f, pcA)
  with open(re.sub(".ply",".txt",scanBpath),'w') as f:
    np.random.shuffle(pcB)
    print pcB.shape
    if pcB.shape[0] > 30000:
      pcB = pcB[:30000,:]
    f.write("{}\n".format(pcB.shape[0]))
    np.savetxt(f, pcB)

  return 1.
Пример #4
0
def DisplayPcs(scanApath, scanBpath, q, t, plotCosies, stopToDisplay,
               displayNormals):
    from js.data.plyParse import PlyParse
    from js.utils.plot.colors import colorScheme
    from js.geometry.rotations import plotCosy
    import mayavi.mlab as mlab
    colors = colorScheme("label")
    print "parsing", scanApath
    plyA = PlyParse()
    plyA.parse(scanApath)
    pcA = plyA.getPc()
    nA = plyA.getNormals()
    print "parsing", scanBpath
    plyB = PlyParse()
    plyB.parse(scanBpath)
    pcB = plyB.getPc()
    nB = plyB.getNormals()

    R = q.toRot().R

    figm = mlab.figure(bgcolor=(1, 1, 1))
    mlab.points3d(pcA[:, 0],
                  pcA[:, 1],
                  pcA[:, 2],
                  mode="point",
                  color=colors[0])
    #  if plotCosies:
    #    plotCosy(figm, np.eye(3), np.zeros(3), 0.5)
    #    plotCosy(figm, R.T, -R.T.dot(t), 0.5)

    R = R.T
    t = -R.dot(t)
    pcB = (1.001 * R.dot(pcB.T)).T + t
    nB = (1.001 * R.dot(nB.T)).T

    mlab.points3d(pcB[:, 0],
                  pcB[:, 1],
                  pcB[:, 2],
                  mode="point",
                  color=colors[1])

    if displayNormals:
        figm = mlab.figure(bgcolor=(1, 1, 1))
        mlab.points3d(nA[:, 0],
                      nA[:, 1],
                      nA[:, 2],
                      mode="point",
                      color=colors[0])
        mlab.points3d(nB[:, 0],
                      nB[:, 1],
                      nB[:, 2],
                      mode="point",
                      color=colors[1])

    if stopToDisplay:
        mlab.show(stop=True)
colors = colorScheme("label")

q_star = np.array([0.707107, 0.381209, -0.0583624, 0.592683])
cfgBunnyZipper = {"name":"bun_zipper", "lambdaS3": [60], "lambdaR3": 0.001}
cfg = cfgBunnyZipper
if cfg["name"] == "bun_zipper":
  scans = ['../data/bunny_rnd/bun_zipper.ply',
      '../data/bunny_rnd/bun_zipper_angle_90_translation_0.3.ply']
  gt = ['../data/bunny_rnd/bun_zipper_angle_90_translation_0.3.ply_TrueTransformation_angle_90_translation_0.3.csv']

scanApath = scans[0]
scanBpath = scans[1]
nameA = os.path.splitext(os.path.split(scanApath)[1])[0]
nameB = os.path.splitext(os.path.split(scanBpath)[1])[0]

plyA = PlyParse(); plyA.parse(scanApath); pcA = plyA.getPc()
plyB = PlyParse(); plyB.parse(scanBpath); pcB = plyB.getPc()

pcA -= pcA.mean(axis=0)
pcB -= pcB.mean(axis=0)

ranges = [-np.abs(pcA[:,0]).max(), np.abs(pcA[:,0]).max(),
    -np.abs(pcA[:,1]).max(), np.abs(pcA[:,1]).max(),
    -np.abs(pcA[:,2]).max(), np.abs(pcA[:,2]).max()]

#mlab.points3d(pcA[:,0], pcA[:,1], pcA[:,2], mode="point",
#    color=colors[0])
#mlab.view(azimuth=90, elevation=30, distance=0.6, roll=0, focalpoint=
#    np.array([ 0.0017717 ,  0.00829888, -0.00625299]))
#print mlab.view()
#mlab.show(stop=True)
Пример #6
0
if showUntransformed or showTransformed:
    import mayavi.mlab as mlab

#figm = mlab.figure(bgcolor=(1,1,1))
#ply = PlyParse();
#ply.parse(scans[0])
#pc = ply.getPc()
#rgb = ply.rgb
#PlotShadedColoredPc(pc, rgb, np.array([255,0,0]),0.6)
#mlab.show(stop=True)

if showUntransformed:
    figm = mlab.figure(bgcolor=(1, 1, 1))
    for i in range(len(scans)):
        scanPath = scans[i]
        ply = PlyParse()
        ply.parse(scanPath)
        pc = ply.getPc()
        n = ply.n
        mlab.points3d(pc[:, 0],
                      pc[:, 1],
                      pc[:, 2],
                      mode="point",
                      color=colors[i % len(colors)])
        mlab.quiver3d(pc[:, 0],
                      pc[:, 1],
                      pc[:, 2],
                      n[:, 0],
                      n[:, 1],
                      n[:, 2],
                      color=colors[(2 + i) % len(colors)],
Пример #7
0
  import mayavi.mlab as mlab

#figm = mlab.figure(bgcolor=(1,1,1))
#ply = PlyParse();
#ply.parse(scans[0])
#pc = ply.getPc()
#rgb = ply.rgb
#PlotShadedColoredPc(pc, rgb, np.array([255,0,0]),0.6)
#mlab.show(stop=True)


if showUntransformed:
  figm = mlab.figure(bgcolor=(1,1,1))
  for i in range(len(scans)):
    scanPath = scans[i]
    ply = PlyParse();
    ply.parse(scanPath)
    pc = ply.getPc()
    n = ply.n
    mlab.points3d(pc[:,0], pc[:,1], pc[:,2], mode="point",
        color=colors[i%len(colors)])
    mlab.quiver3d(pc[:,0], pc[:,1], pc[:,2],n[:,0], n[:,1], n[:,2],
        color=colors[(2+i)%len(colors)],mask_points=20,
        line_width=1., scale_factor=0.01)
    print pc.max()
    print pc.min()
#    mlab.points3d(n[:,0]+i*2.3, n[:,1], n[:,2], mode="point",
#        color=colors[(2+i)%len(colors)])

  mlab.show(stop=True)
colors = colorScheme("label")

cfgBunnyZipper = {"name":"bun_zipper", "lambdaS3": [60], "lambdaR3": 0.001}
cfg = cfgBunnyZipper
if cfg["name"] == "bun_zipper":
  scans = ['../data/bunny_rnd/bun_zipper.ply',
      '../data/bunny_rnd/bun_zipper_angle_90_translation_0.3.ply']
  gt = ['../data/bunny_rnd/bun_zipper_angle_90_translation_0.3.ply_TrueTransformation_angle_90_translation_0.3.csv']

scanApath = scans[0]
scanBpath = scans[1]
nameA = os.path.splitext(os.path.split(scanApath)[1])[0]
nameB = os.path.splitext(os.path.split(scanBpath)[1])[0]

plyA = PlyParse(); plyA.parse(scanApath); pcA = plyA.getPc()
plyB = PlyParse(); plyB.parse(scanBpath); pcB = plyB.getPc()

ranges = [-np.abs(pcA[:,0]).max()*2, np.abs(pcA[:,0]).max()*2,
    -np.abs(pcA[:,1]).max()*2, np.abs(pcA[:,1]).max()*2,
    -np.abs(pcA[:,2]).max()*2, np.abs(pcA[:,2]).max()*2]

#mlab.points3d(pcA[:,0], pcA[:,1], pcA[:,2], mode="point",
#    color=colors[0])
#mlab.view(azimuth=90, elevation=30, distance=0.6, roll=0, focalpoint=
#    np.array([ 0.0017717 ,  0.00829888, -0.00625299]))
#print mlab.view()
#mlab.show(stop=True)

path = "./bb_nodes_per_iteration_R3_bunnyFull.csv"
ts, tetras, props = LoadNodesPerIteration(path)