Performing ZMap Leveling

The code shows how to perform ZMap leveling either by specifying a Region or using EPlaneFinder.

C++

#include <eVision/Easy3D/EZMapLeveler.h>
#include <eVision/Easy3D/EPlaneFinder.h>
#include <eVision/Easy3D/EZMapToPointCloudConverter.h>
using namespace eVision;
using namespace eVision::Easy3D;

EZMap8 source;
EZMap8 leveledZMap1;
EZMap8 leveledZMap2;
EZMapLeveler zmapLeveler;

// choice 1: use an ERegion
ERectangleRegion rectangle1(200, 75, 400, 120);
ERectangleRegion rectangle2(300, 1500, 150, 100);
ERegion region = ERegion::Union(rectangle1, rectangle2);
zmapLeveler.Level(source, region, leveledZMap1);

// choice 2: use an E3DPlaneFinder
EPlaneFinder finder(0.05f);
EZMapToPointCloudConverter converter;
EPointCloud cloud;
converter.Convert(source, cloud);
E3DPlane refPlane;
finder.Find(cloud, refPlane);
zmapLeveler.Level(source, refPlane.GetNormal(), leveledZMap2);

C#

using eVision;
using eVision.Easy3D;
EZMap8 source = new EZMap8();
EZMap8 leveledZMap1 = new EZMap8();
EZMap8 leveledZMap2 = new EZMap8();
EZMapLeveler zmapLeveler = new EZMapLeveler();

// choice 1: use an ERegion
ERectangleRegion rectangle1 = new ERectangleRegion(200, 75, 400, 120);
ERectangleRegion rectangle2 = new ERectangleRegion(300, 1500, 150, 100);
ERegion region = ERegion.Union(rectangle1, rectangle2);
zmapLeveler.Level(source, region, leveledZMap1);

// choice 2: use an E3DPlaneFinder
EPlaneFinder finder = new EPlaneFinder(0.05f);
EZMapToPointCloudConverter converter = new EZMapToPointCloudConverter();
EPointCloud cloud = new EPointCloud();
converter.Convert(source, cloud);
E3DPlane refPlane = new E3DPlane();
finder.Find(cloud, refPlane);
zmapLeveler.Level(source, refPlane.Normal, leveledZMap2);

Python

import eVision
from eVision import Easy3D
source = Easy3D.EZMap8()
leveled_zmap1 = Easy3D.EZMap8()
leveled_zmap2 = Easy3D.EZMap8()
zmap_leveler = Easy3D.EZMapLeveler()

# choice 1: use an ERegion
rectangle1 = eVision.ERectangleRegion(200, 75, 400, 120)
rectangle2 = eVision.ERectangleRegion(300, 1500, 150, 100)
region = eVision.ERegion.Union(rectangle1, rectangle2)
zmap_leveler.Level(source, region, leveled_zmap1)

# choice 2: use an E3DPlaneFinder
finder = Easy3D.EPlaneFinder(0.05)
converter = Easy3D.EZMapToPointCloudConverter()
cloud = Easy3D.EPointCloud()
converter.Convert(source, cloud)
ref_plane = Easy3D.E3DPlane()
finder.Find(cloud, ref_plane)
zmap_leveler.Level(source, ref_plane.Normal, leveled_zmap2)