------Matrox Imaging Library (MIL) X Service Pack 4 Release Notes (whatsnew_processing) March 2020 (c) Copyright Matrox Electronic Systems Ltd., 1992-2020. ------

Main table of contents

Section 1 : Differences between MIL X Service Pack 4 and MIL 10 Processing Pack 3 Section 2 : Differences between MIL 10 Processing Pack 3 and MIL 10 Processing Pack 2 with Update 63 Section 3 : Differences between MIL 10 Processing Pack 2 with Update 63 and MIL 10 Processing Pack 2 Section 4 : Differences between MIL 10 Processing Pack 2 and MIL 10 Processing Pack 1 Section 5 : Differences between MIL 10 Processing Pack 1 and MIL 10 Section 6 : Differences between MIL 10 and MIL 9 Processing Pack 2 with Update 56 Section 7 : Differences between MIL 9 Processing Pack 2 with Update 56 and MIL 9 Processing Pack 2 Section 8 : Differences between MIL 9 Processing Pack 2 with Update 45 and MIL 9 Processing Pack 2 Section 9 : Differences between MIL 9 Processing Pack 2 and MIL 9 Processing Pack 1 Section 10 : Differences between MIL 9 Processing Pack 1 and MIL 9 Section 11 : Differences between MIL 9 and MIL 8 Processing Pack 4

------Section 1: Differences between MIL X Service Pack 4 and MIL 10 Processing Pack 3

Table of Contents for Section 1

1. Overview 2. New functionalities and improvements 2.01 MIL processing specific examples 2.02 Classification module 2.03 Blob module 2.04 Calibration module 2.05 SureDotOCR® module 2.06 Registration module 2.07 Pattern Matching module 2.08 Model Finder module 2.09 Metrology module 2.10 3dMap module 2.11 Code Reader module 2.12 Measurement module 2.13 String Reader module 2.14 Primitives 2.15 Graphics 2.16 3D metrology module 2.17 3D registration module 2.18 3D image processing 2.19 3D geometry module 2.20 3D graphic list 2.21 General 3. Deprecated functionalities 3.01 Classification module 3.02 Calibration module 3.03 3dMap module 3.04 Code Reader module 3.05 Primitives 3.06 General 4. Fixed bugs 4.01 Classification module 4.02 Blob module 4.03 Calibration module 4.04 SureDotOCR® module 4.05 Edge Finder module 4.06 Registration module 4.07 Pattern Matching module 4.08 Model Finder module 4.09 Metrology module 4.10 Code Reader module 4.11 String Reader module 4.12 Primitives 4.13 Graphics 5. Known limitations 5.01 Classification module 5.02 String Reader module 5.03 3D display

------

1. Overview

- MIL X Service Pack 4 includes all the features of MIL 10 Processing Pack 3. In addition, MIL X Service Pack 4 includes new processing functionalities, performance optimizations, and general improvements, such as: . New: Training of image-oriented CNN classifier using predefined architectures. . New: Detection using image-oriented CNN classifier. . New: Feature-oriented Tree Ensemble classifier (training and predicting). . New: MclassPredict speed optimization for classification and detection. . New: MimAugment to perform data augmentation for classification among other uses. . New: 3D API overhaul; some M3dmap functionality has moved to new 3D modules (M3dim, M3dgeo, M3dmet and M3dreg). . New: Additional 3D functionalities, including point cloud cropping, merging, sampling and meshing, cylinder and 3D line fitting, registration of multiple point clouds, distance computation between point clouds, depth maps and fitted surfaces. . New: 3D transformation matrix manipulation. . New: 3D display of depth maps, point clouds, and analytic or fitted 3D shapes supporting LUT coloring, opacity and line thickness. . New: Container data object useful for, among others, 3D acquisition and processing. . New: MbufConvert3d to convert most GenICam PFNC/SFNC 3D pixel formats/coordinate system output modes to processable point clouds. . New: Code Reader support for Extended Rectangular Data Matrix (DMRE). . New: Code Reader support for grading according to ISO/IEC 15416:2016. . New: Code Reader support for grading according to Semi T10-0701. . New: Additional processing primitives such as function to perform differential operator, to compute bounding box, etc. . New: Several primitives accelerated using Intel AVX-512 instruction set. . New: Numerous new and updated examples. . Many more additions and improvements to discover!

- MIL 10 is the minimum requirement for all upcoming Service Packs until the next major release.

- MIL X Service Pack 4 does not support Windows 8.1. It requires Windows 7 or 1607 (or a more recent Windows 10 build).

- The training of a CNN classifier requires Windows 10 1607 64-bit (or a more recent Windows 10 64-bit build).

- MIL X Service Pack 4 does not support the Matrox CronosPlus, Matrox Iris GT, Matrox Radient eV-CLHS, Matrox Vio, GPU and IEEE 1394 IIDC systems.

- Windows’ automatic 8.3 file name creation needs to be enabled in order for the MIL installer to access the temp folder when the user name contains a space. This option allows Windows to create short file/folder name aliases for ones with long names for programs, such as the MIL installer, that don't support spaces in the file/folder names. Alternatively, the MIL installer needs to run from a user account that belongs to the administrators group and has no spaces in it. Note that the same applies for uninstalling MIL.

- Some anti-virus or security applications may interfere with your MIL installation. In order to perform the installation without any interruption, it is recommended that you temporarily disable your anti-virus or security application.

- The required Visual C++ 2017 Redistributable also needs the presence of KB2919442 and KB2919355. These will need to be obtained and applied to install this Service Pack.

- Building the MIL examples using Visual Studio 2015 or 2017 requires the presence of Windows SDK version 8.1, which is installed from the Visual Studio setup.

- Shortcuts to the ModelFinder and EdgeFinder interactive utilities have been removed from MIL because the functionality they provide has been incorporated in the MIL CoPilot interactive environment included in the latest MIL release or available as an update to MIL.

- Ply files are associated to ’s 3D Viewer by default on Windows 10. To open a ply file with 3D Viewer, the point cloud must contain a mesh; otherwise, you will get the error: “Couldn’t load 3D model”.

- If you have installed and prototyped using MIL X Service Pack 4 Early Access, you may need to recompile your application using MIL X Service Pack 4.

- MIL CoPilot from Update 94 Early Access may not be fully compatible with MIL X Service Pack 4 Official Release. It is strongly recommended to update MIL CoPilot with Update 94 Official Release as soon as it becomes available.

- MIL X Service Pack 4 will be the last version with Python 2.7 support.

- The container buffer support for the GenTL Consumer provided in MIL 10 Update 34 and MIL X Version 1911 is incompatible with the container buffer support in MIL X Service Pack 4. Calling MbufAllocDefault() for a M_SYSTEM_GENTL system with the M_CONTAINER attribute will generate an error. Moreover, the MultiComponentGrab example, which uses containers, will also generate an error. The issue will be resolved in a future update to the GenTL Consumer.

2. New functionalities and improvements

2.01 MIL processing specific examples - New MIL X Service Pack 4 examples! - Note that MIL X Update 81 is needed for the images used by several examples, in particular for the 3D processing ones. - Online repository for third-party 3D camera interface examples (to come). - More examples to come in the official release of MIL X Service Pack 4.

2.02 Classification module CNN CLASSIFIER - New: MclassTrain() allows you to perform CNN training from the ground up using the CPU or supported GPU. Specifically, you can perform a complete training, as well as transfer learning and fine tuning. - New: The training can be parametrized using MclassControl on an M_TRAIN_CNN context. - New: Five predefined CNN MIL classifier contexts are provided to be trained with MclassTrain(). They are located in the MIL installation path in the "Contexts" folder. They address different situations. These contexts can be allocated and loaded in one call, using MclassAlloc with M_FCNET_S, M_FCNET_M, M_FCNET_XL, M_FCNET_MONO_XL or M_FCNET_COLOR_XL. - New: MclassAlloc(..., M_DATASET_IMAGES, ...) allows you to allocate MIL dataset objects that are mandatory to train a CNN classifier using MclassTrain(). These MIL dataset objects are built to handle the pairings between the images and associated classes. - New: MclassControl(..., M_ENTRY_ADD, ...) allows you to add entries to a dataset. - New: MclassControlEntry() allows you to set information to an entry of the dataset. - New: MclassSplitDataset() allows you to split a source dataset context into two destination dataset contexts. This is useful to split your data into a train and development dataset, both of which are required by MclassTrain(). - New: MclassHookFunction() allows you to attach or detach a user-defined function to a CNN training event (M_MINI_BATCH_TRAINED and/or M_EPOCH_TRAINED). - New: MclassGetHookInfo() allows you to retrieve useful information inside a user-defined hook function. - New: MclassCopyResult(..., M_TRAINED_CLASSIFIER_CNN, ...) allows you to copy a trained context from a train result to a M_CLASSIFIER_CNN_PREDEFINED context. - New: MclassImport() allows you to import information from a csv file to a MIL dataset. Information can be entries, class definitions, etc. - New: MclassExport() allows you to export information from a MIL dataset to a csv file. Information can be entries, class definitions, etc. It also allows you to export training results to a csv file. - Improvement: MclassPredict() has been further optimized. Speed optimizations range from 2x faster to almost 10x faster. - New: MclassPredict() now natively supports Coarse Segmentation (i.e. classification using a target image that is larger than the CNN's source layer and producing a classification map). - New: MclassDraw() allows you to draw specific features of prediction results. It also allows you to draw class definition sample images. - New: M_CLASS_DRAW_COLOR and M_CLASS_NAME controls/inquires are now available for the class definition sub-objects in a classification context. - New: To validate that the current system meets the requirements to perform optimal CNN training, a CNN Train Engine Test is available in the MILConfig tool under the Classification folder.

TREE ENSEMBLE CLASSIFIER New classifier. - New: MclassTrain() allows you to perform tree ensemble training from the ground up or from an already trained classifier (warm start). - New: The training can be parametrized using MclassControl on a M_TRAIN_TREE_ENSEMBLE context. - New: MclassPredict() allows you to predict the category of an input feature vector (array) using a trained tree ensemble classifier. - New: MclassAlloc(..., M_DATASET_FEATURES, ...) allows you to allocate MIL dataset objects that are mandatory to train a tree ensemble classifier using MclassTrain(). The MIL dataset object is built to handle the pairings between the features and associated classes. - New: MclassControl(..., M_ENTRY_ADD, ...) allows you to add entries to a dataset. - New: MclassControlEntry() allows you to set information to an entry of the dataset. - New: MclassSplitDataset() allows you to split a source dataset context into two destination dataset contexts. This is useful to split your data into a train dataset and development dataset. - New: MclassHookFunction() allows you to attach or detach a user-defined function to a tree ensemble training event (M_TREE_TRAINED). - New: MclassGetHookInfo() allows you to retrieve useful information inside a user-defined hook function. - New: MclassCopyResult(..., M_TRAINED_TREE_ENSEMBLE, ...) allows you to copy a trained context from a train result to a M_CLASSIFIER_TREE_ENSEMBLE context. - New: MclassImport() allows you to import information from a csv file to a MIL dataset. Information can be entries, class definitions, etc. - New: MclassExport() allows you to export information from a MIL dataset to a csv file. Information can be entries, class definitions, etc. It also allows you to export training results to a csv file. - New: M_CLASS_DRAW_COLOR and M_CLASS_NAME controls/inquires are now available for the class definition sub-objects in a classification context. 2.03 Blob module - Improvement: MblobDraw drawing of M_FERET_MIN_DIAMETER and M_FERET_MAX_DIAMETER using contact points.

2.04 Calibration module - New: McalFixture now accepts M3dgeo transformation matrix as a destination object to which the calibration fixture matrix is written. - New: McalGetCoordinateSystem and McalSetCoordinateSystem now supports a M3dgeo matrix. - New: McalTransformCoordinate3dList() now supports 32-bit unsigned buffers as depth maps. This is also true for 3dim and 3dmet functions which take depth maps as input.

2.05 SureDotOCR® module - New: M_STRING_PITCH, M_STRING_PITCH_MODE, M_ITALIC_PITCH, M_ITALIC_PITCH_MODE can now be used to control the distance between dot centers in the string or italic angle direction using MdmrControl(). - New: MdmrGetResult() has new results M_STRING_PITCH, M_STRING_CHAR_ANGLE, M_ITALIC_PITCH and M_ITALIC_CHAR_ANGLE to retrieve the string and italic pitches and angles used to read the characters. - Improvement: MdmrRead() has been improved when M_STRING_ANGLE_MODE is set to M_ANGLE or M_ORIENTATION. It will now less likely mismatch characters, which occurred in rare cases. - Improvement: MdmrRead() has been improved and will now less likely fail because of incorrect orientation or pitch estimation, which occurred in rare cases. - Improvement: MdmrRead() now makes better use of multiprocessing capabilities.

2.06 Registration module - New: MregCalculate() now supports HDR (High Dynamic Range) functionality. - New: MregControl() now supports M_DRAW_REMAP_FACTOR_MODE and M_DRAW_REMAP_FACTOR_VALUE to control the drawing remap of M_GAUSSIAN_CURVATURE_IMAGE, M_MEAN_CURVATURE and M_LOCAL_SHAPE. - New: MregGetResult() now supports M_RANGE_FACTOR_GAUSSIAN_CURVATURE, M_RANGE_FACTOR_MEAN_CURVATURE and M_RANGE_FACTOR_LOCAL_SHAPE values. - Improvement: MregCalculate() with M_PHOTOMETRIC_STEREO now has a better responsive M_TIMEOUT. - Improvement : Improved numerical results for Local Shape image result (M_DRAW_LOCAL_SHAPE_IMAGE) when light vectors' azimuth were not aligned with the image axis.

2.07 Pattern Matching module - New: MpatFind() now supports models of different size when M_SEARCH_MODE is set to M_FIND_ALL_MODELS (or M_DEFAULT). - New: MpatDefine() can now use a source image associated with a graphic list to define a model from a rotated bounding box.

2.08 Model Finder module - New: MmodDefine() can now use a source image associated with a graphic list to define a model from a rotated bounding box. - New: MmodGetResult() can now return corner positions of a rectangle result occurrence with M_SHAPE_RECTANGLE result, using the result types: M_TOP_LEFT_X, M_TOP_LEFT_Y, M_TOP_RIGHT_X, M_TOP_RIGHT_Y, M_BOTTOM_LEFT_X, M_BOTTOM_LEFT_Y, M_BOTTOM_RIGHT_X, and M_BOTTOM_RIGHT_Y. - New: MmodFind() now supports search regions at an angle for M_SHAPE_CIRCLE, M_SHAPE_ELLIPSE, M_SHAPE_RECTANGLE and M_SHAPE_SEGMENT. Regions at an angle can be set using MmodControl(..M_ANGLE_REGION..), using MmodControl(..M_SEARCH_POSITION_FROM_GRAPHIC_LIST..), or using a target image containing a rectangular region of interest set with MbufSetRegion().

2.09 Metrology module - New: MmetPut() now supports MIL_FLOAT arrays for positions and angles. - Improvement: MmetSetRegion(), MmetAddTolerance() and MmetControl() have been accelerated when numerous features are present in the metrology context. - New: MmetDraw() now supports M_DRAW_TOLERANCE_AREA as an operation to draw the area used to compute M_AREA_BETWEEN_CURVES, M_AREA_CONVEX_HULL, M_AREA_SIMPLE, M_AREA_UNDER_CURVE_MAX and M_AREA_UNDER_CURVE_MIN. - Improvement: MmetDraw() with Operation set to M_DRAW_TOLERANCE has been improved for area and perimeter tolerances.

2.10 3dMap module - New: