MVTec Software GmbH
 

Release Notes for HALCON 12.0.3

This document provides the release notes for MVTec HALCON 12.0.3, as released in November 2016.

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

Contents

Compatibility

Licenses

HALCON 12.0 licenses are also valid for HALCON 12.0.3. 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.3 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.2:

  • Because of the changes applied to achieve an improved selection of punctuation marks, the results returned by find_text might differ from the results produced with earlier HALCON versions. More information.
  • read_image now scales the gray values of PNG images to the original bit depth. This affects PNG images, for which the original image depth was different than 8 bit or 16 bit. If images from such a source are used, subsequent absolute parameters such as thresholds have to be adapted or the image gray values have to be scaled to the previous value range with scale_image. More information.
  • Extended attributes that are bound to the object itself, not to points, triangles, polygons, or lines, are no longer copied by union_object_model_3d. Also, some attributes that previously were not in the output 3D object model now are copied. More information.

HALCON Applications

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

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, HALCON 12.0.1, and HALCON 12.0.2, 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.3, 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, HALCON 12.0.1, or HALCON 12.0.2, you can use them with HALCON 12.0.3 without further action.

Digital I/O Interfaces

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

Extension Packages

Extension packages developed with HALCON 12.0, HALCON 12.0.1, or HALCON 12.0.2 can be used with HALCON 12.0.3 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

  • Programs containing statements of the form
     a[]:=... 
    
    must be modified by either deleting the statement, or by rewriting the statements as
    a[[]]:=... 
    
    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, which in parts are already realized:

  • Since HALCON 12.0.2:

    • There are warnings when compiling HALCON/C++ (legacy) projects.
  • Since HALCON 13:

    • Since HALCON 13, the HALCON/C++ (legacy) interface does not contain any new class. This means, the major part of the new functionality that was introduced with HALCON 13, is not available via the HALCON/C++ (legacy) interface.
  • Major HALCON version after HALCON 13:

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

Planned Discontinuation of the Support of FLEXid Dongles

For HALCON 13 or higher, FLEXid dongles are no longer supported and will be substituted by CodeMeter dongles. Note that HALCON 12 will furtheron support FLEXid dongles. For HALCON 12.0.3 and higher, also CodeMeter dongles are supported, if a valid HALCON 13 license file is available.

Detailed Description of Changes in HALCON 12.0.3

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

HDevelop

New Functionality

Assistants
  • The Image Acquisition Assistant's Parameters view now shows buttons for all parameters of '<parameter>_type' = 'Command' independently from the setting of their '<parameter>_access'.

Bug Fixes

Assistants
  • The Calibration Assistant generated code for "estimate pose from one image" erroneously. In particular, the shift for the pose, which is needed because of the plate thickness, had the wrong direction. This problem has been fixed. Now, the estimated pose is shifted towards the calibration plane and not away from it.
  • The Calibration Assistant uses the size of the calibration images as an implicit calibration parameter. If, however, the calibration image sequence contained images with different dimensions, it was not clear, on which size the calibration was based upon. Under unfavorable circumstances the Calibration Assistant might even have used a size of an image that was already removed from the image sequence (thus, e.g., causing the extraction of the calibration marks to fail for all remaining images). This problem has been fixed. Now, always the size of the current reference image is used.
  • While the Calibration Assistant internally converted color images to gray images, the generated code for the calibration procedure did not. Therefore, the necessary poses could not be determined from the calibration images when the generated code was executed. This problem has been fixed. Now, the Calibration Assistant also generates the code to convert color images to gray images.
  • Reconnecting a camera from the Image Acquisition Assistant could have caused HDevelop to freeze. The problem appeared after running and stopping the created code inside its acquisition loop. This problem has been fixed.
  • In the Matching Assistant, the advanced model parameter 'ignore_local_polarity' was ignored when generating code for the operator create_shape_model. This problem has been fixed.
  • Although the Measure Assistant generates a variable that holds the minimum edge amplitude, the generated code did not use it. Instead, a constant value was used for the measuring. This problem has been fixed. Now, the variable is used.
  • If the OCR Assistant was open, sometimes the images that were displayed in the Graphics Window were not resized correctly to the window size. This problem has been fixed.
  • The OCR Training File Browser displayed a wrong name in the status bar, when the training file is associated to an OCR assistant. This problem has been fixed.
  • The OCR Assistant did not properly escape special characters (i.e., preceded them by a backslash) in some string parameters of generated code. As a consequence, some generated code lines were invalid due to a malformed string when they contained, e.g., a backslash as character. This problem has been fixed.
GUI
  • In the HDevelop Help Window, the names of solution guides and other documentation components were translated although these documents are available only in English. This problem has been fixed.
  • On macOS (formerly known as OS X), some tooltips for keyboard shortcuts incorrectly mentioned "ctrl" instead of "cmd". This problem has been fixed.
  • Resetting an HDevelop program (by pressing F2) did not close the Visualize Object Model 3D window, although the displayed 3D models were cleared. If, in the following, e.g., the view of the Visualize Object Model 3D window was changed, or the window was updated in some other way with at least one of the displayed models still being invalid, HDevelop raised an error. This problem has been fixed. Now resetting the program automatically closes the Visualize Object Model 3D window.
  • The file extension drop-down menu for opening a classifier in the OCR Training File Browser contained some redundant entries. This problem has been fixed.
  • On macOS, the top and bottom parts of drop down lists were kept blank, such that the content wasn't always exactly readable. This problem has been fixed.
  • dev_inspect_ctrl failed when the GUI lagged behind the program execution and still displayed a different procedure. This problem has been fixed.
  • Some entries of the Contents tab of the HDevelop Help Window were not highlighted correctly when they had been selected. This problem has been fixed.
IDE
  • On macOS, HDevelop lost the focus when a Variable Inspect window was closed. This problem has been fixed.
  • The HDevelop operator dev_clear_obj did not clear iconic variables correctly in JIT-compiled procedures. This problem has been fixed.
  • Within the Global tab of the Variable Window, the values of global variables weren't always correctly updated. This problem has been fixed.
  • Using the procedure interface dialog to rename HDevelop procedure parameters in rare cases crashed HDevelop. This problem has been fixed.
HDevelop Language
  • On Windows 64-bit systems, HDevelop sometimes crashed when trying to execute assign_at in JIT-compiled code. This problem has been fixed.
  • HDevelop allowed the vector methods .clear and .remove on non vector expressions. This problem has been fixed.
  • The HDevelop syntax allowed empty index brackets on the left side of assignment statements. For example,
    a[]:=[]
    
    was allowed in previous versions of HDevelop. Although syntactically valid, an assignment statement of this form does not have any effect. Moreover, they were not exported correctly to other languages. This problem has been fixed. In order to prevent accidental programming errors, statements of this form are no longer allowed. Note that this change affects the compatibility. Read more.
Procedures
  • If a new external procedure was created with HDevelop, and, by doing so, an existing and already loaded external procedure was overwritten, the new procedure was not loaded but the old one remained in memory. This problem has been fixed.
  • The release notes of HALCON 12.0.2 contained an incorrect note. It stated that HDevelop procedures that were available via an import statement were usable only within the procedure in which they were imported and that this problem has been fixed. This note has been corrected. Actually, before HALCON 12.0.2 HDevelop procedures that were available via an import statement were usable within the whole program and after the fix they are usable only within the procedure in which they were imported.
  • The modification state of HDevelop procedures referencing another HDevelop procedure was not updated when the referenced procedure was renamed. This problem has been fixed.
  • The procedure visualize_object_model_3d could have caused a deadlock if OpenGL was not available. This problem has been fixed.
  • The semantic type of input parameters of HDevelop procedures has been ignored. This problem has been fixed.
  • External procedures could not be resolved anymore after they had been renamed. This problem has been fixed.
Code Export
  • HDevelop exported increment expressions incorrectly to C++ if the right operand of the addition was a vector access expression. This problem has been fixed.
  • HDevelop exported iconic vector element assignments incorrectly to .NET if the left side of the assignment was a vector element access expression of a 1-dimensional vector and the right side of the assignment was an iconic variable. This problem has been fixed.
  • Exporting HDevelop programs with hdevelop -convert did not work when the program file was specified with a relative path and the program contained import statements relative to the program. At least, the import procedures could not be resolved and, as a consequence, were not exported, but HDevelop might even have crashed. This problem has been fixed.
  • HDevelop crashed when trying to export continue statements to Visual Basic .NET if the program line before the continue statement was deactivated, a comment, or invalid. This problem has been fixed.
  • HDevelop's command line export sometimes exported procedure libraries incorrectly, and, as a consequence, output parameters of private procedures might have stayed undeclared. This problem has been fixed.
  • HDevelop in many cases exported vector .length() expressions incorrectly to C++. This problem has been fixed.
  • HDevelop exported dev_open_window calls as HALCON open_window calls with parameter "Mode" set to "". This problem has been fixed. Now, in the exported code "Mode" is set to "visible", which is the default value for that parameter.
  • C and C++ code exported from HDevelop erroneously called the HALCON operator set_system before XInitThreads, which could have caused problems as the first operator call already opens an X connection. This problem has been fixed. Now, in exported code XInitThreads is called before any HALCON operator.
  • HDevelop exported the .clear() operation incorrectly. This problem has been fixed.
  • When exporting procedures to ASCII format, HDevelop omitted the names of all vector parameters. This problem has been fixed.
  • HDevelop's Visual Basic export indented some lines incorrectly. This problem has been fixed.
  • HDevelop exported tuple element assignment operations incorrectly to HALCON/C++ and HALCON/.NET if the assignment variable was global and not a vector. This problem has been fixed.
Miscellaneous
  • On Windows systems, top-level HALCON graphic and text windows were not opened in a special window thread during JIT-compiled execution, which may have led to hangups when, e.g., displaying objects in the regarding window during regular execution. This problem has been fixed by activating the HALCON system parameter 'use_window_thread' by default in HDevelop. The HDevelop User's Guide has been extended by a corresponding paragraph.
  • HDevelop sometimes crashed if an error occurred during JIT-compiled execution of HDevelop operators. This problem has been fixed. Note that in such cases, the exception thrown by the HDevelop operator might have differed from the exception thrown if the code was executed without JIT-compilation.
  • Assigning tuple element values in vector element access expressions could have led to a crash in JIT-compiled code. Furthermore, if the regarding vector was global, its value was never set correctly, even if the operation did not crash. These problems have been fixed.
  • HDevelop procedures that generate an empty tuple sometimes did not behave as expected when executed JIT-compiled. Instead of generating an empty tuple, a tuple with one element was created. This problem has been fixed.
  • The execution of JIT-compiled procedures led to a memory leak if a switch statement had an expression as argument. This problem has been fixed.
  • HDevelop behaved inconsistently when executing procedures containing get_mbutton or get_mbutton_sub_pix JIT-compiled. Now, procedures containing get_mbutton or get_mbutton_sub_pix are excluded from JIT-compiled procedure execution.
  • On Linux systems, HDevelop sometimes crashed when the execution of long running operators was cancelled (by moving the program counter or editing the program). This problem has been fixed.
  • Calling dev_clear_obj on an iconic vector element incorrectly cleared the whole vector. Furthermore, HDevelop exported clear_obj and dev_clear_obj incorrectly if the argument was a vector access expression. These problems have been fixed.
  • Some operators that have a recommended alternative in HDevelop (dev_*) did not have a warning in HDevelop referring to the recommended HDevelop operator. This problem has been fixed. Now, warnings are also shown for set_rgb, set_gray, and set_hsi that recommend to use dev_set_color instead.
  • HDevelop operators with control output parameters, e.g., dev_get_preferences, leaked memory when they were executed JIT-compiled. This problem has been fixed.
  • Occasionally, the error 5175 ("negative width of area (or 0)") was shown while zooming or moving the image in the Graphics Window. This problem has been fixed.
  • Stopping JIT-compiled procedure execution via user interaction, e.g. by pressing F9, created a memory leak in case the procedure contained local variables. This problem has been fixed.
  • When trying to execute a procedure JIT-compiled in parallel, the same JIT-compiler information or warning appeared multiple times in the output console. This problem has been fixed.
  • On macOS, HDevelop's auto completion erroneously 'completed' code lines like 'for Index := 1 t ' or the already complete code line 'a := 1' when pressing the Tab key or the Enter key. This problem has been fixed.
  • HDevelop programs involving try-catch blocks sometimes caused HDevelop to freeze. This problem has been fixed.
  • The auto completion always added a comma in the parameter list of a one-parameter function. This problem has been fixed.
  • The line profile showed unexpected behavior. In particular, the y-size for the line profile was based on the current profile, so that the axis scaling changed when moving the ROI around. This problem has been fixed. Now, the size for the line is based on the current image.

HDevelop Example Programs

Bug Fixes
  • The ECC 200 data code reader sometimes used a slightly wrong code region for decoding and print quality inspection. While this had no impact on the general decoding performance, for print quality inspection this could have led to significantly varying quality grades for relatively similar images. This problem has been fixed. Note that the problem concerned mainly images of codes with module sizes smaller than 10px, which is not in accordance with ISO/IEC 15415.
    The HDevelop example program
    • hdevelop/Identification/Data-Code/ecc200_contrast_tolerance.hdev
    has been adapted accordingly, and the image
    • datacode/ecc200/ecc200_contrast_variations_04.png
    has been removed.
  • The HDevelop example program
    • hdevelop/Applications/OCR/bottle.hdev
    did not work correctly, if the trained classifier from the example program
    • hdevelop/Applications/OCR/bottlet.hdev
    was used. This problem has been fixed. The example bottlet.hdev has been adapted accordingly.
  • The HDevelop example program
    • hdevelop/Applications/Object-Recognition-2D/detect_brochure_pages.hdev
    did not find all instances of the models properly due to suboptimal parameter values. This problem has been fixed.
  • The HDevelop example program
    • hdevelop/Applications/Position-Recognition-2D/pm_world_plane.hdev
    used the initial pose instead of the optimized camera pose for the position recognition. This problem has been fixed.
  • The HDevelop example program
    • hdevelop/Applications/Position-Recognition-3D/locate_car_door.hdev
    returned a wrong match for one of the example images because of suboptimal parameter settings. This problem has been fixed.
  • The HDevelop example program
    • hdevelop/Applications/Print-Inspection/inspect_bottle_label_360_degree.hdev
    did not support an arbitrary order of the cameras. If the cameras were defined in the opposite order than originally defined in the example program, the definition of the area to be rectified was broken. This problem has been fixed.
  • Within the reference manual entry of photometric_stereo the description of the slant angle (Slants) was erroneous. It stated that the slant angle is the angle between the object plane, which lies orthogonal to the optical axis of the camera, and the direction of the illumination. Instead, the slant angle is the angle between the optical axis of the camera and the direction of the illumination. Additionally, according to the erroneous reference manual entry, the HDevelop example program
    • hdevelop/Applications/Surface_inspection/determine_tilt_slant_photometric_stereo.hdev
    used the wrong slant angles. These problems have been fixed. Furthermore, the reference manual entry of photometric_stereo has been extended with images to visualize the parameters Slants and Tilts.
  • The HDevelop example program
    • hdevelop/Calibration/Hand-Eye/pick_and_place_scara_stationary_cam.hdev
    has been simplified by removing the unnecessary variables MapUpperLeftX and MapUpperLeftY.
  • In the HDevelop example program
    • hdevelop/Calibration/Hand-Eye/pick_and_place_scara_stationary_cam.hdev
    it is possible to switch off the image rectification by setting the parameter RectifyImages at the top of the program to false. In this case, the model region did not fit the model image, which resulted in an incomplete model. Furthermore, in this case the program later tried to read the variable MPInCamPoseMapping, which was not instantiated. This caused a program exception. These problems have been fixed.
  • Within the HDevelop example program
    • hdevelop/Segmentation/Classification/novelty_detection_mlp.hdev
    the visualization of the classification results was slightly misleading and highlighted too many errors. This problem has been fixed.
  • In the HDevelop example program
    • hdevelop/Segmentation/Topography/watersheds_threshold.hdev
    one of the used threshold values had not been adapted according to the slightly different results of the preceding filtering step after gauss_image had been replaced by gauss_filter in HALCON 12. This problem has been fixed.
  • In some cases, text that was displayed within the HDevelop example program
    • hdevelop/explore_halcon.hdev
    was too large to be fully contained in the Graphics Window under Linux. This problem has been fixed.
  • The HDevelop example program
    • solution_guide/3d_vision/mosaicking.hdev
    did use some parameters that were not well explained in the comments. This problem has been fixed. Additionally, the names of some parameters and the visualization have been improved.

HDevEngine

Bug Fixes

  • The execution of JIT-compiled procedures led to a memory leak if a switch statement had an expression as argument. This problem has been fixed.
  • HDevelop behaved inconsistently when executing procedures containing get_mbutton or get_mbutton_sub_pix JIT-compiled. Now, procedures containing get_mbutton or get_mbutton_sub_pix are excluded from JIT-compiled procedure execution.
  • HDevEngine crashed when trying to JIT-compile procedures containing dev_get_system calls. This problem has been fixed.
  • Calling the GetAllProcedureNames method on an HDevEngine object after unloading all procedures using the UnloadAllProcedures method led to a crash. This problem has been fixed.
  • The HDevelop operator dev_clear_obj did not clear iconic variables correctly in JIT-compiled procedures. This problem has been fixed.
  • Raising exceptions from subthreads (created with par_start) in HDevEngine could have caused resource leaks and possibly slowed down the application over time. This problem has been fixed.
  • HDevelop operators with control output parameters, e.g., dev_get_preferences, leaked memory when they were executed JIT-compiled. This problem has been fixed.
  • Stopping JIT-compiled procedure execution via user interaction, e.g. by pressing F9, created a memory leak in case the procedure contained local variables. This problem has been fixed.
  • Passing a two- or more-dimensional HObjectVector to a procedure call via SetInputIconicParamVector caused a hard SEHException in native code. This problem has been fixed.
  • The HDevelop language interfaces converted all input of procedures to mixed tuples. This caused some procedures to behave differently when called from a language interface than when called from HDevelop. This problem has been fixed.

HALCON Library

New Functionality

3D
  • HALCON now exports functions that allow extension packages and image acquisition interfaces to create and manage 3D object models.
Filter
OCR
Region
  • The usability of distance_rr_min has been improved. Now, regions with multiple unconnected components can be evaluated as well.
System
  • The error messages of LAPACK now are logged as HALCON low level errors. Thus, they are not printed to the standard output anymore.

Bug Fixes

3D
Bar Code
  • get_bar_code_object and get_bar_code_result returned the misleading error message error 8727 ("Feature or operation available only in 'persistent' mode") with respect to the generic parameters that require the model to be in 'persistence' mode if they were called without a previous call to find_bar_code or decode_bar_code_rectangle2. This problem has been fixed. Now, the error 8729 ("Neither find_bar_code nor decode_bar_code_rectangle2 have been called in persistent mode on this model") is returned, which indicates that the operators find_bar_code or decode_bar_code_rectangle2 must be called first. Please note that only the error message and the error number have been changed.
  • get_bar_code_result returned a wrong value for the 'Minimal Reflectance' print quality grade due to ISO15416. This problem has been fixed.
  • get_bar_code_result in some cases returned the status 'unknown decoding status.' (0) when 'stop_after_result_num' was set to the number of expected bar codes. This problem has been fixed. Note that this problem had no effect on the bar code reading.
  • query_bar_code_params returned wrong results if Properties was set to 'all'. Furthermore, this could have led to an undefined behavior. This problem has been fixed.
Calibration
  • calibrate_cameras in rare cases returned slightly inaccurate calibration results for multi-view setups because the pose of the reference camera was not excluded from the optimization by default. This problem has been fixed.
  • The hand-eye-calibration for articulated robots (calibrate_hand_eye and hand_eye_calibration) in very rare cases returned large errors and incorrect poses. This problem has been fixed.
  • camera_calibration might have frozen in case of inconsistent input data. This problem has been fixed. Other functionality that processes poses might have been affected as well in case of very large rotation values.
  • create_caltab created incorrect postscript files if the number of rows was even or if the number of marks per row was 3. This problem has been fixed.
  • find_calib_object crashed in rare cases if the finder pattern had been identified erroneously. This problem has been fixed.
  • find_calib_object in rare cases did not find the calibration plate.This problem has been fixed.
  • fit_ellipse_contour_xld in rare cases might have frozen for degenerate input data. Other operators that fit ellipses might have been affected as well, e.g., segment_contours_xld, find_calib_object, calibrate_cameras, or apply_metrology_model. This problem has been fixed.
  • get_camera_setup_param did not support the parameters 'reference_camera' and 'coord_transf_pose'. This problem has been fixed.
Classification
Compute Device
Data Code
  • clear_data_code_2d_model for QR Codes in very rare cases had a small memory leak when the operator was run in multiple instances in parallel. This problem has been fixed.
  • clear_data_code_2d_model for ECC 200 codes had a small memory leak. This problem has been fixed.
  • find_data_code_2d in very rare cases had undefined behavior for Micro QR and Aztec codes. This problem has been fixed.
  • find_data_code_2d in rare cases crashed for ECC 200 symbols, if a candidate was bigger than the image. This problem has been fixed.
  • find_data_code_2d in very rare cases might have crashed. This problem has been fixed.
  • In some cases, the timeout in find_data_code_2d was not very precise for ECC 200 codes and for QR codes. This problem has been fixed.
  • find_data_code_2d might not have found all ECC 200 codes in an image if the codes were very close to another. This problem has been fixed.
  • find_data_code_2d contained a memory leak for QR codes if the parameter 'persistence' was set to 1, the number of candidates was larger than 1, and the 'model_type' was not explicitly set to 1 or 2. This problem has been fixed.
  • find_data_code_2d had a memory leak for PDF417, MicroQR, and QR codes. The memory leak occurred only in the case of successive calls to find_data_code_2d on images with increasing image or domain sizes. This problem has been fixed.
  • The resolution of the timeouts in find_data_code_2d for ECC 200 codes has been improved.
  • find_data_code_2d in very rare cases determined inconsistent model parameters for PDF417 codes during the training. This problem has been fixed.
  • The ECC 200 data code reader could have crashed in very rare cases if the image contained a damaged code. This problem has been fixed.
  • The ECC 200 data code reader sometimes used a slightly wrong code region for decoding and print quality inspection. While this had no impact on the general decoding performance, for print quality inspection this could have led to significantly varying quality grades for relatively similar images. This problem has been fixed. Note that the problem concerned mainly images of codes with module sizes smaller than 10px, which is not in accordance with ISO/IEC 15415.
    The HDevelop example program
    • hdevelop/Identification/Data-Code/ecc200_contrast_tolerance.hdev
    has been adapted accordingly, and the image
    • datacode/ecc200/ecc200_contrast_variations_04.png
    has been removed.
  • The ECC200 data code reader with 'finder_pattern_tolerance'='high' falsely discarded candidates in certain cases of quiet zone violation. This problem has been fixed.
  • The operators that belong to the 2D data code reader and to the 2D metrology model could have crashed when running out of memory. This problem has been fixed. Now, they return the error 6001 ("Not enough memory available") instead.
  • The Aztec code reader in very rare cases accessed invalid memory locations. This problem has been fixed.
  • The Aztec code reader could have crashed if the width or height of the image was 1. This problem has been fixed.
  • The Aztec code reader may have crashed in very rare cases. This problem has been fixed.
  • For Micro QR codes, get_data_code_2d_results sometimes falsely returned 0.0 for the Unused Error Correction for ISO/IEC 15415 or AIMDPM-1-2006. This problem has been fixed.
  • get_data_code_2d_results might have not returned 'timeout_occurred' == true although a timeout was thrown for ECC200, PDF417, and QR Codes. This problem has been fixed.
  • get_data_code_2d_results for QR and Micro QR Codes in some cases might have returned an incorrect print growth quality. This problem has been fixed.
  • For Micro QR codes, get_data_code_2d_results always returned 'undefined' for the 'error_correction_level'. This problem has been fixed. Now, the operator returns 'N', 'L', 'M', or 'Q' for the 'error_correction_level' if a symbol is found.
  • For Micro QR codes, the operator get_data_code_2d_results (..., 'status', ...) returned 'symbol format information decoded' instead of 'error correction failed' if the error correction failed. This problem has been fixed.
  • get_data_code_2d_results in very rare cases returned incorrect print quality inspection grades when the code was dot printed or the code border had strong defects. This problem has been fixed.
  • get_data_code_2d_results crashed while retrieving the 'decoded_string' for QR codes if the 'filename_encoding' was set to 'utf8' via set_system. This problem has been fixed.
Feature
  • moments_region_2nd_rel_invar calculated the output parameter PHI2 incorrectly. This led also to a wrong formular in the corresponding reference manual entry. These problems have been fixed.
File
  • When reading GIF images, a global buffer overflow could have occurred in read_image. This problem has been fixed.
  • read_image did not scale the gray values of PNG images with an sBit correctly. This affected PNG images, for which the original image had a bit depth other than 8 bit or 16 bit. This problem has been fixed. Note that this change affects the compatibility. Read more.
  • The 'File' interface failed to read images stored in the hobj format. This problem has been fixed.
Filter
  • binary_threshold in rare cases returned the error 6006 ("Tmp-memory management: could not find memory element") for uint2 images. This problem has been fixed.
  • bit_lshift worked incorrectly for 'int4' images in 32-bit environments. This problem has been fixed. The operator is now up to 300% faster for all supported image types.
  • edges_color in rare cases returned the error 6001 ("Not enough memory available") if the number of run lengths of the input image's domain was less than the number of threads. This problem has been fixed.
  • The results of edges_sub_pix with the filters 'shen' and 'mshen' were not correct. This problem has been fixed.
  • inpainting_texture sometimes did not handle pixels at the image border. This problem has been fixed.
  • var_threshold crashed if the domain of the input image was an empty region. This problem has been fixed.
Graphics
  • disp_object_model_3d and display_scene_3d did not work on Linux with 16 bit color depth. This problem has been fixed.
  • For draw_ellipse in rare cases the ellipse could not be modified. This problem has been fixed.
  • The procedure visualize_object_model_3d could have caused a deadlock if OpenGL was not available. This problem has been fixed.
  • The interaction with a drawing object of type ellipse_sector may have led to a crash if the markers that define the sector were moved. This problem has been fixed.
  • open_window and set_window_extents didn't correctly set the window dimensions on Linux systems with the Openbox window manager. This problem has been fixed.
  • Some operators that have a recommended alternative in HDevelop (dev_*) did not have a warning in HDevelop referring to the recommended HDevelop operator. This problem has been fixed. Now, warnings are also shown for set_rgb, set_gray, and set_hsi that recommend to use dev_set_color instead.
  • set_scene_3d_instance_pose crashed with invalid instance indices. set_scene_3d_instance_param did not work correctly if instances have been removed before. These problems have been fixed.
  • set_window_extents and get_window_extents did not work correctly with buffer windows. This problem has been fixed.
  • Drawing objects of type ellipse_sector could not be rotated by using the arrow markers. This problem has been fixed.
Image
  • elliptic_axis_gray returned undefined values for Ra, Rb, and Phi if the gray value area of the region was zero. This problem has been fixed. Now, in this case zero is returned for the ellipse parameters.
  • In rare cases, min_max_gray returned wrong values for the median if 'Percent' was set to 50. This problem has been fixed.
  • read_image could not read bitmap images version 4 and 5 with unused but corrupt bitfield header. This problem has been fixed.
  • read_image had a memory leak if the image to be read was a corrupt PNG image. This problem has been fixed.
  • set_grayval sometimes failed when setting the gray values of an image that contained channels with mixed types. Additionally, the operator would raise an unexpected exception if called with empty tuples for rows, columns, and gray values. These problems have been fixed. set_grayval now returns no error if called with empty tuples for rows, columns, and gray values. Additionally, an explicit error is returned when setting a single gray value for multiple pixels on an image with multiple channels that require a different number of gray values.
Matching
  • Using a byte image as input to create_scaled_shape_model could have led to a buffer overrun in rare cases. This problem has been fixed.
  • create_uncalib_descriptor_model and create_calib_descriptor_model sometimes erroneously threw the error 8977 ("Too few feature points can be found"), although enough feature points were present. This problem has been fixed.
  • determine_shape_model_params in rare cases returned the error 9260 ("Number of points too small") when the parameter ScaleMin has been set to a value smaller than 1.0. This problem has been fixed.
  • find_ncc_model in rare cases crashed if no model was found. This problem has been fixed.
  • find_shape_model_3d in rare cases returned non-intuitive score values if the generic parameter 'recompute_score' was set to 'true' or if the parameter 'lowest_model_level' > 1. For example, in some cases, a score value of almost 1.0 was returned even if a significant part of the model was not visible in the image. This problem has been fixed. Note that because of this fix, the execution time of find_shape_model_3d might slightly increase compared to previous versions if 'fast_pose_refinement' is set to 'false' in create_shape_model_3d.
  • find_surface_model returned the first match multiple times if it was executed using only a single thread and multiple matches were requested. This problem has been fixed. Now, multiple matches are returned in this case.
  • The automatic parameter estimation of shape-based matching in rare cases estimated a value for 'min_contrast' that was higher than the estimated value for 'contrast'. This problem has been fixed.
Measure
  • The operators that belong to the 2D data code reader and to the 2D metrology model could have crashed when running out of memory. This problem has been fixed. Now, they return the error 6001 ("Not enough memory available") instead.
  • serialize_metrology_model and write_metrology_model did not handle metrology models correctly if metrology objects have been deleted from these models. deserialize_metrology_model and read_metrology_model crashed if such models were read. This problem has been fixed.
Memory
  • Turning off the temporary memory cache did not flush the temporary memory caches of all threads in the thread pool. This problem has been fixed.
Miscellaneous
  • edges_sub_pix and edges_color_sub_pix with the parameter Filter set to 'sobel_fast' in rare cases returned XLDs with duplicate points. This problem has been fixed.
  • For get_operator_info, the value 'parameter' of the parameter Slot was missing in the list of values. This led to the problem that this value was not proposed by HDevelop's auto completion. This problem has been fixed.
  • reconstruct_surface_stereo determined normal vectors even if their calculation was instable. This problem has been fixed. Now, in these cases, the returned normal vectors are set to the zero vector.
  • set_window_extents did not check possible errors when retrieving the dimensions of the bounding rectangle of the specified window. This problem has been fixed, Now, the error 5154 ("Wrong values for image area") is returned in case of a failure.
  • HALCON didn't respect the system's locale setting when converting strings to floating point numbers. This problem has been fixed.
  • With macOS 10.11, Apple changed the way the AppKit display cycle works, severely impacting the performance of the HALCON visualization. This negative impact has been mostly mitigated.
Morphology
  • gray_tophat could have crashed when using very large structuring elements. This problem has been fixed.
OCR
  • find_text in rare cases returned characters from one text line as punctuation marks in another text line if they lay very close to its baseline. This problem has been fixed. Now, find_text selects punctuation marks more robustly. Note that this change affects the compatibility. Read more.
Parallelization
  • optimize_aop in rare cases might have crashed if model was set to 'mlp'. This problem has been fixed.
  • The HALCON library did not detect the process affinity correctly on a platform with more than 32 logical processors when the affinity of the process was set. This problem has been fixed.
  • Raising exceptions from subthreads (created with par_start) in HDevEngine could have caused resource leaks and possibly slowed down the application over time. This problem has been fixed.
Region
  • affine_trans_region might have crashed for large input regions. This problem has been fixed.
  • select_shape did not select the whole value range when using 'min' or 'max' on 64-bit systems. This problem has been fixed.
  • zoom_region could have failed with the error 3513 ("Internal error: number of chords too big for num_max") when zooming a very sparse region down. This problem has been fixed.
System
  • HALCON crashed if the monitoring mode of HALCON Spy was specified via the environment variable HALCONSPY. This problem has been fixed.
  • When the number of AOP threads was set thread-specifically with set_system ('tsp_thread_num', ...) and then, this number was decreased, the resulting value was incorrect. The resulting value was the requested value plus one. This problem has been fixed.
  • Most operators taking a handle as input parameter did not support MIX_PAR tuples. This problem has been fixed.
XLD
  • gen_nurbs_interp did not work correctly if duplicated points were passed to the operator. This problem has been fixed.
  • gen_rectangle2_contour_xld in rare cases returned the error 3266 ("No points found for at least one side of the rectangle") for contours that should fit a rectangle. This problem has been fixed.

Procedures

Bug Fixes

  • disp_message positioned the displayed text erroneously if image coordinates were used and the internal conversion to window coordinates led to Row and Column values that could have been rounded to the value -1. This problem has been fixed. Now, in such a case, the Row and Column values for the used text position are 0.

HALCON/C++

Bug Fixes

  • HALCON/C++ might have crashed if a single string value was assigned to multiple indices of an HTuple instance. This problem has been fixed.
  • The HALCON/C++ language interface had a memory leak if NULL was passed as pointer to a HalconCpp::HTuple. This problem has been fixed.
  • The HALCON/C++ language interface in very rare cases had a memory leak when an exception was thrown. This problem has been fixed.
  • In HALCON/C++ and HALCON/.NET indexing an empty tuple with an empty index raised an exception. This problem has been fixed.

HALCON/.NET

Bug Fixes

  • A NULL pointer exception was generated if a HWindowControlWPF window was located inside a TabControl with multiple pages and this was not the default tab page. This problem has been fixed.
  • set_window_extents did not check possible errors when retrieving the dimensions of the bounding rectangle of the specified window. This problem has been fixed, Now, the error 5154 ("Wrong values for image area") is returned in case of a failure.
  • Raising user defined exceptions did not work correctly in the HALCON/.NET language interface when the exception tuple did not contain a string at index 1. This problem has been fixed.
  • The HALCON/.NET language interface ignored the 'filename_encoding' parameter of set_system to pass utf8 encoded character strings. This problem has been fixed.
  • In HALCON/C++ and HALCON/.NET indexing an empty tuple with an empty index raised an exception. This problem has been fixed.
  • C# code that was generated by the HDevelop automatic code export using multiple threads crashed when running in a 32-bit Windows runtime environment. This problem has been fixed.

HALCON/COM

Bug Fixes

  • Programs using the HALCON/COM interface could have hung when exiting. This problem has been fixed.

Language Interface Example Programs

Bug Fixes

  • In the C# example DrawingObjectsWPF, the reference to System.Drawing could not be resolved if the .NET Framework 3.5 was not available. This problem has been fixed. An explicit reference to System.Drawing has been added to the example project.
  • In the C# example DrawingObjectsWPF, an exception of type System.AccessViolationException was thrown when attaching a drawing object through the pop up menu that appears on a right mouse click within the HSmartWindowControl, respectively the HWindowControl. This problem has been fixed.
  • The HDevEngine example exec_programs_mt could have crashed when starting it with a non-existent HDevelop script. This problem has been fixed.
  • Programs using the HALCON/COM interface could have hung when exiting. This problem has been fixed.
  • The Visual Studio example project examples/cpp/mfc/MatchingCOM/vs2005/Matching.sln had no 64-bit platform target. This problem has been fixed.

HALCON Variable Inspect Extension for Visual Studio

Please note that to profit from the changes of HALCON 12.0.3 you have to again registrate the HALCON Variable Inspect Extension for your Visual Studio installation by double-clicking the file %HALCONROOT%/misc/halcon_variable_inspect.vsix.

Bug Fixes

  • The HALCON Variable Inspect extension for Visual Studio could not display large images, because the reading failed, even if enough memory was available. This problem has been fixed.
  • The HALCON Variable Inspect extension for Visual Studio showed only black images when a program used HALCON XL 32-bit and was executed on a 64-bit Windows system. This problem has been fixed.

Extension Packages

Functionality

  • The entry page of the HALCON Operator Reference has been renamed from table_of_contents.html to index.html. This change also applies to the documentation of extension packages. The documentation has been adapted accordingly.
  • HALCON now exports functions that allow extension packages and image acquisition interfaces to create and manage 3D object models.

Bug Fixes

  • The HALCON compiler hcomp crashed when the slot 'default_value' of a parameter in the operator description of a def-file was defined in an invalid way. This problem has been fixed.
  • Extension packages with parallelization methods but no iconic input parameters crashed. This problem has been fixed. Now, hcomp throws an error for invalid parallelization methods.

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.

Miscellaneous

  • The Image Acquisition Assistant's Parameters view now shows buttons for all parameters of '<parameter>_type' = 'Command' independently from the setting of their '<parameter>_access'.
  • The 'File' interface failed to read images stored in the hobj format. This problem has been fixed.
  • With the redesign of the HALCON website the general installation instructions for image acquisition and digital I/O interfaces were removed. To compensate this, installation instructions were added to the reference documentation of all the image acquisition and digital I/O interfaces.

Image Acquisition Example Programs

New Image Acquisition Example Programs

The following HDevelop example programs have been added:

  • hdevelop/Image/Acquisition/bitflow_change_size.hdev
  • hdevelop/Image/Acquisition/bitflow_cl_serial_usage.hdev
  • hdevelop/Image/Acquisition/bitflow_cont_async_oneshot.hdev
  • hdevelop/Image/Acquisition/bitflow_cxp_register_poke_peek.hdev
  • hdevelop/Image/Acquisition/bitflow_open_by_switch_connector.hdev
  • hdevelop/Image/Acquisition/bitflow_register_poke_peek.hdev
  • hdevelop/Image/Acquisition/bitflow_simple_sw_trigger.hdev
  • hdevelop/Image/Acquisition/bitflow_version.hdev
  • hdevelop/Image/Acquisition/gigevision_wenglor_wecat3d_objectmodel3d.hdev
Removed Image Acquisition Example Programs

The following HDevelop example programs have been removed:

  • hdevelop/Image/Acquisition/bitflow_2simultaneous.hdev
  • hdevelop/Image/Acquisition/linx_2simultaneous.hdev
  • hdevelop/Image/Acquisition/millite_1394_parameters.hdev
  • hdevelop/Image/Acquisition/millite_2ports.hdev

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

  • With the redesign of the HALCON website the general installation instructions for image acquisition and digital I/O interfaces were removed. To compensate this, installation instructions were added to the reference documentation of all the image acquisition and digital I/O interfaces.

Documentation

Programmer's Manuals

  • The Programmer's Guide contains important information about program design issues for parallel programming, e.g., the information, that before calling HALCON operators in parallel in a multithreaded program, you have to call one operator exclusively to allow HALCON to initialize its internal data structures. The section containing this information has been renamed from 'Style Guide' to 'Program Design Issues for Parallelization' to make the importance of the section's content more obvious and to enhance the search for the corresponding information.

Reference Manual

Solution Guides

  • The documentation of compute devices within the Solution Guide Basics stated that a compute device can only be used in a single thread. Actually, a compute device can be used in different threads if for each thread the compute device is opened anew so that different compute device handles are used. However, the different threads using the same compute device must not try to access the same image object. This problem has been fixed. The documentation has been extended accordingly.

User Guides

  • The HDevelop User's Guide has been extended by information concerning the different behavior of HDevelop and exported code when accessing uninitialized elements of a tuple or a vector.
  • The HALCON runtime installer features a silent installation mode, which has previously been described on the download page. The corresponding information has since been moved to the Installation Guide.

Supported Operating Systems

Windows

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

  • x86sse2-win32 platform version for Windows Vista/7/8/10 or Windows Server 2008/2012 on x86 processors with SSE2 extension, i.e., Intel Pentium 4 / AMD Athlon 64 or higher
  • x64-win64 platform version for Windows Vista/7/8/10 or Windows Server 2008/2012 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.3 has been compiled for the following Linux platform version:

  • x64-linux platform version for Linux x86_64, Kernel 2.6 or higher, libc.so.6 (GLIBC_2.6 or higher), libstdc++.so.6 (GLIBCXX_3.4 or higher) on Intel 64 or AMD64 processors

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

macOS

HALCON 12.0.3 has been compiled for macOS (formerly known as OS X) in the following platform version:

  • x64-macosx platform version for OS X 10.8 or higher on Intel 64.

Miscellaneous

Installation

  • The entry page of the HALCON Operator Reference has been renamed from table_of_contents.html to index.html. This change also applies to the documentation of extension packages. The documentation has been adapted accordingly.
  • The profiles generated by the Linux installer when installing to a relative path did not set the environment variables correctly. This problem has been fixed.

Licensing

  • Replacement licenses for existing HALCON 12 floating licenses are only available until December 31 2017. After that, floating licenses can only be replaced by node-locked licenses. Note that in HALCON 13.0, floating licenses are no longer supported.
  • HALCON now uses version 11.14.0 of the FLEXnet Publisher license manager software.
  • In addition to FLEXid dongles, HALCON 12.0.3 now also supports CodeMeter dongles, if a valid HALCON 13 license file is available.
  • When encountering an empty license file, HALCON could have crashed. This problem has been fixed.

Errata Release Notes of 12.0.2

  • The release notes of HALCON 12.0.2 contained an incorrect note. It stated that HDevelop procedures that were available via an import statement were usable only within the procedure in which they were imported and that this problem has been fixed. This note has been corrected. Actually, before HALCON 12.0.2 HDevelop procedures that were available via an import statement were usable within the whole program and after the fix they are usable only within the procedure in which they were imported.

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

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