Release Notes for HALCON 12.0

This document provides the release notes for MVTec HALCON 12.0, as released in November 2014.

Major New Features of HALCON 12.0

General Features

Identification and Classification

Camera Calibration

Hand-Eye Calibration

Sheet of Light

Surface-Based 3D Matching

3D Vision

I/O Devices

Speedup

Further Enhancements

IDE

Language Interfaces

  • HDevEngine and HDevelop now provide a just-in-time (JIT) compiler that - depending on the code structure - may significantly accelerate the runtime of HDevelop procedures.

Compatibility

Licenses

All HALCON 11.0 licenses or licenses of earlier versions must be replaced or upgraded. Please contact your local distributor.

HDevelop

  • The default behavior regarding the export of single external procedures via command line with the option -convert has been changed. Now, if the procedure contains references to other external procedures, the implementation of the referenced procedures is exported by default. In order to obtain the previous default behavior, where only the declarations of referenced procedures were exported, the option -no_export_of_referred_procs must be used.
  • HDevelop now supports the handling of different preferences files. Consequently, the old HDevelop command line option -preferences is deprecated but will still be supported for compatibility reasons.

HALCON Library

Compared to HALCON 11.0, many extensions have been introduced. Thus, the HALCON 12.0 libraries are not binary compatible with HALCON 11.0.x or earlier versions. However, HALCON 12.0 is mostly source-code compatible to HALCON 11.0.x except for the changes listed below:

HALCON Applications

Please re-compile all C, C++, .NET, or COM programs developed with HALCON 11.0.x.

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.

Image Acquisition Interfaces

The system requirements of the following image acquisition interfaces have been changed since HALCON 11.0.3:

  • For using the updated Opteon interface you must install the new v5.0 of the Opteon software distribution.
  • For using the updated pylon interface you must install the new version 4.2 of the Basler pylon camera software suite.
  • For using the updated SICK-3DCamera interface you must install the new SICK icon API 4.4.3 and, for ethernet cameras, the eBus driver 3.1.

If you have developed your own acquisition interfaces with HALCON 11.0.x, you can re-generate them with HALCON 12.0.

Extension Packages

Please re-generate your own extension packages developed with HALCON 11.0.x.

No Longer Supported Operating Systems and Platform Versions

  • Since Windows XP is now officially discontinued by Microsoft, HALCON no longer supports Windows XP.
  • HALCON no longer supports Visual Studio 6.
  • HALCON no longer supports the Linux platform versions x86sse2-linux2.4-gcc40 and x64-linux2.4-gcc40.
  • HALCON no longer supports Mac OS X 10.7.

Legacy or No Longer Supported Features

Note that legacy operators may be discontinued in a future major release. See the reference manual entries of these operators for details on how to replace them.


Detailed Description of Changes in HALCON 12.0 (relative to HALCON 11.0.3)

Detailed release notes can be obtained for the following topics:

HDevelop

HDevelop Language

  • HDevelop now supports the new variable type 'vector'. Vector variables are containers that may contain multiple tuples, multiple iconic objects, or multiple vectors. Note that all elements of a vector variable must have the same type and dimension. The type of vector variables and expressions is determined statically in HDevelop like for all other variables and expressions.
    The HDevelop language has been extended with constructs for
    • the creation of vectors: {...},
    • read and write access to vector elements: .at(),
    • the assignment and comparison of two vectors: :=, ==, and !=,
    • the modification of vectors: .insert(), .remove(), and .clear(),
    • the concatenation of two vectors: .concat(), and
    • for querying the length of a vector: .length().
    Additionally, HDevelop has been extended with the new HDevelop operators HDevelop has been extended to support vector variables in the Variable View window, with tooltips, and with auto completion in the Program Editor. Furthermore, HDevelop procedures and the Procedure Interface dialog were extended to support vector variables as procedure parameters.
    HDevelop supports the export of vector variables to C, C++, C#, and Visual Basic .NET, and the language interfaces have been adapted accordingly.
    The HDevEngine/C++ and HDevEngine/.NET interfaces have been adapted to support vector variables.
    The new HDevelop example program
    • hdevelop/Control/vector_variables.hdev
    shows how to use vector variables in HDevelop.
    The new HDevelop example program
    • hdevelop/Control/align_measurements_multithreading.hdev
    demonstrates how to use vector variables as output for procedures that are executed in parallel.
    The new HDevEngine/C++ example program
    • hdevengine/cpp/source/use_vector_variables.cpp
    demonstrates the usage of the vector variables in HDevEngine. A suitable Visual Studio 2005 Project has been added in the directory hdevengine/cpp/vs2005/use_vector_variables and the solution vs2005/examples.sln has been extended accordingly.
    Furthermore, the new HDevEngine/.NET example project UseVectorVariables under hdevengine/c# demonstrates the use of vector variables in C#.
    Both examples use the new HDevelop program
    • hdevengine/hdevelop/use_vector_variables.hdev
    and the new HDevelop procedure
    • hdevengine/procedures/use_vector_variables.hdvp.
  • HDevelop now allows to execute several operators and procedures in parallel. For this, the HDevelop language was extended by new statements that control the parallel program execution.
    • par_start is a qualifier that is added to a program line in order to execute the procedure or operator call in a new sub thread in parallel to the current thread. It returns a thread handle.
    • par_join is a new operator that waits for specified sub threads in order to synchronize the continuation of the main thread with the sub threads.
    All active and recently stopped threads can be inspected with the help of the new Thread View. This view and the Call Stack are combined to the new Thread View / Call Stack window, which can now easily be accessed via a button in the main tool bar. The Thread View allows to select one thread for closer inspection and exclusive (e.g., single step) execution. In addition, via the Thread View single threads can be suspended and resumed. The Call Stack has been extended by a column that displays the current line number of the called procedures.
    As a default, HDevelop supports the execution of up to 20 sub-threads in parallel. This value can be changed in the Preferences dialog via the option: General Options / General Options / Maximum number of sub threads.
    HDevelop supports the export of parallelization instructions to C, C++, C#, and Visual Basic .NET.
    The HDevEngine also supports the starting of sub threads from within an HDevelop script.
    The new HDevelop example programs
    • hdevelop/Control/par_start.hdev,
    • hdevelop/Control/align_measurements_multithreading.hdev,
    • hdevelop/System/Multithreading/message_queue_producer_consumer.hdev, and
    • hdevelop/System/Multithreading/message_queue_producer_consumer_abort.hdev
    show how to use the new HDevelop statements par_start and par_join to control the parallel execution of operators and procedures in HDevelop.
    The example program par_start.hdev uses the new image
    • barcode/mixed/barcodes_datacodes_mixed_01.png.
    A detailed description on how to develop multithreaded HDevelop programs with the help of the new statements can be found in the HDevelop User's Guide, which was extended accordingly.

Functionality

  • HDevelop and the HDevEngine have been extended with a just-in-time (JIT) compiler that - depending on the code structure - may significantly accelerate the runtime of HDevelop procedures. Especially procedures with loops and many calculations that are implemented in HDevelop language will benefit from that. However, there are some statements that are not supported by the JIT compiler. Procedures using these statements are executed as before without compilation. In HDevelop, also procedures with breakpoints and stop statements are not executed JIT-compiled. Details can be found in the documentation within the HDevelop User's Guide. It is possible to enable and disable the use of the JIT compiler globally - in HDevelop via the Preferences dialog and in HDevEngine via the method HDevEngine::SetEngineAttributes.
    The new HDevelop example program
    • hdevelop/Runtime/test_jit_speedup.hdev
    demonstrates the usage and the effect of the just-in-time compiler in HDevelop.
    The new HDevEngine/C++ example program
    • hdevengine/cpp/source/use_jit_compiler.cpp
    demonstrates the usage of the just-in-time compiler in HDevEngine. A suitable Visual Studio 2005 Project was added in the directory hdevengine/cpp/vs2005/use_jit_compiler, and the solution vs2005/examples.sln was extended accordingly.
    Furthermore, the new HDevEngine/.NET example project UseJitCompiler under hdevengine/c# demonstrates the use of this functionality in C#.
  • HALCON has been extended with a Start dialog which provides the following functions:
    • It enables the user to
      • start with a new program,
      • open an existing program,
      • open the Browse Examples dialog and start with one of the example programs,
      • open a recovered program, and
      • open one of the recently used programs.
    • It helps the user to get started by providing examples of how to work with HALCON and HDevelop.
    • It provides an entry point to the documentation to easily get more information about HALCON and HDevelop.
    • It informs the user
      • with news about MVTec and its products and
      • with a Tip of the Day.
  • HDevelop now features a new inspection window to graphically visualize functions and numeric tuples. For bona fide functions (semantic type function_1d), this is the default inspection mode when double-clicking on a variable in the Variable View window.
    Tuples of numbers can be plotted by selecting "Plot as Function" from the context menu. Multiple tuples and functions can be inspected simultaneously in a single inspection window. A pair of tuples of matching length can be plotted as an x/y scatter plot.
    Finally, it is possible to generate HDevelop code for plotting functions and tuples in a HALCON window.
  • In HDevelop, the runtime of assignment operations and the passing of tuple parameters to procedures scaled with the size of the input tuple. For large tuples, these operations could use significant amount of time. Now, only a reference to the tuple and not a copy is passed to the result of an assignment operation or as input to a procedure. This reduces the runtime of operations with large tuples significantly.
  • Starting with HALCON 12.0, the HDevelop demo version is no longer provided. As a side-effect of this change HDevelop programs are now always saved without a checksum, and the corresponding option in the HDevelop preferences has been removed.
  • dev_open_tool has now been extended to throw an error if wrong values for the parameter GenParamValues are used for pages in the Preferences dialog and the Program Line View.
  • For complex and vector field image types, the full gray value information is now displayed, consisting of two values per channel. Previously, pixel information was not supported for vector fields and for complex images only the absolute value of each channel was shown.
  • In previous versions, HDevelop used any occurrence of a variable to determine its type, regardless whether the value of the variable was set by this expression or not. If different occurrences resulted in conflicting variable types, the variable type was chosen according to the first occurrence and all program lines that indicated a different type became invalid.
    However, this behavior leads to some undesired effects:
    • Not all program lines that were involved in a type conflict were marked as invalid.
    • Which program lines were marked as invalid depended on the order in which they were edited or loaded.
    • Variables that were never initialized were only noticed during the program execution.
    Now, only those occurrences of a variable are used to determine its type, in which the value of the variable is set. All program lines that use a variable with either a completely undefined or a conflicting type become invalid. If, however, a variable with a valid type is used in the wrong context (i.e., either a control variable that is used as iconic input parameter or an iconic variable that is used as control input parameter) only that specific program line becomes invalid.
    As a side effect, the type of variables that were never initialized cannot be determined, and thus, this error becomes obvious before executing a program.
    In addition, incomplete or syntactically incorrect lines will no longer be used to create a variable and determine its type.
  • HDevelop now supports the handling of different preferences files. Besides the use of the default preferences file that is stored in the user's application data folder (e.g., under Windows in C:\Users\<UserName>\AppData\Roaming\MVTec\HDevelop.ini), the user can now use a different file via the new HDevelop command line option -use_preferences <file>. This file is used instead of the default file for reading and writing of all HDevelop preferences within the current HDevelop session. If this file is unavailable, it is created and HDevelop is started with all preferences set to the defaults values.
    In addition, the new command line option -load_preferences <file> is available for loading the preferences exclusively from one specific file, e.g., for starting always with a defined environment. If this option is passed, only those preferences that are set within the passed file are adopted - all other preferences are set to the default values. The passed file is not modified, instead of that the preferences are written to the default file or to the file that is passed with -use_preferences.
    Finally, the old option -preferences was renamed into -add_preferences <file> to clarify that the preferences that are defined in this file are loaded after the default preferences file (or the file passed after -use_preferences). Only the preferences that are defined in this file will be adopted. The old option -preferences is deprecated but will still be supported for compatibility reasons.
  • HDevelop did not save all persistent settings into the file HDevelop.ini. Under Windows, some settings, e.g., the paths of the recently opened files, were written into the registry. To make it possible to copy the persistent settings from one system to another, now all persistent settings are written to the file HDevelop.ini.
  • The GUI of HDevelop has been improved in several ways:
    • The main tool bar of HDevelop has been cleaned up, i.e., some tool buttons have been removed.
    • Under Windows, the default font of the Program Editor is now 'consolas'.
    • The Program Editor provides the new color scheme 'Dark'.
    • The current program line is highlighted in the Program Editor.
    • Lines with type conflicts are now marked in a different color.
    • The background in the workspace has been darkened.
    • HDevelop now uses a Windows 8 style to draw its sub-windows under Windows. The old style can be selected by specifying one of the --style options on the command line.
    • New icons are used for the HDevelop executable, the Help window, and the HDevelop program and procedure files.
  • The HDevelop help window has been updated with the following changes:
    • The page display now supports actual zooming instead of simply changing the font size (note that the font size can still be changed in the HDevelop preferences). A new option is available to determine whether the selected font should override the default font that is specified in the documentation pages.
    • The syntax selection in the operator reference now works in the same way as in a browser via links within in the page. The syntax selection box in the toolbar has been removed.
    • The current location is now displayed in the tool bar, and link targets are displayed in the status bar. Links can be copied or opened in an external browser via the context menu
    • External links (e.g., to MVTec website) will be redirected to an external web browser.
    • Procedure documentation pages now show the full procedure path.
    • Page layout / rendering may differ slightly from earlier versions.
  • The keyboard navigation in the Help window has been improved. After searching for help on the Operators, Index, or Search tabs, the results can now be selected using the Up and Down arrow keys, while the cursor and focus remain in the search box for further editing. The content for selected items will be displayed immediately. On the Index tab, it is also possible to navigate subtopics using Ctrl-Up and Ctrl-Down.
  • In HDevelop's OCR Training File Browser it took very long to load and act on training files with many samples. Because of this, the sorting was restricted to files with fewer than 1000 samples. If more than 1000 samples existed, sorting was impossible. This has been changed. Now the loading and handling is much faster and the restrictions for the sorting were removed.
  • The plot area used in the Histogram and Line Profile dialogs has been improved. These improvements also apply to the new Function Inspect dialog.
    Navigation and zooming:
    • The plot area can be moved by clicking and dragging it.
    • Selection lines will only move when dragged from their current position.
    • The mouse wheel on the plot area zooms both x- and y-axis by default.
    • The mouse wheel on an axis now zooms instead of scrolling.
    • The displayed range can be modified by dragging one of the min/max ticks on an axis.
    • Keyboard shortcuts have been added for navigation (shift + arrow keys), zooming (+/-), and reset (r).
    Other changes:
    • The main plot area and both axes can be configured via the context menu.
    • Logarithmic scaling is also supported for the x-axis.
    • The plot area features an optional background grid.
    • Function values are displayed in the plot area, not as a tooltip.
    • The axis label area uses the same background color as the plot area.
  • The range handling for Histogram and Line Profile dialogs has been improved:
    The "fixed" mode has been renamed to "user-defined" and will prevent any automatic scale adaption, even when the data changes drastically.
    The "adaptive" mode now chooses more useful ranges that remain stable against small variations in the data:
    • int1, byte, direction, and cyclic images automatically use their maximum data range (e.g., byte images use the range 0 to 255).
    • int2, uint2, int4, and int8 images use limits that are based on the actual data range but rounded to powers of two.
    • int2 and uint2 images can be forced to an explicit bit range using the set_system() parameter "int2_bits".
    • real images and values in the feature histogram use limits that are based on the actual data range, but rounded to values that are round in base 10 (e.g., 0.1, 0.2, 0.5 or 100, 200, 500).
  • The Histogram and Line Profile tools have been streamlined:
    • Many common operations can now be performed by direct interaction with the plot area and its context menus. In addition to configuring the plot itself, this also offers control of output to Graphics window, code generation, and feature selection.
    • GUI elements that are no longer required have been removed from the main GUI. This includes plot configuration buttons, numeric entry of limits, and selection of range adaption mode.
    • All other GUI elements can now be hidden.
    Further changes include:
    • Images with 3 channels are now displayed in RGB mode by default.
    • The x-axis can now be switched into logarithmic mode. Note, however, that histogram quantization is still performed using equal-sized linear bins.
    • The visible plot area can now be moved freely without restriction to the current data range (with the exception that negative values are not permitted for logarithmic scales).
  • In the full text editor, the block end statements are now inserted automatically after the control statement has been inserted. For example, after inserting the 'for' statement, the 'endfor' statement is now inserted automatically.
  • The auto completion in HDevelop's full text editor was improved in the following ways:
    • The auto completion now suggests values after starting a new parameter in a new line after the line continue sign ('\').
    • At the beginning of a program line, variables are now suggested, too.
    • Within a parameter area after entering a part of a function name, not only those functions that start with the string as prefix are suggested, but also all functions that contain the substring somewhere inside their name.
    • Pressing Tab at the end of an assignment operation now opens the suggestion list also in cases where the assignment is already valid but there exist additional possible completions.
    • If a function within an expression has more than one parameter, pressing Tab after the first parameter now enters a comma instead of the closing parenthesis.
  • The behavior of HDevelop when canceling drawing operators has been changed slightly. Now, pressing F9 terminates the drawing operators identically to the right mouse button. In addition, on Windows and X11 systems, pressing the Esc key cancels the drawing operation without returning any results.
    This behavior is used in the ROI dialog of the Graphics Window, in the Line Profile tool, in the Matching-, Measure-, and OCR-Assistant, and for the following drawing operators:
  • The procedures are now integrated into the submenus of the Operators menu. They are clearly indicated as procedures by the respective procedure icons.
  • If the export mode 'Use HALCON Windows' was selected, HDevelop exported stop operator calls to C# and Visual Basic in the form of calls to the empty function HDevelopStop(). Because there was no real usage for this functionality and for reasons of consistency with other exports, now, HDevelop no longer exports stop operator calls to C# and Visual Basic in export mode 'Use HALCON Windows'.

Legacy and Obsolete Operations

  • The export to the HALCON/C++ (HALCON-10) interface is now legacy. The export will remain available for now, but is marked as legacy, which means that it could be discontinued in the next major version. Note that new features of HDevelop like parallel execution and vector variables are not supported by the export to HALCON/C++ (HALCON-10).
  • Saving HDevelop programs and procedures to the old HDevelop 5.0 - 9.0 file format (file extensions .dev and .dvp) is now legacy. While the option will remain available for now, all entries that offer the saving or loading of programs or procedures into these file formats are marked as legacy. That means that the saving into these file formats could be discontinued in the next major release. Note that new features of HDevelop like parallel execution and vector variables are not supported by these file formats.

Bug Fixes

  • HDevelop crashed if two case statements with the same label were entered in one switch block via the full text editor. This problem has been fixed.
  • When catching a user defined exception that was thrown by the throw operator, the user data of the exception returned by dev_get_exception_data could have been wrong. In some cases HDevelop even crashed. This problem has been fixed.
  • HDevelop's copy and paste operation inserted unexpected text when the full text editor was used. The copy of an empty line was inserted as a new comment line, i.e., a line with a '*' at its beginning. The copy of read_image () was inserted as read_image (, ). These problems have been fixed.
  • If two instances of HDevelop were executed in parallel and if in both instances a program was running that wrote to the preferences file HDevelop.ini, the preferences file could be destroyed so that all preferences were lost. This problem has been fixed.
  • In the Operator Window, it can be chosen to automatically insert the end-statements for blocks like for, while, repeat, if, ifelse, try, and switch. This only works if new blocks are inserted but not if an existing block statement is edited. Nevertheless, the respective check box in the Operator Window was always shown, even if it did not work. This problem has been fixed. Now, the check box is only shown if it has an effect.
  • After starting HDevelop, the auto save functionality was always deactivated, even if the corresponding checkbox (Edit→Preferences...→General Options→Auto Save) was checked. This problem has been fixed. Note that this problem has already been fixed in HALCON 11.0.3.1.
  • The status message of HDevelop sometimes showed no memory usage although the option 'Show memory usage' was enabled. This problem has been fixed.
  • The background color in the user-defined color scheme could not be changed. This problem has been fixed.
  • After inserting a program line that consists of several text lines connected via backslashes ('\') at the end of the program, the program counter and the text insert marker could have disappeared. This problem has been fixed.
  • On some Linux systems using the Window manager Xfce, the Program Editor could lose the focus when the auto completion window was opened. This problem has been fixed.
  • In the OCR Training File Browser, copying samples from one training file to another training file did not work correctly. A training sample consists of an image and a region. The image contains the gray values and the region contains the area of the character. When samples were copied from one training file to a different training file, either via drag and drop or via copy and paste, the region data of the character was lost. After this action, the region of the copied image was the full domain, so the image had lost the region information of the character. This problem has been fixed.
  • The Generate Sample Variations dialog of the OCR Training File Browser created some training samples twice. This problem has been fixed.
  • The Visualize Object Model 3D window froze if several empty and non-empty models were displayed together. This problem has been fixed.
  • The HDevelop Help Window sometimes displayed unreadable characters in the title of an operator help file. This problem has been fixed.
  • The magnify mode of HDevelop's Graphics window did not work. If that mode was selected via the tool bar of the Graphics window and the left mouse button was pressed, only a black square was displayed instead of an overlay with the magnified part. This problem has been fixed. Note that this problem has already been fixed in HALCON 11.0.3.2.
  • The zoom rectangle in the HDevelop Graphics Window was not always visible when dragging. This problem has been fixed.
  • The overlay for the Graphics window, which was provided by the Gray Histogram tool for a selected threshold, was not properly cleared for RGB images when switching from single channel mode to RGB mode in the Gray Histogram tool. This problem has been fixed.
  • Some tools that allow to draw an ROI in HDevelop added empty components if ROI drawing was immediately canceled using the right mouse button before actually drawing an ROI. This problem has been fixed.
  • The selection of variables in the Variable View window may have changed if new variables were added or if existing ones were deleted. This problem has been fixed.
  • The Line Profile tool of HDevelop crashed when a Measure Assistant that was connected with the tool was closed via File→Exit and afterwards the input source of the Line Profile tool was changed to Window. This problem has been fixed.
  • The Line Profile tool hid behind the Measure Assistant and the Graphics window, when it was opened via the Measure Assistant. This problem has been fixed.
  • HDevelop's profiler wrongly counted calls to local, external, or library procedures twice. As a consequence, the profiler also calculated an average execution time for procedures that is only half the size of the actual average execution time. This problem has been fixed.
  • The Image Acquisition Assistant might have crashed when picking the VideoForLinux2 Interface on Linux 32-bit platforms. This problem has been fixed.
  • The teaching process of the OCR assistant in HDevelop did not work correctly. The segmented characters stored in a training file during the teaching process missed their region information. Only the image data was written to the training file, but not the image and the corresponding region. This problem has been fixed. Now the image data and the region information of the character is stored in the training file.
  • The code generation of the OCR Assistant generated wrong code in the case when the text that was found contained more than one line. In this case, the call of clear_text_result was displaced. As a result, the error code 8341 ("Invalid text result") was returned. This problem has been fixed.
  • HDevelop's Matching Assistant used a wrong parameter value for Metric when loading a DXF file for the deformable matching. This problem has been fixed. Now 'ignore_color_polarity' instead of 'use_polarity' is used for the parameter Metric if no image is used.
  • The layout of the Matching Assistant was not intuitive when descriptor-based or deformable matching was selected. The calibration widgets were sometimes visible and sometimes they were invisible. Furthermore, for deformable matching, the edit control with the model name became smaller when 'Using Image' had been checked. These problems have been fixed. Now. the calibration widgets are always visible and the edit control with the model name is resized as expected.
  • The Matching Assistant of HDevelop did not scale the DXF model when the deformable matching was selected. The code generation also did not scale the model. These problems have been fixed.
  • The Matching Assistant may have shown an info message that some test images could not be loaded during the loading of settings. This happened when test images were used that have been acquired with the Image Acquisition Assistant. These images have been inserted with names like Image01, Image02. These images cannot be loaded together with the settings because they have not been stored on disk. This problem has been fixed.
  • In the Calibration Assistant the 'fill' mode for displaying the plate region did not work. This problem has been fixed.
  • HDevelop crashed when in the Operator window a global variable was declared that used the name of a procedure parameter as variable name.
    This problem has been fixed.
  • Using the Tab key or Ctrl+I to fix the indent of a line changed the cursor position if the cursor was inside the leading whitespaces of that line. This problem has been fixed.
  • HDevelop crashed when the position of a procedure's parameter was changed in the procedure interface dialog, this change was applied, and the parameter's position was changed again without reselecting the parameter. This problem has been fixed.
  • If an HDevelop program or procedure contained two or more identical import statements and if one of these import statements was deleted and if the last line of the edited procedure was a procedure call that was resolved solely via the import statements, then this line became invalid (i.e., unresolved). This problem has been fixed.
  • HDevelop in very rare cases shows a warning while copying standard procedures between two HDevelop instances. This problem has been fixed.
  • HDevelop still listed libraries and their procedures, even when the associated path or library had been deleted via the Edit/Preferences/Directories Delete-Button. The libraries and the procedures were still listed in the Preferences Dialog under Procedures/Manage Procedure Libraries and under Procedures/External Procedures. This problem has been fixed.
  • HDevelop could not resolve library procedures if they were imported via the import statement and if the parameter of the import statement was the name of the directory that contained the procedure library instead of the library name itself. This was contrary to the documentation of the import statement. This problem has been fixed.
  • The Edit Procedure Interface dialog did not work correctly when renaming a parameter in very rare cases. If a program line contained a parameter more than once, for example in an expression, not all parameters were renamed correctly. This may have led to invalid program lines. Note that this problem only occurred if the parameter had the form xxx1[2], where 'xxx' stands for an arbitrary sequence of characters. This problem has been fixed.
  • Pressing F1 in the Procedure Interface dialog and in the Operator window was not consistent. This problem has been fixed. Now, F1 behaves consistently as follows:
    • If no operator or procedure is selected, it opens the description of the Operator window in the HDevelop Users' Guide.
    • If an operator or procedure is selected, it opens the reference of the selected operator/procedure.
    Note that Shift-F1 always opens the HDevelop User's Guide.
  • HDevelop crashed when an invalid parameter name was defined in the Edit Procedure Interface dialog and then, the Help button was pressed. This problem has been fixed.
  • In HDevelop it was possible to create a valid and executable procedure call of main. However, calling main recursively could crash or freeze HDevelop. Therefore, 'main ()' is no longer a valid statement.
  • HDevelop crashed if a new procedure was created from the selection and in the selected program lines a variable, which would have become a procedure parameter, was used as a control variable as well as an iconic variable. This problem has been fixed.
  • If the interface of a local procedure is edited but not yet applied, and the program is closed (e.g., because a different program is loaded) while the interface dialog is still open, HDevelop offers to keep a copy of that procedure. If afterwards the procedure interface dialog was closed without applying the interface changes, HDevelop crashed. This problem has been fixed.
  • HDevelop exported single external procedures via the command line with the option -convert incorrectly if the exported procedure contained references to other external procedures. In this case, the exported code contained only the declarations of the referenced procedures but not their implementations. This problem has been fixed. Now, the above described behavior only applies if the command line export option -no_export_of_referred_procs is active, as it is the case when exporting HDevelop programs or procedure libraries.
  • If 'Export local procedures body' was unchecked in HDevelop's export dialog, HDevelop unnecessarily exported local procedures as procedures with an empty procedure body to C# and VB.NET. Now in this case local procedures are not exported at all, analogously to the export behavior regarding external procedures if 'Export external procedures body' is unchecked.
  • HDevelop exported single external procedures via the command line option -convert incorrectly in the following case:
    • The external procedure contained references, i.e. calls, to other external procedures.
    • The directory containing the referenced procedures was contained in the list of external procedure paths.
    • The command line call contained the absolute path to the external procedure to be exported.
    • The paths used in (2.) and (3.) were equal (case sensitivity).
    In these cases, the exported code contained only comments instead of calls to the referenced procedures. This problem has been fixed.
  • The Export dialog warned twice about overwriting an existing file. This happened if an existing file was selected via the browse button. Then, a warning dialog was shown. After pressing the export button, the warning dialog appeared again. This problem has been fixed.
  • HDevelop exported operator and procedure calls that used the same global variable as input and output incorrectly to C, C#, and Visual Basic. The regarding call did not modify the value of the global variable, which was an incorrect behavior. This problem has been fixed.
  • HDevelop code exported to .NET created a memory leak if global iconic variables were used as output parameters of operator or procedure calls. This problem has been fixed.
  • HDevelop in rare cases exported programs incorrectly to C# if they contained some handling of HDevelop Graphics windows. This happened if a Graphics window handle was referenced only via dev_get_window and if the option 'Window export' was set to 'Use HALCON Windows'. This problem has been fixed.
  • When opening a procedure for editing failed, HDevelop solely displayed a message that the procedure could not be loaded. This problem has been fixed. Now, HDevelop additionally displays the same information that is shown in the External Procedures tab or when loading a program fails.
  • Creating a local procedure from a selection of code lines caused a problem when there was an import statement amongst the selected code lines and a procedure call that was resolved solely via that import statement. In this case, the procedure call in the newly created procedure remained unresolved. This problem has been fixed.
  • HDevelop crashed when trying to export continue or break statements if the program code between the regarding continue (or break) statement and its first valid enclosing loop structure contained an invalid loop structure, conditional statement, or the like. This problem has been fixed.
  • HDevelop exported for loops inside case statements incorrectly to HALCON/C++. This problem has been fixed.
  • There was a problem with entering East Asian characters into the full text editor. During or after entering East Asian characters like Hiragana, Katakana, or Hanja via a phonetic or shape based input method the text cursor might have jumped to the beginning of the next line. This could not only happen after the conversion into the East Asian characters but also in the middle of entering a character by a key sequence. If this happened, the complete program line could become corrupted. This problem has been fixed.

Examples

New Example Programs

HALCON has been extended with more than 70 new HDevelop example programs:

  • The new HDevelop example programs
    • hdevelop/System/IO-Devices/advantech_digital_read.hdev and
    • hdevelop/System/IO-Devices/advantech_digital_write.hdev
    show how to use the new Advantech I/O interface.
  • The new HDevelop example programs
    • hdevelop/System/IO-Devices/nidaqmx_counter.hdev,
    • hdevelop/System/IO-Devices/nidaqmx_digital_read.hdev, and
    • hdevelop/System/IO-Devices/nidaqmx_digital_write.hdev
    show the simple use of the new National Instruments NI-DAQmx I/O interface.
  • The new HDevelop example programs
    • hdevelop/System/IO-Devices/contec_digital_read.hdev and
    • hdevelop/System/IO-Devices/contec_digital_write.hdev
    show how to use the new Contec I/O interface.
  • The new HDevelop example programs
    • hdevelop/System/IO-Devices/interface_digital_read.hdev and
    • hdevelop/System/IO-Devices/interface_digital_write.hdev
    show the ease of use of the new I/O interface for accessing the Interface Digital I/O boards.
  • The new HDevelop example programs
    • hdevelop/System/IO-Devices/opc_ua_browse_variables.hdev,
    • hdevelop/System/IO-Devices/opc_ua_channel_access.hdev,
    • hdevelop/System/IO-Devices/opc_ua_discovery.hdev,
    • hdevelop/System/IO-Devices/opc_ua_parameters.hdev, and
    • hdevelop/System/IO-Devices/opc_ua_security.hdev
    show how to use the new OPC UA I/O interface.
  • The new HDevelop example programs
    • hdevelop/System/IO-Devices/opc_classic_browse_variables.hdev,
    • hdevelop/System/IO-Devices/opc_classic_channel_access.hdev, and
    • hdevelop/System/IO-Devices/opc_classic_parameters.hdev
    show how to use the new OPC Classic I/O interface.
  • The new HDevelop example program
    • hdevelop/Control/vector_variables.hdev
    shows how to use vector variables in HDevelop and the new HDevelop example program
    • hdevelop/Control/align_measurements_multithreading.hdev
    demonstrates how to use vector variables as output for procedures that are executed in parallel.
  • The new HDevelop example programs
    • hdevelop/Control/par_start.hdev,
    • hdevelop/Control/align_measurements_multithreading.hdev,
    • hdevelop/System/Multithreading/message_queue_producer_consumer.hdev, and
    • hdevelop/System/Multithreading/message_queue_producer_consumer_abort.hdev
    show how to use the new HDevelop statements par_start and par_join to control the parallel execution of operators and procedures in HDevelop. The example program par_start.hdev uses the new image
    • barcode/mixed/barcodes_datacodes_mixed_01.png.
  • The new HDevelop example program
    • hdevelop/Runtime/test_jit_speedup.hdev
    demonstrates the usage and the effect of the just-in-time (JIT) compiler in HDevelop.
  • The new HDevelop example programs
    • hdevelop/Graphics/Object/create_drawing_object_circle_sector.hdev and
    • hdevelop/Graphics/Object/create_drawing_object_rectangle2.hdev
    show how to use the event-based interaction with drawing objects.
    The new Visual Studio projects for the C# example programs
    • c#/DrawingObjects/vs2005/DrawingObjects/ and
    • c#/DrawingObjectsWPF/vs2010/DrawingObjectsWPF/
    show how to use the event-based interaction with drawing objects in HALCON's C# interface. The project DrawingObjects shows how to use drawing objects within a WinForms dialog, whereas the project DrawingObjectsWPF shows how to use drawing objects within a WPF Form and how to integrate exported C#-code into your application.
  • The new HDevelop example program
    • hdevelop/Calibration/Multi-View/calibrate_cameras_monocular.hdev
    demonstrates the calibration of a single camera with the new easy to use calibration plate. It uses the new images
    • calib/calib_single_camera_[01-07].png.
  • The HDevelop example programs
    • hdevelop/3D-Reconstruction/Multi-View/reconstruct_points_stereo.hdev,
    • solution_guide/3d_vision/3d_information_for_selected_points.hdev, and
    • solution_guide/3d_vision/two_camera_calibration.hdev,
    which are described in the Solution Guide on 3D Vision, have been adapted to not use find_caltab and find_marks_and_pose anymore. These operators do not work for the new calibration plates with hexagonally arranged marks. Now, the general processes demonstrated within the documentation and the corresponding examples can be applied for any of the standard HALCON calibration plates.
  • The new HDevelop example programs
    • hdevelop/Calibration/Hand-Eye/calibrate_hand_eye_scara_moving_cam.hdev and
    • hdevelop/Calibration/Hand-Eye/calibrate_hand_eye_scara_stationary_cam.hdev
    show how to calibrate a SCARA hand-eye system. The example programs use the new images
    • 3d_machine_vision/handeye/scara_moving_cam_setup_01_[01-10].png and
    • 3d_machine_vision/handeye/scara_stationary_cam_setup_01_[01-10].png.
    The new HDevelop example program
    • hdevelop/Calibration/Hand-Eye/calibrate_hand_eye_scara_stationary_cam_approx.hdev
    shows how to approximately calibrate a SCARA handy-eye system without using a calibration plate. The example program uses the new image
    • 3d_machine_vision/handeye/scara_stationary_cam_setup_01_calib_approx_01.png.
    The new HDevelop example program
    • hdevelop/Calibration/Hand-Eye/pick_and_place_scara_stationary_cam.hdev
    shows how to use the (exact or approximate) calibration results provided by the HDevelop example programs calibrate_hand_eye_scara_stationary_cam.hdev and calibrate_hand_eye_scara_stationary_cam_approx.hdev for a pick-and-place application. The example program uses the new images
    • 3d_machine_vision/handeye/scara_stationary_cam_setup_01_metal_parts_[01-06].png.
  • The new HDevelop example programs
    • hdevelop/Calibration/Multi-View/calibrate_cameras_telecentric_tilt.hdev and
    • hdevelop/Calibration/Multi-View/calibrate_cameras_telecentric_tilt_stereo.hdev
    show how to calibrate cameras using the new camera model for telecentric tilt lenses.
    The example program calibrate_cameras_telecentric_tilt.hdev calibrates a single camera and uses the new images
    • caliper/caliper_with_tilt.png,
    • caliper/caliper_no_tilt.png,
    • calib/calib_telecentric_tilt_[01-17].png, and
    • caliper/caliper_measurement_plane.png.
    The example program calibrate_cameras_telecentric_tilt_stereo.hdev calibrates a stereo camera setup and uses the new images
    • stereo/telecentric_tilt/cam_0_calib_plate_[01-08].png,
    • stereo/telecentric_tilt/cam_1_calib_plate_[01-08].png,
    • stereo/telecentric_tilt/cam_0_cartridge.png,
    • stereo/telecentric_tilt/cam_1_cartridge.png,
    • stereo/telecentric_tilt/cam_0_tissue.png, and
    • stereo/telecentric_tilt/cam_1_tissue.png.
  • The new HDevelop example program
    • hdevelop/Graphics/Scene-3D/display_scene_3d.hdev
    shows how to use the new interface for the visualization of 3D object models.
    The HDevelop procedure library
    • procedures/general/visualize_object_model_3d.hdpl
    has been adapted to use 3D scenes for the visualization of 3D object models.
  • The new HDevelop example program
    • hdevelop/3D-Object-Model/Transformations/simplify_object_model_3d.hdev
    shows how to use the new operator simplify_object_model_3d that simplifies a triangulated 3D object model by removing less important points.
  • The new HDevelop example program
    • hdevelop/Applications/Measuring-2D/measure_stamping_part.hdev
    demonstrates the use of the new metrology operators and the alignment of a metrology model with, e.g., shape-based matching.
  • The new HDevelop example program
    • hdevelop/OCR/Neural-Nets/regularized_ocr_mlp.hdev
    shows how to use the new mechanism to automatically determine the regularization parameters for the MLP-based OCR classifier.
  • The new HDevelop example program
    • hdevelop/Classification/Neural-Nets/mlp_regularization.hdev
    shows the effect of the new mechanism to regularize the weights of the MLP-based classification to enforce smoother transitions of the confidences between classes and to prevent overfitting.
  • The new HDevelop example program
    • hdevelop/Classification/Neural-Nets/set_rejection_params_class_mlp.hdev
    shows how to automatically generate a rejection class for an MLP classifier with the new operator set_rejection_params_class_mlp.
  • The new HDevelop example program
    • hdevelop/OCR/Segmentation/find_text.hdev
    shows how to use the new automatic text reader. It uses the new image
    • ocr/medication_package_02_right.png.
    The new HDevelop example program
    • hdevelop/OCR/Segmentation/find_expiration_date.hdev
    shows an application of the new automatic text reader. It uses the new images
    • ocr/medication_package_[01-03]_front.png,
    • ocr/medication_package_[01-03]_left.png,
    • ocr/medication_package_[01-03]_back.png,
    • ocr/medication_package_[01-03]_right.png,
    • ocr/medication_package_[01-03]_bottom.png, and
    • ocr/medication_package_[01-03]_top.png.
  • The new HDevelop example program
    • hdevelop/Identification/Bar-Code/barcode_param_meas_param_estimation.hdev
    demonstrates the usage and use cases for the new bar code parameter 'meas_param_estimation'. It uses the new images
    • barcode/ean13/ean13_meas_param_estimation_[01-10].png.
  • The new HDevelop example program
    • hdevelop/Identification/Bar-Code/barcode_param_contrast_min.hdev
    shows how to reject bar code candidate regions depending on their contrast. It uses the new image
    • barcode/25interleaved/25interleaved_zeiss1.png.
  • The new HDevelop example program
    • hdevelop/Identification/Bar-Code/barcode_param_width_height.hdev
    shows how to use the parameters 'barcode_width_min' and 'barcode_height_min' to specify the maximal dimensions of a bar code.
  • The new HDevelop example program
    • hdevelop/Identification/Bar-Code/code32.hdev
    shows how to read a bar code of type 'Code 32' by using the bar code reader for the code type 'Code 39' in combination with the new external procedure
    • general/convert_decoded_string_code39_to_code32.hdvp.
    The example program uses the new image
    • barcode/code32/code32_01.png.
  • The new HDevelop example program
    • hdevelop/Identification/Bar-Code/barcode_param_majority_voting.hdev
    shows how to use the new parameter 'majority_voting' of the bar code reader. It uses the new image
    • barcode/ean13.png.
  • The new HDevelop example program
    • hdevelop/Identification/Data-Code/ecc200_direct_mark_quality_semi_t10.hdev
    shows how to assess the direct part mark quality of an Data Matrix ECC 200 code, compliant with the SEMI T10-0701 standard.
  • The new HDevelop example program
    • hdevelop/Identification/Data-Code/ecc200_direct_mark_quality_semi_t10.hdev
    and the extended HDevelop example program
    • hdevelop/Identification/Data-Code/ecc200_print_quality.hdev
    use the new image
    • datacode/ecc200/ecc200_print_quality_01.png,
    which corresponds to the requirements of the ISO/IEC 15415 standard. The modules of the data code measure 10 pixels in width and height.
  • The new HDevelop example program
    • hdevelop/3D-Matching/Surface-Based/find_surface_model_noisy_data.hdev
    shows how surface-based matching can be used to find objects even in noisy data.
  • The new HDevelop example program
    • hdevelop/3D-Matching/Deformable-Surface-Based/find_deformable_surface_model.hdev
    shows how to use the deformable surface-based 3D matching.
    It uses the new 3D object models
    • silicone_baking_mold/silicone_baking_mold_3d_model.om3 and
    • silicone_baking_mold/silicone_baking_mold_3d_scene_[01-07].om3.
  • The new HDevelop example program
    • hdevelop/3D-Reconstruction/Sheet-Of-Light/calibrate_sheet_of_light_3d_calib_object.hdev
    shows how to use the new operator calibrate_sheet_of_light to calibrate a sheet-of-light model with a 3D calibration object. It uses the new image
    • sheet_of_light/calib_object_disparity.tif.
  • The new HDevelop example program
    • hdevelop/Applications/Surface-Inspection/check_for_holes_sheet_of_light.hdev
    shows how to detect additional, missing, or incorrectly placed holes as well as holes that have a wrong diameter in 3D objects.
    The example program uses the new images
    • sheet_of_light/injection_mould_[01-06]_disparity.tif
  • The HDevelop example program
    • hdevelop/Applications/Surface-Inspection/compare_surface_sheet_of_light.hdev
    has been adapted to show how the new generic parameter 'signed_distances' of distance_object_model_3d is used to compute signed distances between 3D object models.
  • The new HDevelop example program
    • hdevelop/Filters/Scene-Flow/scene_flow_globe.hdev
    shows how to use the new operators to calculate the scene flow. It uses the new example images
    • stereo/globe/globe_l_[01-05].png and
    • stereo/globe/globe_r_[01-05].png.
  • The new HDevelop example program
    • hdevelop/XLD/Features/test_closed_xld.hdev
    shows how to use the new operator test_closed_xld that tests whether a contour is closed or not.
  • The new HDevelop example program
    • hdevelop/Transformations/2D-Transformations/point_line_to_hom_mat2d.hdev
    shows how the new operator point_line_to_hom_mat2d can be used for alignment purposes in an OCV application.
  • The new HDevelop example program
    • hdevelop/Filters/Smoothing/compare_gauss_filters.hdev
    compares the properties of the new operatorgauss_filter and the operators derivate_gauss, binomial_filter, and smooth_image.
  • The new HDevelop example program
    • hdevelop/Filters/FFT/phase_correlation_fft.hdev
    shows how to use the new operator phase_correlation_fft to compute the translation between two images.
  • The new HDevelop example programs
    • hdevelop/Segmentation/Threshold/local_threshold.hdev and
    • hdevelop/Segmentation/Threshold/binary_threshold.hdev
    show how to use the new operatorsbinary_threshold and local_threshold.
  • The new HDevelop example programs
    • hdevelop/Applications/Measuring-2D/inspect_frame_width.hdev and
    • hdevelop/Tools/Geometry/apply_distance_transform.hdev
    show how to use the new functionality to calculate the pointwise distance between contours. They use the new images
    • plastic_parts/phone_camera_frame_01.png and
    • plastic_parts/phone_camera_frame_02.png.
  • The new HDevelop example programs
    • hdevelop/3D-Reconstruction/Binocular-Stereo/binocular_disparity_ms.hdev and
    • hdevelop/3D-Reconstruction/Binocular-Stereo/binocular_distance_ms.hdev
    show how to use the new operators for binocular stereo binocular_disparity_ms and binocular_distance_ms that solve the stereo correspondence using multi-scanline optimization.
  • The new HDevelop example program
    • hdevelop/3D-Reconstruction/Binocular-Stereo/binocular_disparity_comparison.hdev
    compares the different approaches for stereo reconstruction with regard to accuracy and runtime. It uses the new images
    • stereo/middlebury_cones/im2.png,
    • stereo/middlebury_cones/im6.png,
    • stereo/middlebury_cones/disp2.png, and
    • stereo/middlebury_cones/occl.png.
  • HALCON has been extended with an operator evaluate_class_svm that evaluates a feature vector by a support vector machine. The HDevelop example program
    • hdevelop/Classification/Support-Vector-Machines/novelty_detection.hdev
    has been modified accordingly to show how to use the new functionality to evaluate a feature vector by a support vector machine.
  • The new HDevelop example programs
    • hdevelop/System/Multithreading/message_as_dictionary.hdev,
    • hdevelop/System/Multithreading/message_queue_as_container.hdev,
    • hdevelop/System/Multithreading/message_queue_producer_consumer_abort.hdev, and
    • hdevelop/System/Multithreading/message_queue_producer_consumer.hdev
    show how to use the new message queue operators to implement multithreaded producer-consumer problems and, in addition, how to use messages as dictionaries and message queues as data containers.
  • The new HDevelop example program
    • hdevelop/Object/Information/compare_obj.hdev
    shows how to use the new operator compare_obj to compare iconic objects.
  • The new HDevelop example programs
    • hdevelop/File/Images/write_image_benchmark.hdev and
    • hdevelop/File/Misc/write_object.hdev
    show the usage of the new HOBJ format.
  • The new HDevelop example program
    • hdevelop/Tuple/Sets/tuple_sets.hdev
    shows how to use the new operators to apply set operations on tuples.
  • The new HDevelop example program
    • hdevelop/Tuple/Selection/tuple_find.hdev
    shows how to use the new operatorstuple_find_first and tuple_find_last.
  • The new HDevelop example program
    • hdevelop/Inspection/Bead-Inspection/apply_bead_inspection_model.hdev
    shows how to use the new set of operators to measure and inspect adhesive beads. It uses the new example images
    • bead/adhesive_bead_[01-07].png
  • The new HDevelop example programs
    • hdevelop/Image/Acquisition/argos3d-p1xx_simple.hdev and
    • hdevelop/Image/Acquisition/argos3d-p1xx_objectmodel3d.hdev
    show how to use the new Argos3D-P1xx interface, which allows the easy acquisition of 3D depth images from Argos P1xx 3D sensors.
Modified Example Programs
  • HALCON now exploits the AVX2 instruction set under Windows and Linux. This leads to a significant speedup on machines that support the AVX2 instruction set.
    The HDevelop example program
    • hdevelop/System/Parameters/query_system_parameters.hdev
    has been extended to display the supported SIMD extensions.
  • The HDevelop example program
    • hdevelop/Filters/Color/cfa_to_rgb.hdev
    has been extended by the new mode for enhanced bilinear interpolation for cfa_to_rgb.
  • The HDevelop example program
    • hdevelop/System/Parameters/query_system_parameters.hdev
    has been adapted to use the new operatorget_system_time.
  • The HDevelop example program
    • hdevelop/Applications/Print-Inspection/ inspect_bottle_label_360_degree.hdev
    may have returned errors or it may have produced an empty mosaic image if it was adapted to another assembly of cameras and if therefore the geometry of the camera setup deviated from the one used in the example program. This problem has been fixed.
  • The HDevelop example program
    • hdevelop/Applications/Print-Inspection/ inspect_bottle_label_360_degree.hdev
    contained memory leaks, e.g., handles were created and not deleted. This problem has been fixed.
  • The HDevelop example program
    • solution_guide/3d_vision/camera_calibration_multi_image.hdev
    has been adapted to use the new easy to use calibration plate. It uses the new images
    • 3d_machine_vision/calib/calib_image_[01-07].png and
    • 3d_machine_vision/calib/ruler.png
  • The HDevelop example program
    • hdevelop/Applications/Position-Recognition-3D/3d_matching_clamps.hdev
    contains the local procedure inspect_object_model_3d, which is used to determine input parameters for create_shape_model_3d. This procedure now supports all camera types that can be used for shape-based 3D matching.
  • The HDevelop example programs
    • hdevelop/Tools/Grid-Rectification/grid_rectification.hdev and
    • solution_guide/3D-vision/grid_rectification_ruled_surface.hdev
    were nearly identical. Therefore,
    • hdevelop/Tools/Grid-Rectification/grid_rectification.hdev
    has been revised and
    • solution_guide/3D-vision/grid_rectification_ruled_surface.hdev
    has been removed.
  • For the HDevelop example program
    • hdevelop/Applications/Surface-Inspection/determine_tilt_slant_photometric_stereo.hdev
    the slant calculation was wrong. This problem has been fixed.
  • The HDevelop example program
    • hdevelop/Segmentation/Threshold/var_threshold.hdev
    has been revised.
  • The HDevelop example programs
    • hdevelop/Applications/Measuring-2D/angio.hdev,
    • hdevelop/Applications/Measuring-2D/segment_wedge_bonds.hdev,
    • hdevelop/Applications/Object-Recognition-2D/roads.hdev,
    • hdevelop/Applications/Surface-Inspection/detect_mura_defects_blur.hdev, and
    • hdevelop/Filters/Lines/lines_gauss.hdev
    have been adapted to use the new procedurecalculate_lines_gauss_parameters.
  • The HDevelop example program
    • hdevelop/Applications/OCR/generate_system_font.hdev,
    which creates OCR training samples from system fonts, created some training samples twice. This problem has been fixed.
  • The results of the existing HDevelop example program
    • hdevelop/Identification/Bar-Code/print_quality_isoiec15416.hdev
    may differ because the bar code reader has been adapted to calculate the symbol gradings of bar codes according to the latest ISO/IEC standards.
  • The HDevelop example program
    • hdevelop/Identification/Data-Code/ecc200_print_quality.hdev,
    which shows how to access ISO/IEC 15415 quality gradings, has been extended according to the new symbol gradings for reflectance margin, contrast uniformity, and print growth for the 2D data code types Data Matrix ECC 200, QR code, Micro QR code, and Aztec.
  • The HDevelop example programs
    • hdevelop/Applications/Position-Recognition-3D/locate_car_door.hdev,
    • hdevelop/Applications/Position-Recognition-3D/locate_engine_parts.hdev, and
    • explore_halcon.hdev
    were modified to show how to use the new functionality to specify the coordinate system of the output contours of get_deformable_model_contours.
  • For the following HDevelop example programs in the subdirectory solution_guide/image_acquisition that are used for the Solution Guide on Image Acquisition, the names have been changed such that the names of the used HALCON image acquisition interfaces are no longer contained:
    • first_example_acquisition_saperalt.hdev → first_example_acquisition.hdev,
    • info_framegrabber_1394iidc.hdev → info_framegrabber.hdev,
    • multiple_boards_bitflow.hdev → multiple_boards.hdev,
    • multiple_ports_bitflow.hdev → multiple_ports.hdev,
    • port_switching_bitflow.hdev → port_switching.hdev,
    • real_time_grabbing_bitflow.hdev → real_time_grabbing.hdev,
    • simultaneous_grabbing_bitflow.hdev → simultaneous_grabbing.hdev, and
    • volatile_grabbing_bitflow.hdev → volatile_grabbing.hdev.
    Additionally, the following files have been removed:
    • c/win/examples.dsw,
    • c/win/error_handling_timeout_leutron/ error_handling_timeout_leutron.dsp,
    • cpp/win/examples.dsw,
    • cpp/win/error_handling_timeout_leutron/ error_handling_timeout_leutron.dsp,
    • vb/error_handling_timeout_leutron/error_handling_timeout_leutron.frm,
    • vb/error_handling_timeout_leutron/error_handling_timeout_leutron.frx,
    • vb/error_handling_timeout_leutron/error_handling_timeout_leutron.vbp,
    • vb/error_handling_timeout_leutron/error_handling_timeout_leutron.vbw, and
    • vb/error_handling_timeout_leutron/error_handling_timeout_leutron.xml.
  • The Leutron image acquisition interface is no longer supported and has been removed. Consequently, the following HDevelop example programs have been removed:
    • hdevelop/Image/Acquisition/leutron_trigger.hdev,
    • hdevelop/Image/Acquisition/leutron.hdev, and
    • hdevelop/Image/Acquisition/leutron_2cameras.hdev.
    The example programs
    • solution_guide/image_acquisition/error_handling_timeout_leutron.hdev
    • solution_guide/image_acquisition/c/error_handling_timeout_leutron.c
    • solution_guide/image_acquisition/cpp/error_handling_timeout_leutron.cpp
    • solution_guide/image_acquisition/vb/error_handling_timeout_leutron.vb
    that were described in the Solution Guide on Image Acquisition have been replaced by corresponding programs with the name error_handling_timeout.*.
  • Some HDevelop example programs have been reordered in the file structure.
    The HDevelop example programs
    • hdevelop/Calibration/Monocular/compare_calibration_models.hdev and
    • hdevelop/Calibration/Monocular/line_scan_calibration.hdev
    have been moved to the directory
    • hdevelop/Calibration/Multi-View
    The HDevelop example program
    • hdevelop/Calibration/Monocular/camera_calibration.hdev
    has been removed.
    The HDevelop example program
    • hdevelop/Calibration/Multi-View/calibrate_cameras.hdev
    has been renamed to
    • hdevelop/Calibration/Multi-View/calibrate_cameras_multiple_camera_setup.hdev
Removed Example Programs

The following example programs have been removed:

  • The HDevelop example program
    • solution_guide/3D-vision/grid_rectification_ruled_surface.hdev
    has been removed because it was nearly identical to the HDevelop example program
    • hdevelop/Tools/Grid-Rectification/grid_rectification.hdev,
    which has been revised accordingly.
  • For the following HDevelop example programs in the subdirectory solution_guide/image_acquisition that are used for the Solution Guide on Image Acquisition, the names have been changed such that the names of the used HALCON image acquisition interfaces are no longer contained:
    • first_example_acquisition_saperalt.hdev → first_example_acquisition.hdev,
    • info_framegrabber_1394iidc.hdev → info_framegrabber.hdev,
    • multiple_boards_bitflow.hdev → multiple_boards.hdev,
    • multiple_ports_bitflow.hdev → multiple_ports.hdev,
    • port_switching_bitflow.hdev → port_switching.hdev,
    • real_time_grabbing_bitflow.hdev → real_time_grabbing.hdev,
    • simultaneous_grabbing_bitflow.hdev → simultaneous_grabbing.hdev, and
    • volatile_grabbing_bitflow.hdev → volatile_grabbing.hdev.
    Additionally, the following files have been removed:
    • c/win/examples.dsw,
    • c/win/error_handling_timeout_leutron/ error_handling_timeout_leutron.dsp,
    • cpp/win/examples.dsw,
    • cpp/win/error_handling_timeout_leutron/ error_handling_timeout_leutron.dsp,
    • vb/error_handling_timeout_leutron/error_handling_timeout_leutron.frm,
    • vb/error_handling_timeout_leutron/error_handling_timeout_leutron.frx,
    • vb/error_handling_timeout_leutron/error_handling_timeout_leutron.vbp,
    • vb/error_handling_timeout_leutron/error_handling_timeout_leutron.vbw, and
    • vb/error_handling_timeout_leutron/error_handling_timeout_leutron.xml.
  • The Leutron image acquisition interface is no longer supported and has been removed. Consequently, the following HDevelop example programs have been removed:
    • hdevelop/Image/Acquisition/leutron_trigger.hdev,
    • hdevelop/Image/Acquisition/leutron.hdev, and
    • hdevelop/Image/Acquisition/leutron_2cameras.hdev.
    The example programs
    • solution_guide/image_acquisition/error_handling_timeout_leutron.hdev
    • solution_guide/image_acquisition/c/error_handling_timeout_leutron.c
    • solution_guide/image_acquisition/cpp/error_handling_timeout_leutron.cpp
    • solution_guide/image_acquisition/vb/error_handling_timeout_leutron.vb
    that were described in the Solution Guide on Image Acquisition have been replaced by corresponding programs with the name error_handling_timeout.*.

HALCON Library

New Operators

3D Matching → Deformable Surface-Based
3D Object Model → Transformations
  • HALCON has been extended with an operator simplify_object_model_3d that simplifies a triangulated 3D object model by removing less important points. For this, the user is able to specify the number of points that are to be removed or, alternatively, the number of remaining points.
    The new HDevelop example program
    • hdevelop/3D-Object-Model/Transformations/simplify_object_model_3d.hdev
    shows how to use the new operator.
3D Reconstruction → Binocular Stereo
  • HALCON has been extended with two new operators for stereo reconstruction. Both operators solve the stereo correspondence using multi-scanline optimization.
    The new HDevelop example programs
    • hdevelop/3D-Reconstruction/Binocular-Stereo/binocular_disparity_ms.hdev and
    • hdevelop/3D-Reconstruction/Binocular-Stereo/binocular_distance_ms.hdev
    show how to use the new operators for binocular stereo that solve the stereo correspondence using multi-scanline optimization.
    The new HDevelop example program
    • hdevelop/3D-Reconstruction/Binocular-Stereo/binocular_disparity_comparison.hdev
    compares the different approaches for stereo reconstruction with regard to accuracy and runtime. It uses the new images
    • stereo/middlebury_cones/im2.png,
    • stereo/middlebury_cones/im6.png,
    • stereo/middlebury_cones/disp2.png, and
    • stereo/middlebury_cones/occl.png.
3D Reconstruction → Sheet of Light
  • HALCON has been extended with two operators to support sheet-of-light calibration with a 3D calibration object. The new HDevelop example program
    • hdevelop/3D-Reconstruction/Sheet-Of-Light/calibrate_sheet_of_light_3d_calib_object.hdev
    shows how to use the new operator calibrate_sheet_of_light to calibrate a sheet-of-light model with a 3D calibration object. It uses the new image
    • sheet_of_light/calib_object_disparity.tif.
Calibration → Multi-View
Classification → Neural Nets
Classification → Support Vector Machines
  • HALCON has been extended with an operator evaluate_class_svm that evaluates a feature vector by a support vector machine. The HDevelop example program
    • hdevelop/Classification/Support-Vector-Machines/novelty_detection.hdev
    has been modified accordingly to show how to use the new functionality to evaluate a feature vector by a support vector machine.
File → Misc
File → Object
  • HALCON has been extended with the operators write_object and read_object, which provide the functionality to write and read all kinds of iconic HALCON objects (images, regions, and XLDs). The operators use the new binary file format HOBJ. For runtime efficiency reasons, no compression is applied to the data. The default file extension for this file format is '.hobj'. The existing operators write_image, read_image, write_region, and read_region have been extended to also support the HOBJ format. serialize_object also uses the HOBJ format internally. Consequently, objects that have been serialized with HALCON 12 or higher cannot be deserialized by older HALCON versions. The file format IMA, which was used for image data, is now legacy and the file format HOBJ should be used instead. The file format HALCON Region ('.reg'), which was used for region data, is now legacy and the file format HOBJ should be used instead. For compatibility reasons, the file formats IMA and HALCON Region are still supported by write_image, read_image, write_region, and read_region.
    The new HDevelop example programs
    • hdevelop/File/Images/write_image_benchmark.hdev and
    • hdevelop/File/Misc/write_object.hdev
    show the usage of the HOBJ format.
    The region files
    • automotive/car_door.reg,
    • automotive/engine_part_model.reg, and
    • xing/xing.reg
    have been removed and replaced by the following HALCON Iconic Object files:
    • automotive/car_door_region.hobj,
    • automotive/engine_part_model_region.hobj, and
    • xing/xing_region.hobj.
    HDevelop was also extended to handle the new file format:
    • The Image Acquisition interface and all other assistants that expect an image can open images that are stored as hobj files.
    • The Read Image dialog can now handle all .hobj files including preview and inserting the appropriate operator into the HDevelop program.
    • If an iconic variable is saved via the context menu of the Variable window, for regions, XLDs, and mixed object tuples .hobj is the new default format.
Filters → FFT
  • HALCON has been extended with an operator phase_correlation_fft. The new HDevelop example program
    • hdevelop/Filters/FFT/phase_correlation_fft.hdev
    shows how to use phase_correlation_fft to compute the translation between two images.
Filters → Scene Flow
  • HALCON has been extended with two new operators to calculate the scene flow (a representation of the 3D motion of points in a scene) of two consecutive stereo image pairs: The new HDevelop example program
    • hdevelop/Filters/Scene-Flow/scene_flow_globe.hdev
    shows how to use the new operators to calculate the scene flow. It uses the new example images
    • stereo/globe/globe_l_[01-05].png and
    • stereo/globe/globe_r_[01-05].png.
Graphics → Object
Filters → Smoothing
  • HALCON has been extended with the new operator gauss_filter to smooth an image using discrete Gaussian functions. In contrast to the operator gauss_image, the smoothing parameter sigma increases linearly with the given filter size.
    The new HDevelop example program
    • hdevelop/Filters/Smoothing/compare_gauss_filters.hdev
    compares the properties of the four operators gauss_filter, derivate_gauss, binomial_filter, and smooth_image.
    gauss_image is now declared as legacy, i.e., its use is now deprecated in favor of the operator gauss_filter.
Inspection → Bead Inspection
OCR → Neural Nets
OCR → Segmentation
  • HALCON has been extended with an automatic text reader that is able to segment and read characters of any size robustly without the need for extensive parameter tuning. With the new operator create_text_model_reader, it is possible to create a text model that can be used for automatic text reading. All existing operators that handle text models have been extended accordingly.
    The new HDevelop example program
    • hdevelop/OCR/Segmentation/find_text.hdev
    shows how to use the new automatic text reader. It uses the new image
    • ocr/medication_package_02_right.png.
    The new HDevelop example program
    • hdevelop/OCR/Segmentation/find_expiration_date.hdev
    shows an application of the new automatic text reader. It uses the new images
    • ocr/medication_package_[01-03]_front.png,
    • ocr/medication_package_[01-03]_left.png,
    • ocr/medication_package_[01-03]_back.png,
    • ocr/medication_package_[01-03]_right.png,
    • ocr/medication_package_[01-03]_bottom.png, and
    • ocr/medication_package_[01-03]_top.png.
    create_text_model is now legacy and is only provided for compatibility reasons. Existing applications that use create_text_model do not need to be adapted. New applications should use create_text_model_reader instead. The behavior that is obtained with text models that were created by create_text_model can be obtained by calling create_text_model_reader and setting Mode to 'manual'.
Object → Information
  • HALCON has been extended with the operator compare_obj to compare iconic objects. In contrast to test_equal_obj, this operator compares all objects regarding their actual content.
    The new HDevelop example program
    • hdevelop/Object/Information/compare_obj.hdev
    shows how to use compare_obj.
Regions → Creation
  • HALCON has been extended with the two operators
Segmentation → Threshold
  • HALCON has been extended with the operators which provide functionality for image thresholding.
    binary_threshold provides the functionality of bin_threshold as well as an implementation of the thresholding method proposed by Otsu, which uses statistics to divide the pixels into foreground and background. local_threshold provides an implementation of the method proposed by Sauvola, which is well suited for the binarization of images of text documents.
    The new HDevelop example programs
    • hdevelop/Segmentation/Threshold/local_threshold.hdev and
    • hdevelop/Segmentation/Threshold/binary_threshold.hdev
    show how to use these new operators. The HALCON operator bin_threshold has become legacy.
System → Error Handling
  • HALCON has been extended with the operator get_extended_error_info. It returns additional error information for the last HALCON error that occurred in the calling thread.
System → Multithreading
System → Operating System
  • HALCON has been extended with the operator get_system_time that reads out the current system time.
    The HDevelop example program hdevelop/System/Parameters/query_system_parameters.hdev has been adapted to use the new operator get_system_time.
Tools → Geometry
Transformations → 2D Transformations
  • HALCON has been extended with an operator point_line_to_hom_mat2d that computes an affine transformation of a user-selectable type from point-to-line correspondences. The new HDevelop example program
    • hdevelop/Transformations/2D-Transformations/point_line_to_hom_mat2d.hdev
    shows how point_line_to_hom_mat2d can be used for alignment purposes in an OCV application.
Tuple → Selection
Tuple → Sets
XLD → Features
  • HALCON has been extended with an operator test_closed_xld that tests whether a contour is closed or not.
    The new HDevelop example program
    • hdevelop/XLD/Features/test_closed_xld.hdev
    shows how to use this operator.

Speedup and Enhancements

Miscellaneous
  • HALCON now exploits the AVX2 instruction set under Windows and Linux. This leads to a significant speedup on machines that support the AVX2 instruction set.
    The HDevelop example program
    • hdevelop/System/Parameters/query_system_parameters.hdev
    has been extended to display the supported SIMD extensions.
    It is possible to determine if AVX2 is available with get_system, with the Parameter Query set to 'avx2_supported'.
    Furthermore, HDevelop's About dialog now displays AVX2 after the platform version, if AVX2 is available.
3D Object Model
  • The repeated visualization of 3D object models is now faster if the new interface for the visualization of 3D object models is used and if only the poses of the objects change between successive visualizations. Note that the compatibility mode for older graphics cards is not supported.
    The speedup depends on various factors, such as the size of the models and the graphics card. With larger models (more than one million points), the speedup for high-end graphic cards may be up to 4000%.
3D Matching → Surface-Based
  • find_surface_model is up to 70% faster. Note that when using a surface model created and written with versions earlier than HALCON 12.0, some of the optimizations have no effect. In order to fully exploit the speedups, create the surface model anew with the latest version of HALCON.
3D Object Model → Features
  • get_object_model_3d_params is now faster by up to 250% for 'diameter_axis_aligned_bounding_box', 'bounding_box1', and 'center'. 3D object models containing 3D primitives are not affected.
Calibration → Multi-View
  • calibrate_cameras and camera_calibration are now significantly faster for line scan cameras. The speedup depends on the number of images and is greater the more images are used. For example, the speedup is approximately a factor of 30 if 17 images are used.
Classification → Neural Nets
Filters → Arithmetic
  • invert_image is now faster by up to 4800% for int1 images, by up to 3000% for int2 images, by up to 1800% for int4 images, and by up to 1900% for real images.
Filters → Lines
Filters → Match
  • gen_gauss_pyramid, zoom_image_factor, and zoom_image_size are now faster on systems that support SSSE3 for the interpolation mode 'constant' and a scale factor of 0.5. The speedup for images of type 'byte' and 'int2' is up to 100%. The speedup for images of type 'uint2' is up to 25%. On systems that support AVX2 the speedup for images of type 'byte' is up to 130%.
Filters → Smoothing
  • mean_n is now faster by up to 140% for byte, int2, and uint2 images and by up to 40% for int4 and real images.
Image → Format
Segmentation → Threshold
  • threshold is now faster by up to 54% for real and int4 images.

Newly Reentrant Operators

3D Matching → Shape-Based
3D Matching → Surface-Based
Calibration → Calibration Object
Classification → Gaussian Mixture Models
Classification → Look-Up Table
Classification → Neural Nets
Classification → Support Vector Machines
File → Text
Identification → Bar Code
Inspection → Variation Model
Matching → Deformable
Matching → Descriptor-Based
OCR → Neural Nets
OCR → Support Vector Machines
Segmentation → Classification
Tools → Interpolation

Modified Operators

Miscellaneous
  • The HALCON window stack of the HALCON language interfaces has been modified such that it is not thread-local anymore but thread-safe and shared among all threads. That is, setting the active window so far was working thread-specifically, but now it affects all threads.
  • The undocumented but exported function HMessage was renamed to HErrorMessage.
2D Metrology
  • HALCON has been extended by several new operators for the metrology model. Other operators for the metrology model have been revised. The new HDevelop example program
    • hdevelop/Applications/Measuring-2D/measure_stamping_part.hdev
    demonstrates the use of the new operators and the alignment of a metrology model with, e.g., shape-based matching.
    Note that the two operators now are legacy.
  • set_metrology_object_param and get_metrology_object_param have been extended with the generic parameter 'distance_threshold' to allow setting and querying the distance threshold used in the RANSAC algorithm.
3D Matching → Surface-Based
  • Surface-based matching is now more robust when matching in noisy data, such as data from time-of-flight cameras. For this, a new parameter 'scene_normal_computation' was introduced in the operator find_surface_model. Setting this parameter to 'mls' enables a more robust normal computation, which leads to a more robust matching.
    The new HDevelop example program
    • hdevelop/3D-Matching/Surface-Based/find_surface_model_noisy_data.hdev
    shows how surface-based matching can be used to find objects even in noisy data.
3D Object Model → Features
  • distance_object_model_3d now supports signed distances. Signed distances can be calculated for points, triangles, and primitives. Please note that signed distances are only calculated if the corresponding parameter 'signed_distances' is set to 'true'. Additionally, distance_object_model_3d can now return the index of the closest point or triangle for each query point in an extended attribute. Please note that the index is only computed if the parameter 'store_closest_index' is set to 'true'.
    The HDevelop example program
    • hdevelop/Applications/Surface-Inspection/compare_surface_sheet_of_light.hdev
    has been adapted to show how the new generic parameter 'signed_distances' is used to compute signed distances between 3D object models.
3D Object Model → Transformations
3D Reconstruction → Binocular Stereo
3D Reconstruction → Sheet of Light
Calibration → Calibration Object
  • HALCON now supports new easy to use calibration plates. In contrast to the previous calibration plates, the new plates do not have to be completely visible in the calibration images. This especially simplifies multi-view calibration and the placement of the calibration plate near the image border. Furthermore, the new design contains a significantly larger number of calibration marks, which allows reliable calibration with fewer calibration images. The description files for the new calibration plates can be created with create_caltab, which was previously legacy. Note that, because the signature of create_caltab has been adapted to the design of the new calibration plates, create_caltab is not binary compatible to earlier versions of HALCON. The file extension for the new description files is '.cpd'. have been adapted to use these new description files. Note that the previous calibration plates are still supported and that their description files can still be created with gen_caltab.
    The following new description files are now provided in %HALCONROOT%/calib:
    • calplate_5mm.cpd,
    • calplate_10mm.cpd,
    • calplate_20mm.cpd,
    • calplate_40mm.cpd,
    • calplate_80mm.cpd,
    • calplate_160mm.cpd,
    • calplate_320mm.cpd,
    • calplate_640mm.cpd,
    • calplate_1200mm.cpd,
    • calplate_20mm_dark_on_light.cpd,
    • calplate_40mm_dark_on_light.cpd, and
    • calplate_80mm_dark_on_light.cpd.
    The following files in %HALCONROOT%/calib have been removed:
    • caltab_6mm_old.descr,
    • caltab_10mm_old.descr,
    • caltab_30mm_old.descr,
    • caltab_100mm_old.descr,
    • caltab_200mm_old.descr,
    • caltab_650um_old.descr,
    • caltab_2500mm_old.descr,
    • campar.dat,
    • campose.dat, and
    • gridspace_campar.cal.
    The new HDevelop example program
    • hdevelop/Calibration/Multi-View/calibrate_cameras_monocular.hdev
    demonstrates the calibration of a single camera with the new calibration plate. It uses the new images
    • calib/calib_single_camera_[01-07].png.
    The existing HDevelop example program
    • solution_guide/3d_vision/camera_calibration_multi_image.hdev
    has been adapted to use the new calibration plate. It uses the new images
    • 3d_machine_vision/calib/calib_image_[01-07].png and
    • 3d_machine_vision/calib/ruler.png
    The documentation related to camera calibration, in particular the Solution Guide on 3D Vision, the documentation of the Calibration Assistant in the HDevelop User's Guide, and the affected reference manual entries have been adapted accordingly. Within the documentation, the new calibration plates are referred to as "calibration plates with hexagonally arranged marks" and the previous calibration plates are referred to as "calibration plates with rectangularly arranged marks".
  • find_calib_object now stores the calibration mark contours for line scan cameras. Furthermore, calibrate_cameras uses the mark contours, if available, to achieve more accurate calibration results for line scan cameras.
Calibration → Hand-Eye
  • The hand-eye calibration of HALCON is now able to calibrate SCARA (Selective Compliance Assembly Robot Arm) robots. SCARA robots have three degrees of freedom in translation but - in contrast to conventional articulated robots - only one degree of freedom in rotation. Therefore with SCARA robots it is not possible to approach calibration poses with different tilts (i.e., with different rotations around the x-and y-axis of the calibration plate). Because up to now the hand-eye calibration required tilted calibration poses, SCARA robots could not be calibrated.
    The new HDevelop example programs
    • hdevelop/Calibration/Hand-Eye/calibrate_hand_eye_scara_moving_cam.hdev and
    • hdevelop/Calibration/Hand-Eye/calibrate_hand_eye_scara_stationary_cam.hdev
    show how to calibrate a SCARA hand-eye system. The example programs use the new images
    • 3d_machine_vision/handeye/scara_moving_cam_setup_01_[01-10].png and
    • 3d_machine_vision/handeye/scara_stationary_cam_setup_01_[01-10].png.
    The new HDevelop example program
    • hdevelop/Calibration/Hand-Eye/calibrate_hand_eye_scara_stationary_cam_approx.hdev
    shows how to approximately calibrate a SCARA handy-eye system without using a calibration plate. The example program uses the new image
    • 3d_machine_vision/handeye/scara_stationary_cam_setup_01_calib_approx_01.png.
    The new HDevelop example program
    • hdevelop/Calibration/Hand-Eye/pick_and_place_scara_stationary_cam.hdev
    shows how to use the (exact or approximate) calibration results provided by the HDevelop example programs calibrate_hand_eye_scara_stationary_cam.hdev and calibrate_hand_eye_scara_stationary_cam_approx.hdev for a pick-and-place application. The example program uses the new images
    • 3d_machine_vision/handeye/scara_stationary_cam_setup_01_metal_parts_[01-06].png.
Calibration → Monocular
Calibration → Multi-View
  • calibrate_cameras and camera_calibration no longer optimize Sx for line scan cameras because Sx and Focus cannot be determined simultaneously for line scan cameras.
  • For line scan calibration, the restriction that all markers of a calibration object must be visible in every observation has been removed.
Classification → Neural Nets
  • The MLP-based classifiers (for general classification and for OCR) now provide a mechanism to automatically determine the regularization parameters. For the general MLP classifier, this can be achieved by calling set_regularization_params_class_mlp twice with GenParamName set to 'num_outer_iterations' and 'num_inner_iterations', respectively, and with GenParamValue set to a value > 0. For the OCR MLP classifier, this can be achieved by calling set_regularization_params_ocr_class_mlp analogously.
    The new HDevelop example program
    • hdevelop/OCR/Neural-Nets/regularized_ocr_mlp.hdev
    shows how to use the automatic determination of the regularization parameters for OCR.
  • are now parallelized internally. Depending on the number of cores available, this can result in a significant speedup on multi-core processors.
Filters → Color
  • cfa_to_rgb now supports an enhanced bilinear interpolation mode ('bilinear_enhanced') that leads to fewer zipper-like and color artifacts at edges.
    The HDevelop example program
    • hdevelop/Filters/Color/cfa_to_rgb.hdev
    has been extended by the new mode.
Filters → Geometric Transformations
  • mirror_image now supports non-quadratic images for the mode 'diagonal'. Until now, mirror_image supported only quadratic images for this mode.
Filters → Lines
  • HALCON has been extended with a procedure calculate_lines_gauss_parameters to calculate the parameters Sigma, Low, and High of the operator lines_gauss from the width and the gray value contrast of the lines to be extracted.
    The HDevelop example programs
    • hdevelop/Applications/Measuring-2D/angio.hdev,
    • hdevelop/Applications/Measuring-2D/segment_wedge_bonds.hdev,
    • hdevelop/Applications/Object-Recognition-2D/roads.hdev,
    • hdevelop/Applications/Surface-Inspection/detect_mura_defects_blur.hdev, and
    • hdevelop/Filters/Lines/lines_gauss.hdev
    have been adapted to use the new procedure.
    Furthermore, the reference manual entry of lines_gauss has been extended with the formula that can be used to calculate the parameters Sigma, Low, and High of the operator lines_gauss from the width and the gray value contrast of the lines to be extracted.
Graphics → 3D Scene
Graphics → Window
Identification → Bar Code
  • The bar code reader is now more robust in finding potential candidate regions. Interfering edges that are aligned with the bar code will not disturb find_bar_code anymore. Also, the search for candidate regions is more robust in the presence of noise or distortions within the bar code. In conjunction with these improvements, the parameters 'max_diff_orient' and 'slanted' have been removed. The corresponding HDevelop examples
    • hdevelop/Identification/Bar-Code/barcode_param_max_diff_orient.hdev
    • hdevelop/Identification/Bar-Code/barcode_slanted.hdev
    have been removed.
    Note that, because of the improved robustness of the bar code reader, it may be necessary to revise existing bar code applications with respect to parameter settings. Because of the improvements, the resulting candidate regions will not be the same as in earlier HALCON versions and it may be necessary to adapt the settings of the bar code reader to best suit its new behavior. Additionally, although it is still possible to set the removed parameters 'max_diff_orient' and 'slanted', they have no effect on the result of the bar code reader.
  • The training mode of the bar code reader was significantly slower than a conventional call of find_bar_code. This made the parameter training unusable for very large input images. Now, the runtime has been improved significantly. In most cases, the runtime of the training mode is very close to a conventional call of find_bar_code.
  • The bar code reader is now more robust when decoding small resolution bar codes. On internal test data, an improvement of 70% for the success rate of find_bar_code on challenging noisy low resolution images with respect to HALCON 11 was achieved. If general resolutions are considered, improvements of 100% were achieved.
    The reference manual entry of find_bar_code has been extended with the following advice: "This advice applies to bar code applications that use low resolution images, i.e., images in which a single bar is between one and two pixels wide. In these cases, one should optimize the bar code imaging system in order to eliminate noise and focal blur because a combination of these optical distortions lead to problems in the decodability of low resolution bar codes."
    In addition, the success rate of find_bar_code for low resolution bar codes in the presence of noise and focal blur can be further improved via the new parameter 'meas_param_estimation'. If set to 'true' via the operator set_bar_code_param, a different approach to determine the internal smoothing parameters is used.
    The new HDevelop example program
    • hdevelop/Identification/Bar-Code/barcode_param_meas_param_estimation.hdev
    demonstrates the usage and use cases for the new parameter 'meas_param_estimation'. It uses the new images
    • barcode/ean13/ean13_meas_param_estimation_[01-10].png.
  • find_bar_code now allows to reject bar code candidate regions depending on their contrast. This rejection can be enabled by setting 'contrast_min' to a value larger than 5 with the operator set_bar_code_param. This allows to reduce the runtime and the number of false decodes in images with low contrast bar-like structures, in particular, if one can ensure that bar codes always have a high contrast in the image.
    The new HDevelop example program
    • hdevelop/Identification/Bar-Code/barcode_param_contrast_min.hdev
    shows the usage of the parameter 'contrast_min'. It uses the new image
    • barcode/25interleaved/25interleaved_zeiss1.png.
  • The effect of the bar code parameters 'element_size_min' and 'element_size_max' was unclear and it was difficult to specify optimal values. As a result, some users may have set these parameters to unrealistic values. Now, both parameters control the bar code reader according to their natural meaning. They specify the minimal and maximal expected element size in pixels.
    Because of this modification of the influence of the parameters 'element_size_min' and 'element_size_max' on the bar code reader, it may be necessary to check existing bar code applications. It may be necessary to adapt the values of these two parameters to suit the application at hand. You may use the bar code parameter training in order to train the values for both parameters.
  • The training mode of the bar code reader required a maximum of one bar code per training image. Now, the training may be used on images with multiple bar codes as well. All bar codes contribute to the training result equally.
  • The bar code reader has been extended with the possibility to specify the minimal width of the bar code. In conjunction with this, the parameter 'element_height_min' has been renamed to 'barcode_height_min' and a new parameter 'barcode_width_min' has been introduced. For backward compatibility, 'element_height_min' is still supported. But note, that the lower bound of this parameter has been changed to 3 pixels.
    The new HDevelop example program
    • hdevelop/Identification/Bar-Code/barcode_param_width_height.hdev
    shows how to use the parameters 'barcode_width_min' and 'barcode_height_min' to specify the maximal dimensions of a bar code.
  • The bar code reader only supported a single mode for selecting decoding results. This led to problems in rare cases. Now, a new result selection mode based on a majority voting scheme exists. It is possible to enable majority voting with the new parameter 'majority_voting' (list of values: ['true','false']). If majority voting is enabled, most of the scanlines are evaluated and the decoding result that is returned by the majority of the scanlines is returned as the overall result. By default, this mode is disabled. Please note that setting the parameter to 'true' leads to a slightly increased runtime since nearly all scanlines must be evaluated. See the reference manual entry of set_bar_code_param for more details about this new feature.
    The new HDevelop example program
    • hdevelop/Identification/Bar-Code/barcode_param_majority_voting.hdev
    shows how to use the new parameter 'majority_voting' of the bar code reader. It uses the new image
    • barcode/ean13.png.
  • HALCON has been extended with a procedure
    • general/convert_decoded_string_code39_to_code32.hdvp
    to convert decoded data strings read with the 'Code 39' bar code reader from 'Code 39' to 'Code 32'. This enables to read bar codes of type 'Code 32' with the bar code reader for 'Code 39' in combination with this procedure.
    The new HDevelop example program
    • hdevelop/Identification/Bar-Code/code32.hdev
    demonstrates how to use this procedure.
  • The bar code reader has been adapted to calculate the symbol gradings of bar codes according to the latest ISO/IEC standards.
    Note that the results of the existing HDevelop example program
    • hdevelop/Identification/Bar-Code/print_quality_isoiec15416.hdev
    may differ because of these changes.
Identification → Data Code
  • The 2D data code reader has been extended to support the ISO/IEC 15415 quality gradings for reflectance margin, contrast uniformity, and print growth for the 2D data code types Data Matrix ECC 200, QR code, Micro QR code, and Aztec.
    The HDevelop example program
    • hdevelop/Identification/Data-Code/ecc200_print_quality.hdev,
    which shows how to access the symbol gradings, has been extended accordingly.
    The reference manual entry of get_data_code_2d_results has been extended to describe the new ISO/IEC 15415 quality gradings for reflectance margin, contrast uniformity, and print growth.
    The Solution Guide on 2D Data Codes has been extended to describe the new ISO/IEC 15415 quality gradings for reflectance margin, contrast uniformity, and print growth.
  • The 2D data code reader now provides functionality for the assessment of direct part mark quality, compliant with the SEMI T10-0701 standard. Note that direct part mark quality assessment is provided only for the Data Matrix ECC 200 code.
    The new HDevelop example program
    • hdevelop/Identification/Data-Code/ecc200_direct_mark_quality_semi_t10.hdev
    shows how to assess the direct mark quality of an Data Matrix ECC 200 code.
  • For the 2D data code reader the print quality grading of the Data Matrix ECC 200 clock track is now more robust against print growth. The tracking of the symbol has been refined.
Identification → Sample-Based
  • In some cases, the identification rate of the sample-based identification was suboptimal if different objects were trained with a different number of sample images. In such cases, the robustness of the identification of objects for which more training images were passed was lower compared to objects for which fewer training images were passed. Now, the sample-based identification allows to use a different number of training images per class. Thus it is no longer necessary that the number of training images is approximately similar for each different view of each object. Furthermore, the sample-based identification is now more robust to image clutter.
Image → Features
Image → Format
Image → Manipulation
  • set_grayval and get_grayval now support complex and vector field images. For these image types, two gray values must be specified or are returned per pixel. In previous HALCON versions, get_grayval supported complex images, but handled them by returning the absolute value of the complex number at the requested pixel. Suppose that get_grayval was called as follows:
    get_grayval (Image, R, C, V)
    To achieve the old semantics, the following lines of code can be inserted after the call to get_grayval (for complex images only):
    J := [0:2:|V|-2]
    VP := sqrt(V[J]*V[J]+V[J+1]*V[J+1])
    If a single pixel is requested, this reduces to:
    VP := sqrt(V[0]*V[0]+V[1]*V[1])
Matching → Deformable
OCR
  • HALCON has been extended with the pretrained OCR fonts 'Document' and 'Industrial' with regularized weights and a rejection class. Because of the regularization, the new pretrained OCR fonts provide more meaningful confidences. Because of the rejection class it is possible to distinguish characters from background clutter.
    The new pretrained fonts with regularization weights and without a rejection class are:
    • Document_NoRej.omc,
    • Document_0-9_NoRej.omc,
    • Document_0-9A-Z_NoRej.omc,
    • Document_A-Z+_NoRej.omc,
    • Industrial_NoRej.omc,
    • Industrial_0-9_NoRej.omc,
    • Industrial_0-9+_NoRej.omc,
    • Industrial_0-9A-Z_NoRej.omc, and
    • Industrial_A-Z+_NoRej.omc.
    The new pretrained fonts with regularization weights and a rejection class are:
    • Document_Rej.omc,
    • Document_0-9_Rej.omc,
    • Document_0-9A-Z_Rej.omc,
    • Document_A-Z+_Rej.omc,
    • Industrial_Rej.omc,
    • Industrial_0-9_Rej.omc,
    • Industrial_0-9+_Rej.omc,
    • Industrial_0-9A-Z_Rej.omc, and
    • Industrial_A-Z+_Rej.omc.
    All pretrained fonts can be found in the HALCON subdirectory ocr.
    The following pretrained fonts are no longer shipped with HALCON:
    • Document.omc,
    • Document_0-9.omc,
    • Document_0-9A-Z.omc,
    • Document_A-Z+.omc,
    • Industrial.omc,
    • Industrial_0-9.omc,
    • Industrial_0-9+.omc,
    • Industrial_0-9A-Z.omc, and
    • Industrial_A-Z+.omc.
    They have been replaced by the respective OCR fonts with regularization weights and with or without a rejection class. To distinguish these new fonts from the previously used fonts, their names have been extended with the suffix '_Rej' (for fonts with a rejection class) or '_NoRej' (for fonts without a rejection class). Existing applications that use these fonts can be rewritten to use one of the above mentioned new pretrained fronts. Note, however, that the behavior of the application might change. To obtain the same behavior as in previous HALCON versions, the pretrained fonts of the previous HALCON version can be used.
    The documentation of the Solution Guide I has been extended accordingly.
  • The pretrained OCR fonts OCRA, OCRB, Industrial, and Document have been extended with the currency symbols pound ('£') and yen ('¥'). Additionally, besides the Industrial font now also the OCRA, the OCRB, and the Document fonts include the currency symbol euro ('€'). Thus, the three mentioned currency symbols are included in the following pretrained font files:
    • Industrial_NoRej.omc,
    • Industrial_Rej.omc,
    • Industrial_0-9+_NoRej.omc,
    • Industrial_0-9+_Rej.omc,
    • Industrial_A-Z+_NoRej.omc,
    • Industrial_A-Z+_Rej.omc,
    • Document_NoRej.omc,
    • Document_Rej.omc,
    • Document_A-Z+_NoRej.omc,
    • Document_A-Z+_Rej.omc,
    • OCRA.omc,
    • OCRA_A-Z+.omc,
    • OCRB.omc, and
    • OCRB_A-Z+.omc.
    The Solution Guide I Basics has been adapted accordingly.
Regions → Creation
Regions → Tests
System → I/O Devices
  • HALCON now provides a generic interface for accessing I/O devices. In detail, it has been extended by the following new operators:
  • HALCON has been extended with an I/O interface for OPC UA that allows reading and writing data to and from OPC UA servers.
    The new HDevelop example programs
    • hdevelop/System/IO-Devices/opc_ua_browse_variables.hdev,
    • hdevelop/System/IO-Devices/opc_ua_channel_access.hdev,
    • hdevelop/System/IO-Devices/opc_ua_discovery.hdev,
    • hdevelop/System/IO-Devices/opc_ua_parameters.hdev, and
    • hdevelop/System/IO-Devices/opc_ua_security.hdev
    show how to use the OPC UA I/O interface.
  • HALCON has been extended with an I/O interface for OPC Classic that allows reading and writing data to and from OPC Classic servers.
    The new HDevelop example programs
    • hdevelop/System/IO-Devices/opc_classic_browse_variables.hdev,
    • hdevelop/System/IO-Devices/opc_classic_channel_access.hdev, and
    • hdevelop/System/IO-Devices/opc_classic_parameters.hdev
    show how to use the OPC Classic I/O interface.
  • HALCON now also provides an I/O interface for accessing the Interface Digital I/O boards that uses the Interface SDK and allows the easy controlling of digital input and digital output devices.
    The new HDevelop example programs
    • hdevelop/System/IO-Devices/interface_digital_read.hdev and
    • hdevelop/System/IO-Devices/interface_digital_write.hdev
    show the ease of use of the new I/O interface for accessing the Interface Digital I/O boards.
  • HALCON has been extended with an Advantech I/O interface that uses the Advantech SDK and allows the easy controlling of digital input and digital output devices.
    The new HDevelop example programs
    • hdevelop/System/IO-Devices/advantech_digital_read.hdev and
    • hdevelop/System/IO-Devices/advantech_digital_write.hdev
    show how to use the new Advantech I/O interface.
  • HALCON has been extended with a National Instruments NI-DAQmx I/O interface that uses the National Instruments NI-DAQmx SDK and allows the easy controlling of digital input and digital output devices.
    The new HDevelop example programs
    • hdevelop/System/IO-Devices/nidaqmx_counter.hdev,
    • hdevelop/System/IO-Devices/nidaqmx_digital_read.hdev, and
    • hdevelop/System/IO-Devices/nidaqmx_digital_write.hdev
    show the simple use of the National Instruments NI-DAQmx I/O interface.
  • HALCON has been extended with a Contec I/O interface that uses the Contec SDK and allows the easy controlling of digital input and digital output devices.
    The new HDevelop example programs
    • hdevelop/System/IO-Devices/contec_digital_read.hdev and
    • hdevelop/System/IO-Devices/contec_digital_write.hdev
    show how to use the new Contec I/O interface.
System → Sockets
  • open_socket_accept now provides the generic parameter 'address', which can be used to instruct the socket to accept only connection requests addressed to this specific address.
Tuple → Element Order
  • tuple_sort is now parallelized on internal data level. Note that only the sorting of tuples containing native arrays with more than 4096 elements is parallelized. With 8 threads the achieved speedup is up to factor 3.
XLD → Creation
  • For gen_polygons_xld the methods 'sato' and 'ray' have been deprecated and have been removed from the documentation. They are still supported as undocumented features for reasons of backward compatibility. It is recommended that all applications use the method 'ramer'.

Legacy Operators

Note that legacy operators may be discontinued in a future major release. See the reference manual entries of these operators for details on how to replace them.

Legacy → 2D Metrology
The operators are now legacy. Use align_metrology_model instead of transform_metrology_object.
Legacy → Filters
Legacy → Segmentation
Previously Legacy → Calibration → Calibration Object
Legacy → OCR
Legacy → Tools

Bug Fixes

Miscellaneous
1D Measuring
  • measure_pairs sometimes returned incorrect values for IntraDistance when measuring along a circular arc, i.e., if the measure was created with gen_measure_arc. This problem has been fixed.
2D Metrology
  • apply_metrology_model did not always return a result when camera parameters and a measurement plane pose was set. This problem has been fixed. Note that result parameters in existing programs may change slightly.
  • apply_metrology_model sometimes did not find a rectangle if a measurement plane was set. The problem occurred if the chosen measurement plane had a rotation around the z-axis different from zero. This problem has been fixed.
  • get_metrology_object_param returned wrong values for the main axis if the values of at least 2 ellipses were returned. This problem has been fixed.
  • set_metrology_object_param did not return an error if measure_distance was set to a value equal or below zero. This problem has been fixed. Now the error code 1312 ("Wrong value of control parameter: 12) is returned.
3D Matching → Shape-Based
  • create_cam_pose_look_at_point returned three poses in CamPose if in RefPlaneNormal a tuple with three elements, which represent the three components of the normal vector, was passed. In this case, in CamPose a tuple of 21 elements was returned, which contained the correct pose three times. This problem has been fixed.
  • create_shape_model_3d crashed in rare cases if no OpenGL was available on the system or OpenGL was disabled by previously calling set_system ('opengl_hidden_surface_removal_enable', 'false'). This problem has been fixed.
  • create_shape_model_3d sometimes needed a very long time in HALCON XL if 'opengl_hidden_surface_removal_enable' was set to 'false' and DistMin was set to a small value such that the camera was very close to the 3D model, and hence the projection of the 3D model into the image became large. This problem has been fixed.
  • find_shape_model_3d in rare cases did not check the overlap between matches correctly. In such cases, matches that overlapped each other by more than the fraction that was passed in the generic parameter 'max_overlap' were returned. This problem has been fixed.
3D Object Model → Features
  • distance_object_model_3d returned the wrong error code 1306 ("Wrong value of control parameter: 6") if the passed object model ObjectModel3DTo did not have the required attributes. This problem has been fixed. Now, in this case the error code 9514 ("Required attribute missing in 3D object model") is returned.
  • get_object_model_3d_params returned incorrect diameters for rotated boxes. This problem has been fixed.
  • max_diameter_object_model_3d always returned 0 for 3D primitives. This problem has been fixed.
3D Object Model → Segmentation
  • fit_primitives_object_model_3d and segment_object_model_3d had very restrictive default values for the generic parameters 'min_radius' and 'max_radius'. Therefore, in many cases, the operators did not return any results. Now, the default values have been relaxed to make them suitable for a broader range of applications. Note that if the parameters 'min_radius' and 'max_radius' are not explicitely specified, fit_primitives_object_model_3d and segment_object_model_3d may now return fitted primitives in cases where no results were returned in earlier HALCON versions.
3D Object Model → Transformations
  • convex_hull_object_model_3d returned wrong results if a 3D object model was passed that contains points that all lie in a plane. This problem has been fixed.
  • project_object_model_3d in rare cases returned fragmented contours if there was no OpenGL support. This problem has been fixed.
  • register_object_model_3d_global, register_object_model_3d_pair, and create_surface_model crashed if one of the passed 3D object models contained points where one coordinate had the non-regular floating point values 'infinity' or 'not a number'. This problem has been fixed.
  • render_object_model_3d and disp_object_model_3d did not always throw an exception if the passed generic parameters were invalid. This problem has been fixed.
  • sample_object_model_3d copied extended attributes if the parameter Method was set to 'accurate' or 'accurate_use_normals'. This problem has been fixed.
  • sample_object_model_3d returned slightly incorrect results if the parameter Method was set to 'accurate' or to 'accurate_use_normals'. This problem has been fixed.
  • sample_object_model_3d crashed or showed undefined behavior when sampling faces (triangles, polygons, or primitives) with the sampling distance set to zero. This problem has been fixed. The operator now returns the error code 1303 ("Wrong value of control parameter: 3") instead.
  • triangulate_object_model_3d, called with the parameter Method set to 'greedy', returns consistently ordered triangles (clockwise or anti-clockwise) over the entire surface. However, small changes of the 3D object model used as input could have switched the orientation of the triangles in the triangulated 3D object model. This impacted on further processing steps of the triangulated 3D object model, for example with sample_object_model_3d or create_surface_model and find_surface_model. This problem has been fixed. Now, the orientation of the triangles is chosen in such a way that for the majority of triangles [0,1,2] the triangle normals (P1-P0)x(P2-P0) lie in the same half space as the mean of the input point normals N0, N1 and N2.
3D Reconstruction → Binocular Stereo
3D Reconstruction → Sheet of Light
  • create_sheet_of_light_model crashed if the number of parameters in GenParamNames was not equal to the number of values in GenParamValues. This problem has been fixed.
  • measure_profile_sheet_of_light computed wrong results if the last profile was empty and the calibration type was set to 'xyz' or 'offset_scale'. This problem has been fixed.
  • set_profile_sheet_of_light did not take into account more than one MovementPoses. If MovementPoses contained only one pose, there was no problem. If the number of elements in MovementPoses was the height of the disparity image times 7, which is also correct, an error was raised. If the number of elements in MovementPoses was incorrect, the algorithm did not raise a corresponding error. Instead of the poses passed in MovementPoses, the algorithm then used the current setting of the 'movement_pose' of the sheet of light model. If the 'movement_pose' of the sheet of light model was not set, an error was raised. These problems have been fixed. Now, if MovementPoses contains more than one pose, the number of elements in MovementPoses must be equal to seven times the height of the disparity image, otherwise an error is raised. The algorithm now uses the poses passed in MovementPoses.
  • set_profile_sheet_of_light and apply_sheet_of_light_calibration may have crashed if the region of the input image Disparity did not intersect all lines. Note that set_profile_sheet_of_light crashed only if 'calibration' was set to 'none' or 'xz'. apply_sheet_of_light_calibration crashed only if 'calibration' was set to 'xz'. These problems have been fixed.
  • set_profile_sheet_of_light ignored empty profiles. This problem has been fixed and set_profile_sheet_of_light is now consistent with apply_sheet_of_light_calibration.
Calibration → Hand-Eye
  • The semantic type of the parameter ObjInCameraPose of set_calib_data_observ_pose and get_calib_data_observ_pose was real instead of pose. This problem has been fixed.
    Note that changing the semantic type of ObjInCameraPose affects HALCON/C++ and HALCON/.NET, where SetCalibDataObservPose and GetCalibDataObservPose now get and return HPose instead of HTuple, respectively.
Calibration → Multi-View
  • get_calib_data returned camera parameters that were not available for the currently set camera if the parameter DataName was set to 'calib_settings' or 'excluded_settings'. This problem has been fixed. Now, get_calib_data only returns camera parameters that are available for the currently set camera. Furthermore, get_calib_data now returns the default values for 'calib_settings' and 'excluded_settings' for the currently set camera if the parameter ItemIdx is set to 'general'.
  • get_calib_data returned incorrect statistical values. This problem has been fixed. Now, get_calib_data returns correct statistical information.
  • set_calib_data allowed to set camera parameters that do not match the current camera type. This problem has been fixed. Now, set_calib_data sets only camera parameters that are supported by the underlying camera type.
  • set_calib_data crashed in some cases where numbers were passed instead of strings. The problem occurred in particular, if the parameter ItemType was set to 'camera' and numbers were given for the parameter DataValue and if ItemType was set to 'calib_obj_pose', ItemIdx was not set to 'general', and numbers were given for DataValue. Furthermore, if ItemType was set to 'calib_obj_pose', ItemIdx was set to 'general', and numbers were given for DataValue, set_calib_data returned the wrong error code 1301 ("Wrong value of control parameter: 1"). These problems have been fixed. Now, the error code 1205 ("Wrong type of control parameter: 5") is returned in these cases.
Classification → Gaussian Mixture Models
Classification → K-Nearest Neighbors
  • Exact k-NN-Classification did not work as expected. This problem has been fixed. Now, setting the generic parameter 'num_checks' to 0 triggers an exact search.
Classification → Neural Nets
  • add_class_train_data_mlp added wrong training data to the MLP if the number of input nodes was different from the number of output nodes. This problem has been fixed.
  • create_class_mlp crashed if it ran out of memory. This problem has been fixed.
File
  • list_image_files returned invalid paths in the output parameter ImageFiles if it was called with the parameter ImageDirectory set to a path that started with two slashes ('//'). In this case, the returned paths had only one leading slash. This problem has been fixed.
File → Images
  • read_image crashed with 32-bit BMP images that contained only gray value data. This problem has been fixed.
  • read_sequence could not handle files larger than 2GB on Windows systems. This problem has been fixed
File → XLD
  • read_contour_xld_dxf did not support POLYLINEs of the type 3D POLYLINE although the status message stated that only the z coordinates are ignored. This problem has been fixed. Now, the x and y coordinates of POLYLINEs of type 3D POLYLINE are read and respective (2D) contours are returned for 3D POLYLINES.
  • read_polygon_xld_dxf might have returned corrupt polygons that could have caused a crash in successive operators using these polygons. This problem has been fixed.
Filters → Edges
  • edges_sub_pix and lines_gauss did not close contours in rare cases. This problem has been fixed.
  • info_edges returned incorrect results in certain cases. This problem has been fixed.
Filters → FFT
  • power_byte did not round correctly. This problem has been fixed.
Filters → Geometric Transformations
Filters → Inpainting
  • harmonic_interpolation could have crashed when processing a color image on a multicore processor with automatic operator parallelization turned on. This problem has been fixed.
Filters → Lines
  • lines_gauss had a memory leak if a runtime error occurred. This problem has been fixed.
Filters → Texture
  • texture_laws returned incorrect values on compute devices in rare cases. Only filters of width 7 and specific image widths were affected.
    This problem has been fixed.
Graphics → Output
  • disp_circle was inconsistent with gen_circle. It did not produce the same results as gen_circle followed by disp_region. This problem has been fixed.
  • disp_ellipse and disp_rectangle2 allowed negative values for the half-axes, which may have led to an error. This problem has been fixed.
  • disp_object_model_3d and render_object_model_3d used incorrect colors or shading in specific cases. This problem occurred if the OpenGL compatibility mode was activated and points were rendered for at least one model. This problem has been fixed.
  • disp_object_model_3d crashed if the index appended to a generic parameter name was negative. Moreover, disp_object_model_3d crashed if intensity_idx, intensity_red_idx, intensity_green_idx, or intensity_blue_idx referred to a non-existing object model of index idx. These problems have been fixed.
  • disp_object_model_3d returned the wrong error code 1306 ("Wrong value of control parameter: 6") if the index appended to a generic parameter name was invalid or referred to a non-existing object model. This problem has been fixed. Now, the error code 1305 ("Wrong value of control parameter: 5") is returned. Note that programs that evaluate the returned error codes of disp_object_model_3d must be adapted accordingly.
  • disp_object_model_3d did not display poses if 'colored' was used after 'disp_pose' or 'disp_pose_n'. This problem has been fixed.
  • The visualization of 3D object models provided by the procedure visualize_object_model_3d did not fit properly into the given window if the image part to be displayed by this window and its size were not identical. This may have happened if dev_set_part has been called explicitly for the window or if the window has been opened or resized with one of the procedures dev_open_window_fit_image, dev_open_window_fit_size, dev_resize_window_fit_image, or dev_resize_window_fit_size. This problem has been fixed.
  • The procedure visualize_object_model_3d has been adapted to be more consistent with the operator disp_object_model_3d. visualize_object_model_3d provides the possibility to use the current window content as background for the visualization of the 3D object model. This possibility is also provided by disp_object_model_3d. In contrast to disp_object_model_3d, where this is controlled with the parameter 'disp_background', which has the default value 'false', in visualize_object_model_3d, the respective parameter was 'use_background' and had the default value 'true'. To make the parameters and their default values more consistent, the respective parameter of visualize_object_model_3d has been changed to 'disp_background' and its default value has been changed to 'false'. For compatibility reasons, the old parameter 'use_background' is supported as well. In addition, if 'use_background' (now: 'disp_background') was set to 'false', the window was cleared when leaving visualize_object_model_3d. Now, the behavior is similar to the case when 'disp_background' is set to 'true', i.e., the 3D object model is displayed in the window.
    Note that because of the change of the default behavior of visualize_object_model_3d with respect to the use of the currently displayed window content as background for the visualization, you might have to adapt those HDevelop example programs that use the procedure visualize_object_model_3d. If you displayed, e.g., a background image or some messages before the call of visualize_object_model_3d without having set the parameter 'use_background' to 'false', you now have to set the new generic parameter 'disp_background' to 'true', explicitly. In addition, if 'use_background' (now: 'disp_background') was set to 'false', the window was cleared when leaving visualize_object_model_3d. Now, the behavior is similar to the case when 'disp_background' is set to 'true', i.e., the 3D object model is displayed in the window. To achieve the old behavior, dev_clear_window has to be called explicitly after the call of visualize_object_model_3d.
Graphics → Parameters
  • set_line_style did not return an error for some invalid patterns. This problem has been fixed. Additionally, the reference manual entry has been extended with the valid range for the parameter 'Style' (1-120).
Graphics → Text
  • query_font returned monospaced fonts (e.g., Courier or Consolas) incorrectly on Windows. Instead of returning '*' for width and height, query_font returned a number for width and height, even if arbitrary sizes were possible in set_font. This problem has been fixed.
Graphics → Window
  • clear_window did not reset the text cursor position correctly. This problem has been fixed. clear_window now sets the text cursor position to (1,1) in window coordinates.
Identification → Bar Code
  • decode_bar_code_rectangle2 rejected successfully decoded candidates in some special cases. This problem has been fixed.
  • find_bar_code sometimes returned duplicate symbol regions. This was the case if there were two candidate regions for one bar code. The bar code reader detected this overlap and returned only one result in DecodedStrings but two regions in SymbolRegions. This problem has been fixed.
  • find_bar_code did not read certain bar codes of type GS1 DataBar Limited correctly because the decoding algorithm was not adapted to the new symbol structure of GS1 DataBar Limited. This problem has been fixed.
  • get_bar_code_result calculated the decodability incorrectly for EAN-13, EAN-8, UPC-A, and UPC-E bar codes. This happened also if an Add-On (Add-On 2, Add-On 5) was added to one of the four code types. This problem has been fixed.
  • The bar code reader did not decode multiple bar codes that were located close to each other horizontally. This problem has been fixed. Now, multiple bar codes, located close to each other horizontally, are decoded correctly in general.
  • The bar code reader for composite codes and the data code reader for PDF417 codes sometimes returned varying results depending on the number of threads the HALCON library used. This problem has been fixed.
Identification → Data Code
  • find_data_code_2d in very rare cases trained the parameter 'finder_pattern_tolerance' for Data Matrix ECC 200 codes incorrectly. This problem has been fixed.
  • get_data_code_2d_results returned an incorrect unused error correction grade for Data Matrix ECC 200 and QR codes for quality_aimdpm_1_2006 when the polarity was set to 'light_on_dark' and the code was light on dark. This problem has been fixed.
  • get_data_code_2d_results returned an incorrect unused error correction grade for Aztec codes for quality_aimdpm_1_2006 when the polarity was light on dark. This problem has been fixed.
  • The Aztec code reader did not handle the ECI protocol correctly. The reader failed to decode ECI character sets 000001 through 000009. Furthermore, it doubled the '\' of the ECI escape sequence instead of all other occurrences of the byte value 92 ('\'). This problem has been fixed.
  • The data code print quality inspection for Aztec Codes returned wrong values for UEC in some cases. This problem has been fixed
  • The data code quality grading of unused error correction was incorrect for Data Matrix ECC 200, QR code, Micro QR code, and Aztec when the symbol had error correction codewords reserved for error detection. This problem has been fixed.
  • The QR code reader returned incorrect grades for unused error correction in most cases. This problem occurred most likely with module sizes larger than 4 pixels. This problem has been fixed. Note that this problem has already been fixed in HALCON 11.0.3.2.
  • The QR code reader in rare cases returned the error 8506. This problem has been fixed.
  • The Data Matrix ECC 200 code reader in rare cases produced duplicate results, when the parameter 'finder_pattern_tolerance' was set to 'any' or 'low'. This problem has been fixed.
  • The Data Matrix ECC 200 reader returned false positives in very rare cases. The decoded data of these false positives contained values larger than 255. This problem has been fixed.
  • Print quality inspection of non-square Data Matrix ECC 200 codes may have returned some incorrect grades and values for Fixed Pattern Damage, Axial Nonuniformity, Grid Nonuniformity, and Unused Error Correction. This problem has been fixed.
  • For Data Matrix ECC 200 codes, the data code reader in very rare cases returned incorrect codes when the code was found with 'module_grid' set to 'variable'. This problem has been fixed.
  • The ISO/IEC 15415 and AIMDPM-1-2006 print quality grades and values of QR codes were incorrect. This problem has been fixed.
  • The AIM DPM-1-2006 cell contrast grade was evaluated with the wrong grading table. This problem has been fixed.
  • The PDF417 reader sometimes failed to decode if one finder pattern could not be detected or only one finder pattern was present. The latter is always the case for Truncated/Compact PDF417 codes. This problem has been fixed.
  • The PDF417 reader was sometimes not able to find the data code if the polarity was set to light_on_dark. This problem has been fixed.
Identification → Sample-Based
  • prepare_sample_identifier in very rare cases did not work correctly if an identical set of preparation images was added to the sample identifier multiple times by using add_sample_identifier_preparation_data. In this case, the robustness of the identification was significantly reduced. This problem has been fixed.
    Note that because of the fix the resulting prepared sample identifier slightly differs from the sample identifier that was prepared with previous HALCON versions with the same set of preparation images. Consequently, the sample-based identification may show a slightly different behavior compared to previous HALCON versions.
Image → Channel
  • returned a wrong error code if the image to be decomposed did not have enough channels. Now, instead of the error code 9003 ("Undefined gray values") the error code 3359 ("Wrong number of image channels") is returned.
    Because of a fix concerning an error code that may be returned by decompose2, decompose3, decompose4, decompose5, decompose6, and decompose7, programs that evaluate the error code returned by these operators must be adapted. Now, instead of the error code 9003 ("Undefined gray values") the error code 3359 ("Wrong number of image channels") is returned if the image to be decomposed does not have enough channels.
Image → Creation
Image → Type Conversion
Matching → Correlation-Based
  • create_ncc_model in rare cases crashed or returned the error code 6041 ("No memory block allocated at last"). This problem has been fixed. Note that this problem has already been fixed in HALCON 11.0.3.1.
Matching → Deformable
  • create_planar_calib_deformable_model_xld might have crashed if the number of shape model points were too small. This problem has been fixed. Now, the error code 8510 ("Number of shape model points too small") is returned in this case.
  • find_planar_calib_deformable_model in rare cases returned different results when called multiple times on 32-bit systems. This problem has been fixed.
  • find_planar_uncalib_deformable_model provides the possibility to restrict the extent of the change of angles and anisotropic scalings imposed by the projective transformation that encode the position of the found instances of the model. This was controlled with the two generic parameters 'max_angle_distortion' and 'max_aniso_scale_distortion'. These parameter names were misleading. Therefore, they were replaced by the new generic parameters 'angle_change_restriction' and 'aniso_scale_change_restriction'. The old parameters are still supported for backward compatibility.
Matching → Descriptor-Based
Matching → Gray-Value-Based
  • create_template and create_template_rot may have corrupted memory in case of an error. Subsequent calls to create_all_templates (e.g., by pressing F2 in HDevelop) could have caused a crash. This problem has been fixed.
Matching → Shape-Based
Morphology → Region
OCR → Segmentation
  • find_text may have returned warnings if low level error messages were switched on and 'local_mem_warnings' were set to 'true'. This problem has been fixed.
  • select_characters sometimes returned characters twice. This problem has been fixed.
  • set_text_model_param crashed when a text_line_structure with a negative index was passed. Furthermore, it was possible to pass illegal text_line_structures, which could lead to an incorrect behavior of find_text. These problems have been fixed.
Regions → Creation
  • gen_circle and gen_ellipse returned an empty region if they were called with a huge radius/huge radii. This problem has been fixed.
Regions → Features
  • select_shape returned wrong results if the operator was called with the feature 'area_holes' and real values for the parameters Min and Max. This problem has been fixed.
  • The operators returned the error code 1401 ("Wrong number of values of control parameter: 1"), 1402 ("Wrong number of values of control parameter: 2"), 1403, 1404, 1405, 1406, 1407, or 1408 ("Wrong number of values of control parameter: 8") if more than 100 control parameters were passed. This problem has been fixed.
Regions → Transformations
  • merge_regions_line_scan sometimes returned the error code 3501 ("Number of chords too big. Increase 'current_runlength_number' using set_system!") in the case of a large number of input regions. This problem has been fixed.
System → Operating System
  • count_seconds counted the elapsed time since process start on Windows systems if the system parameter 'clock_mode' was set to 'processor_time'. This problem has been fixed. Now, count_seconds with 'clock_mode' set to 'processor_time' counts only the used CPU cycles on all standard platforms.
System → Parallelization
  • write_aop_knowledge returned the error code 5198 ("Insufficient rights on file") for file names without path. hcheck_parallel was affected as well. This problem has been fixed.
System → Parameters
  • set_system did not check the allowed range for the following generic parameter values correctly:
    • 'thread_num',
    • 'tsp_thread_num',
    • 'height',
    • 'tsp_height',
    • 'width',
    • 'tsp_width',
    • 'current_runlength_number',
    • 'tsp_current_runlength_number',
    • 'image_dpi',
    • 'graphic_stack_size', and
    • 'int2_bits'.
    This problem has been fixed. Now, set_system throws an exception if a value of a generic parameter was set outside the allowed range.
System → Sockets
  • On Windows, receive_data did not return the correct address for the sender for TCP sockets. This problem has been fixed.
  • receive_tuple returned wrong numbers on 64-bit systems when negative integer values were send via send_tuple. E.g., sending -1 to a 64-bit system resulted in the received number 4294967295. This problem has been fixed.
  • In the case of a closed socket on the sender side, returned the error code 5617 ("No data on socket"). This problem has been fixed. Now, all receive_* operators return the error code 5606 ("Error while reading from socket"). Programs that evaluate the error codes returned by these operators must be adapted accordingly.
Tools → Function
  • match_funct_1d_trans sometimes crashed when the parameter Border was set to 'mirror'. This problem has been fixed.
Tools → Geometry
  • intersection_contours_xld in rare cases did not intersect vertical contours correctly. Instead, no intersection was reported even if two contours intersected. This problem has been fixed.
  • intersection_contours_xld returned no intersection point in rare cases. This problem has been fixed.
Tools → Lines
  • approx_chain returned the wrong error code 10000 ("unknown extension error") in case of invalid input parameters MinWidthCoord or MinWidthSmooth. This problem has been fixed. Now, the error codes 1303 ("Wrong value of control parameter: 8") and 1308 ("Wrong value of control parameter: 3") are returned, respectively. Note that programs that evaluate the returned error codes of approx_chain must be adapted accordingly.
Transformations → Poses
  • pose_to_quat was numerically unstable for rotation angles close to 180 degrees. This problem has been fixed.
  • vector_to_pose in some cases returned the error code 10052 ("unknown extension error") instead of 9205 ("Matrix is singular"). This problem has been fixed. Note that programs that evaluate the error codes returned by vector_to_pose must be adapted accordingly.
Tuple → Conversion
  • tuple_number did not convert hex encoded numbers containing 'e' or 'E'. This problem has been fixed. Note that this problem has already been fixed in HALCON 11.0.3.3.
  • tuple_number did not convert some real numbers. Strings containing an e/E but no decimal point were affected. This problem occurred first in HALCON 11.0.3.3. This problem has been fixed.
XLD → Creation
  • gen_contour_polygon_rounded_xld did not sample the new contour as specified. The spacing between some subsequent points was too large. This problem has been fixed.
  • gen_contours_skeleton_xld sometimes did not return the expected contours at a junction point with a quite straightforward vicinity. This problem has been fixed. Note that this problem has already been fixed in HALCON 11.0.3.2.
XLD → Features
  • select_contours_xld sometimes did not return contours if the parameter Feature was set to 'direction', even if the direction of their regression line was between Min1 and Max1. This problem has been fixed.
XLD → Transformations

HALCON/C

Functionality

  • The C and C++ code exported by HDevelop for OS X systems will now set up a CFRunLoop in the main thread and runs the HALCON code in a separate thread. Therefore, such exported code must be linked against the CoreFoundation framework.
    The C and C++ Code exported by HDevelop for Unix/Linux systems will now call the XInitThreads function from the main() function. Therefore, it may be necessary to explicitly link exported code against libX11.so.

Bug Fixes

Examples

  • The C example programs
    • c/source/example3.c,
    • c/source/example4.c,
    • c/source/example5.c,
    • c/source/example7.c, and
    • c/source/example8.c
    have been revised.
    The C example program
    • c/source/example9.c
    has been removed.
    The C example program
    • c/source/example_extern8.c
    has been added. It shows how to create a HALCON image from user memory. In contrast to example8.c, the memory is not copied but pointed to.
    The folder structure of the C examples has been made consistent with the C++ examples in cpp/console.

HALCON/C++

Functionality

  • The HALCON/CPP class HTuple was not thread safe. Tuples always had to be cloned when used in multiple threads, even when merely reading. This problem has been fixed. Now, the HTuple is thread safe. Copies of a HTuple instance can be used in different threads. They do not need to be cloned before anymore.
  • Some operators were hard to use in the object-oriented language interfaces HALCON/CPP and HALCON/.NET. These operators did not offer a suitable signature for their class method variant. In particular, it was impossible to pass a multivalue control parameter (e.g., for generic parameters) when using a single pose, although it would make sense for the operator. For a better usability, the listed input control parameters of the following operators now support only a tuple type in all language interfaces:
  • The C and C++ code exported by HDevelop for OS X systems will now set up a CFRunLoop in the main thread and runs the HALCON code in a separate thread. Therefore, such exported code must be linked against the CoreFoundation framework.
    The C and C++ Code exported by HDevelop for Unix/Linux systems will now call the XInitThreads function from the main() function. Therefore, it may be necessary to explicitly link exported code against libX11.so.
  • The semantic type of the parameter ObjInCameraPose of set_calib_data_observ_pose and get_calib_data_observ_pose was real instead of pose. This problem has been fixed.
    Note that because of this change, SetCalibDataObservPose and GetCalibDataObservPose now get and return HPose instead of HTuple, respectively.

Bug Fixes

  • The class implementation of legacy HALCON/C++ returned the error code 7200 ("Wrong number of output object parameter") in specific cases. The error occurred if an operator with more than one iconic output parameter was called with a non-empty HALCON object as iconic output parameter. This problem has been fixed.
  • HALCON/C++ returned inconsistent tuples in some cases. The problem occurred if output tuples containing only one value were reused, e.g., in a loop. The further use of these tuples was not safe and may have introduced undefined values. This problem has been fixed.
  • The HALCON/C++ data array classes (HPoseArray, HHomMat2DArray, HHomMat3DArray, HQuaternionArray) now have a copy constructor. The lack of a copy constructor meant that operators returning this type of value did not work except when using a variable initializer. This problem has been fixed.
  • HOperatorException::ThrowInstance() and HTupleAccessException::ThrowInstance() delegated to the base class HException. Therefore, only a copy of HException was thrown, meaning that the user always got an exception of the base class HException, only, even if the C++ interface raised an HOperatorException or an HTupleAccessException. This problem has been fixed.
  • Using the HObject::operator [] in HALCON/CPP might have caused the error code 4051 ("Image data management: object has been deleted already "). This problem has been fixed. Note that this problem has already been fixed in HALCON 11.0.3.1.
  • Iconic classes in HALCON/C++ were not type-safe. For example, it was possible to assign a region object to an instance of HImage. This problem has been fixed. Now, in this situation an exception will be raised.
  • HXLD.GetRectanglePose and HPose.CreateCamPoseLookAtPoint returned only a single pose although the operators get_rectangle_pose and create_cam_pose_look_at_point are able to return multiple poses. This problem has been fixed.
    In HALCON/C++, the signatures of HXLD::GetRectanglePose and HPose::CreateCamPoseLookAtPoint have been changed. They now return HPoseArray instead of HPose. Note that these changes are not source code compatible.
    In HALCON/.NET, the signatures of HXLD.GetRectanglePose and HPose.CreateCamPoseLookAtPoint have been changed. They now return HPose[] instead of HPose. Note that these changes are not source code compatible.
  • smallest_sphere_object_model_3d does not provide the useless signature variant offering a double type for parameter CenterPoint anymore. This means in detail:
    HTuple HObjectModel3D::SmallestSphereObjectModel3d(double* Radius) const replaces double HObjectModel3D::SmallestSphereObjectModel3d(double* Radius) const

HALCON/C++ (Legacy)

Bug Fixes

HALCON/.NET

Functionality

  • All tool classes (derived from HToolBase) in HALCON/C++ and HALCON/.NET now feature a Detach() method that relinquishes ownership of a handle, but allows to continue using the object as long as the handle is kept alive externally.
  • The HTuple class in HALCON/.NET now has a bool constructor that creates an integer tuple with a value of 0 or 1, respectively.
    Note that in rare cases this could make existing source code ambiguous (if a tuple was created from an unsupported type that allows cast to bool and exactly one other supported type). To fix this, introduce an explicit type cast.
  • The semantic type of the parameter ObjInCameraPose of set_calib_data_observ_pose and get_calib_data_observ_pose was real instead of pose. This problem has been fixed.
    Note that because of this change, SetCalibDataObservPose and GetCalibDataObservPose now get and return HPose instead of HTuple, respectively.

Bug Fixes

  • HXLD.GetRectanglePose and HPose.CreateCamPoseLookAtPoint returned only a single pose although the operators get_rectangle_pose and create_cam_pose_look_at_point are able to return multiple poses. This problem has been fixed.
    In HALCON/C++, the signatures of HXLD::GetRectanglePose and HPose::CreateCamPoseLookAtPoint have been changed. They now return HPoseArray instead of HPose. Note that these changes are not source code compatible.
    In HALCON/.NET, the signatures of HXLD.GetRectanglePose and HPose.CreateCamPoseLookAtPoint have been changed. They now return HPose[] instead of HPose. Note that these changes are not source code compatible.
  • Some XLD classes could not be serialized. The affected classes were HXLDCont, HXLDExtPara, HXLDModPara, HXLDPara, and HXLDPoly. This problem has been fixed.
  • Some operators were hard to use in the object-oriented language interfaces HALCON/CPP and HALCON/.NET. These operators did not offer a suitable signature for their class method variant. In particular, it was impossible to pass a multivalue control parameter (e.g., for generic parameters) when using a single pose, although it would make sense for the operator. For a better usability, the listed input control parameters of the following operators now support only a tuple type in all language interfaces:
  • smallest_sphere_object_model_3d does not provide the useless signature variant offering a double type for parameter CenterPoint anymore. This means in detail:
    HTuple HObjectModel3D.SmallestSphereObjectModel3d(out double radius) replaces double HObjectModel3D.SmallestSphereObjectModel3d(out double radius)

HDevEngine

Functionality

  • HDevEngine has been extended to support the new vector variables. The new HDevEngine/C++ example program
    • hdevengine/cpp/source/use_vector_variables.cpp
    demonstrates the usage of vector variables in HDevEngine. A suitable Visual Studio 2005 Project has been added in the directory hdevengine/cpp/vs2005/use_vector_variables and the solution vs2005/examples.sln has been extended accordingly.
    Furthermore, the new HDevEngine/.NET example project UseVectorVariables under hdevengine/c# demonstrates the use of vector variables in C#.
    Both examples use the new HDevelop program
    • hdevengine/hdevelop/use_vector_variables.hdev
    and the new HDevelop procedure
    • hdevengine/procedures/use_vector_variables.hdvp.
  • The HDevEngine has been extended to support the starting of sub threads from within an HDevelop script.
  • HDevelop and the HDevEngine have been extended with a just-in-time (JIT) compiler that - depending on the code structure - may significantly accelerate the runtime of HDevelop procedures. Especially procedures with loops and lots of calculations that are implemented in HDevelop language will benefit from that. However, there are some statements that are not supported by the JIT compiler. Procedures using these statements are executed as hitherto without compilation. In HDevelop, also procedures with breakpoints and stop statements are not executed JIT-compiled. Details can be found in the respective documentation within the HDevelop User's Guide. It is possible to enable and disable the use of the JIT compiler globally - in HDevelop via the Preferences dialog and in HDevEngine via the method HDevEngine::SetEngineAttributes.
    The new HDevelop example program
    • hdevelop/Runtime/test_jit_speedup.hdev
    demonstrates the usage and the effect of the just-in-time compiler in HDevelop.
    The new HDevEngine/C++ example program
    • hdevengine/cpp/source/use_jit_compiler.cpp
    demonstrates the usage of the just-in-time compiler in HDevEngine. A suitable Visual Studio 2005 Project was added in the directory hdevengine/cpp/vs2005/use_jit_compiler, and the solution vs2005/examples.sln was extended accordingly.
    Furthermore, the new HDevEngine/.NET example project UseJitCompiler under hdevengine/c# demonstrates the use of this functionality in C#.

Bug Fixes

  • HDevEngine was not able to resolve import statements in programs when
    • the program was specified by a relative path,
    • the program contained import statements, and
    • these import statements had a relative path as parameter.
    This problem has been fixed.
  • Import statements with paths relative to the program's file location (like import .) were not resolved correctly. This problem has been fixed.
  • HDevengine did not throw exceptions if license errors occurred during the initialization. Instead, an error message popped up and the application quit. This problem has been fixed.
  • Using a dummy implementation for dev_open_window and dev_get_window, e.g.,
    int MyHDevOperatorImpl::DevOpenWindow(...) { return H_MSG_TRUE; }
    resulted in an error code 1501 ("Wrong number of values of object parameter: 1") from dev_open_window/dev_get_window. Moreover, if no implementation was set at all, the window handles returned by dev_open_window and dev_get_window were uninitialized. These problems have been fixed. Now, in such a case they are both initialized with the value -1.
  • Applications using HDevEngine/.NET in rare cases could have crashed when the engine classes were not explicitely disposed. This problem has been fixed.

HALCON Codelets

Legacy

  • The HALCON Codelets are now legacy. They are still available, but they have not been updated to new features of HALCON 12. When using applications with HALCON Codelets, only features of HALCON 11 may be used.

HALCON (general)

Functionality

  • For consistency, the information associated with an error should be always described as "error code" and "error message". Therefore, "error number" and "error text", which have been used in the exception management of HALCON/C++, HALCON/.NET, and HDevEngineCpp, have been replaced with "error code" and "error message", respectively. For reasons of clarity, abbreviated slot names, such as 'error_msg', 'add_error_msg', and 'proc_line', as used in dev_get_exception_data and GetExceptionData, have been replaced with 'error_message', 'add_error_message', and 'program_line', respectively. Note that for compatibility reasons, the abbreviated slot names are still supported.
  • HALCON now provides an extension for Visual Studio that allows to inspect the contents of HALCON variables directly in the debug mode of Visual Studio. The new HALCON Variable Inspect extension can easily be installed by double-clicking the file %HALCONROOT%/misc/HALCON_Variable_Inspect.vsix and provides the inspection of HALCON/CPP and HALCON/C# iconic objects and tuples. This Visual Studio extension requires a development license of HALCON and Visual Studio 2010 Professional or higher.
  • The support for Visual Studio 2002, Visual Studio 2003 and Visual Basic 6 is no longer provided. The minimum system requirement is now Visual Studio 2005 or higher. The file export to 'Visual Basic 6.0 - HALCON/COM' has been removed and is no longer possible.
    The following example applications have been removed:
    • vb6/HDevelopTemplate/,
    • vb6/Matching/,
    • hdevengine/vb6/ErrorHandling/,
    • hdevengine/vb6/ExecExtProc/,
    • hdevengine/vb6/ExecProgram,
    • solution_guide/image_acquisition/vb/error_handling_timeout_leutron, and
    • extension_package/halconuser/source/testthresholdcom.

Image Acquisition Interfaces

The latest information about new interface revisions and newly supported image acquisition devices can be found on MVTec's web server.

    New Image Acquisition Interfaces:

    • The following HALCON image acquisition interfaces have been introduced since HALCON 11.0.3:
      • HALCON has been extended with the Argos3D-P1xx interface. It supports the Argos3D-P1xx camera family from the Austrian camera manufacturer Bluetechnix. This new interface allows the easy acquisition of calibrated 3D data (distance, amplitude, and Cartesian X/Y/Z images) based on time-of-flight technology.
      • HALCON has been extended with the SICK-ScanningRuler interface. It supports the new ScanningRuler 3D camera from SICK. This new interface allows accurate and reliable 3D measurements of stationary objects using a built-in laser light source. Due to the large field of view the acquired 3D data can easily be processed in various application areas such as bin picking or de-palletizing. It uses the new SICK icon API 5.1.
      • The following three interfaces are now available for Windows x64:
        • the Opteon interface,
        • the DahengCAM interface, and
        • the Ginga++ interface.

    Modified Image Acquisition Interfaces

    • The following HALCON image acquisition interfaces have been revised since HALCON 11.0.3:
      • The new revision of the ABS interface supports now also USB 3.0 devices. Furthermore, the new interface revision includes two minor bugfixes and provides the new parameter 'framerate_mode'.
      • The new revision of the Crevis interface includes an updated documentation that describes the system requirements and limitations in more detail.
      • The new revision of the DahengCAM interface supports now also the HV-xx51 camera series.
      • The new revision of the DirectShow interface provides a bug fix to prevent opening the same device twice.
      • The new revision of the Ensenso-NxLib interface includes an updated system requirements section within the interface documentation.
      • The new revision of the GigEVision interface provides bug fixes regarding unregistering a callback via set_framegrabber_callback and setting "empty" parameter values.
      • The new revision of the Ginga++ interface includes several minor bug fixes.
      • The new revision of the GingaDG interface includes a bug fix regarding the parameter 'do_force_trigger'.
      • The new revision of the MatrixVisionAcquire interface supports now the ibpfMono12Packed_V1 pixel format, 64-bit integer properties, and mvVirtualDevice virtual devices. Furthermore, the new interface revision fixes issues in the operators open_framegrabber and info_framegrabber that could occur under certain circumstances, and includes several minor fixes regarding parameterization.
      • The new revision of the OpenNI interface includes an updated documentation that describes the dependencies and the installation of the underlying driver and SDK packages.
      • The new revision of the Opteon interface is now based on v5.0 of the Opteon software distribution. Furthermore, the new interface revision supports also multi-channel controllers via the new parameter 'line_in'.
      • The new revision of the pylon interface has been adapted to the latest version 4.2 of the Basler pylon camera software suite. Furthermore, the new interface revision includes several bugfixes, in particular regarding volatile grabbing mode and regarding the usage of user-defined callbacks.
      • The new revision of the SaperaLT interface includes various extensions and improvements such as new parameters, a new callback type, a revised documentation, a new HDevelop program showing the usage of the GIO pins, and an improved function to show low-level error messages. Furthermore, the new interface revision fixes several issues, in particular regarding the acquisition engine in case of timeouts and regarding a memory leak in the acquisition engine.
      • The new revision of the SICK-3DCamera interface has been adapted to the new SICK icon API 4.4.3 and eBus driver 3.1. Furthermore, the new interface revision provides two minor bug fixes regarding parameterization and provides several minor bug fixes regarding the operators open_framegrabber, info_framegrabber, and set_framegrabber_param.
      • The new revision of the uEye interface supports now the 12-bit RGB color format and provides also the new parameter 'burst_size'. Furthermore, the new interface revision allows the application to get notified via the two new callback types 'device_removed' and 'device_reconnected'.
      • The new revision of the USB3Vision interface supports more host controllers for driver installation on Windows and fixes a possible deadlock during initialization on Windows.
      • The new revision of the Video4Linux2 interface adds support for the 'RGGB' format, solves problems regarding debug messages and regarding error handling and grab timeout, and includes several minor bug fixes.
    • Please refer to the corresponding documentation for information about additional changes, especially whether a new revision of the corresponding device driver is required.

    Legacy Image Acquisition Interfaces

    • The following HALCON 12.0 image acquisition interfaces are now only available in the Legacy download area:
      • 1394IIDC-2
      • INSPECTA
      • OpenNI
      • p3i2
      • PcEyeCL
    • The following HALCON image acquisition interfaces are no longer supported for HALCON 12.0:
      • dPict
      • INSPECTA-5
      • MatrixVision
      • SonyXCI-2
      • SVCam-GigE
      • Leutron

    Documentation

    Installation Guide

    The Installation Guide is available in a new edition. It has been adapted to the changes in HALCON 12.0. Amongst others, it now includes a list of installed registry keys on Windows systems in the appendix.

    HDevelop User's Guide

    The HDevelop User's Guide is now available in a new edition. It has been adapted to the changes in HALCON 12.0. Amongst others, it has been extended by documentation related to

    Additionally, it has been adapted to

    Quick Guide

    The Quick Guide is available in a new edition. It has been adapted to the changes in HALCON 12.0. Amongst others,

    Solution Guide I (Basics)

    The Solution Guide I (Basics) is available in a new edition. It has been adapted to the changes in HALCON 12.0. Amongst others, it has been extended by documentation related to

    Solution Guide II+III (Advanced)

    Programmer's Guide

    The Programmer's Guide is available in a new edition. It has been adapted to the changes in HALCON 12.0. Amongst others, it has been extended by documentation related to

    Additionally, information related to Visual Studio 2002, Visual Studio 2003, and Visual Basic 6, which are not supported anymore, has been removed from the documentation.

    Extension Package Programmer's Manual

    The Extension Package Programmer's Manual is available in a new edition. It has been adapted to the changes in HALCON 12.0. Amongst others, it has been extended to describe the new table environment for the operator reference.

    Reference Manual

    • The HALCON Operator Reference now supports the following new features:
      • figures (HTML and PDF),
      • formulae, i.e., instead of simplified ASCII formulae, the HTML version now includes formulae similar to the PDF version, and
      • tables (HTML and PDF).
    • The warnings concerning the usage of handles in multiple threads were not consistent in the reference manual. In some reference manual entries, those warnings were not clear enough and in some other entries the warning was completely missing. This problem has been fixed.
    • The error returned by the camera calibration was documented as the average back projection error. Instead, it is the root mean square error of the back projection. This problem has been fixed.
    • The reference manual entry of create_planar_calib_deformable_model did not mention the orientation in which the ReferencePose must be specified. This problem has been fixed.
    • The reference manual entry of do_ocr_single_class_knn, do_ocr_multi_class_knn, and do_ocr_word_knn now shortly describes the meaning of the confidence values returned by the classification.
    • The reference manual entries of did not mention that the parameter AngleExtent must be set to 0 if approximately rotationally objects are searched for with 'max_deformation' set to a value greater than 0. This problem has been fixed.
    • The reference manual entries of operators that use the internal 3D point cloud pose refinement (ICP), namely now state the maximal numerical accuracy of the refinement.
    • The reference manual entry of fit_primitives_object_model_3d stated that "If no primitive can be fitted to the set of 3D points, an empty 3D object model is returned". This was not correct. The content of the returned object model depends on the chosen values for 'output_point_coord' and 'output_xyz_mapping'. This problem has been fixed.
    • The reference manual entries of stated that pointers are generic (long) and thus a cast becomes necessary. This was misleading, as a cast from the data type 'long' may have led to truncated pointers depending on the used operator signature and programming environment. In some cases, 'Hlong' must be used instead of 'long'. This problem has been fixed.
    • The reference manual entry of gen_region_runs did not contain a warning concerning the restriction that ColumnEnd must be greater or equal to ColumnBegin. This problem has been fixed. Now, it contains a warning, which mentions that this restriction is not checked by gen_region_runs and that a violation of this restriction may result in errors and unexpected behavior of subsequent operations.
    • The reference manual entry of get_calib_data_observ_points did not contain detailed information about the returned values for Row and Column. The documentation now gives more information about the values that are returned for the coordinates of the detected points depending on the used operator for the calibration. This problem has been fixed.
    • The reference manual entry of get_data_code_2d_results did not describe the parameters 'quality_aimdpm_1_2006', 'quality_aimdpm_1_2006_labels', and 'quality_aimdpm_1_2006_values' for Aztec codes. This problem has been fixed.
    • The reference manual entries of optimize_fft_speed and optimize_rft_speed were not clear enough. There was no information if the optimized data may be transferred and used on other computers. This problem has been fixed. The documentation now contains the information that the resulting data is not suited for the use on other computers with different configurations.
    • The reference manual entry of read_object_model_3d has been improved. Now, it is described what exactly happens when passing string values to the parameter Scale, and that it is possible to pass numeric values, as well.
    • The reference manual entry of reconstruct_surface_stereo did not describe how point normals are determined. This problem has been fixed. Now, it is described that the normal vector of a point is calculated by fitting a plane through its neighboring points and using the normal vector of the plane as normal vector of the respective point.
    • The reference manual entry of set_line_style has been extended with the valid range for the parameter 'Style' (1-120).
    • In the reference manual entries of tuple_is_int, tuple_is_real, and tuple_is_string it is now mentioned more explicitly, that those operators return the type of the internal representation of a tuple, and that this type does not necessarily correspond to the type of the tuple's elements.
    • The reference manual entry of union_collinear_contours_xld has been rewritten. Now, it has a clear structure and the parameters are described with drawings.
    • The reference manual entry of write_object_model_3d stated that the STL format supports triangles and triangle normals. This suggested that normals that were contained in a 3D object model were written to file. However, as triangle normals are not supported by 3D object models and point normals are not supported by the STL format, no normals were written to file. The documentation was extended accordingly.

    Supported Operating Systems

    Windows

    HALCON 12.0 has been compiled in the following Windows platform versions:

    • x86sse2-win32 platform version for Windows Vista/2008/7/8/2012 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 x64 Edition on Intel 64 or AMD64 processors
    • Since Windows XP is now officially discontinued by Microsoft, HALCON no longer supports Windows XP. The documentation has been adapted accordingly.

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

    On machines that support the AVX2 instruction set, HALCON automatically exploits the AVX2 instruction set under Windows and Linux.

    During the installation, the environment variable HALCONARCH is set to x86sse2-win32 or x64-win64 to indicate the installed architecture.

    Please note that if you want to switch to another platform version, you must first install it. Then, you must adapt the environment variables HALCONARCH and PATH (see the Installation Guide for more information).

    Linux

    HALCON 12.0 has been compiled in 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. Note that the two platform version x86sse2-linux2.4-gcc40 and x64-linux2.4-gcc40 are not longer supported. Therefore, the value of $HALCONARCH changes.

    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-bit or 64-bit system and provides a suitable list of platfrom versions that can be installed.

    OS X

    HALCON 12.0 has been compiled for OS X in the following platform version:

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

    Miscellaneous

    General

      Installation

      • The HALCON 11.0.3 installer missed to install the auxiliary DLLs haspsrm_win32.dll (and haspsrm_win64.dll, respectively) if the dongle driver installation was not selected within the setup procedure. This problem has been fixed. Note that this problem has already been fixed in HALCON 11.0.3.2.
      • The HALCON installer did not install the following binaries in the directory %HALCONROOT%/bin/%HALCONARCH%, which are necessary to run the HALCON USB3Vision interface:
        • hAcqUSB3VisionElevate.exe
        • libusb-1.0-usan.dll
        • libwdi-usan.dll
        This problem has been fixed. Note that this problem has already been fixed in HALCON 11.0.3.2.
      • The following changes have been made on the Windows Installer for HALCON:
        • The entries in the Windows Start Menu have been reduced. All links to examples or tutorials have been removed. Now a link to the overview page of the documentation is available.
        • The Visual Studio 2010 Redistributable Package has been added and will be installed, if it isn't already installed.
        • The HALCON GigE Vision Filter Driver comes now with a separate installer, so it isn't necessary anymore to install it manually. Please note that this installer has also an own Uninstaller and will not automatically removed with the de-installation of HALCON.
      • To use USB dongles unter Linux, it is necessary, to install the dongle daemon manually as described in the Installation Guide.
      • If the support of USB dongles is selected during the installation on OS X, the file hasp_darwin.dylib will be copied into the directory /usr/bin.

      Licensing

      • HALCON now uses version 11.12.1.4 of the FLEXnet Publisher license manager software.

      Example Images

      New Example Images

      For several of the new HDevelop example programs, new images are available:

      • The new example image
        • barcode/mixed/barcodes_datacodes_mixed_01.png.
        is used by the new HDevelop example program
        • hdevelop/Control/par_start.hdev
        that shows how to use the new HDevelop statements par_start and par_join to control the parallel execution of operators and procedures in HDevelop.
      • The new example image
        • datacode/ecc200/ecc200_print_quality_01.png
        corresponds to the requirements of the ISO/IEC 15415 standard. The modules of the data code measure 10 pixels in width and height. It is used by the new HDevelop example program
        • hdevelop/Identification/Data-Code/ecc200_direct_mark_quality_semi_t10.hdev
        that shows how to assess the direct part mark quality of an Data Matrix ECC 200 code, compliant with the SEMI T10-0701 standard, and the extended HDevelop example program
        • hdevelop/Identification/Data-Code/ecc200_print_quality.hdev.
      • The new example images
        • calib/calib_single_camera_[01-07].png.
        are used by the new HDevelop example program
        • hdevelop/Calibration/Multi-View/calibrate_cameras_monocular.hdev
        that demonstrates the calibration of a single camera with the new calibration plate.
        The new example images
        • 3d_machine_vision/calib/calib_image_[01-07].png and
        • 3d_machine_vision/calib/ruler.png
        are used by the HDevelop example program
        • solution_guide/3d_vision/camera_calibration_multi_image.hdev
        that has been adapted to use the new calibration plate.
      • The new example images
        • caliper/caliper_with_tilt.png,
        • caliper/caliper_no_tilt.png,
        • calib/calib_telecentric_tilt_[01-17].png, and
        • caliper/caliper_measurement_plane.png.
        are used by the new HDevelop example program
        • hdevelop/Calibration/Multi-View/calibrate_cameras_telecentric_tilt.hdev
        that shows how to calibrate a camera with a telecentric tilt lens. The new example images
        • stereo/telecentric_tilt/cam_0_calib_plate_[01-08].png,
        • stereo/telecentric_tilt/cam_1_calib_plate_[01-08].png,
        • stereo/telecentric_tilt/cam_0_cartridge.png,
        • stereo/telecentric_tilt/cam_1_cartridge.png,
        • stereo/telecentric_tilt/cam_0_tissue.png, and
        • stereo/telecentric_tilt/cam_1_tissue.png.
        are used by the new HDevelop example program
        • hdevelop/Calibration/Multi-View/calibrate_cameras_telecentric_tilt_stereo.hdev
        that shows how to calibrate a stereo camera setup using the new camera model for telecentric tilt lenses.
      • The new example images
        • 3d_machine_vision/handeye/scara_moving_cam_setup_01_[01-10].png and
        • 3d_machine_vision/handeye/scara_stationary_cam_setup_01_[01-10].png.
        are used by the new HDevelop example programs
        • hdevelop/Calibration/Hand-Eye/calibrate_hand_eye_scara_moving_cam.hdev and
        • hdevelop/Calibration/Hand-Eye/calibrate_hand_eye_scara_stationary_cam.hdev
        that show how to calibrate a SCARA hand-eye system.
        The new example image
        • 3d_machine_vision/handeye/scara_stationary_cam_setup_01_calib_approx_01.png.
        is used by the new HDevelop example program
        • hdevelop/Calibration/Hand-Eye/calibrate_hand_eye_scara_stationary_cam_approx.hdev
        that shows how to approximately calibrate a SCARA handy-eye system without using a calibration plate.
        The new example images
        • 3d_machine_vision/handeye/scara_stationary_cam_setup_01_metal_parts_[01-06].png.
        are used by the new HDevelop example program
        • hdevelop/Calibration/Hand-Eye/pick_and_place_scara_stationary_cam.hdev
        that shows how to use the (exact or approximate) calibration results provided by the HDevelop example programs calibrate_hand_eye_scara_stationary_cam.hdev and calibrate_hand_eye_scara_stationary_cam_approx.hdev for a pick-and-place application.
      • The new example image
        • sheet_of_light/calib_object_disparity.tif.
        is used by the new HDevelop example program
        • hdevelop/3D-Reconstruction/Sheet-Of-Light/calibrate_sheet_of_light_3d_calib_object.hdev
        that shows how to use the new operator calibrate_sheet_of_lightto calibrate a sheet-of-light model with a 3D calibration object.
      • The new example images
        • sheet_of_light/injection_mould_[01-06]_disparity.tif
        are used by the HDevelop example program
        • hdevelop/Applications/Surface-Inspection/check_for_holes_sheet_of_light.hdev
        that shows how to detect additional, missing, or incorrectly placed holes as well as holes that have a wrong diameter in 3D objects.
      • The new example images
        • plastic_parts/phone_camera_frame_01.png and
        • plastic_parts/phone_camera_frame_02.png.
        are used by the new HDevelop example programs
        • hdevelop/Applications/Measuring-2D/inspect_frame_width.hdev and
        • hdevelop/Tools/Geometry/apply_distance_transform.hdev
        that show how to use the new functionality to calculate the pointwise distance between contours.
      • The new example image
        • ocr/medication_package_02_right.png.
        is used by the new HDevelop example program
        • hdevelop/OCR/Segmentation/find_text.hdev
        that shows how to use the new automatic text reader. The new images
        • ocr/medication_package_[01-03]_front.png,
        • ocr/medication_package_[01-03]_left.png,
        • ocr/medication_package_[01-03]_back.png,
        • ocr/medication_package_[01-03]_right.png,
        • ocr/medication_package_[01-03]_bottom.png, and
        • ocr/medication_package_[01-03]_top.png.
        are used by the new HDevelop example program
        • hdevelop/OCR/Segmentation/find_expiration_date.hdev
        that shows an application of the new automatic text reader.
      • The new example images
        • barcode/ean13/ean13_meas_param_estimation_[01-10].png.
        are used by the new HDevelop example program
        • hdevelop/Identification/Bar-Code/barcode_param_meas_param_estimation.hdev
        that demonstrates the usage and use cases for the new bar code parameter 'meas_param_estimation'.
      • The new example image
        • barcode/25interleaved/25interleaved_zeiss1.png.
        is used by the new HDevelop example program
        • hdevelop/Identification/Bar-Code/barcode_param_contrast_min.hdev
        that shows how to reject bar code candidate regions depending on their contrast.
      • The new example image
        • barcode/code32/code32_01.png.
        is used by the new HDevelop example program
        • hdevelop/Identification/Bar-Code/code32.hdev
        that shows how to read a bar code of type 'Code 32' by using the bar code reader for the code type 'Code 39' in combination with the new external procedure
        • general/convert_decoded_string_code39_to_code32.hdvp.
      • The new example image
        • barcode/ean13.png.
        is used by the new HDevelop example program
        • hdevelop/Identification/Bar-Code/barcode_param_majority_voting.hdev
        that shows how to use the new parameter 'majority_voting' of the bar code reader.
      • The new example images
        • stereo/middlebury_cones/im2.png,
        • stereo/middlebury_cones/im6.png,
        • stereo/middlebury_cones/disp2.png, and
        • stereo/middlebury_cones/occl.png.
        are used by the new HDevelop example program
        • hdevelop/3D-Reconstruction/Binocular-Stereo/binocular_disparity_comparison.hdev
        that compares the different approaches for stereo reconstruction, amongst others the new binocular stereo approach that solves the stereo correspondence using multi-scanline optimization, with regard to accuracy and runtime.
      Changed Example Images

      The following example images have been removed:

      • The example image woodcell.png in the directory %HALCONIMAGES% was not used by any example program and, thus, has been removed from the set of installed example images. Furthermore, the example images calib_image_[01-07].png in the directory %HALCONIMAGES%/3d_machine_vision/calib are not used by any example program and, thus, have been removed from the set of installed example images.

      3D Object Models

      New 3D Object Models

      The following new 3D object models are available:

      • The new 3D object models
        • silicone_baking_mold/silicone_baking_mold_3d_model.om3 and
        • silicone_baking_mold/silicone_baking_mold_3d_scene_[01-07].om3.
        are used by the new HDevelop example program
        • hdevelop/3D-Matching/Deformable-Surface-Based/find_deformable_surface_model.hdev
        that shows how to use the deformable surface-based 3D matching.