Easy3DPCBWarpage

Support

Required licenses

Easy3D and EasyGauge

Recommended images

The images from the folder Sample Images\3D\PCB Warpage

Location

[…]C:\Users\Public\Documents\Euresys\Open eVision 24.02\Sample Programs
\[LANGUAGE] samples
\3D Processing\Easy3DPCBWarpage

Purpose

This sample program demonstrates how to:

Measure the warpage of a PCB with Easy3D.

Code highlights

1. Search for the PCB plane.
float maximumDistanceToPlane = 1.0f; // 1.0 mm (the warpage is assumed to be smaller than this)
EPlaneFinder finder(maximumDistanceToPlane); // tolerance for plane search = 1.0 mm
E3DPlane refPlane1 = finder.Find(pc_); // finds the largest plane in the point cloud
2. Crop any point distant from PCB plane.
EPlaneCropper cropperPCB(refPlane1); // 'refPlane_1' = ref. plane for the cropper
EPointCloud pcPlaneOnly; // only keep points close to the ref. plane
cropperPCB.Crop(pc_, pcPlaneOnly, EPlaneCropperType_KeepClose, maximumDistanceToPlane);
3. Apply a noise removal filter: zmapBeforeAlignment > zmapBeforeAlignmentFilter1.
EZMap16 zmapBeforeAlignmentFilter1; // output of the filter
zmapBeforeAlignmentFilter1.SetSize(zmapBeforeAlignment);
EFilters::RemoveNoise(zmapBeforeAlignment, zmapBeforeAlignmentFilter1, ENoiseRemovalMethod_AbsoluteDifferenceFromMean,halfKernelSizeFilter, thresholdFilter, ratioValidPixelsFilter, false);
4. Calculate the warpage in metric units.
OEV_UINT32 validCount;
float minValue, maxValue, averageValue;
EStatistics::ComputeStatistics(zmap_, validCount, minValue, maxValue, averageValue);
float warpage = maxValue - minValue;