HALCON Progress Key Visual shows a person running at high speed

Release Notes for HALCON 12.0.2

This document provides the release notes for MVTec HALCON 12.0.2, as released in February 2016.

HALCON 12.0.2 is primarily a maintenance release that fixes all known bugs in HALCON 12.0.1; besides, it provides added functionality.

Major New Features of HALCON 12.0.2

HALCON Library

  • The bar code reader has been improved for 2/5 Industrial and 2/5 Interleaved code types. Previously, the operators find_bar_code and decode_bar_code_rectangle2 produced multiple false reads by default, because these specific code types are easily misread in other structures like text and clutter. To get a more robust result, the default settings have been adjusted. For that, the new parameter 'min_code_length' has been introduced for all code types. If the minimal number of decode characters is known in advance, this parameter can be specified to reduce false reads. For 2/5 code types the default of this parameter is set to 3 and for all other code types to 0. Additionally, the default of the parameter 'min_identical_scanlines' has been increased from 0 to 2 for 2/5 Industrial and 2/5 Interleaved codes. Both settings together help to avoid the problem of multiple misreads especially for images including clutter and text.
  • The reading rate of the bar code reader has been significantly improved for bar codes that are distorted by underexposure, overexposure, or print growth. Now, all bar code types can be robustly read even if the images are extremely underexposed or overexposed.
  • The QR code reader now supports the decoding of symbols that contain Chinese characters encoded according to the Chinese national standard GBT 18284-2000.
  • get_data_code_2d_results now returns the synthetic aperture used for the print quality grading as part of the tuple returned via the parameters 'quality_isoiec15415_labels', 'quality_isoiec15415', and 'quality_isoiec15415_values' as well as 'quality_aimdpm_1_2006_labels', 'quality_aimdpm_1_2006', and 'quality_aimdpm_1_2006_values'. Moreover, for Data Matrix ECC 200 codes some intermediate results assessed during the print quality grading process can be retrieved via the new parameters 'quality_isoiec15415_intermediate_labels', 'quality_isoiec15415_intermediate', and 'quality_isoiec15415_intermediate_values' as well as 'quality_aimdpm_1_2006_intermediate_labels', 'quality_aimdpm_1_2006_intermediate', and 'quality_aimdpm_1_2006_intermediate_values'.
    The new HDevelop example program
    • hdevelop/Identification/Data-Code/ecc200_print_quality_intermediate_results.hdev
    shows the use of the intermediate grading results.
  • The operators have been extended by parameters that support the setting of a value range for the attributes used for the visualization of 3D object models:
    • 'color_attrib_start',
    • 'color_attrib_end',
    • 'rgb_channel_attrib_start', and
    • 'rgb_channel_attrib_end'.
    The parameters
    • 'intensity',
    • 'intensity_red',
    • 'intensity_green', and
    • 'intensity_blue'
    have been replaced by the parameters
    • 'color_attrib',
    • 'red_channel_attrib',
    • 'green_channel_attrib', and
    • 'blue_channel_attrib'.
    For backwards compatibility, 'intensity', 'intensity_red', 'intensity_green', and 'intensity_blue' can still be used, if the new functionality is not needed. Note however that the default behavior of 'red_channel_attrib', 'green_channel_attrib', and 'blue_channel_attrib' is different from the default behavior of 'intensity_red', 'intensity_green', and 'intensity_blue'. The new parameters use a fixed default range from 0 to 255 for the attribute values instead of scaling them automatically.
    The HDevelop example programs
    • hdevelop/3D-Matching/Deformable-Surface-Based/find_deformable_surface_model.hdev,
    • hdevelop/3D-Object-Model/Creation/set_object_model_3d_attrib.hdev,
    • hdevelop/3D-Object-Model/Features/moments_object_model_3d.hdev,
    • hdevelop/3D-Object-Model/Transformations/interactive_intersection.hdev,
    • hdevelop/3D-Reconstruction/Multi-View/reconstruct_points_stereo.hdev,
    • hdevelop/Applications/Robot-Vision/reconstruct_3d_object_model_for_matching.hdev,
    • hdevelop/Applications/Surface-Inspection/check_for_holes_sheet_of_light.hdev,
    • hdevelop/Classification/k-Nearest-Neighbor/nearest_neighbors.hdev,
    • hdevelop/Filters/Scene-Flow/scene_flow_globe.hdev, and
    • hdevelop/Graphics/Output/disp_object_model_3d.hdev
    have been adapted accordingly.

Examples

  • The new HDevelop example program
    • hdevelop/System/Parallelization/simulate_aop.hdev
    shows how to simulate automatic operator parallelization (AOP) using parallel programming in HDevelop.

Procedures

  • HALCON has been extended with the procedure xyz_attrib_to_object_model_3d. This procedure creates a 3D object model from three images that contain the X, Y, and Z-coordinates of 3D points and add extended attributes to every point of the 3D object model. The use of this procedure is shown in the new HDevelop example program
    • hdevelop/3D-Object-Model/Creation/xyz_attrib_to_object_model_3d.hdev
    Additionally, the existing HDevelop example program
    • hdevelop/3D-Reconstruction/Binocular-Stereo/disparity_image_to_xyz.hdev
    has been adapted to make use of the new procedure.

Miscellaneous

  • Within the HDevEngine, the execution of simple assignment operations within a for loop has been accelerated by about 50%.
    In addition, the speed up when calling procedures with a lot of arithmetical operations in parallel has also been increased.
  • The HALCON Variable Inspect extension for Visual Studio lists the variables unsorted by default. Now, the variables can also be listed in alphabetical order. Whether the variables are sorted by name or in the default order can be controlled via the new context menu for the variable list.

Compatibility

Licenses

HALCON 12.0 licenses are also valid for HALCON 12.0.2. In contrast, all HALCON 11.0 licenses or licenses of earlier versions must be replaced or upgraded. Please contact your local distributor.

HALCON Library

HALCON 12.0.2 is fully compatible with HALCON 12.0 except for the changed behavior of some operators owing to bug fixes. Compared to HALCON 11.0, many extensions have been introduced. Thus, the HALCON 12.0 libraries are not compatible with HALCON 11.0 or earlier versions.

In detail, please note the following incompatibilities with respect to HALCON 12.0.1:

  • Due to the improved robustness of the bar code reader with respect to overexposure and print growth, the print quality inspection is more precise for codes showing overexposure and print growth. Consequently, some values and grades of the print quality inspection might change with respect to earlier HALCON versions. More information.
  • The error code that is returned if find_ncc_model is called with multichannel images has been changed from error 3122 ("Number of channels in the input parameters are different") to error 3359 ("Wrong number of image channels"). Applications that evaluate this error message must be adapted accordingly. More information.
  • Because of an extension of get_data_code_2d_results, which now returns the synthetic aperture used for the print quality grading, get_data_code_2d_results now returns a tuple which has one extra element for the parameters 'quality_isoiec15415_labels', 'quality_isoiec15415', and 'quality_isoiec15415_values' as well as 'quality_aimdpm_1_2006_labels', 'quality_aimdpm_1_2006', and 'quality_aimdpm_1_2006_values'. More information.
  • By default, the new bar code parameter 'min_code_length' is set to 0 for most code types and to 3 for 2/5 Industrial and 2/5 Interleaved codes. Hence, if you want to read 2/5 codes with a decode length smaller than three, you have to explicitly set 'min_code_length' to 0 using the operator set_bar_code_param or set_bar_code_param_specific. However, if you choose to do so, note that the probability of false reads increases.
    Additionally, the default setting for the parameter 'min_identical_scanlines' has been changed from 0 to 2 for 2/5 codes. Thus, for applications using the default parameter settings, the decode results might have changed. Generally, less false reads are to be expected. However, it might happen in rare cases that with a single valid scanline some 2/5 codes were found before but are now discarded because of the increased 'min_identical_scanlines' setting. To get the old behavior, you have to explicitly set 'min_identical_scanlines' to 0 again.
    Note that the default parameters for 'min_code_length' and 'min_identical_scanlines' now are set for some code types specifically. As get_bar_code_param throws an exception if the user tries to get a parameter that is set differently for different code types, you have to use get_bar_code_param_specific instead of get_bar_code_param to query those parameters. More information.
  • Please note that there is no guarantee on the order of the tuple elements resulting from the tuple set operators tuple_union, tuple_intersection, tuple_symmdiff and tuple_difference. Because of performance improvements of these operators, the order of output elements might differ from previous releases. More information.

HALCON Applications

Applications (i.e., executables) developed with HALCON 12.0 or HALCON 12.0.1 can be used with HALCON 12.0.2, i.e., HALCON 12.0.2 is binary compatible with HALCON 12.0 and HALCON 12.0.1.

All programs (C, C++, .NET, or COM) that have been developed with HALCON 11.0.x must be recompiled. The incompatibility with HALCON 11.0.x or earlier versions mainly concerns the binaries, with only few changes in the language interfaces. If you encounter problems during recompiling your programs, please check the detailed description of changes below and for HALCON 12.0 and HALCON 12.0.1, respectively.

Please note that applications using HALCON/.NET (and HDevEngine/.NET) have local copies of the corresponding assemblies (halcondotnet.dll etc.). After installing HALCON 12.0.2, these applications would therefore use the old version of the HALCON/.NET interface together with the new version of the HALCON library. In order to benefit from the bug fixes in the HALCON/.NET interface as well, you must either replace the assemblies manually or recompile the projects. If you do not recompile the application, you need to add an application configuration file mapping the application's expected assembly version to the new version. See the Programmer's Guide for more information.

Image Acquisition Interfaces

If you have developed your own acquisition interfaces with HALCON 12.0 or HALCON 12.0.1, you can use them with HALCON 12.0.2 without further action.

Digital I/O Interfaces

If you have developed your own digital I/O interfaces with HALCON 12.0 or HALCON 12.0.1, you can use them with HALCON 12.0.2 without further action.

Extension Packages

Extension packages developed with HALCON 12.0 or HALCON 12.0.1 can be used with HALCON 12.0.2 without further action. Extension packages developed with HALCON 11.0.x or earlier versions must be re-generated. Note that the old makefiles for HALCON/C++ must be adapted according to the sample makefile under extension_packages/halconuser.

Further Compatibility Information

  • Note that the combination of OS X 10.11 "El Capitan" with HALCON versions prior to 12.0.2 disables an existing dongle driver or blocks its installation. To use OS X 10.11 "El Capitan" with HALCON versions prior to 12.0.2, a workaround is needed that is introduced in the Installation Guide, section 4.2 "Problems Related to OS Upgrades (OS X)". More information.

Planned Discontinuation of the HALCON/C++ (legacy) Language Interface

MVTec plans to discontinue the HALCON/C++ (legacy) language interface. The timeline for this discontinuation includes the following steps:

  • HALCON 12.0.2:

    • There are warnings when compiling HALCON/C++ (legacy) projects.
  • Next major HALCON version:

    • In the next major HALCON version (which will presumably be released late in 2016), the HALCON/C++ (legacy) interface will not contain any new class. This means, the major part of the new functionality that will be introduced with the next major HALCON version, will not be available via the HALCON/C++ (legacy) interface.
  • Major HALCON version after the next major HALCON version:

    • In the major HALCON version after the next major HALCON version (which will presumably be released not before 2018), the HALCON/C++ (legacy) interface will not be available.

Detailed Description of Changes in HALCON 12.0.2

The changes in HALCON 12.0.2 are described with respect to HALCON 12.0.1. The detailed description of changes in previous HALCON versions can be found in the release notes of the previous HALCON versions.

HDevelop

New Functionality

HDevelop Language
  • The HDevelop User's Guide has been extended to describe HDevelop's concept of how variable types are determined, in particular regarding vector variables, more clearly.
    The new HDevelop example program
    • hdevelop/Control/variable_types.hdev
    has been added to demonstrate how HDevelop determines the variable types, which problems may occur, and how errors are displayed.
    Furthermore, the HDevelop error "The type of the variable could not be determined" has been split into "The type of the variable could not be determined (no proper type definition found)" and "The type of the variable could not be determined (conflicting type definitions found)" to provide more specific information in case of such an error.
Code Export

Bug Fixes

Assistants
  • The Calibration Assistant did not use the relative path settings correctly. Even when a calibration plate description file was loaded from a directory relative to the program or relative to %HALCONROOT%, the absolute path was stored in the assistant's settings file. This problem has been fixed.
  • The Image Acquisition Assistant stored the list of available devices even if the assistant had been closed via File->Exit. So it could have happened that a disconnected device was selected in the Connection tab after opening a new Image Acquisition Assistant. This problem has been fixed. Now, starting a new Image Acquisition Assistant resets buffered device information in HDevelop.
  • In the Matching Assistant, the connection of the sliders under Display Image Pyramid Level did not adjust the values of the sliders when the mode was changed from unconnected to connected. The sliders were not adjusted until one of the sliders was moved. This problem has been fixed. Now, when the mode is set again to connected, the sliders are set to the smaller of the two values.
  • The Matching Assistant did not allow to modify the model image after a switch from the mode "Create from Image" to the mode "Load" and back again. This problem has been fixed.
  • Opening the Add Samples from System Font dialog used by the OCR Training File Browser was very slow, in particular, under OS X and Linux, were more then 60000 Symbols may be listed in the Available Symbols panel. This problem has been fixed.
  • The Add Samples from System Font dialog used by the OCR Training File Browser did not always display the correct number of listed symbols. This problem has been fixed.
GUI
  • HDevelop in very rare cases crashed when the Zoom window was open and the mouse was moved over the Graphics Window. This problem has been fixed.
  • When in HDevelop in a case statement the expression did not evaluate to a single, constant, or integer value, HDevelop did not recognize this as an error. This problem has been fixed.
  • In HDevelop's Program Window, external procedures remain displayed red, which indicates that they would be unresolved, even after undoing the deletion of the import statement that resolves the path to these procedures. Note that the status of these procedures was correct, only the color in which they were displayed was not updated. This problem has been fixed. Now the external procedures are colored correctly in this case.
  • On Windows systems, it is possible to change the size of text and other items on the screen. When this scaling factor was set to a value larger than 100%, the program lines in HDevelop's dialog-based editor were not high enough to display all characters completely. This problem has been fixed. Note that this problem did not affect HDevelop's full text editor.
  • The Record Interactions functionality of the Graphics Window inserted invalid code when displaying elements of vector variables from the item selection dialog. In addition, displaying iconic objects directly from the context menu of iconic variables did not work when the object was inside an object tuple contained in a vector element. These problems have been fixed.
  • Under OS X, the export dialog looked cramped with not enough spacing between elements. This problem has been fixed.
  • The menu bar of various dialogs disappeared if the font size in HDevelop was set to a value larger than 14. This problem has been fixed.
  • In some rare cases, HDevelop did not scroll the program to make a barely visible program line fully visible, even when the program was stopped at this line. Thus, the PC became invisible if the program stopped at such a line. This problem has been fixed.
  • The window titles "Variable Window" and "Program Window" were not translated into some languages.This problem has been fixed.
  • Under OS X, the icons displayed in the Thread View / Call Stack dialog were partially cropped due to the narrow column width. This problem has been fixed.
  • The Bounds dialog, which allows to enter the bounds for the Gray Histogram, did not scale properly. The layout used too much space. This problem has been fixed.
  • The Start Dialog provides the possibility to go through the news by clicking on the back and forward buttons. The order in which the news entries were presented was not intuitive: Clicking on the forward button led to older entries while clicking on the back button led to newer entries. This problem has been fixed. Furthermore, when the Start Dialog was closed and reopened, the next older news entry was shown. This mechanism has been deactivated. Now, the same news entry is shown, even if the Start Dialog is closed and reopened.
  • The full text editor did not display the code of a protected procedure after the password has been entered. This problem has been fixed.
  • HDevelop's ROI tool calculated the perimeter for rotated rectangles incorrectly. This problem has been fixed. Furthermore, the parameters Length1 and Length2 actually represented the half width and the half height of rotated rectangles. They have been renamed to Half Length1 and Half Length2, respectively. The parameters Row and Column represent the center of gravity of the rotated rectangle. They have been renamed to Center Row and Center Column, respectively.
  • The Feature Histogram sometimes caused HDevelop to hang when the scale for an axis was set to logarithmic. This problem has been fixed.
IDE
  • After modifying a control variable by pressing Apply in the Operator Window, the order in the Variable Window was not correct. Furthermore, neither pressing Cancel nor closing the Operator Window did remove a variable that has been created (temporarily) by pressing Apply. These problems have been fixed.
  • When an HDevelop variable caused a variable type error at least once in a code line, HDevelop marked all occurrences of that variable as faulty, even if it was used correctly on that particular occasion. This problem has been fixed.
  • The Operator Window contains a file browser button for the parameter 'CameryType' of the operator open_framegrabber if the camera selected with the parameter 'Name' supports the loading of a camera file. This button was enabled as long as no camera was connected but disabled if a camera was connected. This problem has been fixed. Now, the button is still enabled after connecting the camera.
  • If a valid program line had a breakpoint or a bookmark, and that line has become invalid once, HDevelop's Quick Navigation did no longer display that breakpoint or bookmark. This problem has been fixed.
  • In HDevelop, empty vector elements sometimes could have had an unknown dimension. This problem has been fixed.
  • When a program line was edited in HDevelop's free text editor, the program counter was automatically moved to that line if
    • the edited line was above the program counter and
    • the edited line became valid and executable.
    With the introduction of vector variables in HALCON 12.0, this behavior was affected insofar as it has now become possible that, due to conflicting variable type information, other (executable) program lines than the edited one became invalid. When such a line
    • was above the program counter and
    • became valid and executable again,
    the program counter was moved to that line, although it has been unaltered. This problem has been fixed.
    Note, however, that now, the program counter will be moved as closely as possible towards the edited line, even if this line is still invalid due to conflicting variable type information but in general executable and syntactically correct.
  • In HDevelop's Variable Inspect, the information about the dimension of vector variables was not adapted if the definition of a currently inspected variable was modified such that its dimension was reduced and if the program line that contains this (modified) definition was executed. The Variable Inspect behaved as if the vector still had its old dimension. This problem has been fixed.
  • If a (valid) vector variable that contained control variables was displayed in a Variable Inspect window and if then one or more of its elements were selected and the Delete key was pressed, the complete vector variable was deleted and the variable value became invalid. This problem has been fixed. Now, only the selected vector elements are deleted and the variable value stays valid.
  • The Bounds dialog, which allows to enter the bounds for the Gray Histogram, did not scale properly. The layout used too much space. This problem has been fixed.
  • In very rare cases, HDevelop wrote Qt warnings into the output console. This problem has been fixed.
  • HDevelop's auto completion in the free text editor showed unexpected behavior:
    • When you first started typing, a list box with all variables, functions, operators, and procedures that contain this string appeared.
    • When you closed this list box with Esc and pressed Ctrl+Space, the list box with all variables, functions, operators, and procedures that contain this string appeared again.
    • When you closed this list box with Esc and pressed the Tab key, only those variables, functions, operators, and procedures that start with the string were listed.
    This problem has been fixed. The behavior has been changed such that now the Tab key behaves like Ctrl+Space and lists all variables, functions, operators, and procedures that contain the string.
  • HDevelop's auto completion sometimes made incorrect suggestions when a parameter of an operator was a vector expression. Then, HDevelop's suggestions were suitable for the current operator parameter but not necessarily for the vector expression. E.g., when typing read_image(IV.at(IV.length(, HDevelop suggested the available iconic variables instead of a closing bracket. This problem has been fixed.
  • The program counter was in very rare cases not displayed in a procedure. This problem has been fixed.
  • The Feature Histogram sometimes crashed under Windows and sometimes run into a very long operation, similar to a dead lock, on other operating systems. This problem has been fixed.
HDevelop Language
  • When in HDevelop in a case statement the expression did not evaluate to a single, constant, or integer value, HDevelop did not recognize this as an error. This problem has been fixed.
Procedures
  • Adding a procedure library to the list of external procedure paths in HDevelop failed when the directory, where the procedure library resides, was already contained in the list. If so, no path to the library was displayed and, additionally, one had to delete the path to the directory twice to remove it. This problem has been fixed.
  • HDevelop crashed when the procedure interface of a saved procedure was modified in the following way: A parameter of one group, e.g., an iconic output parameter, was deleted and its name was used for a parameter of another group, e.g., for a control input parameter and then, the Reset button was pressed. This problem has been fixed.
  • In rare cases, HDevelop crashed when deleting or deactivating an external procedure path that contains procedures with highly interdependent import statements. This problem has been fixed.
  • HDevelop procedures that were available via an import statement were usable only within the procedure in which they were imported. This problem has been fixed. Now, they are usable within the whole program.
  • The Create New Procedure / Edit Procedure Interface dialog could be reduced to a very small window. Then, its contents was displayed squished and button texts might have been truncated. This problem has been fixed.
  • In rare cases, the exit operator in HDevelop could have led to a program crash if JIT-compiled procedure execution was activated. This problem has been fixed.
Code Export
  • HDevelop incorrectly exported constant expressions containing empty tuple literals. This problem has been fixed.
  • HDevelop in rare cases exported vector element access expressions in assignments incorrectly to C++. This problem has been fixed.
  • User defined HDevelop exceptions in rare cases did not work in code exported to C++. This problem has been fixed.
  • HDevelop in rare cases exported default statements incorrectly to C and C++. This happened if the code after a default statement was made up only of code lines that were not exported, like, e.g., dev_inspect_ctrl. This problem has been fixed.
  • In some cases, the message boxes displayed by HDevelop were too big. This happened, e.g., if an HDevelop program that contained many invalid lines was exported via the Export dialog. All invalid lines were shown in the message box, which made it too big to fit onto the screen. This problem has been fixed. Now, a maximum of 20 invalid lines is shown in the message box.
  • HDevelop in some cases exported switch statements incorrectly to HALCON/C++ if the switch statement's argument was not a constant or a variable name. This problem has been fixed.
Miscellaneous
  • HDevelop crashed while loading a corrupt file of type 'HDevelop 5.0 - 9.0 Program (legacy) (*.dev)'. This problem has been fixed.
  • HDevelop and the HDevEngine sometimes crashed when executing an exit statement. This problem has been fixed.
  • In the Preferences dialog under General Options / General Options, the text for setting the encoding of HDevelop programs and procedures was changed to clarify that the encoding can be set only for the legacy HDevelop 5.0 - 9.0 file format for backward compatibility. It makes no sense to set the encoding for programs and procedures using the new file format (hdev, hdvp, hdpl).
  • The fall through mechanism of the switch/case control structure in some cases behaved incorrectly in JIT-compiled procedures. This problem has been fixed.
  • HDevelop sometimes crashed when a procedure path was removed via the Manage Procedures dialog during program execution. This problem has been fixed. Now, for certain actions of the Manage Procedures dialog, the user is asked to stop the program before the action can be applied when the program is running.
  • When a valid procedure file was (falsely) tried to be opened with the Open Program dialog, the error "Format error: file is not a valid HDevelop program or procedure (HDevelop error code: 21020)" was returned. This was misleading, as the file actually was a valid procedure file. This problem has been fixed. Now the message states specifically that the file is not a valid HDevelop program.
  • Under OS X, the procedure drop-down menu in the Procedure Interface dialog filled the entire screen. This problem has been fixed. Now, the width of the menu is restricted to the width of the combo box.
  • When using JIT-compiled procedures, suspending threads in HDevelop had no effect until the execution was stopped and restarted. This problem has been fixed.
  • The menu bar of various dialogs disappeared if the font size in HDevelop was set to a value larger than 14. This problem has been fixed.
  • Under OS X, HDevelop programs were not displayed with the appropriate HALCON icon. This problem has been fixed.
  • HDevelop's function plot had a problem with logarithmic scales. When panning away from the initial view (e.g., with Shift + Arrow keys) it was often not possible to return to the initial view again. Instead, one had to reset the view. This problem has been fixed.
  • HDevelop crashed in rare cases when a new program was loaded while the dialog for the procedure management (Edit > Preferences > Procedures or Procedures > Manage Procedures) was open. This problem has been fixed.
  • In rare cases, the exit operator in HDevelop could have led to a program crash if JIT-compiled procedure execution was activated. This problem has been fixed.
  • Accessing iconic objects via vectors or global variables led to erroneous results in JIT-compiled procedures if the iconic object contained more than one element. In that case, the result contained only the first element of the iconic object. This problem has been fixed
  • HDevelop might have crashed while closing a Variable Inspect window. This problem has been fixed.
  • The use of relative paths in HDevelop did not work under Windows. This problem has been fixed.

HDevelop Example Programs

New and Improved HDevelop Example Programs

The following HDevelop example programs are new or have been improved:

  • The operators have been extended by parameters that support the setting of a value range for the attributes used for the visualization of 3D object models:
    • 'color_attrib_start',
    • 'color_attrib_end',
    • 'rgb_channel_attrib_start', and
    • 'rgb_channel_attrib_end'.
    The parameters
    • 'intensity',
    • 'intensity_red',
    • 'intensity_green', and
    • 'intensity_blue'
    have been replaced by the parameters
    • 'color_attrib',
    • 'red_channel_attrib',
    • 'green_channel_attrib', and
    • 'blue_channel_attrib'.
    For backwards compatibility, 'intensity', 'intensity_red', 'intensity_green', and 'intensity_blue' can still be used, if the new functionality is not needed. Note however that the default behavior of 'red_channel_attrib', 'green_channel_attrib', and 'blue_channel_attrib' is different from the default behavior of 'intensity_red', 'intensity_green', and 'intensity_blue'. The new parameters use a fixed default range from 0 to 255 for the attribute values instead of scaling them automatically.
    The HDevelop example programs
    • hdevelop/3D-Matching/Deformable-Surface-Based/find_deformable_surface_model.hdev,
    • hdevelop/3D-Object-Model/Creation/set_object_model_3d_attrib.hdev,
    • hdevelop/3D-Object-Model/Features/moments_object_model_3d.hdev,
    • hdevelop/3D-Object-Model/Transformations/interactive_intersection.hdev,
    • hdevelop/3D-Reconstruction/Multi-View/reconstruct_points_stereo.hdev,
    • hdevelop/Applications/Robot-Vision/reconstruct_3d_object_model_for_matching.hdev,
    • hdevelop/Applications/Surface-Inspection/check_for_holes_sheet_of_light.hdev,
    • hdevelop/Classification/k-Nearest-Neighbor/nearest_neighbors.hdev,
    • hdevelop/Filters/Scene-Flow/scene_flow_globe.hdev, and
    • hdevelop/Graphics/Output/disp_object_model_3d.hdev
    have been adapted accordingly.
  • HALCON has been extended with the procedure xyz_attrib_to_object_model_3d. This procedure creates a 3D object model from three images that contain the X, Y, and Z-coordinates of 3D points and add extended attributes to every point of the 3D object model. The use of this procedure is shown in the new HDevelop example program
    • hdevelop/3D-Object-Model/Transformations/xyz_attrib_to_object_model_3d.hdev
    Additionally, the existing HDevelop example program
    • hdevelop/3D-Reconstruction/Binocular-Stereo/disparity_image_to_xyz.hdev
    has been adapted to make use of the new procedure.
  • The new HDevelop example program
    • hdevelop/Control/variable_types.hdev
    has been added to demonstrate how HDevelop determines variable types, which problems may occur, and how errors are displayed.
  • get_data_code_2d_results now returns the synthetic aperture used for the print quality grading as part of the tuple returned via the parameters 'quality_isoiec15415_labels', 'quality_isoiec15415', and 'quality_isoiec15415_values' as well as 'quality_aimdpm_1_2006_labels', 'quality_aimdpm_1_2006', and 'quality_aimdpm_1_2006_values'. Moreover, for Data Matrix ECC 200 codes some intermediate results assessed during the print quality grading process can be retrieved via the new parameters 'quality_isoiec15415_intermediate_labels', 'quality_isoiec15415_intermediate', and 'quality_isoiec15415_intermediate_values' as well as 'quality_aimdpm_1_2006_intermediate_labels', 'quality_aimdpm_1_2006_intermediate', and 'quality_aimdpm_1_2006_intermediate_values'.
    The new HDevelop example program
    • hdevelop/Identification/Data-Code/ecc200_print_quality_intermediate_results.hdev
    shows the use of the intermediate grading results. Note that this change affects the compatibility. Read more.
  • The new HDevelop example program
    • hdevelop/System/Parallelization/simulate_aop.hdev
    shows how to simulate automatic operator parallelization (AOP) using parallel programming in HDevelop.
  • The explanatory comments of the HDevelop example program
    • solution_guide/3d_vision/two_camera_calibration.hdev
    have been extended.
Bug Fixes
  • The following HDevelop example programs had memory leaks, because handles were not cleared explicitly:
    • hdevelop/3D-Object-Model/Transformations/projective_trans_object_model_3d.hdev
    • hdevelop/3D-Reconstruction/Multi-View/reconstruct_points_stereo.hdev
    • hdevelop/3D-Reconstruction/Sheet-Of-Light/calibrate_sheet_of_light_3d_calib_object.hdev
    • hdevelop/Applications/Color-Inspection/color_fuses_lut_trans.hdev
    • hdevelop/Applications/OCR/find_text_expiration_date.hdev
    • hdevelop/Applications/OCR/ocr_embossed_photometric_stereo.hdev
    • hdevelop/Calibration/Hand-Eye/calibrate_hand_eye_stationary_3d_sensor.hdev
    • hdevelop/Develop/dev_inspect_ctrl.hdev
    • hdevelop/explore_halcon.hdev
    • hdevelop/Filters/Scene-Flow/scene_flow_globe.hdev
    • hdevelop/Graphics/Output/disp_object_model_3d.hdev
    • hdevelop/Identification/Bar-Code/barcode_training.hdev
    • hdevelop/Image/Acquisition/abs_simple.hdev
    • hdevelop/Image/Acquisition/ensenso-nxlib_surface_based_3d_matching.hdev
    • hdevelop/Image/Acquisition/gigevision_atc4_objectmodel3d.hdev
    • hdevelop/Image/Acquisition/gigevision_photonfocus3d_objectmodel3d.hdev
    • hdevelop/Image/Acquisition/sentech_simple.hdev
    • hdevelop/Image/Acquisition/siliconsoftware_objectmodel3d.hdev
    • hdevelop/Image/Acquisition/swissranger_simple.hdev
    • hdevelop/Image/Acquisition/video4linux2_parameters.hdev
    • hdevelop/Matrix/hom_mat_3d_from_3d_point_correspondences.hdev
    • hdevelop/Tools/Interpolation/interpolate_scattered_data.hdev
    • solution_guide/3d_vision/3d_information_for_selected_points.hdev
    • solution_guide/3d_vision/camera_calibration_external.hdev
    • solution_guide/3d_vision/two_camera_calibration.hdev
    • solution_guide/basics/color_pieces.hdev
    These problems have been fixed.
  • The HDevelop example program
    • hdevelop/Applications/Measuring-2D/track_wires_on_chip.hdev
    did not update the orientation used for tracking the wires. This problem has been fixed.
  • The HDevelop example program
    • hdevelop/Applications/OCR/font.hdev
    incorrectly visualized the results on Linux. This problem has been fixed.
  • The HDevelop example program
    • hdevelop/Applications/OCR/ocr_tire_photometric_stereo.hdev
    used wrong tilt angles. This problem has been fixed.
  • The HDevelop example program
    • hdevelop/Applications/Robot-Vision/locate_pipe_joints_stereo.hdev
    attempted to access a camera setup model that did not exist. This problem has been fixed.
  • The idea of the HDevelop example program
    • hdevelop/Applications/Robot-Vision/locate_pipe_joints_stereo.hdev
    is that one of the instances found by the matching is grabbed by the robot and therefore disappears in the next image. However, the instances of the pipe joints that were 'grabbed' were not always those that were found by the matching. This problem has been fixed. Additionally, the visualization has been improved such that the basic idea becomes clearer.
  • In the HDevelop example programs
    • hdevelop/Segmentation/Classification/novelty_detection_gmm.hdev,
    • hdevelop/Segmentation/Classification/novelty_detection_mlp.hdev,
    • hdevelop/explore_halcon.hdev
    a good region was falsely classified. This problem has been fixed. Additionally, the visualization of the results has been improved.
  • The HDevelop example program
    • solution_guide/1d_measuring/measure_switch.hdev
    produced incorrect results since a modification of the 1D measure in HALCON 10.0.3 that fixed the problem that the returned edge amplitudes were too low. This problem has been fixed. Now, the example program uses accordingly adapted parameters and returns correct results.
    The HDevelop example program
    • solution_guide/1d_measuring/fuzzy_measure_switch.hdev
    has been adapted as well in order to use consistent amplitude thresholds, although this example always returned correct results.
  • The HDevelop example program
    • solution_guide/basics/classify_wood.hdev
    contained unused operator calls. This problem has been fixed. Additionally, the comments have been extended and the visualization has been improved.

HDevEngine

Functionality

  • Within the HDevEngine, the execution of simple assignment operations within a for loop has been accelerated by about 50%.
    In addition, the speed up when calling procedures with a lot of arithmetical operations in parallel has also been increased.
  • JIT-compiled HDevengine procedures and HALCON/.NET code perform better when running in parallel, now. In special cases, a speedup of up to factor 3 compared to HALCON 12.0.1 can be achieved when processing control tuples.

Bug Fixes

  • In some cases HDevEngine crashed when wrong help files, e.g., help files of an older HALCON version, were used. This problem has been fixed.
  • The HDevEngine crashed while loading a corrupt file of type 'HDevelop 5.0 - 9.0 Program (legacy) (*.dev)'. This problem has been fixed.
  • An HDevEngine application sporadically crashed when a multi threaded HDevelop program was executed that calls the same procedure via par_start in parallel in more than 10 threads. This problem has been fixed.
  • The file examples/hdevengine/cpp/my_hdevoperatorimpl.cpp contained the incorrect comment: "Attention: This class must not be used in a multi-threaded application." This problem has been fixed. The incorrect comment has been removed.
  • The use of relative paths in HDevelop did not work under Windows. This problem has been fixed.

HALCON Library

Speedup

New Functionality

3D
  • The operators have been extended by parameters that support the setting of a value range for the attributes used for the visualization of 3D object models:
    • 'color_attrib_start',
    • 'color_attrib_end',
    • 'rgb_channel_attrib_start', and
    • 'rgb_channel_attrib_end'.
    The parameters
    • 'intensity',
    • 'intensity_red',
    • 'intensity_green', and
    • 'intensity_blue'
    have been replaced by the parameters
    • 'color_attrib',
    • 'red_channel_attrib',
    • 'green_channel_attrib', and
    • 'blue_channel_attrib'.
    For backwards compatibility, 'intensity', 'intensity_red', 'intensity_green', and 'intensity_blue' can still be used, if the new functionality is not needed. Note however that the default behavior of 'red_channel_attrib', 'green_channel_attrib', and 'blue_channel_attrib' is different from the default behavior of 'intensity_red', 'intensity_green', and 'intensity_blue'. The new parameters use a fixed default range from 0 to 255 for the attribute values instead of scaling them automatically.
    The HDevelop example programs
    • hdevelop/3D-Matching/Deformable-Surface-Based/find_deformable_surface_model.hdev,
    • hdevelop/3D-Object-Model/Creation/set_object_model_3d_attrib.hdev,
    • hdevelop/3D-Object-Model/Features/moments_object_model_3d.hdev,
    • hdevelop/3D-Object-Model/Transformations/interactive_intersection.hdev,
    • hdevelop/3D-Reconstruction/Multi-View/reconstruct_points_stereo.hdev,
    • hdevelop/Applications/Robot-Vision/reconstruct_3d_object_model_for_matching.hdev,
    • hdevelop/Applications/Surface-Inspection/check_for_holes_sheet_of_light.hdev,
    • hdevelop/Classification/k-Nearest-Neighbor/nearest_neighbors.hdev,
    • hdevelop/Filters/Scene-Flow/scene_flow_globe.hdev, and
    • hdevelop/Graphics/Output/disp_object_model_3d.hdev
    have been adapted accordingly.
Bar Code
  • The bar code reader has been improved for 2/5 Industrial and 2/5 Interleaved code types. Previously, the operators find_bar_code and decode_bar_code_rectangle2 produced multiple false reads by default, because these specific code types are easily misread in other structures like text and clutter. To get a more robust result, the default settings have been adjusted. For that, the new parameter 'min_code_length' has been introduced for all code types. If the minimal number of decode characters is known in advance, this parameter can be specified to reduce false reads. For 2/5 code types the default of this parameter is set to 3 and for all other code types to 0. Additionally, the default of the parameter 'min_identical_scanlines' has been increased from 0 to 2 for 2/5 Industrial and 2/5 Interleaved codes. Both settings together help to avoid the problem of multiple misreads especially for images including clutter and text. Note that this change affects the compatibility. Read more.
  • The reading rate of the bar code reader has been significantly improved for bar codes that are distorted by underexposure, overexposure, or print growth. Now, all bar code types can be robustly read even if the images are extremely underexposed or overexposed. Note that this change affects the compatibility. Read more.
Data Code
  • The QR code reader now supports the decoding of symbols that contain Chinese characters encoded according to the Chinese national standard GBT 18284-2000.
  • get_data_code_2d_results now returns the synthetic aperture used for the print quality grading as part of the tuple returned via the parameters 'quality_isoiec15415_labels', 'quality_isoiec15415', and 'quality_isoiec15415_values' as well as 'quality_aimdpm_1_2006_labels', 'quality_aimdpm_1_2006', and 'quality_aimdpm_1_2006_values'. Moreover, for Data Matrix ECC 200 codes some intermediate results assessed during the print quality grading process can be retrieved via the new parameters 'quality_isoiec15415_intermediate_labels', 'quality_isoiec15415_intermediate', and 'quality_isoiec15415_intermediate_values' as well as 'quality_aimdpm_1_2006_intermediate_labels', 'quality_aimdpm_1_2006_intermediate', and 'quality_aimdpm_1_2006_intermediate_values'.
    The new HDevelop example program
    • hdevelop/Identification/Data-Code/ecc200_print_quality_intermediate_results.hdev
    shows the use of the intermediate grading results. Note that this change affects the compatibility. Read more.
Parallelization
  • JIT-compiled HDevengine procedures and HALCON/.NET code perform better when running in parallel, now. In special cases, a speedup of up to factor 3 compared to HALCON 12.0.1 can be achieved when processing control tuples.
System
  • get_system now allows to determine the name of the machine on which HALCON is running. For this, the parameter Query must be set to 'hostname'.

Bug Fixes

3D
  • binocular_disparity and binocular_distance crashed if the value for the parameter MaskHeight was significantly greater than the value of the parameter MaskWidth. All operators that call one of these operators internally were also affected. This problem has been fixed.
  • binocular_disparity and binocular_distance returned different results for a different number of threads. This problem has been fixed.
  • binocular_disparity_ms and binocular_distance_ms sometimes returned different results if called consecutively. This problem has been fixed.
  • The overlap computation in find_shape_model_3d in rare cases did not work correctly. If overlapping matches should be eliminated, i.e., 'max_overlap' was set to a value smaller than 1.0 (the default is 0.5) and 'recompute_score' was set to 'true' (the default is 'false'), find_shape_model_3d in rare cases returned matches without checking the overlap. This problem has been fixed.
  • gen_sphere_object_model_3d threw an unexpected error if more than one pose was passed as parameter. Additionally, if one of the passed poses or radii was incorrect, some memory was not released. These problems have been fixed.
  • get_object_model_3d_params crashed or led to undefined behavior if a value that is not a string was passed as ParamName. This problem has been fixed. Now, in this case, the error 1202 ("invalid type of control parameter 2") is returned.
  • get_stereo_model_param returned an incorrect value for the generic parameter 'disparity_method'. This problem has been fixed.
  • image_to_world_plane and gen_image_to_world_plane_map in rare cases returned the error 8441 ("Error in calibration data, try to recalibrate with improved input data!") although the calibration data was fine. This problem has been fixed. Note that this problem only occurred when the polynomial distortion model was used.
  • photometric_stereo returned a wrong error message when the passed images were multichannel images. Furthermore, classify_image_class_lut returned an unclear error message when the number of channels of the image and the dimensions of the look-up table did not match. These problems have been fixed.
  • project_object_model_3d did not execute prepare_object_model_3d internally if the input model consisted of triangles but only if it consisted of polygons. This problem has been fixed. Now, project_object_model_3d behaves consistently for models with triangles or polygons.
  • project_object_model_3d and project_shape_model_3d returned points twice if the parameter 'union_adjacent_contours' was set to 'true' and contours were joined. Furthermore, project_object_model_3d returned an empty contour if 'data' was set to 'lines' and the input ObjectModel3D was previously prepared for the shape-based 3D matching, e.g., by using the operator prepare_object_model_3d. These problems have been fixed.
    In the HDevelop example program
    • hdevelop/Applications/Measuring-3D/inspect_3d_surface_intersections.hdev,
    the parameters for the segmentation of contours returned by project_object_model_3d have been adapted to these changes.
  • sample_object_model_3d was not scale-invariant when sampling faces. When scaling both the input object model and the sampling factor, different points were sampled. Additionally, the results of sample_object_model_3d might have been different on 32-bit and 64-bit systems. These problems have been fixed. Now sample_object_model_3d is numerically more stable. Note that in rare cases, numerical differences can still lead to different sampling results when scaling the input and the sampling factor.
  • set_stereo_model_param crashed if the number of parameter values did not match the number of parameter names. This problem has been fixed.
  • triangulate_object_model_3d might have returned different results on 32-bit and on 64-bit systems. This problem has been fixed.
  • triangulate_object_model_3d with Method set to 'implicit' might have crashed or might hung when the generic parameter 'implicit_octree_depth' was set to a value of 9 or more. This problem has been fixed.
Bar Code
  • find_bar_code crashed in rare cases if the automatic operator parallelization was enabled. This problem could have occurred only if many bar codes were present in the image. This problem has been fixed.
  • find_bar_code did not always return the correctly decoded strings for PharmaCodes, when the expected bar code orientation was given via the generic parameter 'orientation'. In this case, sometimes the decoded strings corresponding to the opposite direction have been returned. This problem has been fixed.
  • find_bar_code in rare cases found less codes than expected when 'stop_after_result_num' was used to restrict the number of results. This problem has been fixed.
  • find_bar_code sometimes crashed when candidates existed near the image's border. This problem has been fixed.
  • find_bar_code sometimes returned the error 3503 ("Run length row >= image height") if huge images were used. This problem has been fixed. Note that this problem did not occur in HALCON XL.
  • The ISO/IEC 15415 print quality results regarding 'decodabilty' of EAN-13 and UPC-A code types were incorrect if the last six digits contained a '1'- or '2'-digit. This problem has been fixed.
  • get_bar_code_object in rare cases, and only after a training was applied, returned a scanline without measure ribs. This problem has been fixed.
  • get_bar_code_result and get_bar_code_object in very rare cases returned output that did not reflect the correct situation when the decoding took place. Thus, e.g., a correct decode result was reported but no valid scanlines were returned. This problem has been fixed.
  • get_bar_code_result with ResultName set to 'quality_isoiec15416' returned the error 3515 ("Image acquisition: wrong color space") for PharmaCodes with print growth or PharmaCodes with only thick bars. This problem has been fixed.
  • get_bar_code_result returned the overall symbol grade for ISO/IEC 15416 only as integer value. According to ISO/IEC 15416, the overall symbol grade of bar codes should be reported to one decimal place. This problem has been fixed. Note, that for compatibility reasons, the grade obtained via get_bar_code_result(...,'quality_isoiec15416',...) is still an integer value. The symbol grade to one decimal place can be obtained via get_bar_code_result(...,'quality_isoiec15416_values',...).
  • query_bar_code_params did not return a complete list of current bar code parameters. This problem has been fixed.
  • In rare cases, bar codes of type Code 128 could not be read correctly in some rotations. This problem has been fixed.
Calibration
  • calibrate_cameras for line scan cameras raised a low level error concerning memory in case of an unsuccessful calibration. This problem has been fixed.
  • The hand-eye-calibration sometimes computed wrong poses for articulated robots. In this case, the pose errors of the hand-eye-calibration, which are returned in Errors by calibrate_hand_eye, were much larger than the accuracy of the input poses. For example, the errors were in the range of several centimeters in translation or several degrees in rotation. This problem has been fixed.
  • find_calib_object sometimes did not find the calibration object for uint2 images or images with very high noise. This problem has been fixed.
  • find_calib_object crashed with mirrored calibration plates featuring less than four finder patterns. This problem has been fixed.
  • find_calib_object sometimes did not find calibration plates with hexagonally arranged calibration marks if these calibration plates were completely visible in the image and the background was noisy. In some rare cases, this resulted in a crash with signal 11. This problem has been fixed.
  • read_calib_data and deserialize_calib_data did not work correctly if the calibration data model contained calibration plates with rectangularly arranged marks. Using find_calib_object based on such a (read or deserialized) calibration data model could have led to problems. This problem has been fixed.
  • sim_caltab simulated an image of a calibration plate with dark calibration marks on a light background when using the default settings. This did not match the default appearance of calibration plates with hexagonally arranged marks, where the calibration marks appear light on a dark background. As a consequence, a calibration plate simulated with the default settings could not be found with find_calib_object. This problem has been fixed. Now, the default settings of sim_caltab comply with the default behavior of find_calib_object.
Classification
Compute Device
  • image_to_world_plane in rare cases returned the error 3513 ("Internal error: number of chords too big for num_max") if executed on compute devices. This problem has been fixed.
Data Code
  • find_data_code_2d might have crashed with signal 11 for Data Matrix ECC 200 codes when a candidate was found close to the image border. This problem has been fixed.
  • The Data Matrix ECC 200, Aztec, QR, and Micro QR data code readers always returned the value 4 for the print quality grade for the decode, even if the code could only be successfully decoded with HALCON's data code reader but not with the reference decode algorithm as required by the standard. This problem has been fixed.
  • The Aztec code reader crashed in rare cases with very large full range codes. Additionally, the print quality grade for the grid nonuniformity was incorrect for Aztec codes of size 151x151. This problem has been fixed.
  • get_data_code_2d_results returned a false print quality grade for the print growth for full range Aztec codes with a symbol_size of 19 to 31, 67 to 95, and 131 to 151. This problem has been fixed.
  • get_data_code_2d_results crashed for Data Matrix ECC 200 codes when 'reader_programming' was queried for 'all_candidates'. This problem has been fixed.
  • get_data_code_2d_results returned wrong ISO/IEC 15415 and AIM DPM-1-2006 print quality grades for the reflectance margin for Aztec codes with 10- and 12-bit codewords. This problem has been fixed.
  • get_data_code_2d_results may have returned a wrong print quality grade for the print growth for Micro QR and Aztec Codes in case of low resolution images. This problem has been fixed. Note that the print growth grade was correct for codes showing the recommended module size for print quality inspection, i.e., codes with more than 10 pixels per module.
  • get_data_code_2d_results might have returned a wrong print quality grade for the grid nonuniformity for micro QR codes when it was called a second time for the two quality measures 'quality_isoiec15415' and 'quality_aimdpm_1_2006' simultaneously. This problem has been fixed.
  • get_data_code_2d_results might have returned misleading error messages or might even have crashed if improper parameter strings starting with 'quality_isoiec15415' or 'quality_aimdpm_1_2006' were supplied. This problem has been fixed.
  • get_data_code_2d_results in some cases returned a wrong print quality grade for the fixed pattern damage for 'quality_isoiec15415' and 'quality_aimdpm_1_2006'. This problem has been fixed.
  • get_data_code_2d_results always returned 1 for 'timeout_occurred' if the timeout was disabled after a call of find_data_code_2d where a timeout occurred. This problem has been fixed.
File
  • list_files replaced the first character of Files with '?', when filename_encoding was 'locale' and the file had an inconvertible wide character. This problem has been fixed. Now, only the inconvertible characters are replaced with '?'.
  • list_files did not search the directory tree recursively for UNC paths on windows systems. This problem has been fixed.
  • list_files returned wrong paths on Asian Windows systems for paths that contained multi-byte characters. This problem has been fixed. Note that the wrong paths may have led to errors in subsequent operators like read_image if they used these paths as input.
  • read_image might have crashed with signal 11 when reading a TIFF file with an alpha channel and a SubIFD. This problem has been fixed.
  • write_image in rare cases crashed when writing JPEG-XR images. This problem occurred when two threads or processes writing JPEG-XR images shared the same working directory. This problem has been fixed.
Filter
  • lines_gauss in rare cases returned non-deterministic results at the border of the image domain. This problem has been fixed.
  • points_foerstner in rare cases returned points that lay outside the image. This problem has been fixed.
  • polar_trans_image_ext might have returned a wrong result image when at least one of the values for Row, Column, RadiusStart, or RadiusEnd was greater than 65536 and the width and height of the input and output images was smaller than 32768. This problem has been fixed.
  • projective_trans_image and projective_trans_image_size returned non-deterministic images outside their image domain although 'init_new_image' was set to 'true'. This could have led to non-deterministic behavior of subsequent operator calls, where the domain was used to restrict the search space of that operator (e.g., find_data_code_2d). This problem has been fixed.
  • var_threshold returned non-deterministic regions if the system parameter 'parallelize_operators' was set to 'true' as well as for input images with reduced domains, where the height of the domain was greater than its width. This problem has been fixed.
Graphics
  • attach_drawing_object_to_window reset the position of the text cursor, which has possibly been set with set_tposition, to its default position when it is called for the first time. This problem has been fixed.
  • Drawing objects that are attached to a HALCON window affected subsequent calls to the disp_line operator in the following ways:
    • lines displayed with disp_line disappeared when the mouse was moved over the HALCON window,
    • the first call to disp_line did not work at all, and
    • setting the color of drawing objects did not affect subsequent calls of disp_line (as expected), but setting the line width for drawing objects affected subsequent calls of disp_line.
    These problems have been fixed.
  • disp_object_model_3d and set_scene_3d_instance_param did not support the use of user-defined attributes of triangles to define the intensities of displayed faces. This problem has been fixed.
  • get_disp_object_model_3d_info crashed under OS X if multithreading was enabled. This problem has been fixed.
  • open_textwindow under OS X either crashed or opened a non-functional window. This problem has been fixed.
  • read_string displayed characters displaced under Linux. This problem has been fixed.
  • set_drawing_object_params did not update the number of text lines if a new string was written to a text drawing object. As a result, the returned string did not have the correct number of lines, if the new string had a different number of lines than the previous string. In case the number of lines was smaller, a crash occurred. This problem has been fixed.
  • set_font failed to set a new font once a drawing object has been attached to the window. This problem has been fixed.
  • Resizing a HALCON window to a huge size, i.e., larger than 32767 pixels, might have caused a crash. This problem has been fixed.
  • The cross that marks the center of a drawing object of type rectangle1 drifted slightly away from the central position when the rectangle was stretched. This problem has been fixed.
Matching
  • create_ncc_model and determine_ncc_model_params did not return an error if called with multichannel images. find_ncc_model returned the incorrect error 3122 ("Number of channels in the input parameters are different") in this case. This problem has been fixed. Now, the error 3359 ("Wrong number of image channels") is returned if one of these operators is called with multichannel images. Note that this change affects the compatibility. Read more.
  • create_ncc_model caused a memory leak of about 36 bytes. This problem has been fixed.
  • create_shape_model_xld sometimes crashed when the contour consisted of many sections and only spanned a very small image region. This problem has been fixed.
  • create_template and create_template_rot crashed with images of one pixel height or width. This problem has been fixed. create_template and create_template_rot now return an error in this case.
  • find_aniso_shape_model and find_aniso_shape_models did not find the correct match in very rare cases. This might have happened if 'pregeneration' was switched off during model generation with create_aniso_shape_model (which is the default) and if the gray values inside the model region contained very sharp gray value edges. This is the case, for example, if artificially created images are used for model creation. Then, create_aniso_shape_model in rare cases might have created corrupt models that could not be found with find_aniso_shape_model or find_aniso_shape_models. This problem has been fixed.
  • find_ncc_model leaked memory when it was applied to images of different width. This problem has been fixed.
  • find_ncc_model returned the error 6041 ("No memory block allocated at last") or in rare cases may have crashed if the system ran out of memory. This problem has been fixed.
  • find_surface_model in rare cases returned different results when executed several times with the same input data. This problem has been fixed.
  • The correlation-based matching did not check the overlap of found instances if the top search level was identical with the last level. This problem has been fixed.
  • set_shape_model_metric created shape models with wrong polarity information for contours with acute angles. This problem has been fixed.
  • In the HDevelop example program
    • hdevelop/Applications/Object-Recognition-2D/pm_multiple_models.hdev
    in one image some objects were not found. This problem has been fixed.
Measure
  • get_metrology_object_result_contour returned incorrect result contours for a metrology model configured to perform metric measurements for a line scan camera. This problem has been fixed.
Memory
  • create_ncc_model caused a memory leak of about 36 bytes. This problem has been fixed.
Miscellaneous
  • distance_cc_min hung in rare cases. In addition, the operator crashed if at least one contour contained a huge number (e.g., 1e6) of points. These problems have been fixed.
  • Some HALCON operators did not check the correct coordinate boundaries in HALCON XL. As a consequence they were not raising an error if the user tried to generate a region with coordinates larger than MAX_FORMAT-1 (2^30-1). This could have resulted in errors in subsequent operator calls. This problem has been fixed.
  • run_bg_esti returned incorrect results or crashed in rare cases if the parameter StatNum had been set to 1 in create_bg_esti. This problem has been fixed.
  • HALCON might have crashed in very rare cases on Linux and OS X systems when exiting the process.
  • When HDevelop was started under OS X from the finder, the locale environment variables (LANG, LC_xxx) were not set. Thus, characters not contained in the codeset US-ASCII were not correctly displayed, e.g., the character '°'. This problem has been fixed.
Morphology
  • gray_range_rect in rare cases returned incorrect results when parallelized on domain level. This was only the case for very narrow images. This problem has been fixed.
OCR
  • find_text returned the error 6002 ("Memory partition on heap has been overwritten") or crashed if the text line structures in the used text model had been repeatedly reset with set_text_model_param (TextModel, 'text_line_structure', ''). This problem has been fixed.
  • The pretrained OCR font 'Document' did not read the at sign '@' correctly in some cases. Especially, when the loop of the '@' was almost closed. This problem has been fixed.
Parallelization
  • binocular_disparity and binocular_distance returned different results for a different number of threads. This problem has been fixed.
  • HALCON might have crashed when a thread with a thread-specifically set number of AOP threads had been deleted and then, a thread-specific thread number was set in another thread. This problem has been fixed.
Region
  • gen_grid_region with the parameter Type set to 'lines' generated regions with a wrong region feature if multiple lines where generated. In this case, the lines where internally assumed to be connected. As a consequence, operators using this information, e.g., connection, returned wrong results. This problem has been fixed.
  • hamming_distance sometimes returned the error 3513 ("Internal error: number of chords too big for num_max") when working with highly structured regions, i.e. regions with a high number of runs. This problem has been fixed.
  • polar_trans_region crashed when the value for at least one of the parameters Width and Height was very large. This problem has been fixed. Note that this problem only occurred with HALCON XL on 32-bit systems.
  • split_skeleton_lines returned undefined values for empty input regions. This problem has been fixed.
Segmentation
  • var_threshold returned slightly incorrect results for byte images. This problem has been fixed.
    The HDevelop example programs
    • hdevelop/OCR/Neural-Nets/label_word_process_mlp.hdev
    • hdevelop/Segmentation/Threshold/var_threshold.hdev
    have been modified to cope with the slightly different output of var_threshold.
System
  • set_system ('tsp_store_empty_region','false') failed and returned the error 1302 ("Wrong value of control parameter 2"). This problem has been fixed.
  • set_system did not allow to set the maximum size of memory blocks to be cached ('alloctmp_max_blocksize') to values larger than 8MB. This limitation has been removed.
  • Turning off the temporary memory cache with set_system ('temporary_mem_cache','false') in a multi-threaded environment could have led to crashes under rare circumstances. This problem has been fixed.
  • HALCON might have crashed when a thread with a thread-specifically set number of AOP threads had been deleted and then, a thread-specific thread number was set in another thread. This problem has been fixed.
Tuple
XLD
  • distance_pc, distance_cc, distance_lc, distance_sc, and distance_cc_min returned '1.#INF' for DistanceMin when the contour consisted of only one point. This problem has been fixed.
  • lines_facet in rare cases calculated wrong results for certain mask sizes when using the non-SIMD implementation (i.e., with AVX and SSE2 turned off). This problem has been fixed.
  • segment_contours_xld might have returned circle segments that violated the restrictions given by the parameters MaxLineDist1 or MaxLineDist2. This problem has been fixed.

Procedures

Functionality

  • HALCON has been extended with the procedure xyz_attrib_to_object_model_3d. This procedure creates a 3D object model from three images that contain the X, Y, and Z-coordinates of 3D points and add extended attributes to every point of the 3D object model. The use of this procedure is shown in the new HDevelop example program
    • hdevelop/3D-Object-Model/Transformations/xyz_attrib_to_object_model_3d.hdev
    Additionally, the existing HDevelop example program
    • hdevelop/3D-Reconstruction/Binocular-Stereo/disparity_image_to_xyz.hdev
    has been adapted to make use of the new procedure.

Bug Fixes

  • visualize_object_model_3d had a memory leak in case of an error. This problem has been fixed.
  • list_image_files could not handle UNC paths with backslashes. This problem has been fixed.
  • visualize_object_model_3d did not allow to select and individually handle more than five 3D object models. This problem has been fixed. Now, visualize_object_model_3d allows to handle up to 1000 different 3D object models by default. Furthermore, this number can be modified with the generic parameter 'max_num_selectable_models'.

HALCON/C++

Functionality

  • The HALCON/C++ language interface is now compatible with C++ compilers that support the C++11 standard 'R-Value reference v3.0'. Note that previous versions of the HALCON/C++ interface caused a linker error when using HALCON classes derived from HDataArray and when compiling with 'R-Value reference v3.0' capable C++ compilers.

Bug Fixes

  • User defined HDevelop exceptions in rare cases did not work in code exported to C++. This problem has been fixed.
  • On Windows systems, CopyFile is a macro that is substituted to either CopyFileA when compiling with multi-byte strings, or CopyFileW when compiling with unicode strings. This interferes with the methods HalconCpp::CopyFile and HalconCpp::HMisc::CopyFile of the HALCON/C++ language interface. This problem has been fixed. Now, including HalconCpp.h undefines the macro CopyFile.

HALCON/C++ (legacy)

Functionality

Bug Fixes

  • The include file HIOStream.h of the old HALCON/C++ (legacy) interface has erroneously been replaced with the include file of the new HALCON/C++ interface. This problem has been fixed.

HALCON/.NET

Functionality

  • JIT-compiled HDevengine procedures and HALCON/.NET code perform better when running in parallel, now. In special cases, a speedup of up to factor 3 compared to HALCON 12.0.1 can be achieved when processing control tuples.

Bug Fixes

  • The class HWindowControlWPF did not take into account the display scaling level on Windows platforms. This problem has been fixed.
  • The mouse events of HWindowControl and HWindowControlWPF reported incorrect image coordinates when the displayed part was changed directly on the window (instead of via the property ImagePart of the control). This problem has been fixed.

Language Interface Example Programs

Bug Fixes

  • HDevEngine crashed while loading programs that contained special characters. This problem has been fixed.

HALCON Variable Inspect extension for Visual Studio

Functionality

  • The HALCON Variable Inspect extension for Visual Studio lists the variables unsorted by default. Now, the variables can also be listed in alphabetical order. Whether the variables are sorted by name or in the default order can be controlled via the new context menu for the variable list.

Bug Fixes

  • For 32-bit applications, the HALCON Variable Inspect extension for Visual Studio returned the following error if tuples of type float were inspected: "Destination array is not long enough to copy all the items in the collection. Check array index and length". This problem has been fixed. Now, tuples of type float can be inspected.
  • The layout of the HALCON Variable Inspect extension for Visual Studio sometimes did not show a scroll bar to handle a long list of variables. Additionally, the layout looked bad when switching from vertical to horizontal view, and the splitter to adapt the size for the list box became too short. Furthermore, the extension crashed when the splitter was moved and the Add-in was free floating. These problems have been fixed.

Image Acquisition Interfaces

The latest information about new interface revisions and newly supported image acquisition devices can be found on MVTec's web server. Please refer to the release notes within the documentation of the individual image acquisition interfaces for information about improvements, bugfixes, or whether a new revision of the corresponding device driver is required.

New Image Acquisition Interfaces

  • HALCON has been extended with the Slink interface, which supports the multi-array scanners from the Dutch company Ingenieursbureau Matrix BV. This new interface allows the easy acquisition of images from these MAS devices combining up to 64 2D cameras.

Miscellaneous

  • Using one GenICam-based image acquisition interface after another could have led to a crash. This problem has been fixed.

Image Acquisition Example Programs

  • The HDevelop example program
    • hdevelop/Image/Acquisition/o3d3xx_valid_data.hdev
    has been added.
  • The HDevelop example program
    • hdevelop/Image/Acquisition/slink_parameters.hdev
    has been added.
  • The HDevelop example program
    • hdevelop/Image/Acquisition/slink_simple.hdev
    has been added.

Digital I/O Interfaces

The latest information about new interface revisions and newly supported digital I/O interfaces can be found on MVTec's web server. Please refer to the release notes within the documentation of the individual digital I/O interfaces for information about improvements, bugfixes, or whether a new revision of the corresponding device driver is required.

Miscellaneous

  • The I/O integration interface has been refactored to improve its usability. Moreover, an I/O integration interface example including a documentation template has been added in the subdirectory io_integration.

Documentation

Programmer's Manuals

  • The HDevelop User's Guide has been extended to describe HDevelop's concept of how variable types are determined, in particular regarding vector variables, more clearly.
  • In the Programmer's Guide, chapter 2.2.1 "A Closer Look at Reentrancy", operators that use graphical I/O functions were still used as an example for operators with the reentrancy level "local" although since HALCON 12.0 they are not local anymore. This problem has been fixed.

Reference Manual

  • The reference manual entry of attach_drawing_object_to_window contained the sentence "The background image can be removed from the current window with the operator detach_drawing_object_from_window." In fact, not the background image but the drawing object is removed from the current window with the operator detach_drawing_object_from_window. This problem has been fixed.
  • The documentation of the polynomial model in the reference manual entry of calibrate_cameras was incorrect. The parameters P1 and P2 were exchanged in the formula. This problem has been fixed.
  • The reference manual entry of connection_object_model_3d did not clearly describe which attributes are necessary to compute certain features. This problem has been fixed.
  • The HDevelop example code in the reference manual entry of count_relation contained wrong comments. This problem has been fixed.
  • The reference manual entries of the operators did not state clear enough why the angle ranges and the scale ranges are adjusted automatically. This problem has been fixed. Now, the reference manual entries state that the adaptation ensures that for model instances without rotation or scale, 0.0 is returned as angle or scale values.
  • The appearance of the tables in the reference manual entries of has been improved.
  • The reference manual entry of create_sheet_of_light_calib_object has been extended with a description on how to use the generated CAD model to manufacture a custom calibration object.
  • The reference manual entry of dev_get_exception_data did not mention the fact that dev_get_exception_data is only meant to be used within HDevelop or HDevEngine. This problem has been fixed.
  • The reference manual entry of disp_object_model_3d and the documentation of the procedure visualize_object_model_3d wrongly stated that an empty camera parameter tuple would lead to a completely visible scene. This problem has been fixed.
  • The reference manual entry of distance_pc did not explicitly state that the distance is calculated between the specified points and the segments of the specified contour and not between the specified points and the base points of the specified contour. This problem has been fixed.
  • For many operators that handle tuples, the reference manual entries did not mention the special behavior of the individual operator for the special case of empty input tuples. This problem has been fixed.
  • The reference manual entry of gen_circle_sector did not explain the angle parameters properly. This problem has been fixed. An image that illustrates the parameters has been added.
  • The reference manual entry of get_data_code_2d_results did not clearly state that some results of the print quality inspection are only meaningful if the code has been successfully decoded. This problem has been fixed.
  • The reference manual entry of get_image_time did not explain the meaning of the returned time information. This problem has been fixed.
  • The reference manual entry of get_modules did not clearly explain that it returns all modules that were used up to this point in the HALCON session. This problem has been fixed.
  • The example code in the reference manual entry of grab_image_start has been improved. It now provides a more realistic example for the use of grab_image_start.
  • The HDevelop example code in the reference manual entry of opening_circle was erroneous because the variable LightH was not defined. This problem has been fixed.
  • The reference manual entry of query_available_compute_devices contained an outdated and unnecessary link to the website of NVIDIA. This problem has been fixed.
  • The reference manual entries of contained an incorrect transformation matrix. Namely, the "1" in the off-diagonal element row 2, column 3 should have been a "0". This problem has been fixed.
  • The reference manual entries of now contain images that illustrate the effect of the input parameters.
  • The reference manual entry of var_threshold has been improved. The rather technical explanation has been extended with explanatory images to show how the operator works and how it can be used.

Solution Guides

  • The Solution Guide 3D Vision described restrictions on the setup and the disparity image returned by a sheet-of-light measurement that are obsolete since HALCON 12.0.1. This problem has been fixed. Note that the reference manual entry of calibrate_sheet_of_light has already been adapted accordingly.
  • The Bar Code chapter of the Solution Guide I contained links to a non existent operator decode_barcode_rect2. The correct operator name is decode_bar_code_rectangle2. This problem has been fixed.
  • In the Solution Guide II-C 2D Data Codes, the parameter 'timeout' that can be set with set_data_code_2d_param was not explained. This problem has been fixed.
  • The Solution Guide 1D Measuring has been adapted to some modified example programs.

User Guides

  • The Installation Guide has been extended with information regarding dongle-based licensing. In particular, a workaround that is needed to use local dongle-based licensing for HALCON versions prior to 12.0.2 together with OS X 10.11 "El Capitan" is described. Additionally, the Installation Guide has been extended by the information that for OS X and Linux, it is not necessary anymore to copy the hasp_darwin.dylib or libhasp_linux_x86_64.so into the system library path, as long as the environment variable FLEXID_LIBRARY_PATH is set accordingly.
  • The Installation Guide mentioned the wrong directory for user-specific configuration data, e.g., HDevelop preferences, for OS X. This problem has been fixed.
  • The runtime behavior of JIT-compiled procedures can be different if control variables of the semantic type 'thread_id' are manipulated. Therefore, it is recommended to prevent procedures manipulating thread_id handles from being executed JIT-compiled by explicitly setting the semantic types of the corresponding parameters. The HDevelop User's Guide has been updated accordingly.
  • The documentation stated at different places that the maximum image size of HALCON (not HALCON XL) is 32k x 32k or rather 32767 x 32767, while in fact, the maximum image size is 32768 x 32768. This problem has been fixed.
  • The documentation of plot windows, which are used by HDevelop to visualize data like histograms or profiles, has been extended in the HDevelop User's Guide.

Supported Operating Systems

Windows

HALCON 12.0.2 has been compiled for the following Windows platform versions:

  • x86sse2-win32 platform version for Windows Vista/2008/7/8/2012/10 on x86 processors with SSE2 extension, i.e., Intel Pentium 4 / AMD Athlon 64 or newer
  • x64-win64 platform version for Windows Vista/2008/7/8/2012/10 x64 Edition on Intel 64 or AMD64 processors

The setup process checks whether it is running on a 32- or 64-bit system and provides a suitable list of platform versions that can be installed.

During the installation, the environment variable HALCONARCH is set to x86sse2-win32 or x64-win64 to indicate the installed platform version. Please note that if you want to switch to another platform version, you must first install it. Then, you must adapt the environment variable HALCONARCH (see the Installation Guide for more information).

Linux

HALCON 12.0.2 has been compiled for the following Linux platform versions:

  • x64-linux platform version for Linux x86_64, Kernel 2.6 or higher with ABI 2, on Intel 64 or AMD64 processors

Please refer to the Installation Guide for detailed system requirements corresponding to the different Application Binary Interfaces.

The installation script checks whether it is running on a 32- or 64-bit system and provides a suitable list of platform versions that can be installed.

OS X

HALCON 12.0.2 has been compiled for OS X in the following platform versions:

  • x64-macosx platform version for OS X 10.8, 10.9, 10.10, and 10.11.

Miscellaneous

Installation

  • The HALCON installer will now raise a warning when encountering a MERLIC 2.0 installation, since both include HALCON binaries in the directories defined within the environment variable PATH and thus it might happen that due to the sequence in which the paths are defined within PATH, the halcon.dll of the MERLIC installation might be used when running compiled applications. Note that this problem might occur only for 32-bit applications.
  • The HALCON installer did not check the PATH variable size limits on Windows 8 and higher to recommend the necessary reboot. This problem has been fixed.
  • Not all texts displayed by the Windows installer for HALCON were localized. This problem has been fixed.
  • The Windows installer now detects if other major HALCON versions are installed.
    If one of those installations is currently active, the installer lets you choose whether to keep that version active or to activate the currently installed version.
  • Under OS X, HDevelop programs were not displayed with the appropriate HALCON icon. This problem has been fixed.
  • HALCON did not support local dongle-based licensing under OS X 10.11 "El Capitan". With OS X 10.11, Apple introduced "System Integrity Protection" (SIP), which prohibits to install the necessary hasp_darwin.dylib in the /usr/lib directory. The same problem appears when upgrading existing OS X installations to 10.11 as the upgrade process moves third-party files like hasp_darwin.dylib to a quarantine directory. HALCON did not cope with that behavior. This problem has been fixed. For HALCON 12.0.2, local dongle-based licensing under OS X 10.11 is supported. The combination of OS X 10.11 with HALCON versions prior to 12.0.2 still disables the existing dongle driver or blocks its installation. For such a constellation, a workaround is needed that is introduced in the Installation Guide.
    Additionally, for dongle-based licensing on OS X and Linux platforms, it is not necessary anymore to copy the hasp_darwin.dylib or libhasp_linux_x86_64.so into the system library path, as long as the environment variable FLEXID_LIBRARY_PATH is set accordingly. HALCON does this automatically now. When using command line tools like lmhostid to query the dongle ID, FLEXID_LIBRARY_PATH has to be set manually. The Installation Guide has been extended accordingly. Note that this change affects the compatibility. Read more.

Licensing

  • Under Linux and OS X, the new USB dongle driver version Sentinel HASP 7.40 is included.
  • Under Windows 10, the reinstallation of the dongle driver failed. This problem has been fixed. Now, under Windows, the new USB dongle driver version Sentinel HASP 7.41 is included.
  • HALCON did not support local dongle-based licensing under OS X 10.11 "El Capitan". With OS X 10.11, Apple introduced "System Integrity Protection" (SIP), which prohibits to install the necessary hasp_darwin.dylib in the /usr/lib directory. The same problem appears when upgrading existing OS X installations to 10.11 as the upgrade process moves third-party files like hasp_darwin.dylib to a quarantine directory. HALCON did not cope with that behavior. This problem has been fixed. For HALCON 12.0.2, local dongle-based licensing under OS X 10.11 is supported. The combination of OS X 10.11 with HALCON versions prior to 12.0.2 still disables the existing dongle driver or blocks its installation. For such a constellation, a workaround is needed that is introduced in the Installation Guide.
    Additionally, for dongle-based licensing on OS X and Linux platforms, it is not necessary anymore to copy the hasp_darwin.dylib or libhasp_linux_x86_64.so into the system library path, as long as the environment variable FLEXID_LIBRARY_PATH is set accordingly. HALCON does this automatically now. When using command line tools like lmhostid to query the dongle ID, FLEXID_LIBRARY_PATH has to be set manually. The Installation Guide has been extended accordingly. Note that this change affects the compatibility. Read more.

Various

  • The makefiles of the following examples have been revised to enable linking under a Visual Studio 2015 environment:
    • extension_package/halconuser
    • extension_package/useropencl
    • ia_integration
    • io_integration

The major new features of HALCON 12.0.2 are described with respect to HALCON 12.0.1. Follow the links below to read about major new features of previous HALCON versions.

The changes in HALCON 12.0.2 are described with respect to HALCON 12.0.1. Follow the links below to read about changes in previous HALCON versions.