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)
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)
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.
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)
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)],
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)