예제 #1
0
import util
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import open3d as o3d

densifyN = 50000

output_path = 'F:/Surface reconstruction pre'
shape_file = 'F:/Surface reconstruction pre/cylinder.obj'
V,E,F_ = util.parseObj(shape_file)
F = util.removeWeirdDuplicate(F_)
Vorig,Eorig,Forig = V.copy(),E.copy(),F.copy()

# sort by length (maintain a priority queue)
Elist = list(range(len(E)))
Elist.sort(key=lambda i:util.edgeLength(V,E,i),reverse=True)

# create edge-to-triangle and triangle-to-edge lists
EtoF = [[] for j in range(len(E))]
FtoE = [[] for j in range(len(F))]
for f in range(len(F)):
	v = F[f]
	util.pushEtoFandFtoE(EtoF,FtoE,E,f,v[0],v[1])
	util.pushEtoFandFtoE(EtoF,FtoE,E,f,v[0],v[2])
	util.pushEtoFandFtoE(EtoF,FtoE,E,f,v[1],v[2])
V,E,F = list(V),list(E),list(F)

# repeat densification
for z in range(densifyN):
	util.densify(V,E,F,EtoF,FtoE,Elist)
with open(MODEL_LIST) as file:
	for line in file:
		model = line.strip()
		models.append(model)
models.sort()
modelN = len(models)

output_path = "output/{0}".format(CATEGORY)
if not os.path.isdir(output_path):
	os.makedirs(output_path)

for m in models:
	timeStart = time.time()
	
	shape_file = "{2}/{0}/{1}/models/model_normalized.obj".format(CATEGORY,m,SHAPENETPATH)
	V,E,F = util.parseObj(shape_file)
	F = util.removeWeirdDuplicate(F)
	Vorig,Eorig,Forig = V.copy(),E.copy(),F.copy()

	# sort by length (maintain a priority queue)
	Elist = list(range(len(E)))
	Elist.sort(key=lambda i:util.edgeLength(V,E,i),reverse=True)

	# create edge-to-triangle and triangle-to-edge lists
	EtoF = [[] for j in range(len(E))]
	FtoE = [[] for j in range(len(F))]
	for f in range(len(F)):
		v = F[f]
		util.pushEtoFandFtoE(EtoF,FtoE,E,f,v[0],v[1])
		util.pushEtoFandFtoE(EtoF,FtoE,E,f,v[0],v[2])
		util.pushEtoFandFtoE(EtoF,FtoE,E,f,v[1],v[2])