Release Notes for HALCON 9.0  
 

 

This document provides the release notes for MVTec HALCON 9.0, as released in December 2008.




Overview

This document contains the following information:

Compatibility
Major New Features of HALCON 9.0
Detailed Description of Changes in HALCON 9.0 (relative to HALCON 8.0.2)




Compatibility

o Licenses

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



o Parallelization by Default

HALCON is now parallelized by default, i.e., the library that is used as standard corresponds to the library that was previously used for Parallel HALCON. If you previously used Parallel HALCON, you have to replace the library files starting with 'par' by those that do not have this prefix. If you previously used Standard HALCON, you can now benefit from the parallelization without any further action. If you do not want to use the parallelized version, you can switch off the parallelization using the operator set_system. Please see the Reference Manual entry for set_system or the Programmer's Guide for further information.



o HALCON Library

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



o HALCON Applications

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

The incompatibility with HALCON 8.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.

Please note the following source-code incompatibilities:

  • Because fread_char no longer treats the line feed character in a special manner, programs that react on the line feed character must be rewritten.
  • Because of changes for the gray-value morphology with arbitrary structuring elements, besides a changed format for the structuring elements, the signature of the operator gen_disc_se has changed und thus, the operator is not source-code compatible anymore.
  • Because the default types of Knots and Weights in gen_contour_nurbs_xld have been changed from real to string, the operator API in the language interface has changed.
  • Because of a revision of HALCON's hand-eye calibration, the operator hand_eye_calibration is not source-code compatible to previous HALCON versions. Applications that use hand_eye_calibration must therefore be adapted to the changed interface.
  • Because of a replacement of pointer parameters in the operators new_extern_window and set_window_dc, these operators are not source-code compatible anymore.
  • Because of a changed error code, applications using the constant H_ERR_WRRLN2 should be rebuilt.
  • The enum HBaseArrayMode as well as the corresponding constructors of HBaseArray, HObjectArray, and HXldArray have been removed from the HALCON/C++ interface.
  • Because the parameters and return values representing tool classes for the object-oriented API of HALCON/C++ now use the actual class type instead of untyped handles, existing applications are not source-code compatible anymore.
  • Because of changes for the signature of the object oriented variant of the operator adjust_mosaic_images in HALCON/.NET and HALCON/COM, this variant is not source-code compatible anymore.
  • If an operator is called using a single API variant in HALCON/.NET or HALCON/COM and returns an empty tuple, now an error instead of an adhoc value is returned. Thus, a different error handling might be required.
  • Because the semantic type 'feature_set' is now represented by the new class HFeatureSet in HALCON/.NET, HClassBox.LearnSampsetBox and HClassBox.TestSampsetBox are not source-code compatible anymore.
  • The HALCON/COM interface has been revised. The source-code compatibility is mostly preserved. The exceptions are listed here.

o HDevEngine

The HDevEngine has been revised. The old HDevEngine interface is still supported, but will be discarded in the next version after HALCON 9.0. Therefore, all applications that use the HDevEngine and that want to be prepared to upgrade to future HALCON versions should be adapted to use the new HDevEngine.



o Image Acquisition Interfaces

Because of the new version of the HALCON Acquisition Integration Interface, acquisition interfaces developed with HALCON 8.0.x or lower are not binary compatible, but mostly source-code compatible with HALCON 9.0. See here for more information.


o Extension Packages

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


o ActivVisionTools
  • If you have been using ActivVisionTools 3.2, please contact your distributor for further information on how to run this version together with HALCON 9.0.
  • ActivVisionTools 1.0 to 3.1 cannot be used with HALCON 9.0. If the setup program detects such an ActivVisionTools version, it warns you that by continuing to install HALCON 9.0 you will disable your ActivVisionTools installation.

    If you still want to use your ActivVisionTools installation you must also keep your old HALCON installation and switch back to it as described in the Installation Guide.



Major New Features of HALCON 9.0

General Features
HDevelop
Supported Operating Systems and Platforms
Documentation

General Features

o HALCON XL:
  • HALCON is now able to handle images that are larger than 32767 x 32767. For this, HALCON XL has been introduced.

o Parallelization:
o HALCON Codelets:
  • HALCON has been extended with a large amount of new source code modules and classes (so-called HALCON Codelets) that can be used outside the development environment HDevelop.

o 3D Vision:
o Matching:
o Bar Code Reading:
o Data Code Reading:
o Mathematical Operations:
o Further Enhancements:

HDevelop

o Full Text Editor:

HDevelop has been extended with an editor for full text editing of HALCON scripts.



o Calibration Assistant:

HDevelop has been extended by a Calibration Assistant.



o Procedures:

o General Usabilty:

The general usability of HDevelop has been enhanced in many ways.




Supported Operating Systems and Platforms

o Legacy Versions for Linux Application Binary Interfaces

For Linux, the *-gcc33 versions of the Application Binary Interface are now only available in the Legacy download area.



Please refer to the detailed list of supported operating systems for more information.

Documentation

o Enhanced Access of Information:

Besides the full text search in HDevelop's online help browser, information can now be better retrieved via an index. For this, the tab "Keywords" in HDevelop has been extended to link not only to the operator reference but also to the (now indexed) Solution Guides. The operator keywords have been revised to have consistent index terms.



o HTML Versions of Programmer's Manuals:

The Programmer's Guide, the Extension Package Interface Programmer's Manual, and the Image Acquisition Interface Programmer's Manual are now also available as HTML versions (in addition to PDF).



o New Manual Structure for Printed Solution Guides

The Solution Guide II has been split up into two manuals, a Solution Guide II and a Solution Guide III. Resulting from the split-up, the indices of the individual Solution Guides have changed.



o New Solution Guide on Classification

The new Solution Guide II-D (Classification) shows how to classify images or regions with different types of classifiers. It uses the new examples in the subdirectory examples/solution_guide/classification.



o Extended Solution Guide on 3D Vision

The Solution Guide III-C (3D Vision, previously 3D Machine Vision) has been extended in many ways to cope with the extensions and revisions for 3D Vision.



o Extended Solution Guide on Shape-Based Matching

The Solution Guide II-B (Shape-Based Matching) has been extended to describe the extensions for shape-based matching.



o Extended Solution Guide on 2D Data Codes

The Solution Guide II-C (2D Data Codes) has been extended by detailed information about the evaluation of the print quality for 2D data codes (ECC200 and QR Code) according to the AIM DPM-1-2006 standard.



o Revisions

Almost all manuals are available in a new edition. Further details can be found here.






Detailed Description of Changes in HALCON 9.0 (relative to HALCON 8.0.2)

Detailed release notes can be obtained for the following topics:

HDevelop
HALCON Library
HALCON
HALCON/C
HALCON/C++
HALCON/.NET
HALCON/COM
HDevEngine
Image Acquisition Interfaces
Manuals
Supported Operating Systems
Miscellaneous

HDevelop

HDevelop Language
Functionality
Bug Fixes
Examples

o HDevelop Language:
  • The HDevelop Language was extended by statements for programming an exception handling similar to C++ or C#. For this the following keywords were introduced:
    • try, catch, and endtry are used to define one block where exceptions that occur within this block including inside procedure calls are caught and a second block where they are handled.
    • throw can be used to throw a user defined exception or to rethrow an exception that was caught by the catch statement.
    • If an exception occurs, an exception tuple that carries error codes and additional information about the error is passed to the catch statement. For accessing this information the new operator dev_get_exception_data is provided.

    For a detailed description of these operators refer to the Reference Manuals.
    The new example program examples/hdevelop/Control/try_catch.dev shows how to use the exception handling.
    HDevelop programs and procedures that contain exception handling are correctly exported with the exception handling to programming languages that support exception handling: C++, C#, and Visual Basics .NET. The export of exception handling is not supported for C and Visual Basic 6.0.
  • HDevelop expressions now support the function regexp_replace, which offers the same functionality as the operator tuple_regexp_replace.
  • The basic iconic operators gen_empty_obj, select_obj, concat_obj, and count_obj were treated in a special way concerning their textual representation in the program listing, the text file export, and selected program lines. Instead of using the common operator function syntax 'operator(parameter list)', the operators were displayed using the assign operation syntax:
    • EmptyObject := []
    • ObjectSelected := Objects[Index]
    • ObjectsConcat := [Objects1,Objects2]
    • Number := |Objects|

    Thus, it was not obvious, if a program line resulted from assign or from one of the iconic operators mentioned above. Now, the textual representation of gen_empty_obj, select_obj, concat_obj, and count_obj corresponds to the common HALCON operator syntax.

o Functionality:
  • HDevelop has been extended with an editor for full text editing of HALCON scripts. The new full text editor provides context-sensitive support and auto-completion for entering operator names as well as parameter and variable suggestions while editing programs. Syntactical and runtime errors are highlighted to ease the development. Additionally, the functionality in the previous dialog based editor also has been extended by error highlighting and can be used in parallel with the full text editor.
  • HDevelop's Procedure Interface dialog is now extended to append documentation to local and external procedures. In the Procedure Interface dialog, there are new buttons for editing general procedure documentation like description, keywords, or suggestions, and for editing parameter documentation like semantic type, default values, description etc. These values influence, e.g., the value lists in the Operator Window or the full text editor. With the next and back arrows, it is possible to navigate through all pages/tab cards of the Procedure Interface dialog. The documenation is editable in different languages and is integrated transparently into the HDevelop Help Window. For further information please refer to the HDevelop Users Guide.
  • HDevelop has been extended by a Camera Calibration Assistant, which will assist you in taking good images of the calibration plate, managing the calibration data, and generating code both for calibrating the camera and using the calibration data.
  • When creating a new procedure by selecting a number of program lines, HDevelop suggests which parameters of the selected operators should become parameters of the new procedure. If the same parameter should become an input and an output parameter, until now two parameters with the same name were suggested, and the resulting conflicts had to be solved manually by the user. Now HDevelop suggests different names for the input and the output parameter. In addition, HDevelop generates code into the procedure that guarantees that the generated procedure behaves in such a case in the same way within the generation context as the selected program lines did before.
  • The following external procedures are now part of the HALCON installation:
    • dev_display_shape_matching_results,
    • dev_open_window_fit_image,
    • dev_open_window_fit_size,
    • dev_resize_window_fit_image,
    • dev_resize_window_fit_size,
    • dev_update_off,
    • dev_update_on,
    • disp_3d_coordinate_system,
    • disp_continue_message,
    • disp_message,
    • gen_arrow_contour_xld,
    • list_image_files,
    • parse_filename,
    • scale_image_range,
    • set_display_font,
    • sort_pairs, and
    • tuple_gen_sequence

    They are located in the directory %HALCONROOT%\procedures. This directory is added to HDevelop's external procedure path list by default.
  • The Open Example dialog now offers a possibility to open the selected example program in a new HDevelop instance.
  • If the user is going to save a program or external procedure file, now it is checked whether in the meantime the file was modified outside HDevelop, e.g., by another user who edited the same file. If the file was changed, a message box is displayed warning the user and offering the opportunity to overwrite the external changes or going back to HDevelop for saving the program or procedure under a different name.
  • As long as the user does not select a specific language in HDevelop's Preferences dialog, HDevelop will now use the system language for its GUI, if it is supported, instead of English. If the system language is changed to another supported language by the user (under Windows via the Regional Settings dialog and under Linux by setting the environment variable LANG), HDevelop will start the next time using the new language.
  • The export of HDevelop operators that use HDevelop Graphics Windows has been improved. HALCON now provides a functionality that emulates the behavior of HDevelop Graphics Windows for HALCON windows. This HALCON window stack is accessible via class methods and functions in the HALCON interfaces, and code exported from HDevelop now uses this functionality when opening, closing, setting, or accessing the active window. The HALCON window stack mechanism is thread-safe. Thus, in a multithreaded application every thread has its own window stack. In order to avoid memory leaks or similar problems, the application must take care to close all HALCON windows opened by a thread before terminating the thread because this is not done automatically by HALCON.
    Furthermore, for the .NET and COM code exports it is now optional whether to export HDevelop programs as code using the HDevelop export example templates or as code using the previously described HALCON window stack functionality when doing Graphics Windows output. Additionally, in the latter case the exported code contains a main function and thus is usable as a standalone application. The HDevelop Export dialog allows to select the corresponding option.
  • In earlier versions, it was possible to interrupt the execution of a draw_* operator in HDevelop by
    • stopping the program execution (F9) or
    • exiting HDevelop

    only on Windows platforms. This is now possible on all platforms.
  • It is now possible to copy and paste HDevelop code between two or more instances of HDevelop.
    If the copied code contains calls to local procedures, the procedures are copied, too. If necessary, the copied procedures are renamed.
    If the copied code contains calls to external procedures, the paths to the procedures are copied, too. However, before an external procedure path is added during a paste action, the user is asked whether or not he wants to add that particular path to the external procedure paths.
    Note that the paste action will only insert the plain text into a full text editor, but not the referenced procedures. To insert the referenced procedures, too, you have to switch to the dialog-based editor before pasting.
  • HDevelop's Program Listing Window now provides an opportunity to navigate between the opened listings, similar to a web browser. A forward and a backward button to navigate between the already opened program listings facilitate this kind of navigation. On the keyboard, Alt+Left Arrow and Alt+Right Arrow can be used as shortcuts for this navigation.
  • Within the Program Listing Window, it is possible to create a new procedure by selecting some program lines and calling the action 'Create New Procedure' from the context menu. The Create Procedure dialog that opens offers the check box 'Replace selected program lines', which controls whether the selected program lines are replaced by a program line calling the new procedure or not. If the current procedure is an external one and the new procedure is local, this opened the opportunity to insert the call of a local procedure into an external procedure, although, calling a local from an external procedure is not possible and, consequentially, the inserted procedure call was marked as invalid. Now, it is no longer possible to insert invalid code by the Create Procedure dialog:
    • If a new procedure is created by selecting code in an external procedure the default for the new procedure is also external.
    • If the procedure is changed to local, the check box 'Replace selected program lines' is now disabled and after confirming the creation of a local procedure the selected program lines are not replaced.
  • HDevelop's Program Window now provides the option 'show caller' to select and show all locations where the currently displayed procedure is called. This option is part of the Program Window's context menu.
  • HDevelop's Operator Window now offers an easy way to change temporarily the Return-key mode. In the Preferences dialog under 'General Options' the user can select whether by pressing Return in the Operator Window the edited operator is only entered into the program or entered and executed. Now, this mode temporarily can be toggled: pressing Ctrl-Return performs the non-default behavior.
  • If an erroneous expression is entered in the Operator Window, the error is now marked in the parameter field after trying to enter the operator into the program.
  • When entering the acquisition operators open_framegrabber, set_framegrabber_param, or get_framegrabber_param in the Operator Window, you will now be presented with dynamic parameter suggestions that take the selected device or interface into account.
  • In HDevelop, the Graphics Windows are now managed as a stack. Until now the behavior was as follows: if a number of Graphics Windows had been opened and a new window was opened and closed again, the window that became active was the window that had been opened first, but not the window that was active before opening and closing the other window. This behavior has been changed so that the active window becomes active again if a new window is opened and closed.
  • HDevelop now has an Inspection Window that displays the values of matrix variables. Additionally, it is possible to change matrix values in the Inspection Window.
  • HDevelop's Histogram dialogs now support multiple output operations simultaneously. The dialogs offer a table where one line represents a single output operation or feature (e.g., threshold and scale for the gray value histogram or area, row, and column for the feature histogram). For each line the table provides fields to activate or deactivate the operation, select the operation's exact type, the input channel, and the minimum and maximum values.
    Furthermore, it is possible to add new output operations and delete existing ones.
    Operations that currently cannot be performed (e.g., because the input object has an unsuitable type) are disabled automatically.
  • HDevelop's Histogram dialogs can now generate code lines that calculate the same output as the histogram does. The code lines can be inserted at the program's current insert position.
  • HDevelop's gray value histogram now displays a value range instead of a single peak value for int4, int8, and real images. The feature histogram always displays a value range instead of a single peak value. That is, the range of input values is divided into quantization steps to obtain a meaningful histogram, and, as a consequence, the histogram's "peak value" may actually represent a whole range of input values.
  • So far, HDevelop's help index ("Keyword" tab) only contained links to the operator reference. Now, there are also links to the Solution Guides (PDF), in particular to the Solution Guide I (Basics) and the Solution Guides II and III (Advanced). The appearing keywords have been completely revised and extended so that information can be found more easily.
  • The Contents tab card of HDevelop's Help Window so far only presented the chapters and sections of the HALCON Reference Manual as a hierarchical tree. The same now also applies to the HDevelop Reference Manual and the Image Acquisition Devices overview. Furthermore, image acquisition devices that do not appear in the Image Acquisition Devices overview are now listed under 'Additional Interfaces'.
    Besides, the (new) HTML versions of the Programmer's Manuals (Programmer's Guide, Extension Package Interface Programmer's Manual, Image Acquisition Interface Programmer's Manual) are now available in a corresponding first-level element.
  • The navigation within the Help Window of HDevelop was improved by providing more keyboard shortcuts. In particular, the following keyboard shortcuts are now available:
    • Alt-Left - Back in history
    • Alt-Right - Forward in history
    • Alt-Home - Go to the index page of the HALCON Reference Manual
    • Ctrl-+ - Increase the font size
    • Ctrl-- - Decrease the font size
    • Ctrl-D - Add current page to bookmark
    • Ctrl-P - Print current page
    • Ctrl-F - Search text on the current page
    • Alt-Enter - Enter operator to Operator Window
    • Tab - Go to next link on page
    • Shift-Tab - Go to previous link on page
    • Enter - Follow the selected link.

    In addition, it is now possible to select text on the Help page not only by the mouse but also with the help of the keyboard.
  • The usability of the Image Acquisition Assistant has been increased with various small improvements:
    • Filtering by category and visibility as well as sorting is now also applied to read-only parameters. This can be very helpful, in particular for the GigE Vision interface.
    • The communication between assistant and acquisition interface has been optimized, which should mean faster connection and less low level errors in case something goes wrong.
    • The measured acquisition time in live mode is now more reliable, also, it is possible to disable displaying the image, show the speed as frames/second, and measure the speed for volatile acquisition without copying the image (by disabling image display or setting it to the new mode "volatile").
    • For acquisition of individual images (not live acquisition), the image acquisition now uses grab_image instead of grab_image_async.
    • The revision number of the interface is now visible on the connection tab before connecting to the device.


o Bug Fixes:
  • Some special characters in file names such as apostrophes (') were not correctly handled when inserting code from HDevelop Assistants or via the Read Image dialog, leading to errors. This problem has been fixed.
  • HDevelop sometimes crashed in the Find/Replace dialog, while creating or opening a new program. This problem has been fixed.
  • If in the Find/Replace dialog the option 'Whole Words' was unchecked, replacing variable names or parts of them did not work correctly within expressions: only the occurrences of the search string in the leftmost word of the expression were replaced. This problem has been fixed.
  • Parallel HDevelop hung if a draw_* operator was performed while a Zoom Window was open. This problem has been fixed.
  • HDevelop crashed when the set_system parameter 'empty_region_result' was set to 'false' while an empty region was used as the domain of an image. This problem has been fixed.
  • HDevelop crashed if an HDevelop program was dragged from a Windows Explorer and dropped over a second Graphics Window. This problem has been fixed.
  • If HDevelop was run in SDI mode, opening several Zoom Windows or Variable Inspect Windows caused the Program Window to move to the right and down. This problem has been fixed.
  • If a Graphics Window and a Zoom Window were open and displayed the same image, closing the Graphics Window and then clicking into the Zoom Window caused HDevelop to crash. This problem has been fixed.
  • If an image was displayed in the Graphics Window, zooming into the image by using the Zoom In function (+) and then continuously doubling the image size by selecting and clicking the Double entry on the Image Size menu sometimes caused the error 5174 ("negative height of area (or 0)"). This problem has been fixed.
  • Standard HDevelop hung if a gray image was displayed, the Feature Histogram dialog was opened, and one of the features gray_fuzzy_entropy or gray_fuzzy_perimeter was selected. This problem did not occur in Parallel HDevelop. This problem has been fixed.
  • The Property dialog allows to copy the names of the used modules to the clipboard. This did not always work correctly. Under Windows, only in some rare cases the module names were not copied correctly to the clipboard. In that cases the clipboard kept its old value. Under Linux, in general, pressing the button 'Copy to Clipboard' worked only for the first time. Additional copy calls resulted in numerous error messages on the console: "QClipboard: Cannot transfer data, no data available" After that the clipboard was empty. This problem has been fixed.
  • Copying values from the Variable Window to the clipboard did not always work correctly. Under Windows the copying sometimes worked and sometimes not, under Linux the copying worked only for the first time. Additional copy calls resulted in numerous error messages on the console: "QClipboard: Cannot transfer data, no data available". This problem has been fixed.
  • After inserting a greater number of program lines from the clipboard or the undo/redo stack, the left part of the program listing that contains the line numbers, the PC, and the insert cursor, and the right part containing the program lines were sometimes not synchronous. The right part was scrolled in order to display as much of the inserted program lines as possible while the left part remained unchanged. This problem has been fixed.
  • If an existing comment operator was selected for being edited in the Operator Window, and a string with newlines was entered as the comment parameter (e.g., by pasting such a string from the clipboard), the program became corrupted after re-entering the comment into the program. This affected the program listing, either by printing several program lines one upon the other or by setting the left and the right part of the listing out of sync. In addition, if such a program (or procedure) was saved, it could not be re-loaded owing to a format error. As long as the program or procedure was loaded in HDevelop, the problem could be solved just by removing the corrupt comment. The problem did not occur if a new comment operator (with new lines in the comment string) was entered into the program. In that case, as intended, several comments - one for each text line - were entered into the program. This problem has been fixed. Now it is safe to replace an existing comment operator by several comments at once.
  • On an operating system with Asian locale settings, some Asian characters became disrupted if they were used within a control parameter while the HALCON 'filename_encoding' was set to 'locale' (which is the default).
    This concerned all characters for which the multi-byte word that is used for encoding that character in the locale encoding table contains the hexadecimal code 0x5c (e.g. the Katakana letter SO (ソ) that is encoded in Shift-JIS by 0x83 0x5c). This problem has been fixed.
  • HDevelop crashed if within the full text search in the Help Window it was searched for the characters '=' or '=~'. This problem has been fixed.
  • HDevelop might have crashed after removing an external procedure path from the list of managed directories under the following condition:
    • one of the referred external procedures was modified, and
    • after removing the external procedure path an undo or redo action was performed on the removed procedure.

    This problem has been fixed.
  • Setting a password to a procedure via the External Procedures / Manage Passwords tab card on the Preferences dialog sometimes failed. After selecting one or several procedures in the Unprotected Procedures list, pressing the Move to the Right button, and entering a password into the Password dialog that opens, the selected procedures remained in the Unprotected Procedures list and were no longer selected. This problem has been fixed.
  • HDevelop might have crashed during the creation of an external procedure, if a password was set and immediately removed again before the Procedure Creation dialog was closed. This problem has been fixed.
  • If the interface of a procedure was changed via the Edit Procedure Interface dialog while the option Adapt Program was activated (default), deactivated program lines that refer to that procedure were adapted to the new signature, as requested, but, they were also activated. This problem has been fixed.
  • The code export of string constants with special characters like newline (\n), tab (\t), or double quotes (") to the different Visual Basic dialects was erroneous. Special characters were quoted according to the C/C++ standard and not as valid Visual Basic code. This problem has been fixed.
  • C programs exported by HDevelop caused a memory leak if a control variable was used multiple times as output parameter in the same operator or procedure call. This problem has been fixed.
  • C programs exported by HDevelop crashed if the variable '_' was used as output parameter in procedure calls. This problem has been fixed. Furthermore, the variable '_' is no longer exported as '_' and '_t' to C and C++, respectively. Instead, the exported code contains a new control variable with a default name (similar to exported C# or Visual Basic .NET code).
  • Code that contained for statements and that were exported from HDevelop to C did not work correctly if the start and the end value of the statement were equal and the step value was negative. This problem has been fixed.
  • HDevelop did not export external procedures that were referenced only by unused local procedures. As all local procedures (used and unused) are always exported, this meant that the exported code was inconsistent if the program contained an unreferenced local procedure that referenced an external procedure. This problem has been fixed.
  • HDevelop exported constant tuple expressions containing exactly one integer or real value incorrectly to C. This problem has been fixed.
  • The HDevelop code generated by the Matching Assistant was erroneous if the corresponding values for row and column scale were equal while the row and column scale steps differed.
    Instead of the operators create_aniso_shape_model and find_aniso_shape_model the generated code contained the operators create_shape_model and find_shape_model (if all scale factors were equal) or create_scaled_shape_model and find_scaled_shape_model (if both min scale factors and both max scale factors were pairwise equal). This problem has been fixed.
  • HDevelop might have crashed when attempting to load settings for the Image Acquisition Assistant from a *.das file. This problem has been fixed.
  • Configuring the Image Acquisition Assistant for volatile acquisition could have caused a crash when accessing the displayed image after closing the device (e.g., by resizing the Graphics Window). This problem has been fixed.
  • The creation of volatile image objects caused a memory leak in HDevelop. Volatile image objects can be created by some image acquisition devices or by calling gen_image* operators that expect a pointer as one of the input parameters. This problem has been fixed. The HDevEngine was not affected by this problem.
  • The 'Auto' check boxes for acquisition parameters in the Image Acquisition Assistants did not work in HALCON 8.0.2. This problem has been fixed. Note that HALCON 8.0 and 8.0.1 were not affected.


o Examples:

HALCON has been extended by more than 85 new HDevelop example programs:

  • The new HDevelop example program examples/hdevelop/Regions/Features/area_holes.dev shows how to compute the area of all holes of a region.
  • The new HDevelop example programs binocular_disparity_mg.dev and binocular_distance_mg.dev from the subdirectory examples/hdevelop/Tools/Stereo show how to apply the new operators for multigrid stereo.
  • The new HDevelop example program examples/hdevelop/Tools/Calibration/change_radial_distortion_points.dev shows how to change the radial distortion of image points.
  • The new HDevelop example program examples/hdevelop/XLD/Transformation/clip_end_points_contours_xld.dev shows how to clip the end points of a contour.
  • The new HDevelop example program examples/hdevelop/Filter/FFT/gen_mean_filter.dev shows how to use the new operator for generating rectangular or elliptical mean filters of arbitrary orientation in the frequency domain.
  • The new HDevelop example program examples/hdevelop/Image/Access/get_grayval_contour_xld.dev shows how to return gray values of an image at the positions of an XLD contour.
  • The new HDevelop example program examples/hdevelop/Image/Access/get_grayval_interpolated.dev shows how to return gray values of an image at the positions given by tuples of rows and columns.
  • The new HDevelop example program examples/hdevelop/System/Information/get_operator_info.dev shows how to use the operator get_operator_info and how to query the automatic parallelization method for every HALCON operator.
  • The new HDevelop example program examples/hdevelop/System/Information/get_param_info.dev shows how to use the operator get_param_info and how to query the supported input image types of any HALCON image processing operator.
  • The new HDevelop example program examples/hdevelop/Object/Manipulation/obj_diff.dev shows how to calculate the set-theoretic difference of two object tuples.
  • The new HDevelop example program examples/hdevelop/Filter/Points/points_harris_binomial.dev shows how to use the binomial approximation to the Harris point operator.
  • The new HDevelop example program examples/hdevelop/Filter/Points/points_lepetit.dev shows how to use the Lepetit point operator.
  • The new HDevelop example program examples/hdevelop/Filter/Smoothing/rank_n.dev shows how to evaluate each pixel of a multichannel image and return a single-channel image that contains the gray values of the specified rank.
  • The new HDevelop example examples/hdevelop/Graphics/Parameters/set_paint_3d_plot.dev shows how to apply the new operators used for the new display mode '3d_plot'.
  • The new HDevelop example program examples/hdevelop/Matrix/adjust_circle_matrix.dev shows how to apply several of the new operators for linear algebra.
  • The new HDevelop example programs print_quality_isoiec15416.dev and composite_print_quality_isoiec15416.dev in the directory examples/hdevelop/Tools/Barcode show how to evaluate the print quality for 1D bar codes according to the international standard ISO/IEC 15416.
  • The new HDevelop example programs calibration_aimdpm_1_2006.dev and print_quality_aimdpm_1_2006.dev in the directory examples/hdevelop/Tools/Datacode show how to evaluate the print quality for 2D data codes (ECC200 and QR Code) according to the AIM DPM-1-2006 standard.
  • The new HDevelop example program examples/hdevelop/Tools/Datacode/ecc200_finder_pattern_tolerance.dev shows how to read ECC200 symbols with a disturbed or missing finder pattern. It uses the new images ecc200_damaged_finder_pattern_* from the subdirectory images/datacode/ecc200.
  • The new HDevelop example program examples/hdevelop/Tools/Datacode/ecc200_small_modules_robustness.dev shows how to read data code symbols with very small module sizes more robustly.
  • The new HDevelop example program examples/hdevelop/Matching/Shape-Based/create_shape_model_xld.dev shows how to apply the new operators for the creation of shape models using XLD contours.
  • The new HDevelop example program examples/hdevelop/Matching/Shape-Based/set_shape_model_min_contrast.dev shows how to overwrite the value of the parameter 'min_Contrast' that was originally set for a shape model.
  • The new HDevelop example examples/hdevelop/Matching/Shape-Based/set_shape_model_timeout.dev shows how to use the timeout mechanism for shape-based matching.
  • The new HDevelop example programs matching_defocused_pcb.dev and matching_deformed_bulb.dev in the directory examples/hdevelop/Applications/FA show how to use the increased tolerance mode for shape-based matching.
  • The new HDevelop example programs locate_car_door.dev and locate_engine_parts.dev from the new subdirectory examples/hdevelop/Applications/3D-Vision, and the HDevelop example program detect_road_signs.dev from the subdirectory /examples/hdevelop/Applications/Monitoring show how to apply the new perspective, deformable matching.
  • The new HDevelop example programs locate_cookie_box.dev and locate_cookie_box_multiple_models.dev from the new subdirectory examples/hdevelop/Applications/Packaging, and detect_brochure_pages.dev from the new subdirectory examples/hdevelop/Applications/Miscellaneous show how to apply the new descriptor-based matching. They use the new images cookie_box_* from the new subdirectory images/packaging and the images brochure_* and brochure_page_* from the new subdirectory images/brochure.
  • The new HDevelop example program examples/hdevelop/Matching/Descriptor-Based/pose_from_point_correspondences.dev shows how to compute a pose from 3D-2D point correspondences and how to compute a pose from a 2D projective transformation matrix (homography).
  • The new HDevelop example programs calibrate_sheet_of_light.dev, reconstruct_connection_rod_calib.dev, and reconstruct_connection_rod_uncalib.dev from the subdirectory examples/hdevelop/Applications/3D-Vision show how to measure 3D object surfaces using the new operators for sheet of light.
  • The new HDevelop example program examples/hdevelop/Tools/2D-Transformations/mosaicking_pyramid.dev shows how to implement an image-pyramid-based projective matching algorithm.
  • The new HDevelop example program examples/hdevelop/Tools/Stereo/disparity_image_to_xyz.dev shows how to transform a disparity image to three images that contain the x, y, and z coordinates for each pixel of the input disparity image.
  • The new HDevelop example program examples/hdevelop/Tools/Calibration/radial_distortion_comparison.dev compares the results of the radial distortion self-calibration and the camera calibration.
  • The new HDevelop example examples/hdevelop/Applications/Calibration/compare_calibration_models.dev compares the calibration results using the camera models 'division' and 'polynomial'.
  • The new HDevelop example program examples/hdevelop/Applications/FA/extract_clips_xl.dev shows how to use HALCON XL.
  • The new HDevelop example program examples/solution_guide/basics/classify_wood.dev shows how to classify different kinds of wood according to their surface texture. It uses the new images from the subdirectory images/wood.
  • The new HDevelop example program examples/solution_guide/basics/novelty_detection_dyn_threshold.dev shows how to use dyn_threshold to detect defects in the texture of a plastic mesh.
  • The following new HDevelop example programs in the directory examples/solution_guide/classification show how to apply different classification tasks as described in the new Advanced Solution Guide on Classification:
    • classify_metal_parts.dev
    • classify_metal_parts_ocr.dev
    • train_characters_ocr.dev
    • classify_characters_ocr.dev
    • classify_citrus_fruits.dev
    • segment_citrus_fruits.dev
    • classify_halogen_bulbs.dev
    • visualize_3d_feature_space.dev

    The following images have been added in the directory images:
    • color/citrus_fruits_*
    • rings/mixed_*
    • rings/nuts_*
    • rings/retainers_*
    • rings/washers_*
    • halogen_bulb/halogen_bulb_*
    • halogen_bulb/bad/halogen_bulb_bad_*
    • halogen_bulb/good/halogen_bulb_good_*
    • halogen_bulb/none/halogen_bulb_none_01
    • ocr/chars_*
    • ocr/chars_training_*
  • The new HDevelop example programs eneo.dev, eneo_parameters.dev, and eneo_simple.dev in the directory examples/hdevelop/Images/Acquisition show how to use the eneo interface for remote grabbing.
  • The new HDevelop example programs pixelink.dev, pixelink_simple.dev, pixelink_parameters.dev, and pixelink_2cameras.dev in the directory examples/hdevelop/Images/Acquisition show how to use the PixeLINK interface.
  • The new HDevelop example programs sonyxci2.dev, sonyxci2_simple.dev, and sonyxci2_parameters.dev in the directory examples/hdevelop/Images/Acquisition/ show how to use the SonyXCI-2 interface.
  • The new HDevelop example program examples/hdevelop/Images/Acquisition/gigevision_crop.dev shows how to apply the GigEVision interface for software cropping.
  • The new HDevelop example program examples/hdevelop/Images/Acquisition/menable3_exposure.dev shows how to grab images from a Silicon Software microEnable III board and how to set the exposure time in a grabber-controlled mode.
  • The new HDevelop example program examples/hdevelop/Images/Acquisition/menable4_exposure.dev shows how to grab images from a Silicon Software microEnable IV board and how to set the exposure time in a grabber-controlled mode.
  • HALCON has been extended with several new application-specific HDevelop example programs:
    • The HDevelop example program examples/hdevelop/Applications/3D-Vision/locate_cylinder_3d.dev combines a stereo setup with 3D shape-based matching. It uses the new images closeup_*, stereo_left_*, and stereo_right_* from the subdirectory images/metal_cylinders.
    • A set of HDevelop example programs in the new subdirectory examples/hdevelop/Applications/Packaging shows application cases from the packaging industries:
      • The HDevelop example programs check_blister.dev and check_blister_mixed.dev show a packaging task from the pharmaceutical industry. The task is to check the content of blisters that are filled automatically and manually, respectively. They use the images blister_* and blister_mixed_* from the subdirectory images/blister.
      • The HDevelop example program check_soft_cheese.dev checks packages of soft cheese for their contents. The occurence of three types of cheese flavors and their correct order within the package are examined. It uses the images soft_cheese_* from the subdirectory images/food.
      • The HDevelop example program inspect_shampoo_label.dev inspects shampoo bottles for the correct positioning of their front labels. It uses the new images shampoo_* from the subdirectory images/packaging.
    • Two HDevelop example programs in the subdirectory examples/hdevelop/Applications/FA deal with the processing steps for returned empties: The example program inspect_bottle_mouth.dev checks incoming empties for damages on the bottle mouth and uses the images images/bottles/bottle_mouth_*. The example program check_bottle_crate.dev counts the occurence of bottles in returned empties, recognizing foreign and brocken objects.
    • The HDevelop example program examples/hdevelop/Applications/FA/inspect_harddisk_temperature.dev inspects an infrared image of a hard disk for heat emission. It uses the image images/infrared/harddisk_temperature.
    • The HDevelop example program examples/hdevelop/Applications/FA/check_hazelnut_wafers.dev applies a quality inspection on hazelnut wavers. It uses the images images/food/hazelnut_wafer_*.
    • A set of HDevelop example programs in the subdirectory examples/hdevelop/Applications/FA show applications from the flat panel industry: The four examples measure_tft_cells.dev, measure_lcd_cells.dev, detect_mura_defects_blur.dev, and detect_mura_defects_texture.dev show different inspection tasks on LCD cells, like measuring the frame width between cells, applied for TFTs and LCDs, respectively, as well as inspecting the LCD surface for a certain class of damages known as mura defects. They use the images tft_cells_*, lcd_cells_*, mura_defects_blur_*, and mura_defects_texture_*, respectively, from the subdirectory images/lcd.
    • The HDevelop example program examples/hdevelop/Applications/Sequences/rotation_from_optical_flow.dev shows how to estimate the center of a rotation between two succeeding images with the operator optical_flow_mg.
    • The HDevelop example program examples/hdevelop/Applications/FA/determine_sharpness.dev shows how to measure the sharpness of an image using four characteristic quantities, like Blurriness (Auto-Correlation), the image difference of local neighborhoods (Difference), the gradient, and the range of frequencies in an image (Band Pass).
    • The HDevelop example program examples/hdevelop/Matching/Correlation-Based/find_ncc_model_defocused_precision.dev examines the deviation of the NCC matching results for a sequence of images that were acquired with changing focus. The deviation from the reference model is determined and finally plotted. The example uses the images images/pcb_focus/pcb_focus_telecentric_*.
    • The HDevelop example program examples/hdevelop/Applications/Measure/correct_measure_direction.dev shows how to automatically refine the orientation of a measure object used for 1D measuring.

The following HDevelop example programs were modified to use new functionalities:

  • The HDevelop example program examples/hdevelop/Applications/FA/3d_matching_clamps.dev has been rewritten to use the new operators that deal with quaternions.
  • The HDevelop example programs examples/hdevelop/Applications/FA/circles.dev, examples/hdevelop/Tools/Calibration/get_circle_pose.dev, and examples/hdevelop/XLD/Features/fit_circle_contour_xld.dev have been adapted to use the new operator for generating circular XLD contours.
  • The HDevelop example programs examples/hdevelop/Applications/Color/color_fuses_lut_trans.dev and examples/hdevelop/Filter/Color/color_trans_lut.dev have been rewritten to use the new operators for fast color space transformations using look-up-tables.

For consistency reasons, several HDevelop example programs changed their names and/or paths.

  • For the following example programs the names have changed:
    • The HDevelop example programs moments_region_2d.dev and moments_region_2d_invar.dev in the subdirectory examples/hdevelop/Regions/Features were renamed into moments_region_2nd.dev and moments_region_2d_invar.dev, respectively, so that the names of the programs correspond to the names of the demonstrated operators.
  • For the following HDevelop example programs the names and the directories have changed:
    • examples/hdevelop/Applications/Barcode/25Industry.dev is now examples/hdevelop/Tools/Barcode/25industrial.dev
    • examples/hdevelop/Applications/Barcode/25Interleaved.dev is now examples/hdevelop/Tools/Barcode/25interleaved.dev
    • examples/hdevelop/Applications/Barcode/Code28.dev is now examples/hdevelop/Tools/Barcode/code28.dev
    • examples/hdevelop/Applications/Barcode/Code39.dev is now examples/hdevelop/Tools/Barcode/code39.dev
    • examples/hdevelop/Applications/Barcode/EAN13.dev is now examples/hdevelop/Tools/Barcode/ean13.dev
    • examples/hdevelop/Applications/Barcode/EAN13AddOn5.dev is now examples/hdevelop/Tools/Barcode/ean13addon5.dev
    • examples/hdevelop/Applications/Barcode/EAN8.dev is now examples/hdevelop/Tools/Barcode/ean8.dev
    • examples/hdevelop/Applications/Barcode/RSS14.dev is now examples/hdevelop/Tools/Barcode/rss14.dev
    • examples/hdevelop/Applications/Barcode/RSS14Stacked.dev is now examples/hdevelop/Tools/Barcode/rss14_stacked.dev
    • examples/hdevelop/Applications/Barcode/RSS14StackedOmnidir.dev is now examples/hdevelop/Tools/Barcode/rss14_stacked_omnidir.dev
    • examples/hdevelop/Applications/Barcode/RSS14Truncated.dev is now examples/hdevelop/Tools/Barcode/rsstruncated.dev
    • examples/hdevelop/Applications/Barcode/RSSComposite.dev is now examples/hdevelop/Tools/Barcode/RSS_composite.dev
    • examples/hdevelop/Applications/Barcode/RSSExpanded.dev is now examples/hdevelop/Tools/Barcode/rssexpanded.dev
    • examples/hdevelop/Applications/Barcode/RSSExpandedStacked.dev is now examples/hdevelop/Tools/Barcode/rssexpanded_stacked.dev
    • examples/hdevelop/Applications/Barcode/RSSLimited.dev is now examples/hdevelop/Tools/Barcode/rsslimited.dev
  • The following HDevelop example programs have been moved from the directory examples/hdevelop/Applications/Barcode to the directory examples/hdevelop/Tools/Barcode:
    • barcode_orientation.dev
    • barcode_param_element_height_min.dev
    • barcode_param_max_diff_orient.dev
    • barcode_param_orientation.dev
    • defects_barcode.dev
    • inspect_scanlines.dev

The following HDevelop example programs are not provided any longer, because more convenient examples are available:

  • The handling of small modules for 2D data codes that was previously demonstrated by the example program examples/hdevelop/solution_guide/2d_data_codes/data_codes_2d_enlarge_modules.dev is now shown in the example program examples/hdevelop/Tools/Datacode/ecc200_small_modules_robustness.dev in a more convenient way using the functionality described here.
  • The example program examples/hdevelop/Applications/FA/sharpness.dev has been replaced by the example program examples/hdevelop/Applications/FA/determine_sharpness.dev


HALCON Library

New Operators
Speed-Up and Enhancements
Modified Operators
Bug Fixes

o New Operators:
  • HALCON has been extended with an operator abs_diff_image that calculates the absolute value of the difference of two images.
  • HALCON has been extended with an operator area_holes that computes the area of all holes of a region. The new HDevelop example program examples/hdevelop/Regions/Features/area_holes.dev shows how to use area_holes.
  • HALCON has been extended with a set of operators to deal with quaternions and to use them for rotations in three dimensional space. Calculation of rotations with quaternions is numerically more stable than similiar computations with rotation matrices. In detail the following operators were added:
    • axis_angle_to_quat,
    • quat_compose,
    • quat_conjugate,
    • quat_interpolate,
    • quat_normalize,
    • quat_rotate_point_3d,
    • quat_to_hom_mat3d, and
    • quat_to_pose.

    The example program examples/hdevelop/Applications/FA/3d_matching_clamps.dev has been rewritten to use the new operators.
  • HALCON has been extended with two new operators for stereo reconstruction. binocular_disparity_mg calculates the disparity of a rectified stereo image pair, while binocular_distance_mg computes the distance. Both operators use multigrid solvers that solve the stereo correspondence using a variational approach.
    The new HDevelop example programs examples/hdevelop/Tools/Stereo/binocular_disparity_mg.dev and examples/hdevelop/Tools/Stereo/binocular_distance_mg.dev show how to use the two new operators.
  • HALCON has been extended with an operator change_radial_distortion_points that changes the radial distortion of image points. The new HDevelop example program examples/hdevelop/Tools/Calibration/change_radial_distortion_points.dev shows how to use change_radial_distortion_points.
  • HALCON has been extended with a set of operators for perspective, deformable matching. The matching provides the functionality to find the 3D pose or a 2D projective homography of a 2D template in an image.
    The following operators provide the perspective, deformable matching functionality:
    • clear_all_deformable_models,
    • clear_deformable_model,
    • create_planar_calib_deformable_model,
    • create_planar_uncalib_deformable_model,
    • determine_deformable_model_params,
    • find_planar_calib_deformable_model,
    • find_planar_uncalib_deformable_model,
    • get_deformable_model_contours,
    • get_deformable_model_origin,
    • get_deformable_model_params,
    • read_deformable_model,
    • set_deformable_model_origin,
    • set_deformable_model_param, and
    • write_deformable_model.

    The new HDevelop example programs locate_car_door.dev and locate_engine_parts.dev from the directory examples/hdevelop/Applications/3D-Vision, and the new HDevelop example program examples/hdevelop/Applications/Monitoring/detect_road_signs.dev demonstrate the new functionality. They use the new images attention_road_sign.jpg, dead_end_road_sign.jpg, and street_* from the new subdirectory images/road_signs and the images car_door_* and engine_parts_* from the new subdirectory images/automotive.
  • HALCON has been extended with an operator clip_end_points_contours_xld that clips the end points of a contour. The amount of clipping at each end of the contour can be given by Euclidean length or number of contour points.
    The new HDevelop example program examples/hdevelop/XLD/Transformation/clip_end_points_contours_xld.dev shows how to use clip_end_points_contours_xld.
  • HALCON has been extended with a set of operators that use look-up tables for color space transformations from and to the RGB color space. In many cases the use of look-up tables is faster than similiar transformations with explicit transformation calculations. In detail, the operators
    • create_color_trans_lut,
    • apply_color_trans_lut,
    • clear_color_trans_lut, and
    • clear_all_color_trans_luts

    were added. The example programs examples/hdevelop/Applications/Filter/Color/color_fuses_lut_trans.dev and examples/hdevelop/Filter/Color/color_trans_lut.dev have been rewritten to use the new operators.
  • HALCON has been extended with four new operators for creating shape models from XLD contours:
    • create_shape_model_xld,
    • create_scaled_shape_model_xld, and
    • create_aniso_shape_model_xld

    create shape models from XLD contours. The operator
    • set_shape_model_metric

    determines the polarity of the model edges in a training image and sets the match metric to 'use_polarity' or 'ignore_global_polarity'.
    The new HDevelop example program examples/hdevelop/Matching/Shape-Based/create_shape_model_xld.dev shows how to use the new operators. It uses the new images brake_disk_part_* from the new subdirectory images/brake_disk.
  • HALCON has been extended with a set of operators for the sheet-of-light technique:
    • create_sheet_of_light_model,
    • clear_sheet_of_light_model,
    • clear_all_sheet_of_light_models,
    • set_sheet_of_light_param,
    • get_sheet_of_light_param,
    • query_sheet_of_light_params,
    • measure_profile_sheet_of_light,
    • apply_sheet_of_light_calibration, and
    • get_sheet_of_light_result.

    The new HDevelop example programs calibrate_sheet_of_light.dev, reconstruct_connection_rod_calib.dev, and reconstruct_connection_rod_uncalib.dev in the directory examples/hdevelop/Applications/3D-Vision show the new functionality. They use the new images connection_rod_calib_*, caltab_at_position_*, connection_rod_lightline_*, connection_rod_disparity.tif and connection_rod_* from the new subdirectory images/sheet_of_light.
  • dev_set_paint and set_paint have a new mode '3d_plot' that is superior to the existing '3D-plot' because it is accelerated by the graphics card. This mode is well suited for the interactive display of a height field in 3D. For this purpose the operators update_window_pose and unproject_coordinates were added. The operator update_window_pose provides means to manipulate the pose of the 3D plot in an intuitive way. The operator unproject_coordinates calculates the image coordinates for a point in a 3D plot window. The new example examples/hdevelop/Graphics/Parameters/set_paint_3d_plot.dev shows how to use the new operators. Furthermore, the existing modes '3D-plot', '3D-plot_hidden', and '3D-plot_point' have been renamed into '3d_plot_lines', '3d_plot_hidden_lines', and '3d_plot_point', respectively. For compatibility reasons, the old modes are supported as well.
  • HALCON has been extended with an operator disparity_image_to_xyz that transforms a disparity image to three images that contain the x, y, and z coordinates for each pixel of the input disparity image. The new HDevelop example program examples/hdevelop/Tools/Stereo/disparity_image_to_xyz.dev shows how to use disparity_image_to_xyz.
  • HALCON has been extended with an operator gen_circle_contour_xld that creates contours that represent circles or circular arcs. The HDevelop example programs examples/hdevelop/Applications/FA/circles.dev, examples/hdevelop/Tools/Calibration/get_circle_pose.dev, and examples/hdevelop/XLD/Features/fit_circle_contour_xld.dev have been adapted to use gen_circle_contour_xld.
  • HALCON has been extended by an operator gen_image3_extern that creates an image object from three pointers.
  • HALCON has been extended with an operator gen_mean_filter that generates rectangular or elliptical mean filters of arbitrary orientation in the frequency domain. The new example program examples/hdevelop/Filter/FFT/gen_mean_filter.dev shows how to use gen_mean_filter.
  • HALCON has been extended with operators for linear algebra in 7 categories.
    • Access:
      • get_diagonal_matrix,
      • get_full_matrix,
      • get_sub_matrix,
      • get_value_matrix,
      • set_diagonal_matrix,
      • set_full_matrix,
      • set_sub_matrix,
      • set_value_matrix.
    • Arithmetic:
      • abs_matrix,
      • abs_matrix_mod,
      • add_matrix,
      • add_matrix_mod,
      • div_element_matrix,
      • div_element_matrix_mod,
      • invert_matrix,
      • invert_matrix_mod,
      • mult_element_matrix,
      • mult_element_matrix_mod,
      • mult_matrix,
      • mult_matrix_mod,
      • pow_element_matrix,
      • pow_element_matrix_mod,
      • pow_matrix,
      • pow_matrix_mod,
      • pow_scalar_element_matrix,
      • pow_scalar_element_matrix_mod,
      • scale_matrix,
      • scale_matrix_mod,
      • solve_matrix,
      • sqrt_matrix,
      • sqrt_matrix_mod,
      • sub_matrix,
      • sub_matrix_mod,
      • transpose_matrix,
      • transpose_matrix_mod.
    • Creation:
      • clear_all_matrices,
      • clear_matrix,
      • copy_matrix,
      • create_matrix,
      • repeat_matrix.
    • Decomposition:
      • decompose_matrix,
      • orthogonal_decompose_matrix,
      • svd_matrix.
    • Eigenvalues:
      • eigenvalues_general_matrix,
      • eigenvalues_symmetric_matrix.
    • Features:
      • determinant_matrix,
      • get_size_matrix,
      • max_matrix,
      • mean_matrix,
      • min_matrix,
      • norm_matrix,
      • sum_matrix.
    • File:
      • read_matrix,
      • write_matrix.

    The new HDevelop example program examples/hdevelop/Matrix/adjust_circle_matrix.dev shows how to use several of the operators.
    Attention: For performance reasons, matrix handles are not checked for validity in these matrix operators. Passing an invalid matrix handle may crash the application (including HDevelop).
  • HALCON has been extended with an operator get_font_extents that returns the maximum extent (ascent, descent, width, and height) of all characters of the font that is currently set for a particular window.
  • HALCON has been extended with an operator get_grayval_contour_xld that returns gray values of an image at the positions of an XLD contour. The new HDevelop example program examples/hdevelop/Image/Access/get_grayval_contour_xld.dev shows how to use get_grayval_contour_xld.
  • HALCON has been extended with an operator get_grayval_interpolated that returns gray values of an image at the positions given by tuples of rows and columns. The new HDevelop example program examples/hdevelop/Image/Access/get_grayval_interpolated.dev shows how to use get_grayval_interpolated.
  • HALCON has been extended with the operators get_mposition_sub_pix and get_mbutton_sub_pix. These operators are subpixel-accurate versions of the existing operators get_mbutton and get_mposition and can be used to acquire input coordinates for the new operators unproject_coordinates and update_window_pose.
  • HALCON has been extended with an operator obj_diff that calculates the set-theoretic difference of two object tuples, i.e., the resulting object tuple is the first input object tuple with all objects from the second input object tuple removed.
    The new HDevelop example program examples/hdevelop/Object/Manipulation/obj_diff.dev shows how to use obj_diff.
  • HALCON has been extended with an operator points_harris_binomial, which extracts interest points from an image using the binomial approximation to the Harris operator. The new HDevelop example program examples/hdevelop/Filter/Points/points_harris_binomial.dev shows how to use points_harris_binomial.
  • HALCON has been extended with an operator points_lepetit, which extracts interest points from an image using the Lepetit operator. The new HDevelop example program examples/hdevelop/Filter/Points/points_lepetit.dev shows how to use points_lepetit.
  • HALCON has been extended with an operator proj_hom_mat2d_to_pose that computes a pose from a homography. The new HDevelop example program examples/hdevelop/Matching/Descriptor-Based/pose_from_point_correspondences.dev shows how to use proj_hom_mat2d_to_pose.
  • HALCON has been extended with an operator proj_match_points_ransac_guided that computes a projective transformation matrix between two images by finding correspondences between points based on a known approximation of the projective transformation matrix. This can be used, for example, to speed up the matching of very large images by implementing an image-pyramid-based projective matching algorithm.
    The new HDevelop example examples/hdevelop/Tools/2D-Transformations/mosaicking_pyramid.dev shows how to implement such an image-pyramid-based approach. Additionally, the execution time for different numbers of pyramid levels is shown.
  • HALCON has been extended with an operator radial_distortion_self_calibration that performs a self-calibration of the radial distortion coefficient and center of radial distortions using curved lines in an image that correspond to straight lines in the world. The new HDevelop example examples/hdevelop/Tools/Calibration /radial_distortion_self_calibration.dev shows how to use radial_distortion_self_calibration. The new HDevelop example examples/hdevelop/Tools/Calibration/radial_distortion_comparison.dev compares the results of the radial distortion self-calibration and the camera calibration.
  • HALCON has been extended with an operator rank_n that evaluates each pixel of a multichannel image and returns a single-channel image that contains the gray values of the specified rank. The new HDevelop example program examples/hdevelop/Filter/Smoothing/rank_n.dev shows how to use rank_n.
  • HALCON has been extended with a set of operators for descriptor-based matching. The matching provides the functionality to find the 3D pose or a 2D projective homography of a 2D template in an image.
    The following operators provide the descriptor-based matching functionality:
    • read_descriptor_model,
    • clear_descriptor_model,
    • clear_all_descriptor_models,
    • create_calib_descriptor_model,
    • create_uncalib_descriptor_model,
    • find_calib_descriptor_model,
    • find_uncalib_descriptor_model,
    • get_descriptor_model_origin,
    • get_descriptor_model_params,
    • get_descriptor_model_points,
    • set_descriptor_model_origin, and
    • write_descriptor_model.

    The new HDevelop example programs examples/hdevelop/Applications/Packaging/locate_cookie_box.dev, examples/hdevelop/Applications/Packaging/locate_cookie_box_multiple_models.dev, and examples/hdevelop/Applications/Miscellaneous/detect_brochure_pages.dev demonstrate the new functionality. They use the new images cookie_box_* from the new subdirectory images/packaging and the images brochure_* and brochure_page_* from the new subdirectory images/brochure.
  • HALCON has been extended with two new operators to handle callbacks from a specific image acquisition interface. The operator set_framegrabber_callback allows to register a HALCON-specific callback function; the operator get_framegrabber_callback queries a callback function. Note that not all image acquisition interfaces actually support the use of these callbacks. See the documentation of the specific image acquisition interface for details.
  • HALCON has been extended with an operator set_shape_model_param that allows to overwrite the value of the parameter 'min_contrast' that was originally set for a shape model. The new HDevelop example program examples/hdevelop/Matching/Shape-Based/set_shape_model_min_contrast.dev shows how to use set_shape_model_param.
  • HALCON has been extended with an operator set_window_param that can be used to modify attributes of an already opened window. It is possible to change the title and the background color of a window. Furthermore, several parameters concerning the '3d_plot' paint mode can be modified. To query the current values of these parameters the operator get_window_param has been added.
  • HALCON has been extended with an operator vector_to_pose that computes a pose from 3D-2D point correspondences. The new HDevelop example program examples/hdevelop/Matching/Descriptor-Based/pose_from_point_correspondences.dev shows how to use vector_to_pose.


o Speed-Up and Enhancements:
  • affine_trans_image* and zoom_image* are now faster by a factor of up to 4 on Windows and Linux systems for images of type real and for all other image types if 'int_zooming' = 'false'.
  • binomial_filter is now faster by up to 20% on byte images and by up to 30% on uint2 images on Windows and Linux systems that support MMX or SSE2.
  • camera_calibration is now faster for area scan cameras. The amount of speed-up depends on and increases with the number of used images.
  • derivate_gauss is now faster by up to 180% on Intel compatible processors that support SSE2 under Windows and Linux. Furthermore, the speed-up obtained by automatic parallelization on domain level has been improved.
  • threshold and fast_threshold are now faster for byte and uint2 images on Windows and Linux systems that support SSE2. threshold is faster by up to a factor of 2.0 on byte images and by up to a factor of 3.0 on uint2 images. fast_threshold is faster by up to a factor of 1.8 on byte images and by up to a factor of 2.5 on uint2 images.
  • The operators
    • gray_erosion,
    • gray_dilation,
    • gray_opening,
    • gray_closing,
    • gray_tophat, and
    • gray_bothat

    for gray-value morphology with arbitrary structuring elements are now generally faster by a factor of up to 10 on Intel compatible processors that support SSE2 on Windows and Linux. Using flat structuring elements, the operators are now faster by a factor of up to 500.
    The new HDevelop example \Morphology\Gray-Values\gray_opening.dev shows how to speed up the operators used for gray-value morphology. It uses the new image pcb_layout.
  • The operators
    • gray_erosion_shape,
    • gray_dilation_shape,
    • gray_opening_shape, and
    • gray_closing_shape

    are now faster on Intel compatible processors that support SSE2 on Windows and Linux, depending on image size and mask dimensions (e.g., up to 170% with a 15x15 rectangular mask). Furthermore, these operators are now significantly faster with uint2 images on Intel compatible processors that support MMX or SSE2.
  • The operators
    • gray_erosion_rect,
    • gray_dilation_rect,
    • gray_opening_rect, and
    • gray_closing_rect

    are now faster on Intel compatible processors that support MMX or SSE2 on Windows and Linux, because now they use the same implementations as the operators
    • gray_erosion_shape,
    • gray_dilation_shape,
    • gray_opening_shape, and
    • gray_closing_shape.
  • gray_range_rect is now faster by an order of magnitude for byte images on Intel compatible processors that support MMX or SSE2 on Windows and Linux. Furthermore gray_range_rect now supports uint2 images.
  • lines_gauss is now faster by up to 40% on Intel compatible processors that support SSE2 under Windows and Linux.
  • mean_image with 3x3 masks on byte images is now faster by up to 100% on Intel compatible processors that support MMX on Windows and Linux.
  • median_image with byte images and rectangular masks of width 3 is now faster by up to 30% on Intel compatible processors that support SSE2 under Windows and Linux. In case of rectangular masks of width 5 median_image is now faster by up to 100%. Furthermore, median_image with uint2 images and rectangular masks of width 3 and 5 is now significantly faster on Intel compatible processors that support MMX or SSE2 under Windows and Linux.
  • minkowski_add1 is now significantly faster depending on the input parameters and the operating system (up to 200% on 64 bit operating systems with a 4x4 rectangle used as structuring element).
  • partition_rectangle is now faster by up to 20%.
  • points_harris is now faster by up to 100% on Intel compatible processors that support SSE2 under Windows and Linux. The same applies to points_foerstner with Smoothing='gauss'.
  • The tuple operators are now faster.
  • wiener_filter and wiener_filter_ni are now significantly faster. The speed-up of wiener_filter on a 512x512 image is up to 25%, while the speed-up of wiener_filter_ni on an image of these dimensions is up to 50%.
  • HALCON now supports reentrancy and automatic parallelization by default. This implies that former Parallel HALCON becomes the default and the overhead of Parallel HALCON has been reduced significantly.
  • HALCON is now able to write and read all HALCON images as TIFF files. All HALCON pixel types are supported. It is possible to store the domain of the images either as a transparency mask or as an alpha channel (for compatibility with other software programs that can read TIFF files). When reading TIFF files, an alpha channel that contains only the gray value 0 and exactly one other gray value is converted to a HALCON image domain. It is possible to write and read images with channels of mixed pixel type (as output, e.g., by gen_image_to_world_plane_map). It is possible to write image object tuples as multipage TIFF files. Likewise, multipage TIFF files are read as image object tuples. In addition to uncompressed storage, it is now possible to write TIFF files with the following compression schemes: PackBits, LZW, Adobe Deflate, and JPEG (new style JPEG according to TIFF Technical Note #2). When reading TIFF files, it is now possible to read tiled TIFF files of any pixel type.
    Furthermore, it is now possible to write and read HALCON regions and region object tuples as TIFF files. Region object tuples are written as multipage TIFF files with one bit per pixel.
    The operators that were extended are
    • write_image,
    • read_image,
    • dump_window,
    • write_region, and
    • read_region.

    Furthermore, the File image acquisition interface has been extended. Here, however, it is not possible to read multipage TIFF files since the interface of grab_image and grab_image_async only support a single image object. If multipage TIFF files are read with grab_image or grab_image_async, only the first page (i.e., the first image) is returned.
  • HALCON is now able to handle images that are larger than 32767 x 32767. For this, HALCON XL has been introduced.
    The documentation has been adapted accordingly.
    The new HDevelop example program examples/hdevelop/Applications/FA/extract_clips_xl.dev shows the processing of an image with a height larger than 32767.
  • HALCON now can handle an unlimited number of image channels per image object.
  • HALCON now supports an unlimited number of iconic objects per iconic object parameter for every relevant operator. Previous HALCON versions limited the maximum number of iconic objects per parameter to 100000 in some operators.
  • HALCON now supports an unlimited number of contour and polygon control points in all operators. Previous HALCON versions limited the number of contour or polygon control points to 200000 and 10000, respectively, in some operators.
  • HALCON now supports strings of unlimited length. Previous HALCON versions limited the string length to 1024 characters in many operators.
  • HALCON regions now cache features with double precision, once they have been computed. Subsequent computations of region features therefore now return the same results.
  • gray_erosion, gray_dilation, gray_opening, gray_closing, gray_tophat, and gray_bothat for gray-value morphology with arbitrary structuring elements now support uint2 images. The structuring element now has to be of the same pixel type as the input image.
  • hysteresis_threshold now supports real images.
  • read_region now supports PNG images with 1 bit per pixel.
  • query_font now supports more than 2000 fonts.
  • edges_sub_pix and edges_color_sub_pix now use less memory with reduced image domains.
  • lines_gauss, lines_color, and lines_facet now use less memory with reduced image domains.
  • The following operators are now parallelized automatically:
    • affine_trans_image and affine_trans_image_size
    • edges_image, edges_color, edges_sub_pix, and edges_color_sub_pix
    • find_ncc_model
    • The shape-based matching operators find_shape_model(s), find_scaled_shape_model(s) and find_aniso_shape_model(s)
    • The 3D shape-based matching operators find_shape_model_3d and create_shape_model_3d
    • hysteresis_threshold
    • lines_gauss
    • map_image (if the input map uses bilinear interpolation)
    • points_harris and points_foerstner
    • polar_trans_image_ext, polar_trans_image_inv, polar_trans_region, and polar_trans_region_inv
    • projective_trans_image and projective_trans_image_size.
    • rotate_image (except for rotations by 90, 180, or 270 degrees)
    • The threshold operators auto_threshold, bin_threshold, fast_threshold, char_threshold, and dual_threshold
    • zoom_image_size and zoom_image_factor (except if an image is zoomed down to half its size or if 'none' is used as Interpolation)


o Modified Operators:
  • HALCON now provides a camera model for area scan cameras that models higher order distortions, including tangential distortions. Additionally, camera_calibration and binocular_calibration now return only one value (instead of two values) in the output control parameter "Errors". In contrast to earlier versions, this value now describes the average Euclidian distance between image points and reprojected points and thus is larger by a factor of 1.414.
    The new HDevelop example examples/hdevelop/Applications/Calibration/compare_calibration_models.dev shows the calibration results using the camera models 'division' and 'polynomial'. It uses the new images images/calib/calib_distorted_*, which were acquired with a lens with strong distortions. The calibration is applied with both models. The calibration errors are then returned for each image individually to emphasize the achieved improvement.
  • The parameters 'width', 'height', 'neighborhood', 'clip_region', 'init_new_image', 'current_runlength_number', 'store_empty_region', 'empty_region_result', and 'no_object_result' of set_system and get_system now also have a thread-specific variant beginning with a 'tsp_' prefix. The thread-specific variant sets or queries the parameter only for the current thread. Additionally, the operators set_system and get_system are now reentrant to support high-performance thread-specific parameter access.
  • So far, connect_grid_points might have returned connecting lines between grid points that consisted of only two contour points. Such connecting lines are virtually useless for the grid rectification and may cause undesired results. Therefore, connect_grid_points now returns only connecting lines with at least three contour points.
  • The data code reader has been extended to be able to read ECC200 symbols with a disturbed or missing finder pattern. For this, the new parameter 'finder_pattern_tolerance' has been introduced, which provides the new functionality.
    The new HDevelop example program examples/hdevelop/Tools/Datacode/ecc200_finder_pattern_tolerance.dev shows how to use the new functionality. It uses the new images ecc200_damaged_finder_pattern_* from the subdirectory images/datacode/ecc200.
  • The data code reader has been extended to be able to read data code symbols with very small module sizes more robustly. For this, the new parameter 'small_modules_robustness' has been introduced, which provides the new functionality. Furthermore, the minimum allowed module size and width (PDF417) has been reduced from 2 to 1.
    The new HDevelop example program examples/hdevelop/Tools/Datacode/ecc200_small_modules_robustness.dev shows how to use the new functionality. The example program examples/solution_guide/2d_data_code/2d_data_codes_enlarge_modules.dev, which showed how to preprocess images containing data codes with small modules, is obsolete now.
  • depth_from_focus now supports internal mean filtering after applying the focus filter but before calculating the focus level.
  • distance_pp, distance_pl, distance_ps, distance_ss, distance_sl, distance_lr, distance_sr, distance_pr, intersection_ll, angle_ll, angle_lx, and projection_pl now allow empty input tuples. As a result, the operators then return empty tuples.
  • The scalability of fft_image, fft_image_inv, and fft_generic on multi-core/multi-processor machines has been improved.
  • HALCON's bar code reader is now interruptible. The user can now specify a maximum period of time after which find_bar_code is guaranteed to terminate. This timeout can be set using set_bar_code_param.
  • HALCON's data code reader is now interruptible. The user can now specify a maximum period of time after which find_data_code_2d is guaranteed to terminate. This timeout can be set using set_data_code_2d_param.
  • HALCON's correlation-based matching is now interruptible. The user can now specify a maximum period of time after which the operator find_ncc_model is guaranteed to terminate. This timeout can be set using the new operator set_ncc_model_param.
  • HALCON's shape-based matching is now interruptible. The user can now specify a maximum period of time after which the operators find_shape_model(s), find_scaled_shape_model(s), and find_aniso_shape_model(s) are guaranteed to terminate. This timeout can be set using the new operator set_shape_model_param. The new HDevelop example examples/hdevelop/Matching/Shape-Based/set_shape_model_timeout.dev shows how to use the timeout mechanism.
    Additionally, the six operators find_shape_model(s), find_scaled_shape_model(s), and find_aniso_shape_model(s) now have an increased tolerance mode. In this mode, the matches on the lowest pyramid level that still provides matches are returned.
    The new HDevelop example programs matching_defocused_pcb.dev and matching_deformed_bulb.dev in the subdirectory examples/hdevelop/Applications/FA show how to use the new operators. They use the new images pcb_focus_telecentric_* from the new subdirectory images/pcb_focus and halogen_bulb_*, halogen_bulb_good_*, and halogen_bulb_bad_* from the new subdirectory images/halogen_bulb, respectively.
  • fread_char no longer treats the line feed character in a special manner. Instead of returning the string 'nl', fread_char now simply returns the line feed character '\n', i.e., the character with the ASCII code 10. Existing programs that react on the line feed character must be rewritten to check for the string '\n' instead of 'nl'.
  • The default types of Knots and Weights in gen_contour_nurbs_xld have been changed from real to string to enable a simpler calling of the default case.
  • A new functionality for the assessment of the 1D bar code print quality according to the international standard ISO/IEC 15416 is now available. It can be performed by calling get_bar_code_results with the parameter 'quality_isoiec15416' after a bar code symbol was successfully detected by find_bar_code. The print quality can be evaluated for standardized bar codes (i.e., all supported bar code types except PharmaCode) as well as for composite codes.
    The example program examples/hdevelop/Tools/Barcode/print_quality_isoiec15416.dev shows the functionality for simple 1D bar codes. It uses the new example image ean1315 from the subdirectory images/barcode/ean13. The example program examples/hdevelop/Tools/Barcode/composite_print_quality_isoiec15416.dev shows the functionality for composite bar codes. It uses the new example image rsslimited_composite_02 from the subdirectory images/barcode/rss_composite.
  • The functionality for the 2D data code print quality assessment has been extended to support the AIM DPM-1-2006 standard for the ECC200 and QR Codes. It is accessible through the new parameter 'quality_aimdpm_1_2006' of get_data_code_2d_results.
    The new HDevelop example programs calibration_aimdpm_1_2006.dev and print_quality_aimdpm_1_2006.dev in the subdirectory examples/hdevelop/Tools/Datacode show how to use the new functionality. They use the new images rssexpanded_code_calibration_* from the subdirectory barcode/rssexpanded and the new images ecc200_quality_aimdpm_* from the subdirectory datacode/ecc200.
    Additionally, HALCON now provides labels for the print quality tuples returned by get_data_code_2d_results with the parameters 'quality_isoiec15415' and 'quality_aimdpm_1_2006'. The labels can be accessed through get_data_code_2d_results using the parameters 'quality_isoiec15415_labels' and 'quality_aimdpm_1_2006_labels', respectively.
  • The transformation underlying the operators get_hsi and set_hsi is now consistent with the transformation underlying the operators trans_from_rgb and trans_to_rgb. Furthermore, the 'hsi' LUT has been adapted to be consistent with this transformation.
  • The default mode of the global memory cache is 'exclusive' now. It can be queried and set by the 'global_memory_cache' parameter of the get_system and set_system operators.
  • gray_erosion, gray_dilation, gray_opening, gray_closing, gray_tophat, gray_bothat, read_gray_se, and gen_disc_se for gray-value morphology with arbitrary structuring elements now use a new format for the structuring element. The gray value 0 no longer has the special meaning of "not part of the region of interest". The new format uses HALCON domains for modeling the region of the structuring element. As a consequence, no offset of 1 is subtracted from the gray values of the structuring element. read_gray_se uses a new file format that supports the definition of the region of interest. The filters filter/*.gse have been adapted accordingly. gen_disc_se now has a new parameter Type that specifies the data type of the structuring element to create ('byte', 'uint2' or 'real').
  • hand_eye_calibration no longer needs an initial solution and the iterative optimization method has been improved. Furthermore, the operator provides the following changed input parameters: 'Method' and 'QualityType' to chose the desired type of algorithm and to define the output quality measure, respectively. The output parameter 'Quality' returns different types of quality measures to assess the computed results.
    Because of this change, the operator hand_eye_calibration is not source-code compatible to previous HALCON versions. Applications that use hand_eye_calibration must therefore be adapted to the changed interface.
  • The parameter value 'main' for Mode in mirror_image has been renamed to 'diagonal'.
  • mirror_region now has a mode 'diagonal' and the parameter RowColumn has been renamed to Mode.
  • moments_region_3rd now returns more accurate values for M12 and M30 with larger regions.
  • The pointer parameters in new_extern_window and set_window_dc have been replaced. The first and second parameters of operator new_extern_window were of type HWND* (INT*) and HDC* (INT*), respectively. The types were replaced by HWND (INT) and HDC (INT). This eases the usage, not only under .NET and VB, but also under C and C++. Further,the parameter WINHDC was removed from new_extern_window. Note that this change causes a source-code incompatibility to previous HALCON versions.
  • paint_gray and overpaint_gray now behave identically to comparable HALCON operators (e.g., sub_image) if multiobject or multichannel objects are passed as input parameters. Thus, a loop over all input objects and channels is now performed in this case. Furthermore, an error is now returned if two input images have a different number of channels.
  • Now, the database for HALCON objects is switched off by default. This includes that reset_obj_db does not delete all existing objects and count_relations does not return the number of existing objects anymore. To get the former behavior of reset_obj_db and count_relations, the state of the database can be switched/queried by the parameter value 'database' of the set_system and get_system operators.
  • select_shape now can be called with an additional feature 'area_holes' that computes the area of the holes of the regions (see also the description of the new operator area_holes).
  • The parameters of set_check now set the context of the current thread only by default. An exception is the 'memory' parameter, which can only be set system-wide. The system-wide settings that were supported so far should be enabled by a 'ref_' prefix of the name of the corresponding parameter. This will set the context of the current thread as well as a reference parameter that initializes newly started threads. get_check returns the thread-specific settings as well as the reference settings.
  • The error code of H_ERR_WRRLN2 has been changed from 3513 ("Internal error: number of chords too big for num_max") to 3501 ("Number of chords too big. Increase 'current_runlength_number' using set_system!"), because the error code 3513 is already used for the error code of H_ERR_WRRLN3. Applications using the constant H_ERR_WRRLN2 should be rebuilt.
  • The shape-based matching now finds the perfect match in the model image independent of the selected range of rotations and scales. For this, create_*shape_model* adapts the given range of rotations and scales slightly. Note that this may lead to slight changes of the matching results with respect to earlier versions.
  • smooth_funct_1d_mean now increments the value of SmoothSize if an even value is provided. This way the center of the filter mask is always explicitly determined.
  • stationary_camera_self_calibration now supports the determination of the radial distortion coefficient Kappa for varying camera parameters.
  • trans_from_rgb now uses the formula given in ITU-R BT.470-6 (Conventional Television Systems) for the 'yiq' transformation. Thus, the transformation matrix is now:

    |Y| |0.299 0.587 0.114| |R|
    |I| = |0.599 -0.276 -0.324| *|G|
    |Q| |0.214 -0.522 0.309| |B|

    Consequently, trans_to_rgb now uses the appropriate reverse transformation with the following transformation matrix:

    |R| |1.0 0.947 0.624| |Y|
    |G| =|1.0 -0.267 -0.650|*|I|
    |B| |1.0 -1.109 1.709| |Q|
  • The HALCON operator tuple_pow now always returns real values, even if both input values are integer.
  • The HALCON operator tuple_select_range now returns an empty tuple if (right_index = left_index-1) and at least one index is valid.


o Bug Fixes:
  • The automatic parallelization of operators on channel or domain level had a memory leak if the operator returns with an error. This problem has been fixed.
  • Several operators had memory leaks in very rare cases if they returned an error. The relevant operators are:
    • anisotrope_diff,
    • sqrt_image,
    • abs_image,
    • abs_diff_image,
    • add_image,
    • div_image,
    • invert_image,
    • max_image,
    • min_image,
    • mult_image,
    • scale_image,
    • scale_image_max,
    • sub_image,
    • binomial_filter,
    • bit_and,
    • bit_lshift,
    • bit_mask,
    • bit_not,
    • bit_or,
    • bit_rshift,
    • bit_slice,
    • bit_xor,
    • cfa_to_rgb,
    • crop_domain,
    • crop_rectangle1,
    • crop_part,
    • change_format,
    • channels_to_image,
    • laplace_of_gauss,
    • derivate_gauss,
    • convol_image,
    • dual_rank,
    • median_image,
    • median_separate,
    • midrange_image,
    • rank_image,
    • trimmed_mean,
    • gray_skeleton,
    • histo_2dim,
    • equ_histo_image,
    • region_to_label,
    • region_to_bin,
    • gen_image_proto,
    • paint_gray,
    • paint_region,
    • paint_xld,
    • region_to_mean,
    • texture_laws,
    • exhaustive_match,
    • exhaustive_match_mg,
    • image_to_world_plane,
    • map_image,
    • highpass_image,
    • illuminate,
    • emphasize,
    • mean_image,
    • sigma_image,
    • fill_interlace,
    • mean_n,
    • eliminate_sp,
    • mean_sp,
    • gray_dilation_rect,
    • gray_erosion_rect,
    • gray_opening_rect,
    • gray_closing_rect,
    • gray_range_rect,
    • lut_trans,
    • monotony,
    • bandpass_image,
    • add_noise_distribution,
    • add_noise_white,
    • anisotropic_diffusion,
    • isotropic_diffusion,
    • coherence_enhancing_diff,
    • mean_curvature_flow,
    • shock_filter,
    • optical_flow_mg,
    • vector_field_length,
    • unwarp_image_vector_field,
    • polar_trans_image,
    • polar_trans_image_ext,
    • polar_trans_image_inv,
    • principal_comp,
    • linear_trans_color,
    • projective_trans_image,
    • projective_trans_image_size,
    • gen_projective_mosaic,
    • gen_gauss_pyramid,
    • change_radial_distortion_image,
    • rank_n,
    • laplace,
    • harmonic_interpolation,
    • inpainting_aniso,
    • inpainting_ced,
    • inpainting_mcf,
    • complex_to_real,
    • real_to_complex,
    • vector_field_to_real,
    • depth_from_focus,
    • select_grayvalues_from_channels,
    • diff_of_gauss,
    • prewitt_dir,
    • frei_dir,
    • kirsch_dir,
    • robinson_dir,
    • prewitt_amp,
    • frei_amp,
    • kirsch_amp,
    • robinson_amp,
    • expand_domain_gray,
    • energy_gabor,
    • power_byte,
    • power_real,
    • power_ln,
    • phase_rad,
    • phase_deg,
    • fft_generic,
    • fft_image,
    • fft_image_inv,
    • rft_generic,
    • convol_gabor,
    • convol_fft,
    • gauss_image,
    • gray_opening_shape,
    • gray_closing_shape,
    • gen_cooc_matrix,
    • gray_erosion,
    • gray_dilation,
    • gray_open,
    • gray_close,
    • gray_tophat,
    • gray_bothat,
    • copy_image,
    • affine_trans_image,
    • affine_trans_image_size,
    • symmetry.

    This problem has been fixed.
  • area_center_gray, select_gray, and elliptic_axis_gray crashed with regions exceeding the dimensions of the input image. This problem has been fixed.
  • boundary crashed in rare cases with BoundaryType ='inner_filled'. This problem has been fixed.
  • change_radial_distortion_image clipped the input region to the currently largest image dimensions. Furthermore, this operator was not thread-safe and may have caused crashes if executed in parallel. These problems have been fixed.
  • check_difference crashed in rare cases. This problem has been fixed.
  • check_par_hw_potential crashed in rare cases or wrote corrupt parallelization information. The same problem applied to the program hcheck_parallel. This problem has been fixed.
  • class_ndim_norm crashed in rare cases. This problem has been fixed.
  • The parameter Num of classify_class_svm and classify_class_mlp was erroneously declared as real. Its type has been changed to integer.
  • clip_contours_xld sometimes returned the error 3254 ("maximum number of contours exceeded") when the input contours were divided into too many pieces. This problem has been fixed.
  • cooc_feature_matrix and cooc_feature_image were not parallelized correctly on tuple level. These operators returned the results of the first thread only. This problem has been fixed.
  • create_component_model crashed in very rare cases. This might have happened if at least one region that was passed in ComponentRegions contained only very noisy image edges. This problem has been fixed.
  • create_lexicon crashed if a parameter of invalid type was passed as a word list. This problem has been fixed.
  • create_shape_model_3d crashed in rare cases. The crash occurred only for some combinations of object models, camera parameters, and pose ranges. This problem has been fixed.
  • crop_domain sometimes crashed. This happened especially for large images. This problem has been fixed.
  • deviation_image crashed in rare cases if the mask dimensions exceeded the image dimensions. This problem has been fixed.
  • disp_circle crashed if the input radius value was negative. This problem has been fixed.
  • The parameter Num of do_ocr_single_class_svm and do_ocr_single_class_mlp was erroneously declared as real. Its type has been changed to integer.
  • drag_region1, drag_region2, and drag_region3 ignored the system variable 'clip_region', i.e., the preview displayed while dragging was clipped independent of the value of 'clip_region'. This problem has been fixed.
  • draw_nurbs and draw_nurbs_mod returned a Weights vector for closed curves that could not be used with gen_contour_nurbs_xld. This problem has been fixed.
  • draw_region and draw_polygon terminated as soon as the right mouse button was pressed. All other draw operaters (e.g., draw_rectangle1) did not terminate until the right mouse button has been released. This problem has been fixed.
  • edges_color_sub_pix set the 'edge_direction' attribute of the returned edge XLDs incorrectly. This problem has been fixed.
  • edges_sub_pix does not support processing of image tuples and therefore cannot be parallelized on tuple level anymore.
  • eliminate_min_max sometimes returned wrong results, especially at the border of a reduced domain. When parallelized on domain level, erroneous pixels could have also occured in the middle of the domain. This problem has been fixed.
  • fill_interlace did not parallelize correctly for Mode = 'rmodd' or Mode = 'rmeven'. In this case, the domain of the output image was too large. This problem has been fixed.
  • find_1d_bar_code_scanline and get_1d_bar_code_scanline sometimes returned the unexpected error 7002 ("Wrong type: output control parameter"). This problem has been fixed.
  • find_bar_code sometimes hung while reading a 'RSS Expanded' symbol if the scanning was failing to fetch the elements of the last data character. This problem has been fixed.
  • find_bar_code crashed if any of the image dimensions was smaller than 2 times 'element_size_max'. This problem has been fixed.
  • find_bar_code sometimes crashed while reading RSS-14 Stacked code symbols positioned close to the image border. This problem has been fixed.
  • find_bar_code sometimes returned the error 3513 ("Internal error: number of chords too big for num_max") with very small images. This problem has been fixed.
  • find_data_code_2d in rare cases returned the error 6041 ("System parameter for memory-allocation inconsistent") for PDF417 codes that were not completely inside the image. This problem has been fixed.
  • The ECC200 Datacode reader in rare cases returned different results if called multiple times. This problem has been fixed.
  • The ECC200 Datacode reader in rare cases could not decode the symbol although the symbol candidate was correctly found in the image and the modules within the symbol were correctly classified. In such cases, the candidate status that can be queried with get_data_code_2d_results in most cases returned 'decoding failed: inconsistent data'. This problem has been fixed.
  • HALCON sometimes crashed when assessing the print quality of a 'Model 1' QR Code. This problem has been fixed.
  • Owing to some errors in the description table that stored the data and error block sizes, the QR Code reader failed to decode symbols of the following versions:
    • version 33 (size: 149x149), error correction level: L
    • version 33 (size: 149x149), error correction level: Q
    • version 34 (size: 153x153), error correction level: M
    • version 36 (size: 161x161), error correction level: M

    Even with a perfect classification the reader returned the status message "error correction failed" for these symbols. This problem has been fixed.
  • find_marks_and_pose returned the error 6041 ("No memory block allocated at last") in very rare cases. This problem has been fixed.
  • find_shape_model returned imprecise results if the model was generated with Optimization set to 'pregeneration' and the search was performed with SubPixel set to 'none'. This problem has been fixed.
  • find_shape_model, all variants thereof, find_component_model, and find_ncc_model returned the error 6002 ("Memory partition on heap has been overwritten") for input images with a very small width or height. In particular, this was the case if the width or the height of the input image was less than 2 on the highest pyramid level. This problem has been fixed.
  • find_shape_model_3d sometimes returned poses that were shifted in the image with respect to the true pose. This happened if the radial distortion kappa that is passed to create_shape_model_3d in the parameter CamParam was exactly 0.0 and additionally the scale factors sx and sy that are also passed in the parameter CamParam significantly differed from each other. This problem has been fixed.
  • fit_surface_first_order and fit_surface_second_order were not parallelized correctly on tuple level. These operators returned the results of the first thread only. This problem has been fixed.
  • gauss_image sometimes returned erroneous results or even crashed. This happened if the width or height of the input images was smaller than half the size of the filter mask. Now, if the image is too small for the chosen filter size, the error 3035 ("Filter is too big") is returned.
  • gen_caltab and create_caltab created PostScript files that could not be read correctly by some PostScript viewers. In such cases, the error "DSC Error %%Pages: doesn't match number of %%Page:" might appear. This problem has been fixed.
  • gen_cooc_matrix crashed if the input region exceeded the domain of the input image. This problem has been fixed.
  • gen_cooc_matrix did not parallelize correctly on tuple level. Single image matrices of the tuple result might have been overwritten. This problem has been fixed.
  • gen_ellipse_contour_xld hung for very large input angle values (Phi, StartPhi, and EndPhi). This problem has been fixed.
  • gen_gauss_filter created filters that were rotated by 90 degrees with respect to the angle specified in Phi. This effect could only be noticed if Sigma1 != Sigma2. This problem has been fixed.
  • gen_parallels_xld returned the parallels in arbitray order. If the two operators gen_polygons_xld and gen_parallels_xld were called alternately, the order of the resulting parallels varied. This problem has been fixed.
  • gen_random_regions returned wrong results for region type rectangle1. If WidthMax was set to WidthMin and/or HeightMax was set to HeightMin, the resulting regions were one pixel too wide/high. Furthermore, the values for width and height were interchanged. These problems have been fixed.
  • get_bar_code_object with argument 'scanlines_all' or 'scanlines_valid' could have crashed, if the bar code image on which the last find_bar_code was executed was no longer available. A new bar code model parameter 'persistence' was introduced to resolve this problem. Now, to obtain scanlines, 'persistence' must be set to 1 before calling find_bar_code. This can be done while creating the model with create_bar_code_model or later with set_bar_code_param.
  • The HALCON operator get_param_num crashed, if the passed operator name string was longer than 80 characters. In the case of HALCON version 7.1 this problem could also lead to a crash of HDevelop, when entering a string of more than 80 characters into the comboboxes of the Find Operator or Operator/Procedure dialogs. These problems have been fixed.
  • Passing an open XLD contour as an input object to get_rectangle_pose sometimes caused a crash. This problem has been fixed.
  • get_region_thickness returned different results for shifted regions. This problem has been fixed.
  • The parameter FileName in gnuplot_open_file is now of the correct type filename.write instead of type filename.read.
  • gnuplot_plot_ctrl, gnuplot_plot_funct_1d, and gnuplot_plot_image crashed if they wrote to a file that has already been closed. Now, the HALCON error 5241 ("Not a valid gnuplot output stream") is returned in these cases.
  • gray_erosion_rect, gray_dilation_rect, gray_opening_rect, and gray_closing_rect handled even mask dimensions incorrectly. Instead of the next larger value, the next smaller value was used. This problem has been fixed.
  • gray_erosion_shape, gray_dilation_shape, gray_opening_shape, and gray_closing_shape led to memory access violation in rare cases. This was only the case if the width of the input image was smaller than 8 pixels and if MMX processing was enabled (which is the default). This problem has been fixed.
  • gray_erosion_shape, gray_dilation_shape, gray_opening_shape, and gray_closing_shape returned the error 9020 ("Internal Error: Unknown value") with uint2 images in rare cases. This was only the case if at least one of the Parameters MaskHeight and MaskWidth was not an integer and if MMX processing was enabled with set_system('mmx_enable','true') (which is the default). This problem has been fixed.
  • gray_erosion_shape, gray_dilation_shape, gray_opening_shape, and gray_closing_shape in rare cases returned wrong results if parallelized on domain level. This problem has been fixed.
  • gray_erosion_shape, gray_dilation_shape, gray_opening_shape, and gray_closing_shape did not parallelize correctly for mask sizes of type float. This problem has been fixed.
  • gray_inside hung in rare cases. This problem has been fixed.
  • illuminate returned wrong results when parallelized on domain level for all image types except of 'byte'. Now, it is automatically parallelized on internal data level instead of domain level.
  • 'info_framegrabber(...,'generic',...)' always returned the error 1302 ("Wrong value of control parameter: 2") instead of calling the corresponding query in the specific image acquisition interface. This problem has been fixed.
  • inner_rectangle1 returned wrong results for certain regions. Regions with at least two runs and a largest inner rectangle of area 1 were affected. This problem has been fixed.
  • inpainting_ct returned incorrect results for uint2 images. This problem has been fixed.
  • list_files returned the error 6041 ("No memory block allocated at last") if the option 'recursive' was set and if a subdirectory of the search directory was not readable.
  • local_min and local_max crashed with images of width or height 1 in rare cases. This problem has been fixed.
  • mean_image crashed with 'real' images if border treatment had to be applied to the whole image domain. This problem has been fixed.
  • mean_image returned wrong results for byte images and mask sizes greater than 16 MPixels. This problem has been fixed.
  • median_image returned wrong results at the image border if parallelized on domain level in rare cases. This only applied to the rectangular filter of size 1 and 2 and if MMX was enabled (which is the default). This problem has been fixed.
  • mirror_image did not mirror the region for Mode = 'main'. This problem has been fixed.
  • read_fft_optimization_data returned the error 3652 ("Optimization data was created with a different HALCON version (Standard HALCON / Parallel HALCON)") in Parallel HALCON if an optimization file written by Parallel HALCON was read. This problem has been fixed.
  • read_image did not read some XWD files correctly. This problem has been fixed.
  • read_string crashed with some fonts set by set_font on Unix systems. Now, the error 5177 ("Font not allowed for this operation") is returned in these cases.
  • rectangle1_domain crashed if the input parameter Row1 was larger than the image height and/or the input parameter Column1 was larger than the image width. This problem has been fixed.
  • regiongrowing in very rare cases returned the error 3513 ("Internal error: number of chords too big for num_max") if the domain of the input image was reduced. This problem has been fixed.
  • regiongrowing_mean returned incorrect results for uint2 images. In rare cases, regiongrowing_mean even crashed. This problem has been fixed.
  • reset_obj_db had a memory leak of 200 bytes per call. This problem has been fixed.
  • set_color was very slow if used remote on recent X servers. The HDevelop operator dev_set_color was affected as well. This problem has been fixed. Additionally, the colors associated to the names used in set_color were inconsistent with the colors X11 associates to these names. The shades of most colors were slightly different. This problem has been fixed.
  • set_font overwrote the paint mode of the window if the font string was longer than 30 characters. This problem has been fixed.
  • If the parameter Mode of set_insert is set to a value different from 'copy', a call of clear_window now behaves as expected and clears the window.
  • set_paint and dev_set_paint returned no error if Mode had an invalid value. This problem has been fixed. Additionally, the operators set_paint and dev_set_paint returned no or a wrong error message if Mode had an invalid value. This problem has been fixed by changing the error message.
  • set_tshape returned an incorrect error description. This problem has been fixed by changing the error description for the operators set_tshape and set_mshape.
  • set_window_attr now returns an error if invalid colors are passed as 'background_color' or 'border_color'.
  • sobel_amp, sobel_dir, and power_byte sometimes returned incorrect results in their first call in Parallel HALCON. sobel_amp and sobel_dir were only affected if 'sum_sqrt' was used as FilterType. This problem has been fixed.
  • sobel_amp returned incorrect results for pixels at the border of a reduced domain for the filter types 'thin_sum_abs' and 'thin_max_abs'. When parallelized on domain level, erroneous pixels could have also occured in the middle of the domain. This problem has been fixed.
  • stationary_camera_self_calibration may have not terminated if an element of NumCorrespondences was larger than 32767. This problem has been fixed.
  • store_par_knowledge and load_par_knowledge in rare cases returned the errors 1201 or 1401 ("wrong type/number of control parameter 1"), although the parameter was passed correctly. This problem has been fixed.
  • test_self_intersection_xld sometimes returned the error 6041 ("No memory block allocated at last"). This problem has been fixed.
  • text_line_orientation sometimes crashed. This problem has been fixed.
  • thickening_seq returned the error 6041 ('No memory block allocated at last') in very rare cases. This problem has been fixed.
  • train_model_components and create_component_model returned the error 6002 ("Memory partition on heap has been overwritten") if one of the input regions passed in InitialComponents or ComponentRegions, respectively, was lying completely outside the ModelImage or if one of the input regions was an empty region. This problem has been fixed.
  • tuple_remove had a memory leak if all elements of a tuple were removed and thus an empty tuple was returned. This problem has been fixed.
  • Calling tuple_str_last_n with an invalid index in rare cases led to a crash. This problem has been fixed.
  • tuple_string crashed if the second input control parameter contained an empty tuple. Furthermore, tuple_string did not return an error if the parameter contained a tuple with more than one element, which is incorrect. These problems have been fixed. Additionally, tuple_string crashed in rare cases if it was called with invalid patterns. The same applied to the C++ methods HTuple::ToString(const char*) and HTuple::ToString(const Halcon::HTuple&). This problem has been fixed. As a consequence tuple_string now only allows patterns that are conform with the documentation of tuple_string.
  • tuple_strrstr crashed on 64 bit systems if the string length of tuple T1 was smaller than the string length of tuple T2. This problem has been fixed.
  • union_straight_contours_xld erroneously returned the error 3257 ("Regression parameters of contours not yet entered!") even if regress_contours_xld was called before. This happened if one of the contours consisted of only one point with the coordinates (0,0) or if there were multiple identical contours that consisted of only one point. This problem has been fixed.
  • unwarp_image_vector_field did not parallelize correctly on domain level. This problem has been fixed.
  • write_data_code_2d_model did not write the contrast training state of PDF417 symbologies. Consequently, the training of the contrast was wrongly reinitialized after reading the 2d data code from disk. This problem has been fixed.
  • write_image ignored the value of the parameter FillColor if Format was set to 'ima'. This problem has been fixed.
  • write_image crashed if images with more than 8192 lines were written in JPEG2000 format. This problem has been fixed.
  • write_variation_model wrote corrupt data for files larger than 64 MB (Windows 32-bit) and for files larger than 32 MB (Windows 64-bit). This problem has been fixed.


HALCON

o Functionality:
  • HALCON has been extended with a large amount of new source code modules and classes (so-called HALCON Codelets) that can be used outside the development environment HDevelop. Many of these modules as well as corresponding example applications can be used as templates for new applications or directly called within newly developed code. In particular, HALCON Codelets help you to integrate the basic features of window handling into your application using HALCON.


HALCON/C

o Bug Fixes:
  • The HALCON/C include file HProto.h now contains the actual parameter names of the operators instead of non-descriptive names like InpObj1 and OutpCtrl2.
  • If an operator was called using a single API variant in C or C++ and returned an empty tuple for single parameters, the application crashed. This problem has been fixed (the operator will now return with an error).


HALCON/C++

o Bug Fixes:
  • Some member functions of HALCON/C++ tool classes were not marked as const although they did not modify the object state. This problem has been fixed.
  • The HALCON/C++ include file HCPPGlobal.h now contains the actual parameter names of the operators instead of only their type.
  • HALCON/C++ applications compiled with Visual Studio 2003 or higher caused the warning C4100 when using warning level 4. This problem has been fixed.
    Compatibility note: The enum HBaseArrayMode as well as the corresponding constructors of HBaseArray, HObjectArray and HXldArray have been removed from the HALCON/C++ interface.
  • The object-oriented API of HALCON/C++ has been improved:
    Parameters and return values representing tool classes now use the actual class type instead of untyped handles. For example, the model parameter of HImage::FindShapeModel is no longer of type HTuple, but of type HShapeModel. This change breaks source-code compatibility for existing applications.
    Furthermore, the tool classes now use reference counting to manage the underlying handle, which means that it is possible now to copy tool classes and use them as return values.
    Finally, the capitalization of the following header files has been changed to match the name of the actual class: HOCRMlp.h, HOCRSvm.h, HClassSvm.h, HClassMlp.h, HClassGmm.h. Because these header files are usually included indirectly via HalconCpp.h by applications, this change should be transparent even on Unix systems.
  • Explicitly closing a window via HWindow::CloseWindow caused an error when the instance was finally destroyed. This problem has been fixed.
  • It was possible for HALCON/C++ to crash under low memory conditions when the memory error occured within a class member function and not within an actual operator call. The result was an access violation under Windows and an unhandled std::bad_alloc under Unix. This problem has been fixed. In such cases, HALCON/C++ will now raise an HException.
  • When a NULL pointer was passed to an output control parameter of an operator via HALCON/C++, any errors which occured during the execution of the operator were ignored. In particular, this case occured when exporting C++ code from HDevelop for operators using the built-in variable "_" for output. This problem has been fixed.
  • The HALCON/C++ member function HTuple::Split() returned erroneous results in most cases if the HTuple instance contained more than one string element. This problem has been fixed.
  • If an operator was called using a single API variant in C or C++ and returned an empty tuple for single parameters, the application crashed. This problem has been fixed. The operator now will return with an error.


o Examples:
  • There are new VS 2005 projects for HALCON's C++ examples. In order to provide the new project files along with the old ones, the following modifications were performed:

    In both /examples/cpp and /examples/hdevengine/cpp directories:
    • The 'win' sub-directory was renamed to 'vs6'.
    • New VS 2005 project files are provided in a new 'vs2005' sub-directory.

    In each of the directories /examples/mfc/FGMultiThreading, /examples/mfc/Matching, /examples/mfc/MatchingCOM, /examples/mfc/MatchingExtWin, and /examples/mfc/MultiThreading:
    • All source, header, and resource files were moved to a new 'source' sub-directory.
    • All VS 6.0 project files were moved to a new 'vs6' sub-directory.
    • New VS 2005 project files are provided in a new 'vs2005' sub-directory.


HALCON/.NET

o Bug Fixes:
  • The semantic type feature_set is now represented by the new class HFeatureSet in HALCON/.NET. This change breaks source-code compatibility for HClassBox.LearnSampsetBox and HClassBox.TestSampsetBox.
  • Resizing HWindowControl caused flickering output even with "flush_graphic" disabled under Windows. This problem has been fixed.
  • For some tool classes, the resources allocated for the first instance of that type were never released. The memory leak was non-growing and therefore uncritical. However, freeing other resources such as for HSerial and HSocket was only possible via HOperatorSet. This problem has been fixed.
  • Accessing mixed tuples with inexact but castable types (such as t[1].L when the element at index 1 actually contained an int) caused an InvalidCastException. This problem has been fixed.
  • If an operator was called using a single API variant in COM or .NET and returned an empty tuple for single parameters, an adhoc value was returned. Now, an error will be returned instead. The new behavior is consistent across all language interfaces.
  • GetCirclePose did not work properly via HALCON/.NET. This problem has been fixed.
  • The object oriented variant of adjust_mosaic_images in HALCON/.NET and HALCON/COM now supports the full functionality of the operator.
    Attention: Since this change affects the signature of this operator in HALCON/COM and HALCON/.NET, it is not source-code compatible to previous HALCON versions if the object-oriented variant is used.


HALCON/COM

o Bug Fixes:
  • The HALCON/COM interface has been thoroughly revised. Most notably, HALCON/COM now supports extension packages and the size of the halconx.dll has been reduced by a factor of three. Source-code compatibility is mostly preserved with the following exceptions:
    • The class HHistogramX has been removed
    • HFramegrabberX and HWindowX no longer have special properties
    • The new class HXLDX is used as output parameter for some generic XLD operators that formerly returned HUntypedObjectX even in the object-oriented API, such as SelectShapeXld, ShapeTransXld, and ReceiveXld.
    • The class names HFunction1DX, HHomMat2DX and HHomMat3DX now use a capital "D" for consistency with other class names, which requires adaption in case-sensitive languages like C#. The same holds for the changed capitalization of HNCCModelX, HOCVX, HOCRBoxX, HOCRMlpX and HOCRSvmX.

    Furthermore, the behavior of the "Cast" method of iconic objects has been changed: The operation now creates a new object reference in the HALCON data base and the input object is no longer destroyed, but remains valid.
  • The class members GetDataCode2DObjects and GetBarCode2DObjects of HDataCode2DX and HBarCode2DX had output parameters with broken signatures. This problem has been fixed.
  • If an operator was called using a single API variant in COM or .NET and returned an empty tuple for single parameters, an adhoc value was returned. Now, an error will be returned instead. The new behavior is consistent across all language interfaces.
  • The object oriented variant of adjust_mosaic_images in HALCON/.NET and HALCON/COM now supports the full functionality of the operator.
    Attention: Since this change affects the signature of this operator in HALCON/COM and HALCON/.NET, it is not source code compatible to previous HALCON versions if the object-oriented variant is used.


HDevEngine

o Speed-Up and Enhancements:
  • The HDevEngine classes have been redesigned in order to better match the different aspects and tasks of the HDevEngine. The new HDevEngine interface consists of the following classes with their specific tasks:

    • HDevEngine - interface to global settings: external procedure paths and dev_* operator implementation.
    • HDevProgram - loading a program and providing access to the static structure of the program (variable names).
    • HDevProgramCall - allows the execution of a program and afterwards access to the variable values: it is possible to create several HDevProgramCalls for one program at the same time and execute them in parallel.
    • HDevProcedure - loading a local or external procedure and providing access to the static structure of the procedure (parameter numbers and names, short description).
    • HDevProcedureCall - allows to set the input parameters of a procedure, to execute it, and afterwards to access the output parameters: it is possible to create several HDevProcedureCalls for one procedure at the same time and to execute them in parallel.
    • HDevEngineException - exception data object that is thrown if an error or exception occurs.
    • HDevOperatorImplCpp - Base class for implementing a user defined implementation of the dev_* operators.

    The key benefits of the new HDevEngine are:
    • The provided interface classes offer a better match for the different aspects of the HDevEngine: one class is responsible for one particular task.
    • They support to use the HDevEngine in a multithreaded application by separating the loading of a program or procedure from its execution as well as by supporting execution of several programs and procedures in parallel.
    • The HDevEngine class allows to reset the external procedure paths (until now it was only possible to extend the list of external procedure paths).
    • HDevEngine/C++ uses the HALCON/C++ interface instead of the HALCON/C interface.

    For compatibility reasons, the old HDevEngine interface is still supported, but it will be legacy in the next version after HALCON 9.0. Therefore, all applications that use the HDevEngine and that want to be prepared to upgrade to future HALCON versions should be adapted to use the new HDevEngine.

    There are some changes in the file set that come along with the redesign of the HDevEngine:
    • Header file that must be included for HDevEngine/C++:
      • 8.0: $HALCONROOT/include/hdevengine/HDevEngine.h
      • 9.0: new interface: $HALCONROOT/include/hdevengine/HDevEngineCpp.h
        old interface: $HALCONROOT/include/hdevengine/HDevEngine8.h
    • HDevEngine/C++ libraries (Windows):
      • 8.0: hdevengine.lib, hdevengine.dll
      • 9.0: new interface: hdevenginecpp.lib, hdevenginecpp.dll
        old interface: hdevengine8.lib, hdevengine8.dll
    • HDevEngine/C++ libraries (Unix):
      • 8.0: libhdevengine.so
      • 9.0: new interface: libhdevenginecpp.so
        old interface: libhdevengine8.so
    • HDevEngine/.COM libraries (Windows only):
      • 8.0: hdevenginex.lib, hdevenginex.dll
      • 9.0: new interface: hdevenginex.lib, hdevenginex.dll
        old interface: hdevengine8x.lib, hdevengine8x.dll
    • HDevEngine/.NET libraries (Windows and Unix):
      • 8.0: hdevenginedotnet.dll
      • 9.0: new interface: hdevenginedotnet.dll
        old interface: hdevengine8dotnet.dll

    The existing examples that demonstrate how to use the HDevEngine have been adapted to the new interface. In addition, new examples have been added to demonstrate how to use HDevEngine/C++ in a multithreaded application. examples/hdevengine/cpp/source/exec_programs_mt.cpp uses the interface in a console application and examples/hdevengine/mfc/exec_procedures_mt_mfc is an MFC application.

    Detailed information about the HDevEngine can be found in the Programmer's Guide.


o Bug Fixes:
  • HDevEngine failed to load a procedure and threw an exception if the procedure contained invalid or unresolved program lines, no matter whether the program lines were activated or not. If an activated program line is invalid, this behavior is intended in order to signal that the procedure will not work properly. However, if the program line is deactivated, the procedure should be loaded and executed normally. This problem has been fixed.
  • The method GetVariableXld of HDevEngine/.NET did not work. This problem has been fixed.


Image Acquisition Interfaces

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



o New Version of the HALCON Acquisition Integration Interface:

The HALCON Acquisition Integration Interface has been upgraded to version 4.0 (INTERFACE_VERSION = 4). It is not binary compatible to HALCON 8.0.x or lower. All acquisition interfaces that are compatible with HALCON 9.0 have a revision number 4.x, with x starting with 0.

Existing interfaces are mostly source-code compatible (see the Image Acquisition Interface Programmer's Manual for more information). Applications based on existing interfaces are also mostly source-code compatible, in particular HDevelop applications.

HALCON has been extended with the two new operators: get_framegrabber_callback allows to register a HALCON-specific callback function for an image acquisition device. get_framegrabber_callback queries a callback function. Note that not all image acquisition interfaces currently support the use of these callbacks.

Please refer to the documentation of your acquisition interface for more information, especially whether a new revision of the corresponding device driver is required.



o New Image Acquisition Interfaces:
  • HALCON now also includes the eneo interface for remote grabbing from the eneo SC camera series from Videor Technical under Windows x86.
    The new HDevelop example programs eneo.dev, eneo_parameters.dev, and eneo_simple.dev in the directory examples/hdevelop/Images/Acquisition show how to use this interface.
  • HALCON now also includes the PixeLINK interface, which supports the IEEE 1394 (FireWire), USB, and GigE cameras from PixeLINK.
    The new HDevelop example programs pixelink.dev, pixelink_simple.dev, pixelink_parameters.dev, and pixelink_2cameras.dev in the directory examples/hdevelop/Images/Acquisition show how to use this interface.
  • HALCON now also includes the SonyXCI-2 interface, which supports the new Sony XCI-SX100/C and XCI-V100/C smart cameras. Thus, in combination with the standard HALCON installation for Windows x86, HALCON now completely runs on the Sony XCI-SX100/C and XCI-V100/C smart cameras, see also here.
    The new HDevelop example programs sonyxci2.dev, sonyxci2_simple.dev, and sonyxci2_parameters.dev in the directory examples/hdevelop/Images/Acquisition show how to use the new interface.


o Modified Image Acquisition Interfaces:
  • The following HALCON image acquisition interfaces have been revised since HALCON 8.0.2:
    • The new version 2v30 of the FirePackage driver is available, which can be used in combination with the 1394IIDC interface and fixes most notably the compatibility problem of the former versions 2v25...2v28 in case of multiple camera configurations.
    • The 1394IIDC interface for Linux is now available also for Linux x86_64 and is based on new versions of the underlying system libraries libraw1394 and libdc1394. Furthermore, it now includes a bugfix in close_framegrabber and allows to dynamically change the Format7 settings.
    • For the BaumerFCAM interface a bug regarding the interdependency of external triggering and continuous grabbing mode has been fixed. Additionally, it provides two new parameters. Furthermore, a bug in external triggering in case of synchronous grabbing has been fixed.
    • The BitFlow interface now includes minor bugfixes for the parameters 'do_comm_param', 'ctab_fill', 'overflow_thread', and 'hardware_exception_thread'.
    • The DahengCAM interface supports now also the SV-xxxx camera series and provides new parameters for digital I/O control.
    • The INSPECTA interface and INSPECTA5 interface support now the auto-detection of actually available devices in HDevelop.
    • The GigEVision interface is now also available for Windows x64. It includes various extensions and improvements such as an advanced packet resend mechanism, support of more pixel formats, dynamically setting of transport layer-related parameters, automatic packet size optimization, software cropping, and support of ForceIP. Furthermore, all parameter names have been made consistent to the GenICam Standard Feature Naming Convention. Additionally, the GigEVision interface provides a new acquisition mode to enforce the grabbing of latest available images, broadcast device discovery, new parameters for IP configuration and block timeout, automatic checking for firewalls on Windows XP, and support of real-time scheduling policy on Linux systems. Furthermore, several bugs have been fixed.
      The new HDevelop example program examples/hdevelop/Images/Acquisition/gigevision_crop.dev shows how to apply the GigEVision interface for software cropping.
    • For the Ginga++ interface and the GingaDG interface the thread handling in continuous grabbing mode has been improved.
    • The LinX interface provides new parameters 'set_exposure_and_rate' and 'shutter_speed'. Furthermore, it includes minor bugfixes for the parameters 'do_comm_param', 'overflow_thread', and 'hardware_exception_thread'.
    • The LuCam interface provides new parameters to control the frame rate and to query the actual sensor size. Additionally, the interface now accelerates the execution time of the GPIO parameters and a bug in the operator close_framegrabber has been fixed. Furthermore, the interface now supports also Windows x64 Editions.
    • The MatrixVisionAcquire interface support now also mvBlueCOUGAR devices and mvHYPERION-CLe frame grabbers. Furthermore, it includes bugfixes regarding 'MaxDelay' and 'grab_timeout'.
    • The MILLite interface support now also Vio boards and includes bugfixes in grab_image_async for software triggering and to reach the full frame rate in case of free-running analog cameras devices. Additionally, it provides functionality to handle the 'frame_start', 'frame_end', and 'transfer_end' callbacks.
    • The mEnableIII and the mEnableIV interface provide new parameters to query the serial number and to assign particular signals to Camera Link's CC0-3 lines.
    • The mEnableVisualApplets interface provides a new parameter to query the serial number and includes bugfixes in continuous grabbing mode and in querying Visual Applet's generic parameters.
    • The PXC interface provides a bugfix in querying the current gain value.
    • The pylon interface now supports software cropping. Furthermore, the new interface revision includes several bugfixes, in particular in case of multi-threaded applications and multiple camera configurations. Additionally, bugs in the operator open_framegrabber regarding the device names and in handling multiple devices have been fixed.
    • The RangerC and the RangerE interface provide implementations of grab_data and grab_data_async to return a tuple of images in measurement mode instead of multi-channel images. Furthermore, the parameter 'grab_timeout' now supports the value -1.
    • The SaperaLT interface now supports Windows x64 Editions. Furthermore, the new interface revision includes minor bug fixes. Additionally, for the interface a bug in the operators grab_image and grab_image_async in case of an error have been fixed.
    • The uEye interface now supports new color formats, pixel depths, and subsampling/binning factors. Furthermore, it provides the new parameters 'image_available' and 'color_conversion', and includes several bugfixes.
    • For the VRmUsbCam interface a bug in the operator grab_image_start has been fixed to avoid unnecessary re-initializing of the acquisition engine.

    Please refer to the corresponding documentation for information about additional changes, especially whether a new revision of the corresponding device driver is required.



o Legacy Image Acquisition Interfaces:
  • The following HALCON image acquisition interfaces are now only available in the Legacy download area:
    • dPict
    • DT315x
    • DT3162
    • FlashBusMV
    • iPORT

    The following HALCON image acquisition interfaces are still available in the Legacy download area:
    • BARRACUDA
    • DFG-BW
    • Ginga
    • MatrixVision

Manuals

o Installation Guide:

The Installation Guide is available in a new edition. It has been adapted to the changes in HALCON 9.0.


o Quick Guide:

The Quick Guide is available in a new edition. It has been adapted to the changes in HALCON 9.0. In particular, new examples for the industries 'Packaging' and 'Automobile Parts and Manufacturers' and for the application area 'Traffic' were added.


o 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 9.0, in particular the editor for full text editing, the Calibration Assistant, and the documentation of local and external procedures. Furthermore, a reference documentation for the Image Acquisition Assistant was added.



o Solution Guide I (Basics):

The Solution Guide I (Basics) is available in a new edition.


Additionally, the Solution Guide I now has an index, which can be accessed also via the tab "Keywords" in HDevelop.

o Solution Guide II+III (Advanced):

Because of the increasing size of the Solution Guide II, it has been split up into two manuals, a Solution Guide II and a Solution Guide III. It now has the following structure:

  • Solution Guide II-A on Image Acquisition
  • Solution Guide II-B on Shape-based Matching
  • Solution Guide II-C on 2D Data Codes
  • Solution Guide II-D on Classification
  • Solution Guide III-A on 1D Measuring
  • Solution Guide III-B on 2D Measuring
  • Solution Guide III-C on 3D Vision

The individual Solution Guides are now available in a new edition. They have been adapted to the changes in HALCON 9.0.
Additionally, all Solution Guides now have an index, which can be accessed also via the tab "Keywords" in HDevelop.



o Solution Guide II-B on Shape-Based Matching:

The Solution Guide II-B on Shape-Based Matching has been adapted to the extensions for the shape-based matching, in particular,


Additionally, the Solution Guide II-B on Shape-based Matching has been extended by information about using shape-based matching in multithreaded applications.

o Solution Guide II-C on 2D Data Codes:

The Solution Guide II-C on 2D Data Codes has been extended by detailed information about the evaluation of the print quality for 2D data codes (ECC200 and QR Code) according to the AIM DPM-1-2006 standard.


o Solution Guide II-D on Classification:

The new Solution Guide II-D on Classification shows how to classify images or regions with different types of classifiers. The following new HDevelop example programs have been added in the directory examples/solution_guide/classification and illustrate the descriptions:


  • classify_metal_parts.dev
  • classify_metal_parts_ocr.dev
  • train_characters_ocr.dev
  • classify_characters_ocr.dev
  • classify_citrus_fruits.dev
  • segment_citrus_fruits.dev
  • classify_halogen_bulbs.dev
  • visualize_3d_feature_space.dev

The following images have been added in the directory images:

  • color/citrus_fruits_*
  • rings/mixed_*
  • rings/nuts_*
  • rings/retainers_*
  • rings/washers_*
  • halogen_bulb/halogen_bulb_*
  • halogen_bulb/bad/halogen_bulb_bad_*
  • halogen_bulb/good/halogen_bulb_good_*
  • halogen_bulb/none/halogen_bulb_none_01
  • ocr/chars_*
  • ocr/chars_training_*

o Solution Guide III-C on 3D Vision:

The Solution Guide III-C on 3D Vision (previously 3D Machine Vision) has been extended in many ways:


o Programmer's Guide:

The Programmer's Guide is available in a new edition. It has been adapted to the changes in HALCON 9.0, in particular the the introduction of HALCON XL and the revised HDevEngine. Besides the PDF version, now an HTML version is available.


o Extension Package Interface Programmer's Manual:

The Extension Package Interface Programmer's Manual is available in a new edition. It has been adapted to the changes in HALCON 9.0, in particular the introduction of HALCON XL. Besides the PDF version, now an HTML version is available.


o Image Acquisition Interface Programmer's Manual:

The Image Acquisition Interface Programmer's Manual is available in a new edition. It has been adapted to the changes in HALCON 9.0. Besides the PDF version, now an HTML version is available.


o Reference Manual:
  • The Reference Manual entry of check_difference described the case of identity incorrectly. This problem has been fixed.
  • The Reference Manual entries of create_shape_model_3d and find_shape_model_3d have been extended. They now emphasize more explicitly that the pose resulting from find_shape_model_3d refers to the original 3D object model coordinate system that is used in the DXF file but not to the reference coordinate system that is introduced in find_shape_model_3d.
  • The Reference Manual entries of do_ocr_single_class_svm, do_ocr_multi_class_svm, and get_features_ocr_class_svm falsely stated that only byte images were accepted. In fact, these operators also work with uint2 images. The Reference Manual entries have been adapted accordingly.
  • The Reference Manual entry on find_ncc_model has been extended. It now explains why instances of the model that lie close to the image border cannot be found in some cases. It also describes a way how to deal with this matter.
  • get_data_code_2d_param returns 0 for QR Code models that can handle models of type 1 and 2 and not 'any' as it was described in the Reference Manual. The Reference Manual entry was adapted accordingly.
  • The Reference Manual entry on prepare_direct_variation_model erroneously stated that multiple images can be passed in RefImage, although actually only a single image can be passed. The Reference Manual entry has been adapted accordingly.
  • The Reference Manual entry on segment_contours_xld has been extended. It now explains why contours with less than 6 contour points are not segmented.
  • The Reference Manual entry of connect_grid_points now explicitly mentions the fact that high values of the input parameter MaxDist may lead to the loss of connecting lines.
  • The Reference Manual entry of smooth_funct_1d_mean has been extended to describe the new behavior when incrementing the value of SmoothSize.

Additionally, the keywords under which the operators can be found in HDevelop's tab "Keywords" and in the PDF version of the reference manuals have been completely revised.



Supported Operating Systems

o Windows:

HALCON 9.0 has been compiled in three Windows versions:

  • x86-win32 version for Windows NT/2000/XP/2003/Vista on Intel Pentium or compatible processors without SSE2 instructions
  • x86sse2-win32 version for Windows NT/2000/XP/2003/Vista on x86 processors with SSE2 extension, e.g., Intel Pentium 4 / AMD Athlon64 or newer
  • x64-win64 version for Windows XP/2003/Vista x64 Edition on Intel EM64T or AMD64

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

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

Please note that if you want to switch to another version, you must first install it, e.g., by re-inserting the DVD. Then, you must adapt the environment variable HALCONARCH (see the Installation Guide for more information).



o Linux:

HALCON 9.0 has been compiled in six Linux versions:

  • x86-linux2.4-gcc33 version for Linux, Kernel 2.4 or higher with Application Binary Interface (ABI) 1 on Intel Pentium or compatible processors without SSE2 instructions. Note that this version is only available in the Legacy download area.
  • x86-linux2.4-gcc40 version for Linux, Kernel 2.4 or higher with ABI 2 on Intel Pentium or compatible processors without SSE2 instructions
  • x86sse2-linux2.4-gcc33 version for Linux, Kernel 2.4 or higher with ABI 1 on x86 processors with SSE2 extension, e.g., Intel Pentium 4 / AMD Athlon64 or newer. Note that this version is only available in the Legacy download area.
  • x86sse2-linux2.4-gcc40 version for Linux, Kernel 2.4 or higher with ABI 2 on x86 processors with SSE2 extension, e.g., Intel Pentium 4 / AMD Athlon64 or newer
  • x64-linux2.4-gcc33 version for Linux x86_64, Kernel 2.4 or higher with ABI 1, on Intel EM64T or AMD64. Note that this version is only available in the Legacy download area.
  • x64-linux2.4-gcc40 version for Linux x86_64, Kernel 2.4 or higher with ABI 2, on Intel EM64T or AMD64

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

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

After the installation, please set the environment variable HALCONARCH to the version name (x86-linux2.4-gcc33, x86-linux2.4-gcc40, x86sse2-linux2.4-gcc33, x86sse2-linux2.4-gcc40, x64-linux2.4-gcc33, x64-linux2.4-gcc40) and use it to extend the environment variables PATH and LD_LIBRARY_PATH (see the Installation Guide for more information).



o Solaris:

HALCON 9.0 has been compiled for Solaris 9 or higher on UltraSPARC workstations.

After the installation, please set the environment variable HALCONARCH to sparc-sun-solaris9 and use it to extend the environment variables PATH and LD_LIBRARY_PATH (see the Installation Guide for more information).



Miscellaneous

o Installation:
  • The installer was previously based on an outdated version of InstallShield, because newer versions no longer supported Windows NT. It has now been completely rewritten based on the Nullsoft Install System (NSIS). The general behavior of the installer should be similar to the old installer. However, the installer now checks online for the availability of newer maintenance releases and has a more modern and user-friendly interface. Additionally, the installer now checks the available disk space.
  • Under Windows, new versions of the dongle drivers are included: HASP 4.110 and Sentinel 7.5.0.
  • For using the HALCON GigEVision acquisition interface, the installer automatically installs GenApi version 1.1 in the directory %HALCONROOT%\genicam and sets the corresponding environment variable %GENICAM_ROOT_V1_1% appropriately. Furthermore, the Visual Studio C++ 2005 SP1 Redistributable Runtime Package for Windows x86 and Windows x64 is included in the installation.
  • The DVD contains the version 2v30 of the FirePackage driver in the 3rdparty, which is necessary to use the IIDC1394 acquisition interface under Windows and Windows x64.


o Licensing:

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



o Example Images:

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



 
  © Copyright 2008 MVTec Software GmbH - All rights reserved.