You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
32 lines
938 B
32 lines
938 B
import cv2 as cv |
|
|
|
N = 2 |
|
modelname = "parasaurolophus_6700" |
|
scenename = "rs1_normals" |
|
|
|
detector = cv.ppf_match_3d_PPF3DDetector(0.025, 0.05) |
|
|
|
print('Loading model...') |
|
pc = cv.ppf_match_3d.loadPLYSimple("data/%s.ply" % modelname, 1) |
|
|
|
|
|
print('Training...') |
|
detector.trainModel(pc) |
|
|
|
print('Loading scene...') |
|
pcTest = cv.ppf_match_3d.loadPLYSimple("data/%s.ply" % scenename, 1) |
|
|
|
print('Matching...') |
|
results = detector.match(pcTest, 1.0/40.0, 0.05) |
|
|
|
print('Performing ICP...') |
|
icp = cv.ppf_match_3d_ICP(100) |
|
_, results = icp.registerModelToScene(pc, pcTest, results[:N]) |
|
|
|
print("Poses: ") |
|
for i, result in enumerate(results): |
|
#result.printPose() |
|
print("\n-- Pose to Model Index %d: NumVotes = %d, Residual = %f\n%s\n" % (result.modelIndex, result.numVotes, result.residual, result.pose)) |
|
if i == 0: |
|
pct = cv.ppf_match_3d.transformPCPose(pc, result.pose) |
|
cv.ppf_match_3d.writePLY(pct, "%sPCTrans.ply" % modelname)
|
|
|