public static Points_3D Union_object_model_3d(HTuple model) { HTuple unionedModel; HOperatorSet.UnionObjectModel3d(model, "points_surface", out unionedModel); Points_3D points_3D = new Points_3D(unionedModel); HOperatorSet.ClearObjectModel3d(unionedModel); return(points_3D); }
public void a() { BoundingBox_3D a = new BoundingBox_3D(1); var gbg = (HTuple)a; Points_3D points1 = new Points_3D(1); Points_3D points2 = new Points_3D(1); ListPoints_3D listPoints_3D = new ListPoints_3D(); listPoints_3D.Register_object_model_3d_pair(points1, points2); }
/**写代码注意事项: * 0. 生成的临时的模型Htuple 需要及时释放 * **/ /**采样 * **/ private static Points_3D Sample_object_model_3d(HTuple model, SampleMethord methord = SampleMethord.accurate, double sampleDistance = 1, SampleParams para = SampleParams.min_num_points, int minNumPoints = 1) { HTuple m = BaseMethord.Enum2Htuple(methord); HTuple p = BaseMethord.Enum2Htuple(para); HTuple sampledModel; HOperatorSet.SampleObjectModel3d(model, m, sampleDistance, p, minNumPoints, out sampledModel); Points_3D points_3D = new Points_3D(sampledModel); HOperatorSet.ClearObjectModel3d(sampledModel); return(points_3D); }
/**全局注册 * 返回一个融合好的模型 * **/ public Points_3D Register_object_model_3d_global() { HTuple HomMat3DRefined, Score; HTuple modelHandle = GetModels(); HTuple poseHandle = Pose2Mat(); HOperatorSet.RegisterObjectModel3dGlobal(modelHandle, poseHandle, "previous", new HTuple(), Enum2Htuple(GenParamName.max_num_iterations), 1, out HomMat3DRefined, out Score); HTuple affinedModel = HalconWrapper.Affine_trans_object_model_3d(modelHandle, HomMat3DRefined); Points_3D unionedPoints = HalconWrapper.Union_object_model_3d(affinedModel); HOperatorSet.ClearObjectModel3d(affinedModel); return(unionedPoints); }
/**对输入的点云进行注册 * PreviousOM3 : 基准点云 * ObjectModel3D : 需要配准的点云 * **/ public void Register_object_model_3d_pair(Points_3D ObjectModel3D, Points_3D PreviousOM3) { HTuple methord = Enum2Htuple(Methord.matching); HTuple genParamName = Enum2Htuple(GenParamName.default_parameters); HTuple genParamValue = Enum2Htuple(GenParamValue.accurate); HTuple pose, score; HOperatorSet.RegisterObjectModel3dPair (ObjectModel3D.Pointclouds, PreviousOM3.Pointclouds, methord, genParamName, genParamValue, out pose, out score); PairRegesterResult regesterResult = new PairRegesterResult(); regesterResult.pose = pose; regesterResult.score = score; //保存点云和变换矩阵 pairRegesters.Add(regesterResult); if (registePointsList.Count == 0) { registePointsList.Add(PreviousOM3); } registePointsList.Add(ObjectModel3D); }
public static Points_3D Sample_object_model_3d(Points_3D model, SampleMethord methord = SampleMethord.accurate, double sampleDistance = 1, SampleParams para = SampleParams.min_num_points, int minNumPoints = 1) { return(Sample_object_model_3d (model.Pointclouds, methord, sampleDistance, para, minNumPoints)); }
/**拷贝当前点云 * 注意,这里只拷贝了当前点云,没有拷贝里面存储的配准点云 * **/ public Points_3D Copy() { Points_3D p = new Points_3D(this.Pointclouds); return(p); }