This document provides the release notes for MVTec HALCON 10.0, as released in October 2010.
Overview
This document contains the following information:
- Major New Features of HALCON 10.0
- Detailed Description of Changes in HALCON 10.0 (relative to HALCON 9.0.2)
- Major New Features of HALCON 9.0
- Detailed Description of Changes in HALCON 9.0.2
- Detailed Description of Changes in HALCON 9.0.1
- Detailed Description of Changes in HALCON 9.0 (relative to HALCON 8.0.2)
Compatibility
-
Licenses
All HALCON 9.0 licenses or licenses of earlier versions must be replaced or upgraded. Please contact your local distributor.
-
HDevelop Examples and External Procedures
HALCON has been extended with a new file format for HDevelop example programs and external procedures. By default, HDevelop example programs now have the file extension .hdev and external procedures now have the file extension .hdvp. The old file extensions .dev and .dvp are still supported for backward compatibility.
-
HALCON Library
Compared to HALCON 9.0, many extensions have been introduced. Thus, the HALCON 10.0 libraries are not binary compatible with HALCON 9.0.x or earlier versions. However, HALCON 10.0 is mostly source-code compatible to HALCON 9.0.x except for the changes listed below.
-
HALCON Applications
Please re-compile all C, C++, .NET, or COM programs developed with HALCON 9.0.x.
The incompatibility with HALCON 9.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:
- open_socket_accept and open_socket_connect are not source-code-compatible to previous HALCON versions, because they have been extended with generic parameters. Existing programs using these operators must be adapted.
- gen_arbitrary_distortion_map and gen_grid_rectification_map are not source-code-compatible to previous HALCON versions, because they have been extended with a new parameter MapType. Existing programs using these operators must be adapted.
- find_[un]calib_descriptor_model are not source-code-compatible to previous HALCON versions, because the obsolete parameter Seed has been removed. Existing programs using these operators must be adapted.
- Applications that apply get_data_code_2d_params to PDF417 symbologies with one of the generic parameters 'symbol_rows_min', 'symbol_cols_min', 'symbol_rows_max', or 'symbol_cols_max' must be adapted because the type of the return values has been changed from real to integer.
- In contrast to the behavior in HALCON 9.0.2, the parameter UsedThreshold of segment_characters, when called in tuple mode, contains one entry for every input region given in the parameter Region. It is suggested to call segment_characters in tuple mode if more than one region is used.
- The new operator read_object_model_3d replaces the existing operator read_object_model_3d_dxf, which is now legacy but still provided for compatibility reasons. Note that read_object_model_3d and read_object_model_3d_dxf now do not create faces for planar DXF entities of type CIRCLE and ELLIPSE anymore. If a DXF file used for 3D matching contains such entities and if these entities are necessary for the creation of the 3D shape model, they must be replaced by other DXF entities, e.g., by polyface meshes, which can be represented by POLYLINEs.
- For shape-based 3D matching, several changes have been applied that affect
the compatibility:
- The 3D shape model is no longer backward compatible to previous HALCON versions because calculations needed to find objects that correspond to views that are close to the poles of the spherical pole range are now applied during the creation of the model and not during the search. Note that a 3D shape model that has been created with a previous HALCON version can still be used, but then the search is slightly slower.
- For the shape-based 3D matching the metric 'ignore_segment_polarity' was renamed to 'ignore_local_polarity'. For backward compatibility, the metric 'ignore_segment_polarity' is still accepted by the operator create_shape_model_3d. However, the operator get_shape_model_3d_params now returns 'ignore_local_polarity' instead of 'ignore_segment_polarity' for the generic parameter metric. Consequently, programs that rely on the metric name returned by get_shape_model_3d_params must be adapted accordingly.
- Because the new pose refinement for the shape-based 3D matching is switched on by default and slightly different results might be obtained when switching 'fast_pose_refinement' on or off, existing programs that create the 3D shape model might behave slightly different by now. To obtain the old behavior, either the old model must be read from disk or the model must be recreated with 'fast_pose_refinement' switched off.
- Programs that use create_shape_model_3d without explicitly specifying its generic parameter 'min_face_angle' now might behave differently because a different model might be created due to a changed default value. To obtain the old behavior, in such programs the generic parameter 'min_face_angle' of create_shape_model_3d must be set to rad(15).
- The operators set_socket_timeout and get_socket_timeout are now obsolete and have been integrated in the new operators set_socket_param and get_socket_param. For backward compatibility, they are still supported.
- The obsolete operators disp_info, def_obj, get_lut_gamma, and set_lut_gamma, which could not be selected in HDevelop, were removed from HALCON. Furthermore, the operators test_obj_def and sensor_kalman that must not be used any longer have been removed from the reference manual and cannot be selected in HDevelop any longer. For compatibility reasons, test_obj_def and sensor_kalman can still be called from existing applications.
- edges_image with Filter set to 'sobel_fast' now returns more accurate results for high contrast images. To ensure a correct computation of the amplitude values it was necessary to change the type of the output image ImaAmp. For byte input images, ImaAmp now is of type uint2 while for uint2 input images, ImaAmp now is of type int4. Consequently, in some cases it will be necessary to adapt existing programs to deal with the new image types.
- write_ocr_trainf and append_ocr_trainf did not check the number of input images. Therefore, it was erroneously possible to pass an image array to the parameter Image. Now, the error 1502 ("Wrong number of values of object parameter: 2") is returned in this case. Programs in which an image array is passed to the operator write_ocr_trainf and append_ocr_trainf must be adapted accordingly.
- The domains of the composed images that are returned by the operators compose* might differ between different HALCON versions.
- Because the distance values returned by distance_transform now differ from those returned by previous HALCON versions by up to 1, a slightly different behavior of existing applications that use large images can be expected.
- mean_image no longer accepts filter masks larger than twice the respective dimension of the processed image, which may lead to a different result than that returned by an older HALCON version.
- HALCON descriptor model files that are written with HALCON 10.0 cannot be read by previous HALCON versions, but HALCON descriptor model files written with previous HALCON versions can still be read with HALCON 10.0.
- Compared to the deformable model that was used for the perspective deformable matching, the local deformable model contains additional model data. To provide a single data type for deformable models in general, the existing deformable model has been extended and thus is no longer backward compatible to previous HALCON versions. Note that deformable models that have been created with a previous HALCON version can still be used.
- For several operators, now a new interpolation mode 'bilinear' is supported and the interpolation mode 'none' has been renamed to 'nearest_neighbor'. For backward compatibility, the mode 'none' is still supported.
- For median_image and dual_rank the parameter values 'rectangle' for the parameters MaskType have been renamed to 'square'. However, the values 'rectangle' are still supported for backward compatibility.
- The error messages for read_image and write_image have been changed for the case that images could not be read or written.
- Programs that used train_class_gmm with older versions of HALCON/C, HALCON/C++, or HALCON/.NET might require adjustments in the source code to cope with the changed output types for the parameters Centers and Iter.
- Single API variants of operators in HALCON/.NET now raise an exception if the actual number of returned values is 0.
- The changes for the HALCON/.NET API in some parts break source code compatibility for .NET applications using the object-oriented style.
- The changes for the constructor of HWindow in HALCON/.NET technically produce a source code incompatibility, but the change should go unnoticed due to the availability of the HTuple variant and implicit casts.
- If your C and CPP programs use the anonymous variables _, _i, _d, _s, or _t, you must adapt them to the changes related to anonymous variables.
- The image sequence images/bicycle/bicycle_* has been converted from color images to gray images. User programs that use these images must be adapted accordingly.
-
Image Acquisition Interfaces
The system requirements of the following image acquisition interfaces have been changed since HALCON 9.0.2:
- For using the updated 1394IIDC interface you must install the new FirePackage driver 2v33.
- For using the updated Andor interface you must install the new Andor SDK version 2.88.
- For using the updated BitFlow interface you must install the new BitFlow SDK 5.30.
- For using the updated Crevis interface you must install the new Crevis driver V2.0.0.2.
- For using the updated eneo interface you must install the camera firmware and the new SDK version 3.4.0.
- For using the updated LinX interface you must install the new LinX SDK 5.30.
- For using the updated pylon interface you must install the new Basler pylon SDK version 2.2.
- For using the updated SICK-3DCamera interface you must install the new SDK version 4.1.
- For using the updated SiliconSoftware interface you must install the new SDK version 5.1.
- For using the updated uEye interface you must install the new uEye SDK 3.5 (or higher).
- For using the updated VRmUsbCam interface you must install the new VRmUsbCam SDK version 3.13.
If you have developed your own acquisition interfaces with HALCON 9.0.x, you can re-generate them with HALCON 10.0 without further action.
-
Extension Packages
Please re-generate your own extension packages developed with HALCON 9.0.x. Note that files in the directory 'help' have been renamed, which led to an adaptation of the build process for extension packages.
-
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 10.0.
-
ActivVisionTools 1.0 to 3.1 cannot be used with HALCON 10.0. If the setup program detects such an ActivVisionTools version, it warns you that by continuing to install HALCON 10.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.
-
Legacy or No Longer Supported Features:
- The HALCON platform versions x86-linux2.4-gcc33, x86sse2-linux2.4-gcc33, and x64-linux2.4-gcc33, which were already legacy for HALCON 9.0, are no longer supported.
- HDevEngine8, i.e., the HDevEngine that was used for HALCON 8.0 and that was already legacy for HALCON 9.0, is no longer supported.
- Windows NT 4.0 and Windows 2000 are no longer supported. If you want to use HALCON under Windows, you must use Windows XP or higher.
- The operator reference is now available in a single version, i.e., it is independent from the syntax. This holds for the HTML and the PDF version. In the HTML version, the language interfaces can be switched, whereas for the PDF version, the HDevelop syntax is used.
- Selected operators became legacy or are no longer supported.
- Several image acquisition interfaces are no longer supported.
- Several image acquisition interfaces are now legacy.
Major New Features of HALCON 10.0
General Features
-
Compute Devices:
- HALCON now provides operators to support compute devices including the automatic GPU acceleration based on the OpenCL standard.
-
3D Vision:
- HALCON now provides operators for multi-view camera calibration.
- HALCON now provides operators for multi-view stereo reconstruction.
- HALCON now provides operators for surface-based 3D matching.
-
HALCON's shape-based 3D matching has been extended. Amongst others,
- a new parameter 'lowest_model_level' allows to disable the pregeneration of the model views on lower pyramid levels,
- a new parameter 'ignore_part_polarity' makes the shape-based 3D matching more robust against clutter,
- a new parameter 'fast_pose_refinement' enables a fast pose refinement to speed up the search significantly, and
- more file formats for the 3D shape model are supported. In particular, in addition to the file format DXF, now also the file formats PLY and OFF are supported.
- HALCON now provides operators for 3D primitives fitting.
-
Matching:
- HALCON now provides operators for local deformable matching.
- HALCON's perspective deformable matching has been extended with a set of operators for the creation of perspective deformable models using XLD contours.
- HALCON's shape-based matching and component-based matching has been improved for the case that objects are searched that are slightly deformed.
-
Bar Code and Data Code Reading:
- HALCON's bar code reader is now able to read multiple bar code types in one call to find_bar_code (autodiscrimination). Additionally, it has been extended with a training mode that determines suitable parameter settings, with the functionality to return diagnostic status messages and with the functionality to stop trying to decode any further candidates after a given number of successfully decoded bar codes. Furthermore, the new operator decode_bar_code_rectangle2 decodes bar codes in user-defined ROIs.
- For HALCON's QR code reader, the robustness related to distortions like local deformations has been improved.
-
OCR:
- HALCON now provides operators for the new smart text finder.
- HALCON now provides a set of new and revised pre-trained OCR fonts.
-
Further Enhancements:
- The chapter structure used for the HALCON operators and the HDevelop examples has been revised for better guidance.
- HALCON now provides operators for LUT-accelerated classification.
- HALCON now provides operators for generic socket communication.
- HALCON now provides operators for thread synchronization that support mutex, event, barrier, and condition synchronization objects.
- HALCON now provides operators for the extended hardware-specific optimization of the automatic operator parallelization.
- HALCON's installer GUI is now also available in German and Japanese.
-
HALCON 10.0 provides significant speed-ups for
- selected operators and
- the parallelization of operators (see also the list of operators that are now parallelized automatically).
HDevelop
-
Language:
HDevelop and the HDevEngine have been extended with global variables.
-
Measure Assistant:
HDevelop has been extended with a Measure Assistant. Note that the functionality provided by the new Measure Assistant can be integrated into an application using the corresponding new source code and classes for HALCON Codelets.
-
Tools:
- HDevelop now provides the new ROI tool.
- HDevelop now provides the new Line Profile tool.
-
Local Procedures:
HDevelop now provides the possibility to protect also the main procedure and local procedures.
-
Examples and External Procedures:
HDevelop programs and external procedures are now available in a new file format that allows to manage them within version management tools like CVS.
-
General Usabilty:
The general usability of HDevelop has been enhanced in many ways. For example,
- a new dialog 'Program Line View' is provided to list selected lines of code and amongst others display and manage breakpoints and bookmarks,
- a general output console is provided that enables to log certain events silently,
- code can be generated directly from the current settings of the Graphics window, and
- multiple programming windows can be opened to view different parts of the same program simultaneously and within a programming window, multiple tabs allow to view different procedures of the current program.
- The HALCON reference manual and the example descriptions in the Browse Examples dialog are now also available in Japanese. Additionally, information that HDevelop derives from the operator reference is now available also in German and Japanese.
- In HDevelop's Help browser, index topics are now also available in German. Additionally, the index now contains also topics for the Programmer's Guide.
Image Acquisition
-
New Image Acquisition Interfaces:
- The ADLINK interface supports the CPL64 Camera Link boards from ADLINK.
- The GenICamTL interface supports all cameras that are compliant to the GenICam GenTL standard.
- The LPS36 interface supports the LPS 36 light-section sensors from Leuze electronic.
- The PcEyeCL interface supports the PC_EYE/CL Camera Link boards from ELTEC.
- The VRmAreaScan3D interface supports the new AreaScan3D cameras from VRmagic.
Documentation
-
Extended HDevelop User's Guide:
The HDevelop User's Guide has been extended in many ways to cope with the extensions for HALCON 10.0.
-
Extended Solution Guide Basics:
The Solution Guide I (Basics) has been extended in many ways to cope with the extensions for HALCON 10.0.
-
New Solution Guide on Matching
The new Solution Guide II-B on Matching describes all 2D matching approaches that are available in HALCON 10.0. It replaces the former Solution Guide II-B on Shape-Based Matching.
-
Extended Solution Guide on Classification:
The Solution Guide II-D on Classification has been extended to describe the new LUT-accelerated classification.
-
Extended Solution Guide on 3D Vision:
The Solution Guide III-C on 3D Vision has been extended in many ways to cope with the extensions for 3D vision. Additionally, a new chapter explains how to use depth from focus.
-
Reference Manual:
The chapter structure in which the HALCON operators are arranged in the HALCON reference manual has been reorganized.
Detailed Description of Changes in HALCON 10.0 (relative to HALCON 9.0.2)
Detailed release notes can be obtained for the following topics:
- HDevelop
- HALCON Library
- HALCON/C
- HALCON/C++
- HALCON/.NET
- HALCON/COM
- HDevEngine
- HALCON Codelets
- HALCON Extension Packages
- Image Acquisition Interfaces
- Documentation
- Supported Operating Systems
- Miscellaneous
HDevelop
-
HDevelop Language:
-
HDevelop and the HDevEngine now support global
variables. For using a global variable within a procedure the variable
must be declared as global by the new keyword 'global' and one of the type
identifiers 'object' or 'tuple', e.g.:
- global object MyGlobalImage or
- global tuple MyGlobalCounter
A global variable can be accessed within every procedure that contains the global variable declaration. In the Variable window, global variables that are declared within the current procedure are marked by an icon as global. Additionally, the Variable window has a new tab card 'Global' that lists all global variables. Within this tab card, it is possible to jump, via the context menu, to the variable declarations in the program listing. Within HDevEngine, global variables can be accessed via new methods of the HDevEngine class. In detail, these are:- GetGlobalIconicVarNames and
- GetGlobalCtrlVarNames
- GetGlobalIconicVarObject and
- GetGlobalCtrlVarTuple
- SetGlobalIconicVarObject and
- SetGlobalCtrlVarTuple
-
HDevelop and the HDevEngine now support global
variables. For using a global variable within a procedure the variable
must be declared as global by the new keyword 'global' and one of the type
identifiers 'object' or 'tuple', e.g.:
-
Functionality:
-
HDevelop has been extended with a Measure Assistant
that supports both standard and fuzzy 1D measuring along lines and circular
arcs. With a calibrated setup, positions and distances can be measured in
world coordinates.
After configuring the assistant, the corresponding code can be generated into your HDevelop program. Besides the pure measure functionality, the assistant supports also the generation of code to align the measurement ROIs if an affine transformation is known from a reference position. - HDevelop now has a new tool, called ROI tool, for drawing ROIs, XLD contours, and paths. This tool allows to create and modify complex ROIs, XLDs, or paths from different ROI shapes like rectangles, circles, elliptical arcs, or NURBS curves that can be combined via set operations (union, intersection, xor, difference) or, for a path, simply be concatenated. For the primitive objects, geometric measures like length, orientation, or area are displayed. These measures can be displayed in pixels or, after a simple 2D calibration within the tool, as metric values. After creating an ROI, the tool allows to generate program lines that create the ROI as it was drawn and insert them into the current procedure. Additionally, the ROI can be saved into a file and reloaded later. Tools and assistants that need to draw an ROI, like the Matching Assistant, now use the new ROI tool reduced to the needed features.
- HDevelop now has a tool to display gray value profiles. It can be accessed via the toolbar button 'Line Profile'.
- HDevelop now provides the possibility to control the readability for the main procedure and local procedures. The protection status can be set within the Preferences dialog in the Manage Password tab for external procedures and within the Interface dialog. This is also the case for the main procedure, which now also has an Interface dialog. Besides setting the protection status for the main procedure, it is now possible to add a description. It is possible to protect only the main procedure, protect the whole program (main and all local procedures at once), or protect only specific local procedures with or without the main procedure.
-
There is a new file format for storing HDevelop programs
and external procedures. The new format allows to manage HDevelop
programs and procedures within version management tools like CVS. The
extension of the new HDevelop program files is .hdev. External HDevelop
procedure files in the new format have the extension .hdvp. The old file
format will continue to be supported. However, HDevelop versions prior to
HALCON 10.0 are not able to read the new format.
By default, new programs and external procedure files are stored in the new file format. This default can be changed via the Edit/Preferences dialog on the General Options tab card. Existing files keep their format, i.e., if they are changed and saved, they are not automatically converted into the new (or the selected default) file format. However, via the 'Save As...' dialog, it is always possible to select the format that should be used. Additionally, it is possible to convert HDevelop programs and procedures between the old and the new format by calling hdevelop -convert.
Furthermore, the check sum of the program and procedure files that is stored at the beginning of the file can be suppressed by an option on the General Options/Experienced User tab card. This is helpful in order to avoid conflicts while merging different versions of a program or procedure within a version management tool. Attention: As a consequence of suppressing the check sum, these programs and procedures cannot be opened with HDevelop Demo. - The chapter structure in which the HALCON operators are arranged in the HDevelop operator menu has been reorganized according to the changed chapter structure of the HALCON reference manual.
-
The command line options of HDevelop, especially
the -convert option, were extended in the following ways:
- Now it is possible to export not only HDevelop programs but also external procedures to all supported programming languages (C, C++, C#, Visual Basic .NET, Visual Basic, and as text).
-
If the conversion source and destination file just differ by the extension, it
is now sufficient to pass the extension, i.e., the conversion or
export type, as destination:
hdevelop -convert my_proc.dvp cpp
-
In conjunction with passing the destination type, it is now possible to write
the output to stdout by passing '-' as destination file:
hdevelop -convert my_proc.dvp cpp -
-
With the -convert option, it is possible to convert between the new and the old
HDevelop file formats:
dev <-> hdev and dvp <-> hdvp.
- In conjunction with -convert the new option -no_export_of_referred_procs controls that the passed program or procedure is exported without additional external procedures that are used by the program or procedure.
-
It is now possible to protect or unlock the source file while loading by
passing one of the following options together with the password:
-protect, -unprotect, and -unlock.
- Until now, HDevelop displayed HALCON's low-level error messages only on Windows systems. Now, these message boxes are displayed on all systems. Additionally, from within the low-level error message box it is now possible to stop the program execution after the current operator and to switch off the display of low-level errors.
- HDevelop now has a general output console and logs certain events silently. For example, HALCON low-level errors can now be logged without an interruption of the program execution. Additionally, all status messages that are displayed in the status bar, like information about the executed operators and their execution time, are printed to the output console. The output console provides various methods to process the logged information conveniently. For example, it is possible to switch off and on the display of events according to their category, copy the information to the clipboard, or export it into a file. Furthermore, the number of stored events can be set.
- HDevelop now allows to open multiple Program windows so that different parts of the same program can be viewed simultaneously.
- HDevelop's Program editor has been extended with multiple tabs that allow to view different procedures of the current program.
- HDevelop now has a window 'Program Line View' where selected program lines are listed. This window contains a tab for each category of program lines, e.g., invalid lines. Each tab lists the selected program lines in a table that displays amongst others the procedure type, procedure name, line number, and context. Furthermore, it is possible to activate, deactivate, copy, cut, or delete one or more of the selected program lines directly from the program line view.
- Invalid program lines are now listed in the new window 'Program Line View'. The user can select the range of displayed lines from the current procedure, the current program, or all currently loaded procedures. For performance reasons, the listing will not be updated automatically but only on request of the user.
- Until now, HDevelop listed the search results of 'Find All' in a table in the Find/Replace dialog. This table has been moved to a tab in the new window 'Program Line View'. Note that this tab also has a button to open the Find/Replace dialog.
-
HDevelop's breakpoint management has been
improved. In particular,
- it is now possible to disable breakpoints temporarily and
- there is a tab in the new window 'Program Line View' where the breakpoints can be displayed and managed.
- HDevelop now supports bookmarks in its programs. Apart from setting and clearing bookmarks, the user is able to jump from the current position in the program to the next bookmark or the previous one, respectively. There is also a tab in the new window 'Program Line View' where the bookmarks can be displayed and managed.
- At different places in HDevelop a list with a (sub-)set of operators and/or procedures is displayed, e.g., when entering a sub-string of an operator name in the full text editor. The order of the listed names was handled inconsistently. That is, for some lists the names were ordered case sensitive, i.e., upper cases were listed before lower cases ('Z' before 'a'). This was the case, e.g., in the full text editor's auto completion and in the operator list of the Find & Replace dialog. For other lists, the cases were ignored (e.g., in the combo boxes of the Operator window and the Program window). Additionally, after entering a sub-string, in some lists the operators and procedures that start with the sub-string were listed first (e.g., in the full text editor and the Operator window) and in other lists they were not (e.g., in the Find & Replace dialog). For consistency, this behavior has been changed. Now, in all lists the operator and procedure names are ordered case insensitive and, if a sub-string is entered, the items that start with the sub-string are listed first.
- The Call Stack window now provides more information about the current procedure calls. In particular, beside the names of the called procedures the icons that describe the procedure type are displayed as well as the parameters that were passed to the procedure. For control input parameters the input values (for tuples up to 5 values) are displayed, for all other parameter types the names of the passed variables are displayed.
-
If HDevelop is started from another application
with a program file name as command line parameter, and the path of the program
file contains an environment variable, some applications, e.g., PowerPoint, are
not able to resolve the environment variable correctly. For this reason,
HDevelop is now able to resolve environment variables in Windows notation
within the program path:
hdevelop %SOME_ENV_VAR%\my_prog.hdev - Within the MDI mode of HDevelop it is no longer possible to scroll the main area with the help of the mouse wheel and via the keys Cursor Up, Down, Left, Right, or Page Up, Down. Now, for scrolling the main area the appropriate scroll bars must be used. The reason for this change was that quite often the effect of the old implementation was not as expected and intended: depending on the current widget under the mouse cursor, in some cases the main window was scrolled although it was not intended to, and in some other cases it was not scrolled although it was intended to.
-
HDevelop now accepts more keyboard input:
- It is now possible to close all dialogs with Esc.
- Under Windows, it is now possible to switch forth and back between HDevelop's windows with Ctrl+Tab and Ctrl+Shift+Tab.
- There are more main menu entries with a keyboard shortcut. In particular, the (first ten) HDevelop windows are accessible from the Windows menu with the keys 0 to 9 and all entries of the Operator menu have shortcuts.
-
HDevelop now optionally offers the option to turn absolute paths that are
returned by file selection boxes into relative
paths. The transformation follows the strategy below:
- %HALCONROOT% has several distinguished subdirectories that act as the preferred search directories for certain operators. For example, read_image will at first search for image files in %HALCONROOT%/images when given a relative file path. For such operators HDevelop tries to turn the selected path into a path relative to the preferred search directory.
- If this fails, HDevelop tries to turn the selected path into a path relative to the current working directory. As a minimum requirement, the selected path and the current working directory must have the same device and toplevel directory. This will be useful in cases where, e.g., an image directory and a directory for HDevelop scripts are placed side by side within a common project directory.
- If no relative path can be established, HDevelop will use the absolute path.
-
The administration of HDevelop's external
procedures is now easier and more flexible. In particular,
- it is now possible to move user-defined directories up and down in HDevelop's list of external procedure paths (this affects mainly the visibility of procedures with the same name),
- it is now possible to edit the file paths of user-defined directories in HDevelop's list of external procedure paths, and
- it is now possible to rename and delete user-defined external procedures in HDevelop's list of external procedures on file level.
- In HDevelop it is now possible to temporarily deactivate one or more external procedure paths. This is possible for user-defined directories as well as for the standard procedure path. When deactivating a directory that contains modified procedures, the user is asked whether he wants to save the modification, discard the modification, or cancel the deactivation of the directory. Temporarily deactivated directories are not removed from the list of external procedure paths but are marked as inactive.
- In order to improve the consistency between HDevelop's Boolean operations and, or, xor, and not and the appropriate tuple operators, the HDevelop operators have been extended to handle not only single values but also tuples of Boolean values. If both parameters have the same number of elements, the operation is performed element-wise. If one parameter has one element, this element is combined with each element of the other parameter. If one parameter is an empty tuple, the result is an empty tuple, too. All other combinations of different tuple lengths return an error.
- The auto completion now also lists functions like sin, cos, etc. in the list of available completions. For example, for the input a:= si, the list shows the entries sin and sinh.
- HDevelop now handles legacy operators in the full text editor in a manner similar to the Operator dialog. That is, these operators are no longer suggested by the auto completion. If a legacy operator is used, a warning is displayed in the tool tip and in the line number column.
- While editing a program within the full text editor and entering an operator name, the auto completion is opened for suggesting all operators and procedures that contain the entered string as a sub-string. This list of suggested operators is adapted with every new character. However, if by entering a new character no operator containing the sub-string remained, the auto completion was closed and it was not opened again after the wrong character was deleted. This has been changed. Now, as long as the auto completion has not been closed explicitly by the user, it is reopened automatically when a completion becomes possible again.
-
The tool tips of the Program editor have been
redesigned. They now
- provide better information on operators,
- can show the values of variables under the mouse cursor position,
- can be switched off, so that they only appear when pressing the control key, and
- show warnings on operators that are not recommended in HDevelop or that are deprecated in HALCON.
- During the execution of the operators trainf_ocr_class_mlp and train_class_mlp, HDevelop now informs the user about the progress of the training via the status bar. For this a progress bar is displayed within the status bar that is updated after every training cycle. Additionally, the last cycle number, the maximum number of cycles, and the error of the last training cycle is printed into the status bar.
-
In HDevelop it is now possible to redefine the behavior
of the operators wait_seconds and stop in the following ways:
- The execution of the operator wait_seconds can be interrupted by stopping the program execution (F9) or by continuing it without delay with one of the run commands (F5, F6, Shift+F5, Shift+F6, F8).
- It is now possible to overwrite the behavior of all wait_seconds operators globally by redefining the time parameter in the Runtime Settings / Override Operator Behavior tab card on the Preferences dialog.
- On the same tab card it is now possible to redefine the behavior of the stop statement: by setting a time parameter the program execution will not stop at the stop statement but continue after waiting the specified period of time. Within this period of time the program can be interrupted by F9 or continued by one of the run commands.
- In the Variable window, the sorting mode 'Sort by Occurrence' has been revised. Until now, in this mode variables were ordered according to their creation time, i.e., new variables that were defined for the first time by editing the program were always added to the end of the list, no matter where in the script they occurred. This has been changed: In the mode 'Sort by Occurrence', variables are now always ordered according to their first occurrence in the program.
- The context menu of the Variable window has been extended by the item 'Find Variable' to open the Find/Replace Dialog with the current variable.
- The Variable window is now able to display the semantic type of variables that have not yet been assigned a value. This information is derived from the operators that set the variable. Within a procedure, the semantics of the procedure parameters are also used. If the semantic of a variable is unambiguously an image acquisition handle or a matrix handle, this information is also used to open the appropriate special Variable Inspection window even before the variable was initialized.
- HDevelop now provides a context menu entry 'Insert dev_display() into program' in the Iconic Variable window.
- The context menu of the Graphics window has been extended with the item 'Record Interactions' to record all changes in the Graphics window at the insert position of the Program window. For each modification of visualization parameters or displayed variables the appropriate dev_* operator is generated. Additionally, the context menu of the Graphics window has been extended by the item 'Insert Code ...' to generate code that reconstructs the current settings of the Graphics window with all displayed variables and changed visualization parameters at the insert position of the Program window.
- In the Graphics window, the size of the area around an XLD contour that is active for selecting the contour has been changed. Now, the size is constant in window coordinates and does not depend on the window's zoom level. This eases selecting the correct contour in a zoomed window.
- HDevelop has been extended with new elements in the toolbar of the Graphics window in the 3D visualization mode. They can be used to easily change the quality, the step, and the visibility of the grid and the axes.
- The method for opening the Read Image dialog has been improved. Now, there is a menu item and a new tool button that directly open the dialog without the necessity to select a directory in advance. Additionally, you can also open the Read Image dialog with the short cut Ctrl-R. After opening the dialog, the Read Image dialog now offers the possibility to select a directory from the list of directories that are set in %HALCONIMAGES% or that were used lately. For this, the 'File Name' edit field was replaced by a combo box.
-
HDevelop's histogram tool has been extended by
different means:
- The bin sizes are now flexible. They can either be selected automatically to fit the histogram's display width or they can be set manually by the user.
- Smoothing of the histogram data is now independent from the bin size used during the calculation.
- Zooming now offers a recalculated view on the data instead of a simple magnification of the original histogram.
- A new mode for color images shows a combined RGB-histogram.
- The output of the histogram tool can now be used as input to the Feature histogram or dialog.
- The example descriptions, which appear in the Browse Examples dialog of HDevelop, have been translated to Japanese.
- The HTML version and the PDF version of the HALCON reference manual are now available in Japanese. In this context, instead of a single LaTeX style file now separate ones are provided in the subdirectory doc/macros for each language.
- HDevelop's help browser now supports the full text search in the documentation for the following languages: English, German, and Japanese. Note that when selecting the German or Japanese documentation, search terms of the corresponding language can be used to find suitable sections in the reference manual. To find also appropriate sections in the user's and programmer's manuals, english search terms are still needed.
-
The tab card Keyword in the HDevelop help browser has been
renamed to Index because this index covers not only the keywords of the
HALCON operators but also phrases from the user's manuals.
Furthermore, the index has been extended and now also contains links into the Programmer's Guide.
Additionally, the texts are also available in german after switching HDevelop's language. - Showing a help page for the operator open_framegrabber is now handled more consistently. Until now, the behavior for the Operator window and the full text editor differed. While within the full text editor always the reference of the operator open_framegrabber was opened, by pressing the Help button within the Operator window this page was opened only if the first parameter with the name of the image acquisition interface was invalid or 'File'. For all valid image acquisition interfaces except 'File' the reference of the particular image acquisition interface was opened. This behavior has been changed in the following way: Both in the Operator window and in the full text editor for all valid image acquisition interfaces including 'File' the particular image acquisition interface reference page is opened, because this page contains the description as well as the specific parameter values for that interface. Only if no valid interface name can be determined, the general open_framegrabber operator reference page is directly displayed. This operator page is also easily reachable via a link from all the specific interface pages.
- The Matching Assistant now supports the reading of DXF files, i.e., it enables the creation of a matching model from a DXF file and additionally provides the possibility to set the appropriate polarity for the created model.
- HDevelop's Matching Assistant now has a model editor to remove undesirable disturbances from the model image.
- In the Matching Assistant, until now the inspection model was always immediately re-created with every small change of one of the inspection model parameters Contrast (Low or High) or Minimum Component Size, e.g., by sliding the appropriate slider on the Model Creation tab card or entering a value into the spin box. For very large or noisy images this could have blocked the GUI for quite a long period of time. Owing to the fact that the re-creation of the model was performed for every small intermediate step of the user interaction, the assistant could have been almost inoperable for these images. For this reason, if the creation of the inspection model takes too long, the re-creation of the model is now performed with some delay so that it is not performed before the user interaction stops or is interrupted. However, if the model creation is fast enough, the old behavior applies, so that model changes can be observed while sliding the model parameters.
- The Matching Assistant now supports the live acquisition of images both for the model generation and test images.
- The HDevelop C code export has been improved regarding runtime efficiency and readability of the exported code. C code exported from HDevelop now uses the new HALCON/C interface tuple functions create_tuple_i, create_tuple_d, create_tuple_s, reuse_tuple_i, reuse_tuple_d, and reuse_tuple_s where appropriate.
- HDevelop allowed to add comments with a specific syntax to HDevelop programs that were exported without a modification directly into the export source code files. The disadvantage of this approach was that it was not possible to deactivate these special comments by the normal deactivate/activate proceeding. Now, these special comments have been replaced by the new HDevelop operator 'export_def' that allows to specify the export text together with the export location and that can be activated and deactivated by F3 and F4, respectively. Within the full text editor, export declarations can easily be entered using the established syntax from the special comments without the need to enter the identifier 'export_def': The special character sequences #^^, #^, #, #$, and #$$ at the beginning of a program line specify that the following text is exported at the beginning of the export file, before the procedure definition, at the current position within the procedure, after the procedure, or at the end of the export file, respectively. The first space after the special characters is now always ignored.
- It is now possible to export external HDevelop procedures into separate destination files. If this option is activated, each external procedure is exported into a separate file. It is possible to select a directory into which the procedures are exported, while the names of the export files correspond to the procedure names. It is also possible to select whether the procedures are always exported or whether they are exported only if the external procedure file is newer than the export file. Additionally, it is now possible to determine whether the bodies of local procedures should be exported or not, corresponding to the already existing option for external procedures. Furthermore, it is now possible to select whether all referenced external procedures should be exported or not. This last option applies only to the export of the current program or the current procedure.
-
HDevelop has been extended with a Measure Assistant
that supports both standard and fuzzy 1D measuring along lines and circular
arcs. With a calibrated setup, positions and distances can be measured in
world coordinates.
-
Bug Fixes:
- If the program contained a program line with an invalid procedure call, the program line remained invalid even if a suitable procedure was created or loaded in a later step. This problem has been fixed.
- After switching off the exception handling by calling dev_set_check ('~give_error), the operator throw did not work correctly. It was neither ignored nor correctly executed. Instead, the current procedure was immediately left, no matter whether the throw statement was enclosed by a try-catch block or not, and the calling outer procedure was performed with the next statement. If the throw statement was executed within main, the program counter directly jumped to the end of the program. This problem has been fixed.
- On a Japanese system some Japanese characters that are encoded in Shift-JIS by one byte were not correctly displayed in HDevelop string variables. This happened only if in the Preferences dialog the general option 'Display string values with special characters quoted' was switched on. Instead of the Japanese character, the hexadecimal code was displayed. The following characters were affected: 0xb0, 0xde, and 0xdf. This problem has been fixed.
- HDevelop did not always show the use of the module 'Foundation' in the Property dialog, even if this module is mandatory. This problem has been fixed.
- Trying to print all external procedures via the Print dialog could have crashed HDevelop if the external procedure path contained procedures that could not be loaded. This problem has been fixed.
-
If the semantic type of a procedure parameter was
set to a type with a sub-type, like filename.read (where 'read' is the
sub-type) and if the procedure was protected by a password and locked, the
following problems occurred:
- If the procedure was locked via the Procedure Interface dialog, the sub-type was lost.
- If within the Procedure Interface dialog the locked procedure with the special semantic type was selected and then another procedure was selected, a warning was displayed that the procedure had been changed. The user was asked to confirm or discard the changes. If this request was confirmed, the semantic sub-type was removed.
- There was a problem if several procedures were created with similar names that differed just by lower and upper cases. In these cases, only one of these procedures was listed in the Procedures and Operators menu as well as in the combo boxes of the Program listing and the Operator window. While it was possible to enter calls of the hidden procedures into the program, these procedures could not be listed in the Program window. This problem has been fixed.
- Editing acquisition operators in the Program listing or Operator window sometimes caused error messages if both low-level errors and acquisition support were enabled. This problem has been fixed.
- The acquisition support in the Operator window and the text editor did not properly escape special characters in parameter suggestions. This problem has been fixed.
- Under Windows, it was possible for the auto-detection of acquisition interfaces to cause a large amount of operating system error messages in some situations (in particular when using floating licenses). On a more limited scale the problem also manifested itself with the built-in acquisition support in the Operator window and full text editor, as well as when explicitly attempting to use acquisition interfaces or extension packages which could not be loaded for any reason. This problem has been fixed.
- HDevelop's 'Find Again' functionality did not work correctly when using the dialog-based editor. This problem has been fixed.
- The use of an empty tuple as default value for a control variable in the Procedure Interface dialog had no effect on the variable suggestion list of the autocompletion box. This problem has been fixed. Now, the entered empty tuple is shown in the variable suggestion list.
-
There were several problems with the auto completion in the full text editor of HDevelop:
- In some cases, the auto completion made wrong proposals.
- In some cases, after pressing TAB, a possible completion was not applied.
- If a program line contained an operator name followed by a space and the open parenthesis, and if the text cursor was placed before the open parenthesis, the values of the first parameter were suggested and - if selected - replaced the open parenthesis.
- Within an external procedure also local procedures were suggested. However, local procedures cannot be called from within an external procedure. That is, by following the suggestion, an invalid program line was inserted into the external procedure.
-
By pasting a text that contains a Unicode line separator character (U+2028)
into the full text editor the program listing
became corrupted. The two lines that are separated by the line separator
characters were displayed in the full text editor as two distinct lines but
internally handled as one logical line. This led to the following
consequences:
- Within the line based editor the two lines were displayed as one line, i.e., the second line was ignored.
- Both program lines were invalid: Unexpected characters at end of line [21207].
- In the full text editor the left part of the listing with line numbers, program counter, breakpoints, and insert cursor were no longer synchronous to the program lines in the right part of the listing.
- HDevelop crashed if the HDevelop operator dev_set_paint was executed with a mode parameter that is supported by the HALCON operator set_paint but not by dev_set_paint, e.g., 'vector_field', and if then the Visualization Parameter dialog or the Preferences dialog was opened. This problem has been fixed.
- If within the Procedure Interface dialog an external procedure was converted into a local procedure and, additionally, the name or the interface of the procedure was changed, these changes were also applied to the external procedure. The erroneously modified external procedure was not visible because it was hidden by the new local procedure. This was also true if the name of the procedure has been changed. The modified external procedure became visible again if a new program was loaded. This problem has been fixed.
- In older HDevelop versions (up to HALCON 7.1) it was by mistake possible to create procedures with parameter names that contained the German umlaut 'ü' or 'ß'. HDevelop 9.0 crashed if such a procedure was loaded and the Procedure Interface dialog was opened for that procedure. This problem has been fixed.
- If the Variable Inspection window was used for displaying (longer) strings and the 'Values and Parameters' font was set to a proportional font like 'Arial', the space of the columns of the Inspection table was not used efficiently, i.e., the strings were wrapped into too many short lines, using only the very left part of the table columns. This problem has been fixed.
- If under Linux the Graphics window was switched into the 3d-plot mode, in some cases where the window contents should have been repainted, the image was not painted or it was repainted in normal mode instead of 3d-plot mode. This problem has been fixed.
- In some cases, the Graphics window that is opened by dev_open_window was too small. This happened if the height of the last Graphics window that was closed was 0. This problem has been fixed.
- If within the Zoom window the option 'Follow Mouse' was unchecked, sometimes the information about the gray values did not belong to the displayed position. This happened if after clicking into the Graphics window for setting the mouse position and moving the mouse to a different position, the content of the Graphics window was changed, e.g., by displaying another image. This problem has been fixed.
- If during a draw operation under Linux the mouse was moved out of the HDevelop window the currently drawn region disappeared. This problem has been fixed.
- There was a crash if an image file with multiple images (e.g., a multipage TIFF file) was opened via File > Read Image or by dropping the file onto HDevelop. This problem has been fixed.
- When opening the file selection dialog via the Operator window or the Program editor, sometimes the wrong directories were opened. In particular, often the parent directory of the expected directory was opened. This problem has been fixed.
- When displaying the histograms of float images with very high gray values, HDevelop sometimes hung. This problem has been fixed.
- If in the Help window on the Keywords tab card, which is now the Index tab card, a keyword was selected that referred to a procedure, the link to the procedure's help page did not work. This problem has been fixed.
- The code preview in HDevelop assistants was adapted only to the changes that were made while the 'Code Generation' tab was visible. This problem has been fixed. Now, it is correctly adapted to the changes made in all tabs.
- Code generated from the Image Acquisition Assistant could have failed if a parameter of floating point type was set to a value with no fractional part. This problem has been fixed.
- The Image Acquisition Assistant did not recognize parameter categories which contained only read-only or action parameters. This problem has been fixed.
- In the Image Acquisition Assistant, it was not possible to uncheck the "auto" checkbox for acquisition parameters that were in "auto" mode. This problem has been fixed.
- The Image Acquisition Assistant did not warn about known device problems such as bad IP configurations for GigEVision for the initially selected camera (and therefore never in single camera setups). Additionally, a reported device problem and the suggested solution could have been outdated due to caching issues. This problem has been fixed.
- For the 64 bit version of HDevelop, parameters with values outside the 32 bit range did not work in the Image Acquisition Assistant. This problem has been fixed.
- The quality assessment of calibration plate images in the Calibration Assistant did not work for calibration plates with more than 80 marks. This problem has been fixed both in HDevelop and in the calibration codelet.
- The table of reported quality issues in the Calibration Assistant was not updated after changing the warn level. This problem has been fixed.
- C programs exported by HDevelop caused a memory leak if the program contained assignment expressions that appended a variable to another variable, i.e., expressions of type CtrlVar := [CtrlVar,AnotherCtrlVar]. This problem has been fixed.
- HDevelop exported programs containing nested exception handlings incorrectly to HALCON/.NET and HALCON/.COM. This problem has been fixed.
- HDevelop in rare cases exported procedures incorrectly to HALCON/.NET. This happened if a procedure contained input control parameters that were modified inside the procedure. In this case, the values of the passed variables were modified in the calling procedure, which is an erroneous behavior. This problem has been fixed.
- HDevelop in rare cases exported procedures incorrectly to C# HALCON/.NET and C# HALCON/.COM. This happened if a procedure contained output control parameters that were accessed or whose contents were modified before initialization. In this case, the exported program failed to compile. This problem has been fixed.
-
Examples:
The following general changes have been applied to the HDevelop example programs:
-
Following the new structure of the HALCON operators, the
chapter structure for the HDevelop example programs in the subdirectory
hdevelop has been reorganized.
Additionally, the chapter structure for the application-specific HDevelop examples in the subdirectory hdevelop/Applications has been revised to correspond to HALCON's common application areas. Furthermore, the HDevelop example programs that were used for the old Solution Guide on Shape-Based Matching and that are still used by the new Solution Guide on Matching have been moved from the directory solution_guide/shape-matching to the directory solution_guide/matching and the name of the directory for the HDevelop example programs that are used for the Solution Guide on 3D Vision has been renamed from solution_guide/3d_machine_vision to solution_guide/3d_vision.
Thus, for many HDevelop examples the paths have been changed. As for most operators only the paths and not the names of the HDevelop examples have been changed, you still find them via the Browse Examples dialog in HDevelop. HDevelop example programs that have also changed their names comprise:- 3d-coordinates.dev, which has been renamed to 3d_coordinates.hdev, and
- regexp.dev, which has been renamed to tuple_regexp.hdev.
- For all HDevelop example programs and procedures the file extensions have been changed to the new file extension format.
- All example programs that used %HALCONROOT%/images to read images have been rewritten to use get_system('image_dir',...) instead.
Additionally, HALCON has been extended with more than 90 new HDevelop example programs:
-
HALCON has been extended with a set of new HDevelop example
programs that demonstrate selected applications and HALCON features in detail.
In particular, the following HDevelop example programs have been added:
- hdevelop/Applications/Completeness-Check/count_fish_sticks.hdev,
- hdevelop/Applications/Completeness-Check/inspect_solar_fingers.hdev,
- hdevelop/Applications/Data-Codes/pdf417_bottle.hdev,
- hdevelop/Applications/Measuring-2D/determine_die_pitch_fft_correlation.hdev,
- hdevelop/Applications/Measuring-2D/measure_ball_bond.hdev,
- hdevelop/Applications/Measuring-2D/measure_circuit_width_lines_gauss.hdev,
- hdevelop/Applications/Measuring-2D/measure_diamond.hdev,
- hdevelop/Applications/Measuring-2D/measure_pads_subpix.hdev,
- hdevelop/Applications/Measuring-2D/segment_ball_bond_lead_frame.hdev,
- hdevelop/Applications/Measuring-2D/segment_wedge_bonds.hdev,
- hdevelop/Applications/Measuring-2D/track_wires_on_chip.hdev,
- hdevelop/Applications/Measuring-2D/measure_fill_level.hdev,
- hdevelop/Applications/Measuring-2D/check_fish_stick_dimension.hdev,
- hdevelop/Applications/Measuring-3D/check_smd_tilt.hdev,
- hdevelop/Applications/Measuring-3D/intersect_lines_of_sight_targets.hdev,
- hdevelop/Applications/Measuring-3D/measure_bga_dff.hdev,
- hdevelop/Applications/Measuring-3D/measure_solder_paste_dff.hdev,
- hdevelop/Applications/OCR/ocr_cd_print_polar_trans.hdev,
- hdevelop/Applications/OCR/ocr_yogurt.hdev,
- hdevelop/Applications/OCR/ocr_wafer_semi_font.hdev,
- hdevelop/Applications/Position-Recognition-2D/determine_grid_rotation_fft.hdev,
- hdevelop/Applications/Position-Recognition-2D/determine_wafer_rotation_angle.hdev,
- hdevelop/Applications/Position-Recognition-2D/find_mirror_dies.hdev,
- hdevelop/Applications/Position-Recognition-2D/find_smd_fast.hdev,
- hdevelop/Applications/Position-Recognition-3D/determine_pose_square_tube.hdev,
- hdevelop/Applications/Robot-Vision/track_engine_part.hdev,
- hdevelop/Applications/Surface-Inspection/detect_indent_fft.hdev,
- hdevelop/Applications/Texture-Inspection/remove_texture_fft.hdev,
- hdevelop/Filters/FFT/find_scratches_bandpass_fft.hdev,
- hdevelop/Filters/Points/interest_points_comparison.hdev,
- hdevelop/Matching/Shape-Based/create_average_shape_model.hdev,
- hdevelop/Morphology/Region/count_pellets.hdev, and
- hdevelop/Morphology/Gray-Values/gray_erosion_subpix.hdev.
They use the following new images:- ampoules_* from the subdirectory images/ampoules,
- ball_bond_ccd_*, ball_bond_lead_frame_*, wedge_bond_chip_*, and wedge_bond_chip_model from the subdirectory images/bonds,
- cd_print, wafer_semi_font_*, and yogurt_lid_* from the subdirectory images/ocr,
- diamond_* from the subdirectory images/diamond,
- die_pads_* and die_* from the subdirectory images/die,
- engine_part_* and engine_part_model.reg from the subdirectory images/automotive,
- fish_sticks_raw_* and fish_stick_package_* from the subdirectory images/food,
- focus_bga_* and focus_pcb_solder_paste_* from the subdirectory images/dff,
- grid/grid_* from the subdirectory images,
- pdf417_bottle_* from the subdirectory images/datacode/pdf417,
- pcb_color from the subdirectory images,
- plan_* from the subdirectory images,
- plastics_* from the subdirectory images/plastics,
- smd_tilted_*, smd_samples, and smd_backlight_* from the subdirectory images/smd,
- solar_cell_* from the subdirectory images/solar_cell,
- square_tube_* from the subdirectory images/square_tube,
- targets_l and targets_r from the subdirectory images/stereo/targets, and
- wafer_dies, wafer_rotated, and wafer_mirror_dies_* from the subdirectory images/wafer.
- The new HDevelop example programs calibrate_cameras.hdev and calibrate_cameras_precisions.hdev from the subdirectory hdevelop/Calibration/Multi-View show how to use the new multi-view camera calibration
- The new HDevelop example programs hdevelop/3D-Reconstruction/Multi-View/reconstruct_points_stereo.hdev and hdevelop/Applications/Robot-Vision/locate_pipe_joints_stereo.hdev show how to use the new multi-view stereo reconstruction.
- The new HDevelop example programs set_bar_code_param_specific.hdev and barcode_autodiscrimination.hdev from the subdirectory hdevelop/Identification/Bar-Code show how to set parameters only for given bar code types and how to read multiple bar code types in one call to find_bar_code (autodiscrimination).
- The new HDevelop example program hdevelop/Identification/Bar-Code/barcode_training.hdev shows how to use the extended training mode of the bar code reader.
- The new HDevelop example program hdevelop/Identification/Bar-Code/barcode_status.hdev shows how to return diagnostic status messages for the bar code reader. It uses the new images 25interleaved_exposure_* from the subdirectory images/barcode/25interleaved.
- The new HDevelop example program hdevelop/Identification/Bar-Code/barcode_param_stop_after_result_num.hdev shows how to stop trying to decode any further candidates after a given number of successfully decoded bar codes.
- The new HDevelop example program hdevelop/Identification/Bar-Code/decode_bar_code_rectangle2.hdev shows how to use the new operator decode_bar_code_rectangle2 to decode bar codes in user-defined ROIs.
- The new HDevelop example program hdevelop/Identification/Data-Code/qrcode_deformed.hdev demonstrates the improved robustness of the QR code reader related to distortions like local deformations.
- The new HDevelop example programs hdevelop/Segmentation/Classification/classify_image_class_lut.hdev and hdevelop/Applications/Color-Inspection/classify_fuses_gmm_based_lut.hdev show how to use the new LUT-accelerated classification operators.
- The new HDevelop example program hdevelop/Applications/OCR/generate_system_font.hdev shows how to create OCR fonts from system fonts.
- The new HDevelop example programs hdevelop/Matching/Shape-Based/find_shape_model_max_deformation.hdev and hdevelop/Applications/Position-Recognition-2D/find_cocoa_packages_max_deformation.hdev show how to use the new parameter 'max_deformation ' for shape-based matching and component-based matching.
-
The new HDevelop example programs
- hdevelop/Matching/Deformable/find_local_deformable_model.hdev,
- hdevelop/Applications/Position-Recognition-2D/find_cocoa_packages_local_deformable.hdev,
- hdevelop/Applications/Position-Recognition-2D/find_peanut_chocolate_candies_local_deformable.hdev,
- hdevelop/Applications/Measuring-2D/inspect_gasket_local_deformable.hdev, and
- hdevelop/Matching/Deformable/create_local_deformable_model_xld.hdev
show how to use the new matching approach that finds locally deformable models. - The new HDevelop example programs create_planar_uncalib_deformable_model_xld.hdev and create_planar_calib_deformable_model_xld.hdev from the subdirectory hdevelop/Matching/Deformable show how to use the new functionality to create a perspective deformable model from XLD contours and to derive the polarity of the model edges from an image after a first successful match. They use the new images brake_disk_bike* from the subdirectory images/brake_disk and bracket_tilted_* from the subdirectory images/metal-parts.
- The new HDevelop example program hdevelop/Matching/Correlation-Based/determine_ncc_model_params.hdev shows how to use the new operator determine_ncc_model_params.
- The new HDevelop example program hdevelop/3D-Matching/Shape-Based/create_shape_model_3d_lowest_model_level.hdev shows how to use the new generic parameter 'lowest_model_level' for shape-based 3D matching.
- The new HDevelop example program hdevelop/3D-Matching/Shape-Based/create_shape_model_3d_ignore_part_polarity.hdev shows how to use the new metric 'ignore_part_polarity' for shape-based 3D matching.
- The new HDevelop example programs hdevelop/3D-Matching/Surface-Based/find_surface_model.hdev and hdevelop/Applications/Robot-Vision/locate_pipe_joints_stereo.hdev show how to use the new surface-based 3D matching.
- The new HDevelop example programs fit_primitives_object_model_3d.hdev and segment_object_model_3d.hdev from the subdirectory hdevelop/3D-Tools/3D-Segmentation show how to use the new operators for the 3D primitives fitting. They use the new images 3d_primitives_xyz_*.tif from the subdirectory images/3d_machine_vision/segmentation.
- The new HDevelop example programs find_text_dongle.hdev and find_text_bottle_label.hdev from the subdirectory hdevelop/Applications/OCR show how to use the new text segmentation operators.
- The new HDevelop example program hdevelop/System/Compute-Devices/compute_devices.hdev shows how to use the new operators that support compute devices.
- The new HDevelop example programs generic_socket_receive_data.hdev and generic_socket_send_data.hdev from the subdirectory hdevelop/System/Sockets show how to setup and use the new operators for a generic socket communication.
- The new HDevelop example programs optimize_aop.hdev and query_aop_info.hdev from the subdirectory hdevelop/System/Parallelization show how to use the extended hardware-specific optimization of the automatic operator parallelization.
- The new HDevelop example program hdevelop/Graphics/Parameters/cancel_draw_result.hdev shows how to use the new behavior related to error codes and the throwing of exceptions for draw operators.
- The new HDevelop example program hdevelop/Regions/Transformations/closest_point_transform.hdev shows how to use the new operator closest_point_transform.
- The new HDevelop example program hdevelop/Filters/Geometric-Transformations/convert_map_type.hdev shows how to use the new operator convert_map_type and the new Parameter Mode of set_paint.
- The new HDevelop example program hdevelop/XLD/Creation/gen_nurbs_interp.hdev shows how to use the new operator gen_nurbs_interp.
- The new HDevelop example program hdevelop/Image/Features/gray_histo_range.hdev shows how to use the new operator gray_histo_range.
- The new HDevelop example program hdevelop/Tuple/Features/tuple_histo_range.hdev shows how to use the new operator tuple_histo_range.
- The new HDevelop example programs median_rect.hdev and rank_rect.hdev from the subdirectory hdevelop/Filters/Smoothing show ho to use the new operators median_rect and rank_rect.
- The new HDevelop example program hdevelop/XLD/Transformation/union_cotangential_contours_xld.hdev shows how to use the new operator union_cotangential_contours_xld.
- The new HDevelop example programs siliconsoftware_smartapplets.hdev and siliconsoftware_gige_vision.hdev from the subdirectory hdevelop/Images/Acquisition show how to use the extended functionality of the SiliconSoftware interface.
- The following HDevelop example programs show how to use the new image acquisition interfaces that are supported by
HALCON:
- The new HDevelop example programs adlink.hdev, adlink_simple.hdev, and adlink_parameters.hdev in the directory hdevelop/Images/Acquisition show how to use the new ADLINK interface.
- The new HDevelop example programs genicamtl.hdev, genicamtl_simple.hdev, and genicamtl_parameters.hdev in the directory hdevelop/Images/Acquisition show how to use the new GenICamTL interface.
- The new HDevelop example programs lps36_simple.hdev and lps36_parameters.hdev in the directory hdevelop/Images/Acquisition show how to use the new LPS36 interface.
- The new HDevelop example programs pceyecl.hdev, pceyecl_crop.hdev, pceyecl_simple.hdev, and pceyecl_parameters.hdev in the directory hdevelop/Images/Acquisition show how to use the new ELTEC PC_EYE/CL interface.
- The new HDevelop example programs vrmareascan3d_simple.hdev and vrmareascan3d_parameters.hdev in the directory hdevelop/Images/Acquisition show how to use the new VRmAreaScan3D interface.
The following HDevelop example programs have been modified:
-
The following HDevelop example programs have been adapted to the changes made for find_marks_and_pose. Most of them now use the new
multi-view camera calibration.
- solution_guide/2d_measuring/measure_perspective_scratch.hdev,
- solution_guide/3d_vision/camera_calibration_interior.hdev,
- solution_guide/3d_vision/camera_calibration_exterior.hdev,
- solution_guide/3d_vision/camera_calibration_multi_image.hdev,
- solution_guide/3d_vision/handeye_movingcam_calibration.hdev, (only thresholds)
- solution_guide/3d_vision/handeye_stationarycam_calibration.hdev,
- solution_guide/3d_vision/handeye_stationarycam_grasp_nut.hdev,
- solution_guide/3d_vision/stereo_calibration.hdev,
- solution_guide/3d_vision/two_camera_calibration.hdev,
- hdevelop/Applications/Measuring-3D/calibrate_sheet_of_light.hdev,
- hdevelop/Calibration/Monocular/compare_calibration_models.hdev,
- hdevelop/Applications/Measuring-3D/cbm_caliper.hdev,
- hdevelop/Applications/Object-Recognition-2D/board_components.hdev,
- hdevelop/Calibration/Monocular/camera_calibration.hdev,
- hdevelop/Tools/Grid-Rectification/gen_arbitrary_distortion_map.hdev,
- hdevelop/Calibration/Binocular/binocular_calibration.hdev,
- hdevelop/3D-Reconstruction/Binocular-Stereo/disparity_to_point_3d.hdev,
- hdevelop/3D-Reconstruction/Binocular-Stereo/intersect_lines_of_sight.hdev, and
- hdevelop/explore_halcon.hdev.
- Most of the HDevelop example programs that applied a camera calibration have been adapted to the new multi-view camera calibration.
- The HDevelop example program hdevelop/Filters/Texture/texture_laws_mlp.dev has been adapted to use the new LUT-accelerated classification operators.
- The HDevelop example programs that use lines_gauss have been adapted to the changes made for lines_gauss.
- The HDevelop example programs hdevelop/Segmentation/Classification/class_2dim_unsup.hdev and hdevelop/Applications/OCR/ocr_dongle.hdev have been adapted to the changes made for median_image and dual_rank.
- The HDevelop example program hdevelop/Tuple/String-Operators/tuple_regexp.hdev has been adapted to demonstrate the new option 'invert_match' of tuple_regexp_test and tuple_regexp_select.
-
The following HDevelop example programs have been generally improved:
- hdevelop/Tools/Function/invert_funct_1d.hdev,
- hdevelop/Tools/Function/compose_funct_1d.hdev,
- hdevelop/Applications/Position-Recognition-2D/pm_illu.hdev,
- hdevelop/Applications/Position-Recognition-2D/pm_illu_rot.hdev,
- hdevelop/Applications/Position-Recognition-2D/pm_illu_rectify.hdev,
- hdevelop/Applications/Security-Systems/optical_flow_bicycle.hdev,
- hdevelop/Segmentation/Threshold/fast_threshold_vs_threshold.hdev,
- hdevelop/Calibration/Monocular/camera_calibration.hdev,
- hdevelop/Calibration/Self-Calibration/radiometric_self_calibration.hdev,
- hdevelop/Calibration/Rectification/image_to_world_plane.hdev,
- hdevelop/Calibration/Self-Calibration/stationary_camera_self_calibration.hdev,
- hdevelop/Identification/Data-Code/pdf417_optimized_settings.hdev,
- hdevelop/Identification/Data-Code/pdf417_default_settings.hdev,
- hdevelop/Identification/Bar-Code/barcode_param_orientation.hdev,
- hdevelop/Filters/Smoothing/rank_n.hdev, and
- hdevelop/System/Information/get_operator_info.hdev.
Note that the image sequence images/bicycle/bicycle_*.png has been converted from color images to gray value images. The HDevelop example programs hdevelop/Applications/Security-Systems/optical_flow_bicycle.hdev and hdevelop/Filters/Smoothing/rank_n.hdev have been adapted accordingly.
User programs that use these images must be adapted accordingly.
-
Following the new structure of the HALCON operators, the
chapter structure for the HDevelop example programs in the subdirectory
hdevelop has been reorganized.
HALCON Library
-
New Operators:
-
HALCON has been extended with operators to support compute
devices such as GPUs:
- query_available_compute_devices,
- get_compute_device_info,
- open_compute_device,
- init_compute_device,
- set_compute_device_param,
- get_compute_device_param,
- activate_compute_device,
- deactivate_compute_device,
- deactivate_all_compute_devices,
- release_compute_device, and
- release_all_compute_devices.
The following operators have been extended with an implementation for OpenCL compatible GPUs. Note that for some operators not all parameter sets are supported. Details can be found in the corresponding reference manual entries.- abs_diff_image
- abs_image
- add_image
- affine_trans_image
- affine_trans_image_size
- binomial_filter
- cfa_to_rgb
- change_radial_distortion_image
- convert_image_type
- convol_image
- crop_part
- crop_rectangle1
- crop_domain
- derivate_gauss
- div_image
- edges_image
- edges_sub_pix
- gauss_image
- gray_dilation_rect
- gray_erosion_rect
- gray_opening_rect
- gray_closing_rect
- gray_range_rect
- image_to_world_plane
- invert_image
- linear_trans_color
- lines_gauss
- map_image
- max_image
- mean_image
- median_image
- min_image
- mirror_image
- mult_image
- polar_trans_image
- polar_trans_image_inv
- polar_trans_image_ext
- projective_trans_image
- projective_trans_image_size
- rgb1_to_gray
- rgb3_to_gray
- rotate_image
- scale_image
- sobel_amp
- sobel_dir
- sqrt_image
- sub_image
- trans_from_rgb
- trans_to_rgb
- zoom_image_factor
- zoom_image_size
The new HDevelop example program hdevelop/System/Compute-Devices/compute_devices.hdev shows how to use compute devices in HALCON. -
HALCON has been extended with an operator calibrate_cameras for the calibration of one or multiple cameras. The operator
performs the calibration on calibration data configured within an instance of
the new HALCON calibration data model. To facilitate the configuration of the
calibration data, HALCON has been extended with the following operators:
- create_calib_data,
- set_calib_data_cam_param,
- set_calib_data_calib_object,
- get_calib_data,
- query_calib_data_observ_indices,
- set_calib_data_observ_points,
- get_calib_data_observ_points,
- set_calib_data_param,
- get_calib_data_param,
- set_calib_data_param_specific,
- get_calib_data_param_specific,
- write_calib_data,
- read_calib_data,
- clear_calib_data, and
- clear_all_calib_data.
Additionally, the new HALCON camera setup model has been introduced. It can be obtained as a result of calibrate_cameras and contains the calibration information, both internal and external, of a setup of cameras. For the camera setup model, HALCON has been extended with the following operators:- create_camera_setup_model,
- set_camera_setup_cam_param,
- set_camera_setup_param,
- get_camera_setup_param,
- read_camera_setup_model,
- write_camera_setup_model,
- clear_camera_setup_model, and
- clear_all_camera_setup_models.
The new HDevelop example programs calibrate_cameras.hdev and calibrate_cameras_precisions.hdev from the subdirectory hdevelop/Calibration/Multi-View show how to use the new functionality. calibrate_cameras.hdev uses the new images multi_view_calib_cam_* from the subdirectory images/3d_machine_vision/multi_view. Furthermore, most of the existing HDevelop example programs have been adapted to use the multi-view camera calibration instead of the previously used camera calibration with camera_calibration or binocular_calibration. -
HALCON has been extended with the operators reconstruct_surface_stereo and reconstruct_points_stereo for multi-view stereo
reconstruction of surfaces and 3D points, respectively. To cope with the
complexity of the configuration parameters, the new HALCON stereo
model has been introduced. To facilitate the configuration of
a stereo model, HALCON has been extended with the following operators:
- create_stereo_model,
- set_stereo_model_param,
- get_stereo_model_param,
- set_stereo_model_image_pairs,
- get_stereo_model_image_pairs,
- get_stereo_model_object,
- clear_stereo_model, and
- clear_all_stereo_models.
The new HDevelop example programs hdevelop/3D-Reconstruction/Multi-View/reconstruct_points_stereo.hdev and hdevelop/Applications/Robot-Vision/locate_pipe_joints_stereo.hdev show how to use the new functionality. They use the new images multi_view_calib_cam_* and multi_view_pipe_joints_cam_* from the subdirectory images/3d_machine_vision/multi_view. locate_pipe_joints_stereo.hdev additionally uses the file pipe_joint.ply from the directory hdevelop/Applications/Robot-Vision. -
HALCON has been extended with the operators
- create_surface_model,
- clear_surface_model,
- clear_all_surface_models,
- get_surface_model_param,
- find_surface_model,
- refine_surface_model_pose,
- clear_surface_matching_result,
- clear_all_surface_matching_results,
- get_surface_matching_result,
- write_surface_model, and
- read_surface_model
to enable a surface-based 3D matching that finds objects and determines their 3D poses in 2.5D as well as in 3D data. It is possible that scene and object data come from a variety of different sources, such as stereo, time-of-flight, sheet-of-light, multi-view stereo, and 3D files. The new HDevelop example programs hdevelop/3D-Matching/Surface-Based/find_surface_model.hdev and hdevelop/Applications/Robot-Vision/locate_pipe_joints_stereo.hdev show how to use the new functionality. They use the new images multi_view_pipe_joints_cam_* and engine_cover_xyz_* from the subdirectories images/3d_machine_vision/multi_view and images/time_of_flight. -
The handling of 3D object models in HALCON has
been extended in order to support more general types of 3D data like 3D points
and 3D primitives. For this, HALCON has been extended with the following
operators:
- read_object_model_3d,
- write_object_model_3d,
- xyz_to_object_model_3d,
- object_model_3d_to_xyz,
- prepare_object_model_3d, and
- copy_object_model_3d.
Furthermore, the functionality of the following operators has been adapted:- affine_trans_object_model_3d,
- get_object_model_3d_params, and
- project_object_model_3d.
Note that the new operator read_object_model_3d replaces the existing operator read_object_model_3d_dxf, which is now legacy and only provided for compatibility reasons. Both operators do not create faces for the DXF entities CIRCLE and ELLIPSE anymore. If a DXF file used for 3D matching contains such entities and if these entities are necessary for the creation of a 3D shape model, they must be replaced by other DXF entities, e.g., by polyface meshes, which can be represented by POLYLINEs. Note further that in addition to the file format DXF, the new operator read_object_model_3d also supports the file formats PLY and OFF. - HALCON has been extended with the operators fit_primitives_object_model_3d and segment_object_model_3d to enable a 3D primitives fitting that fits and segments simple 3D objects (planes, spheres, and cylinders) into 2.5D and 3D data. The new HDevelop example programs fit_primitives_object_model_3d.hdev and segment_object_model_3d.hdev from the subdirectory hdevelop/3D-Tools/3D-Segmentation show how to use the new operators. They use the new images 3d_primitives_xyz_* from the subdirectory images/3d_machine_vision/segmentation.
-
HALCON has been extended with the operators
- create_local_deformable_model,
- find_local_deformable_model,
- create_local_deformable_model_xld, and
- set_local_deformable_model_metric
to enable a local deformable matching that is used to find deformed instances of a 2D model in an image and return their positions and deformations. The new HDevelop example programs- hdevelop/Matching/Deformable/find_local_deformable_model.hdev,
- hdevelop/Applications/Position-Recognition-2D/find_cocoa_packages_local_deformable.hdev,
- hdevelop/Applications/Position-Recognition-2D/find_peanut_chocolate_candies_local_deformable.hdev,
- hdevelop/Applications/Measuring-2D/inspect_gasket_local_deformable.hdev, and
- hdevelop/Matching/Deformable/create_local_deformable_model_xld.hdev
show how to use the new functionality. They use the new images images/gasket/gasket*, images/food/cocoa_package*, and images/food/peanut_chocolate_candies_*. Note that compared to the deformable model that was used for the perspective deformable matching, the local deformable model contains additional model data. To provide a single data type for deformable models in general, the existing deformable model has been extended and thus is no longer backward compatible to previous HALCON versions. Note that deformable models that have been created with a previous HALCON version can still be used. -
HALCON has been extended with the operators
- create_planar_uncalib_deformable_model_xld,
- create_planar_calib_deformable_model_xld,
- set_planar_uncalib_deformable_model_metric, and
- set_planar_calib_deformable_model_metric
to create a perspective deformable model from XLD contours and to derive the polarity of the model edges from an image after a first successful match. The new HDevelop example programs create_planar_uncalib_deformable_model_xld.hdev and create_planar_calib_deformable_model_xld.hdev from the subdirectory hdevelop/Matching/Deformable show how to use the new functionality. They use the new images brake_disk_bike* from the subdirectory images/brake_disk and bracket_tilted_* from the subdirectory images/metal-parts. -
HALCON has been extended with the operators
- create_text_model,
- set_text_model_param,
- get_text_model_param,
- find_text,
- get_text_result,
- get_text_object,
- clear_text_result,
- clear_text_model,
- clear_all_text_results, and
- clear_all_text_models.
to segment text easily. The new HDevelop example programs find_text_dongle.hdev and find_text_bottle_label.hdev from the subdirectory hdevelop/Applications/OCR show how to use the new "smart text finder". find_text_bottle_label.hdev uses the new images bottle_label_* from the subdirectory images/ocr. The HDevelop example program hdevelop/Applications/OCR/ocr_lot_number.hdev has been adapted to use the new text segmentation operators, too. -
HALCON has been extended with the operators
- create_class_lut_mlp,
- create_class_lut_svm,
- create_class_lut_gmm,
- classify_image_class_lut,
- clear_class_lut, and
- clear_all_class_lut
to classify images very fast based on the MLP, SVM, and GMM classifier. The new HDevelop example programs hdevelop/Segmentation/Classification/classify_image_class_lut.hdev and hdevelop/Applications/Color-Inspection/classify_fuses_gmm_based_lut.hdev show how to use classify_image_class_lut for the LUT-accelerated classification. Additionally, the existing HDevelop example program hdevelop/Filters/Texture/texture_laws_mlp.dev has been adapted to use the LUT-accelerated classification, too. - HALCON has been extended with an operator closest_point_transform that computes the closest-point transformation of a region. The new HDevelop example program hdevelop/Regions/Transformations/closest_point_transform.hdev shows how to use closest_point_transform.
-
HALCON has been extended with an operator convert_map_type that converts image maps
(e.g., obtained by gen_image_to_world_plane_map)
into another image map type (i.e., 'nearest_neighbor', 'bilinear', or
'coord_map_sub_pix'). The new image map type 'coord_map_sub_pix', which
consists of a vector field image containing the subpixel precise coordinates of
the mapping function, has been added. The operator map_image has been extended to support this new map
type. gen_image_to_world_plane_map, gen_radial_distortion_map, gen_arbitrary_distortion_map, gen_grid_rectification_map, and gen_binocular_rectification_map can now also create
maps of this new type (besides the already supported types).
Note that gen_arbitrary_distortion_map and gen_grid_rectification_map have been extended with the new parameter MapType and are therefore source code incompatible. Existing programs using these operators must be adapted. The new HDevelop example program hdevelop/Filters/Geometric-Transformations/convert_map_type.hdev shows how to use convert_map_type. -
HALCON has been extended with operators for thread synchronization
that support mutex, event, barrier, and condition synchronization
objects. The synchronization functionality is supported by the new
operators
- create_mutex,
- lock_mutex,
- try_lock_mutex,
- unlock_mutex,
- clear_mutex,
- clear_all_mutexes,
- create_event,
- wait_event,
- try_wait_event,
- signal_event,
- clear_event,
- clear_all_events,
- create_barrier,
- wait_barrier,
- clear_barrier,
- clear_all_barriers,
- create_condition,
- wait_condition,
- timed_wait_condition,
- signal_condition,
- broadcast_condition,
- clear_condition,
- clear_all_conditions, and
- get_threading_attrib.
- HALCON has been extended with an operator decode_bar_code_rectangle2 that decodes bar codes in user-defined ROIs. The ROI is specified by rectangle2 parameters, i.e., Row, Column, Phi, Length1, and Length2. The new HDevelop example program hdevelop/Identification/Barcode/decode_bar_code_rectangle2.hdev shows how to use decode_bar_code_rectangle2.
- HALCON has been extended with an operator determine_ncc_model_params that determines suitable parameters for an NCC model. The new HDevelop example program hdevelop/Matching/Correlation-Based/determine_ncc_model_params.hdev shows how to use determine_ncc_model_params.
- HALCON has been extended with the operators generalized_eigenvalues_symmetric_matrix and generalized_eigenvalues_general_matrix to solve generalized eigenproblems.
- HALCON has been extended with an operator gen_nurbs_interp that computes the control data of a NURBS curve interpolating a sequence of points. The new HDevelop example program hdevelop/XLD/Creation/gen_nurbs_interp.hdev shows how to use gen_nurbs_interp.
- HALCON has been extended with an operator get_descriptor_model_results that queries the results of the last find_[un]calib_descriptor_model call. Among others, it returns the classification of the interest points extracted from the search image.
- HALCON has been extended with the operators get_image_size and get_image_type that return the size and the type of the input image, respectively. They are alternatives to the already existing operator get_image_pointer1 if one is only interested in the image size or the image type.
- HALCON has been extended with an operator get_sheet_of_light_result_object_model_3d that returns the result of a sheet-of-light measurement as 3D object model.
- HALCON has been extended with an operator gray_histo_range. It calculates the gray value histogram of a single-channel image within a user-defined gray value range and number of bins. The new HDevelop example program hdevelop/Image/Features/gray_histo_range.hdev shows how to use gray_histo_range.
-
HALCON has been extended with the following operators that extend the
functionality of the hardware check for the automatic operator
parallelization:
- optimize_aop,
- query_aop_info,
- get_aop_info,
- set_aop_info,
- read_aop_knowledge, and
- write_aop_knowledge.
These operators displace the now legacy operators- check_par_hw_potential,
- load_par_knowledge, and
- store_par_knowledge.
The new operators provide an extended hardware-specific optimization of automatic operator parallelization on all iconic object types and relevant operator parameters. Additionaly, the new operators enable the permit to configure the optimization process. The new HDevelop example programs optimize_aop.hdev and query_aop_info.hdev from the subdirectory hdevelop/System/Parallelization show how to use the new functionality. - HALCON has been extended with an operator query_bar_code_params to determine all bar code parameters that have given properties (e.g., trained). Additionally, the bar code reader has been extended with a training mode that determines the best parameter settings for the parameters 'element_size_min', 'element_size_max', 'orientation', 'meas_thresh', 'meas_thresh_abs', and 'max_diff_orient'. The training mode is activated by setting the generic bar code parameter 'train' to a tuple of parameter names that should be trained or to 'all' to train all bar code parameters that are available for the training. The new HDevelop example program hdevelop/Identification/Bar-Code/barcode_training.hdev shows how to use this functionality.
- HALCON has been extended with the operators rank_rect and median_rect for rank and median filtering with rectangular masks. These operators require constant time per pixel, independent of the mask size. For mask sizes larger than approximately 15x15, they offer the fastest method to compute the median in HALCON. The new HDevelop example programs median_rect.hdev and rank_rect.hdev from the subdirectory hdevelop/Filters/Smoothing show ho to use median_rect and rank_rect.
-
HALCON has been extended with the operators
- send_data,
- receive_data,
- get_socket_param, and
- set_socket_param
to support generic sockets and protocols and thus to enable network communication (IPv4/IPv6) with external devices and applications. The new HDevelop example programs hdevelop/System/Sockets/generic_socket_receive_data.hdev and hdevelop/System/Sockets/generic_socket_send_data.hdev show how to setup and use a generic socket communication. Note that open_socket_accept and open_socket_connect have been extended with generic parameters to support other socket protocols and the setting of an initial timeout. Because of this change, these operators are not source-code-compatible to previous HALCON versions. Additionally, the operators set_socket_timeout and get_socket_timeout are now obsolete and have been integrated in the operators set_socket_param and get_socket_param. For backward compatibility, they are still supported. - HALCON has been extended with the new operators set_bar_code_param_specific and get_bar_code_param_specific to set parameters only for given bar code types. Additionally, the bar code reader is now able to read multiple bar code types in one call to find_bar_code (autodiscrimination). To use this feature, the parameter CodeType of find_bar_code has been extended to support tuples of possible bar code types or the value 'auto' to look for all code types that can be reliably autodiscriminated. The new HDevelop example programs set_bar_code_param_specific.hdev and barcode_autodiscrimination.hdev from the subdirectory hdevelop/Identification/Bar-Code show how to use the new functionalities. They use the new images barcode_mixed_* from the subdirectory images/barcode/mixed.
- set_system might have hung if SystemParameter was set to 'database'. This problem has been fixed.
-
HALCON has been extended with an operator tuple_histo_range. It calculates the histogram of a
tuple within a user-defined value range and number of bins.
The new HDevelop example program hdevelop/Tuple/Features/tuple_histo_range.hdev shows how to use tuple_histo_range. - HALCON has been extended with an operator union_cotangential_contours_xld that provides functionality to merge XLD contours according to the continuity of the tangents at the ends of the contour. The new HDevelop example program /hdevelop/XLD/Transformation/union_cotangential_contours_xld.hdev shows how to use union_cotangential_contours_xld.
-
HALCON has been extended with operators to support compute
devices such as GPUs:
-
Speed-Up and Enhancements:
- The bar code reader is now faster by up to 25%, especially when decoding composite codes.
- binomial_filter is now faster by up to 55% for byte images and by up to 30% for uint2 images on Intel compatible processors that support SSE2 under Windows and Linux. On Intel compatible processors that support SSE4.1 binomial_filter is now faster by up to 60% for byte images and by up to 45% for uint2 images. On Intel compatible processors that support SSE4.2 binomial_filter is now faster by up to 70% for byte images and by up to 110% for uint2 images.
- cfa_to_rgb on byte images is now faster on Intel compatible processors that support MMX on Windows and Linux.
- connection is now faster by up to 100%. Furthermore, connection is now parallelized on internal data level, which results in an additional speed-up of up to 30% on a dual core machine.
-
create_shape_model_3d now has a new mode that
enables a fast pose refinement in find_shape_model_3d. For this,
create_shape_model_3d offers the new generic parameter
'fast_pose_refinement'. For complex models with a large number of faces the
pose refinement step might amount to a significant part of the overall
computation time. If 'fast_pose_refinement' is set to 'true', now some of the
calculations are already performed during the model generation and stored in
the model. Consequently, the pose refinement during the search is now
faster. Please note, however, that in this case the memory consumption of the
model increases.
Note further that the new pose refinement for the shape-based 3D matching is switched on by default and thus slightly different results might be obtained when switching 'fast_pose_refinement' on or off, so that existing programs that create the 3D shape model might behave slightly different. To obtain the old behavior either the old model must be read from disk or the model must be recreated with 'fast_pose_refinement' switched off. - find_shape_model_3d in some cases is now significantly faster. The speed-up depends on the number of matches that are found on the highest pyramid level. The higher this number is, the higher the speed-up might be. In most cases, the speed-up will be in the range of 5 to 50 percent.
-
The operators
- find_shape_model,
- find_shape_models,
- find_scaled_shape_model,
- find_scaled_shape_models,
- find_aniso_shape_model, and
- find_aniso_shape_models
are faster and use less memory with images with reduced domains. -
The operators
- gray_erosion_rect,
- gray_dilation_rect,
- gray_opening_rect,
- gray_closing_rect,
- gray_erosion_shape,
- gray_dilation_shape,
- gray_opening_shape, and
- gray_closing_shape
with MaskShape = 'rectangle' are now faster on int2, int4, and real images by up to 600%. On processors that do not support SSE2, the above listed operators are faster by up to 600% on byte and uint2 images. The acceleration depends on the mask size and typically is better for larger mask sizes, beginning at mask sizes of 15x15. - min_max_gray on byte images with Percent = 0 and on uint2 images is now faster by up to 600% on Intel compatible processors that support SSE2 on Windows and Linux.
- train_class_gmm is now faster by up to 20% and classify_image_class_gmm is now faster by up to 100% on Intel compatible processors that do not support SSE2. train_class_gmm is now faster by up to 60% and classify_image_class_gmm is now faster by up to 300% on Intel compatible processors that support SSE2 on Windows and Linux.
- The usage of temporary memory has been reduced for various HALCON operators. The reduction increases with the level of processing parallelization. Thus, it is more significant for a higher number of threads. Additionally, for various operators the needed temporary memory has been reduced for the case that the input images have a reduced image domain.
-
The following operators are now parallelized automatically:
- classify_image_class_mlp, classify_image_class_svm, and classify_image_class_gmm are now parallelized on internal data level.
- connection is now parallelized on internal data level.
- convol_image is now parallelized on internal data level.
- depth_from_focus is now parallelized on internal data level.
- find_bar_code is now parallelized when finding the bar code candidate regions. Additionally, the operators find_bar_code and decode_bar_code_rectangle2 are now parallelized when trying to decode multiple candidate regions.
- gray_histo is now parallelized on internal data level. gray_histo_abs is now parallelized on internal data level for byte, cyclic, direction, and int1 images.
- harmonic_interpolation is now parallelized on internal data level.
- mirror_image is now parallelized on domain level.
- points_harris_binomial is now parallelized on internal data level.
- smooth_image is now parallelized on internal data level.
- sobel_dir is now parallelized on domain level.
- train_class_gmm is now parallelized on internal data level.
- zero_crossing is now parallelized on domain level.
-
Several operators have been extended to support further image types.
The following operators now support real image types:- rotate_image,
- polar_trans_image_inv,
- polar_trans_image_ext,
- polar_trans_image,
- rgb1_to_gray,
- rgb3_to_gray,
- smooth_image,
- sobel_amp,
- sobel_dir,
- add_noise_white,
- convol_image,
- map_image,
- image_to_world_plane,
- change_radial_distortion_image,
- gray_projections,
- nonmax_suppression_amp,
- nonmax_suppression_dir,
- binomial_filter,
- gauss_image,
- edges_sub_pix,
- edges_image,
- auto_threshold,
- bin_threshold, and
- fast_threshold.
The following operators now support int1, int2, int4 and real image types:- measure_thresh,
- measure_projection,
- fuzzy_measure_pairing,
- fuzzy_measure_pairs,
- fuzzy_measure_pos,
- measure_pairs, and
- measure_pos.
The following operators now support uint2 image types:- find_calib_descriptor_model,
- find_uncalib_descriptor_model,
- create_calib_descriptor_model,
- create_uncalib_descriptor_model,
- median_weighted,
- fill_interlace,
- highpass_image,
- close_edges_length,
- close_edges,
- corner_response,
- points_lepetit,
- gray_skeleton, and
- region_to_mean.
-
The files in the directory 'help' have been renamed in the following
manner:
- examples.xml -> index_examples_en_US.xml
- english.hlp -> operators_en_US.ref
- english.{idx,key,num,sta} -> operators_en_US.{idx,key,num,sta}
Additionally, the files operators_de_DE.* (German), operators_ja_JP.* (Japanese), and index_examples_ja_JP.xml (Japanese) have been added. That is, the short descriptions of HDevelop example programs in the Browse Examples dialog of HDevelop are available also in Japanese and information that is derived from the operator reference is available also in German and Japanese. Therefore, if in HDevelop the GUI language is set to German or Japanese, the operators get_operator_info and get_param_info return the information in the selected language.
Similarly, instead of a single file with the index topics from the user's manuals, now separate ones are provided for English and German (index_manuals_en_US.xml, index_manuals_de_DE.xml). -
HALCON's OCR fonts
have been revised. They now lead to an enhanced
overall classification accuracy. Additionally, the set of training
data has been generally improved by extending the samples
with samples from a broad range of typical applications.
Furthermore, HALCON has been extended with the following new OCR fonts:- SEMI.omc is optimized to read text on wafers.
- OCRB_passport.omc is optimized to read passports. It consists of the regular OCRB font with a reduced set of symbols (uppercase letters, digits, and the special characters '<' and '+').
- Industrial_A-Z+.omc, Document_A-Z+.omc, DotPrint_A-Z+.omc, OCRA_A-Z+.omc, and OCRB_A-Z+.omc are new versions of already existing fonts without lowercase characters.
-
Modified Operators:
- The accuracy of the shape-based matching and the component-based matching has been improved for the case that objects are searched that are slightly deformed. For this, the maximal allowed deformation can be specified in the parameter SubPixel by passing the string 'max_deformation ' followed by an integer value, which describes the amount of the maximum deformation. The new HDevelop example programs hdevelop/Matching/Shape-Based/find_shape_model_max_deformation.hdev and hdevelop/Applications/Position-Recognition-2D/find_cocoa_packages_max_deformation.hdev show how to use the new functionality. find_cocoa_packages_max_deformation.hdev uses the new images cocoa_packages_* from the subdirectory images/food.
- In HALCON 9.0.2, problems had been fixed that regarded find_shape_model_3d and objects that correspond to views that are close to the poles of the spherical pole range that was passed in create_shape_model_3d. Now, for efficiency reasons, the necessary computations to fix this problem are computed offline when calling create_shape_model_3d and are stored in the 3D shape model. Consequently, the 3D shape model is no longer backward compatible to previous HALCON versions. Of course, 3D shape models that have been created with previous HALCON versions can still be used. However, in these cases the computations must be performed online during the execution of find_shape_model_3d, and hence might result in a slightly slower search. Therefore, to avoid this slight loss of performance, it is preferable to recreate the 3D shape model.
- The QR code reader often failed to read large codes that showed slight perspective distortions or slight local deformations. The perspective distortions can be caused if the image plane is not perfectly parallel to the plane in which the QR code is present. The local deformations can be caused, e.g., by lens distortions or slightest deviations of the code from a perfect plane. The influence of such distortions increases for larger codes (i.e., codes with a large number of modules). Now, the QR code reader is more robust to such distortions. The new HDevelop example program hdevelop/Identification/Data-Code/qrcode_deformed.hdev demonstrates the improved robustness. It uses the new image qr_version_25 from the subdirectory images/datacode/qrcode.
-
The operators
- affine_trans_image,
- affine_trans_image_size,
- zoom_image_factor,
- zoom_image_size,
- rotate_image,
- create_ocr_class_mlp, and
- create_ocr_class_svm
now support a new interpolation mode 'bilinear' that only performs bilinear interpolation without any smoothing if the size of the image is reduced. Furthermore, for consistency with other operators the interpolation mode 'none' has been renamed to 'nearest_neighbor' (the mode 'none' is still supported for backward compatibility). The latter has been changed also in gen_gauss_pyramid. - For the shape-based 3D matching the metric 'ignore_segment_polarity' was renamed to 'ignore_local_polarity'. The name 'ignore_local_polarity' describes the behavior in a more consistent way with respect to other matching techniques that are available in HALCON. For backward compatibility, the metric 'ignore_segment_polarity' is still accepted by the operator create_shape_model_3d. However, the operator get_shape_model_3d_params now returns 'ignore_local_polarity' instead of 'ignore_segment_polarity' for the generic parameter metric. Consequently, programs that rely on the metric name returned by get_shape_model_3d_params must be adapted accordingly.
- The model generation with create_shape_model_3d in some cases is time and memory consuming when specifying a large pose range. This happens in particular when the object appears large in the image (measured in pixels) because then the number of model views on lower pyramid levels may become very large. Therefore, create_shape_model_3d now offers the new generic parameter 'lowest_model_level' that allows to disable the pregeneration of the model views on lower pyramid levels. To still obtain a high accuracy, during the search with find_shape_model_3d, the pose is refined on the original pyramid level. The new HDevelop example program hdevelop/3D-Matching/Shape-Based/create_shape_model_3d_lowest_model_level.hdev shows how to use the new functionality. It uses the new CAD model tile_spacer.dxf in the same directory as well as the new images tile_spacers_color_* from the subdirectory images/tile_spacers.
- The shape-based 3D matching now is more robust against clutter. For this, create_shape_model_3d offers the new metric 'ignore_part_polarity' that allows the contrast polarity to change only between different parts of the model, i.e., the polarity of all points within the same model part must not change. This reduces the number of wrong matches. The size of the model parts can be adjusted by using the new generic parameter 'part_size'. The new HDevelop example program hdevelop/3D-Matching/Shape-Based/create_shape_model_3d_ignore_part_polarity.hdev shows how to use the new functionality. It uses the new CAD model tile_spacer.dxf in the same directory as well as the new images tile_spacers_* from the subdirectory images/tile_spacers.
- For create_shape_model_3d, the default value of the generic parameter 'min_face_angle' has been increased from rad(15) to rad(30). For consistency, the default value of the parameter MinFaceAngle in project_shape_model_3d and project_object_model_3d was increased to the same value. Note that programs that use create_shape_model_3d without explicitly specifying its generic parameter 'min_face_angle' now might behave differently because a different model might be created. To obtain the old behavior, in such programs the generic parameter 'min_face_angle' of create_shape_model_3d must be set to rad(15).
- distance_transform now is more accurate for large images if Metric is set to 'euclidean'. In previous versions, for large images, i.e., if sqrt(Width*Width+Height*Height) > 2^14, the distance values were clipped to integer values. Now, the distance values are rounded to the nearest integer values. Note that because the distance values returned by distance_transform now differ from those returned by previous HALCON versions by up to 1, a slightly different behavior of existing applications that use large images can be expected.
-
The draw operators
- draw_nurbs,
- draw_nurbs_mod,
- draw_nurbs_interp,
- draw_nurbs_interp_mod,
- draw_xld,
- draw_xld_mod,
- draw_rectangle2,
- draw_rectangle2_mod,
- draw_rectangle1,
- draw_rectangle1_mod,
- draw_point,
- draw_point_mod,
- draw_line,
- draw_line_mod,
- draw_ellipse,
- draw_ellipse_mod,
- draw_circle,
- draw_circle_mod,
- draw_region, and
- draw_polygon
are now able to return additional error codes or throw exceptions if aborted by the user. The behavior can be specified by calling set_system with the parameter 'cancel_draw_result' and one of the following values: 'true' (default), 'false', or 'exception'. The HDevelop example program hdevelop/Graphics/Parameters/cancel_draw_result.hdev shows how to use the new functionality. -
edges_image with Filter set to 'sobel_fast' now
returns more accurate results for high contrast images. In the past, the
output image ImaAmp contained wrong values if the contrast in the input image
locally exceeded 127 for byte images or 32767 for uint2 images.
Note that to ensure a correct computation of the amplitude values it was necessary to change the type of the output image ImaAmp. For byte input images, ImaAmp now is of type uint2 while for uint2 input images, ImaAmp now is of type int4. Consequently, in some cases it will be necessary to adapt existing programs to deal with the new image types. -
find_marks_and_pose is now more robust, i.e., it
is possible to determine the mark coordinates and the pose from a wide range of
calibration images without the necessity to adapt the control parameters. The
following HDevelop example programs have been adapted in a way that they now use the
default parameter values of find_marks_and_pose:
- solution_guide/2d_measuring/measure_perspective_scratch.hdev,
- solution_guide/3d_vision/camera_calibration_interior.hdev,
- solution_guide/3d_vision/camera_calibration_exterior.hdev,
- solution_guide/3d_vision/camera_calibration_multi_image.hdev,
- solution_guide/3d_vision/handeye_movingcam_calibration.hdev, (only thresholds)
- solution_guide/3d_vision/handeye_stationarycam_calibration.hdev,
- solution_guide/3d_vision/handeye_stationarycam_grasp_nut.hdev,
- solution_guide/3d_vision/stereo_calibration.hdev
- solution_guide/3d_vision/two_camera_calibration.hdev,
- hdevelop/Applications/Measuring-3D/calibrate_sheet_of_light.hdev,
- hdevelop/Calibration/Monocular/compare_calibration_models.hdev,
- hdevelop/Applications/Measuring-3D/cbm_caliper.hdev,
- hdevelop/Applications/Object-Recognition-2D/board_components.hdev,
- hdevelop/Calibration/Monocular/camera_calibration.hdev,
- hdevelop/Tools/Grid-Rectification/gen_arbitrary_distortion_map.hdev,
- hdevelop/Calibration/Binocular/binocular_calibration.hdev,
- hdevelop/3D-Reconstruction/Binocular-Stereo/disparity_to_point_3d.hdev,
- hdevelop/3D-Reconstruction/Binocular-Stereo/intersect_lines_of_sight.hdev, and
- hdevelop/explore_halcon.hdev.
- find_ncc_model is now able to find matches near the image border more robustly.
- The feature matching in find_[un]calib_descriptor_model was originally based on RANSAC, which required the initialization of the random generator for the repeatability of the results. For that, the parameter Seed was introduced in both operators. Since the usage of RANSAC was substituted by N3Ms, no random generator is used in the matching phase anymore and the parameter Seed is obsolete. Thus, it has been removed from the two operators and programs using them need to be adapted accordingly.
- Up to now, if find[_*]_shape_model[s] was called in the first thread using a certain shape model and the same shape model was also searched in a second thread, the second thread had to wait for the first thread to finish. Now, the shape-based matching is able to use the same shape model in different threads in parallel. Note that because of this change it was necessary to change the parallelization characteristics of set_shape_model_params, which now is processed completely exclusively.
- gen_region_histo now supports histograms with a bin number being different from 256.
- gen_region_polygon_filled, gen_region_points, and gen_region_line now additionally support the data type real for the input parameters Row and Column.
- The bar code reader has been extended with the functionality to return diagnostic status messages. This functionality can be invoked after the decoding stage by calling the operator get_bar_code_result with ResultName set to 'status' or 'status_id' and supplying a candidate handle. A tuple containing status messages for each possible scanline is returned for the corresponding candidate region. The new HDevelop example program hdevelop/Identification/Bar-Code/barcode_status.hdev shows how to use the new functionality. It uses the new images 25interleaved_exposure_* from the subdirectory images/barcode/25interleaved.
- For get_data_code_2d_params the values that are returned for PDF417 symbologies for 'symbol_rows_min', 'symbol_cols_min', 'symbol_rows_max', or 'symbol_cols_max' were changed from real to integer. Because of this, get_data_code_2d_params is not source-code compatible to previous HALCON versions. Applications that apply get_data_code_2d_params to PDF417 symbologies with one of the mentioned generic parameters must therefore be adapted to the changed type of the return values.
- The parameter 'temp_mem' of get_system is now thread-safe and also works with operators running with automatic parallelization.
- get_system supports the new parameter values 'tsp_used_thread_num' and 'tsp_used_split_levels'. 'tsp_used_thread_num' returns the number of threads an operator used for the automatic parallelization and 'tsp_used_split_levels' returns the split levels the operator used.
- highpass_image now supports filter masks of width and/or height 1.
- lines_gauss now supports a parabolic and a Gaussian line model when correcting line positions and widths to achieve a higher accuracy, e.g., in medical applications where the position and width of blood vessels must be determined. The HDevelop example programs that use lines_gauss have been adapted to use the appropriate line model.
-
mean_image no longer accepts filter masks larger
than twice the respective dimension of the processed image. Note that
this change affects the compatibility of the operator. In particular, up to
now, HALCON internally reduced the mask size to the image size. Thus, the
operator tolerated any mask size. Now, mean_image does not reduce the
mask size anymore and restricts the usage of mask sizes to mask sizes smaller
than twice the image size. Therefore, the following differences in the results
of mean_image results can be expected:
-
for odd(mask size) <= image size:
result of older HALCON version == result of HALCON 10.0
-
for mask size < 2*image size:
result of older HALCON version != result of HALCON 10.0
-
for mask size >= 2*image size:
an older HALCON version returns a result and HALCON 10.0 returns an error
-
for odd(mask size) <= image size:
- For median_image and dual_rank the parameter values 'rectangle' for the parameters MaskType have been renamed to 'square' since median_image and dual_rank only support square masks. However, the values 'rectangle' are still supported for backward compatibility. The HDevelop example programs hdevelop/Segmentation/Classification/class_2dim_unsup.hdev and hdevelop/Applications/OCR/ocr_dongle.hdev have been adapted accordingly.
-
The HALCON operators open_socket_accept and open_socket_connect have been extended with generic
parameters to support the setting of an initial timeout.
socket_accept_connect uses the timeout of the listening socket that is obtained with open_socket_accept. A new waiting mode 'auto' has been introduced that adjusts the waiting behavior accordingly.
Note that because of this change, the operators open_socket_accept and open_socket_connect are not source-code-compatible to previous HALCON versions. - radial_distortion_self_calibration has been extended with the polynomial camera model, which allows to describe more complex radial distortions in an image.
- In contrast to the behavior in HALCON 9.0.2, the parameter UsedThreshold of segment_characters, when called in tuple mode, contains one entry for every input region given in the parameter Region. It is suggested to call segment_characters in tuple mode if more than one region is used.
- The bar code reader has been extended with the functionality to stop trying to decode any further candidates after a given number of successfully decoded bar codes. For this, the new parameter 'stop_after_result_num' can be set with the operator set_bar_code_param or for specific bar code types with the operator set_bar_code_param_specific. In some scenarios, this can dramatically reduce the average decoding time. As default, the value is set to 0, which means that all candidate regions are evaluated. The new HDevelop example program hdevelop/Identification/Bar-Code/barcode_param_stop_after_result_num.hdev shows how to use the new functionality.
- set_paint now returns the error 5185 ("No OpenGL support available") if no OpenGL is available but Mode is set to '3d_plot'.
- In set_paint, the 'vector_field' paint mode has been extended with the parameter Mode that controls whether the vector field to be displayed contains absolute or relative coordinates. Additionally, the mode has been extended with the parameter CircleSize which controls the diameter of the circles drawn at each vector's origin. The new HDevelop example program hdevelop/Filters/Geometric-Transformations/convert_map_type.hdev uses the new parameter.
-
HALCON's low-level error mechanism has been extended. Now, there are the
following different modes regarding the behavior of HALCON in case a low-level
error occurs:
- no action is taken,
- the error text is printed to standard error,
- a message box containing the error text is opened,
- a callback procedure is called, or
- the error text is printed to a file.
It is possible to use multiple of the above modes at the same time. Thus, it is, e.g., possible to print the low-level error message to file and to standard error. As before, it is possible to determine the low-level error behavior via the operator set_system and the parameter 'do_low_error' in combination with the corresponding error modes. - set_system and get_system have been extended with a new system parameter 'tsp_thread_num' that enables a user thread to hold internal HALCON threads exclusively for automatic operator parallelization. The parameter can also switch off the automatic paralellization for a specific user thread.
- set_window_attr and set_window_param now support non-latin characters as window titles under Linux / Unix. The strings passed to these operators must be encoded as multi-byte character strings in the encoding given by the current locale.
- tuple_regexp_test and tuple_regexp_select have been extended with the new option 'invert_match', which allows to count or select only those items that do not match the given expression. The HDevelop example program hdevelop/Tuple/String-Operators/tuple_regexp.hdev has been adapted to demonstrate this new option.
- For vector_to_pose the method 'planar_analytic_svd' has been removed from the list of possible values for the parameter Method. The reference manual entry of vector_to_pose has been adapted accordingly. For backward compatibility, the method 'planar_analytic_svd' is still accepted by the operator.
- write_descriptor_model and read_descriptor_model use a new HALCON descriptor model file format. It uses more compact data formats and some adaptive strategies such that it is 50% to 90% smaller than the older file format. HALCON descriptor model files written with HALCON 10.0 cannot be read by previous HALCON versions, but HALCON descriptor model files written with previous HALCON versions can still be read with HALCON 10.0.
-
write_image now only writes images if the number
of channels is supported by the target file format, i.e., it does not try to
write the supported number of channels and discard the rest. In particular,
now,
- for the BMP file format, only images of type 'byte' with one or three channels can be written,
- for the JPEG file format, only images of type 'byte' with one or three channels can be written, and
- for the PNG file format, only images of type 'byte' or 'uint2' with one or three channels can be written.
The reference manual entry of write_image has been extended accordingly. - write_string now supports non-latin characters under Linux / Unix. The strings passed to write_string must be encoded as multi-byte character strings in the encoding given by the current locale. Furthermore, an appropriate font set that is capable of displaying the non-latin characters must be specified with set_font.
-
Legacy and Obsolete Operators:
-
The following HALCON operators became legacy:
-
read_object_model_3d_dxf
(the functionality of read_object_model_3d_dxf now is provided by the new more general operator read_object_model_3d).
-
All operators that are related to Fourier descriptors:
- abs_invar_fourier_coeff,
- fourier_1dim,
- fourier_1dim_inv,
- invar_fourier_coeff,
- match_fourier_coeff,
- move_contour_orig, and
- prep_contour_fourier.
-
check_par_hw_potential
(new applications should use the operator optimize_aop to optimize the automatic operator parallelization).
-
load_par_knowledge
(new applications should use the operator read_aop_knowledge to load optimization data for the automatic operator parallelization).
-
store_par_knowledge
(new applications should use the operator write_aop_knowledge to store optimization data for the automatic operator parallelization).
-
read_object_model_3d_dxf
-
The obsolete operators
- disp_info,
- def_obj,
- get_lut_gamma, and
- set_lut_gamma,
which could not be selected in HDevelop, were removed from HALCON. Furthermore, the operators test_obj_def and sensor_kalman that must not be used any longer have been removed from the reference manual and cannot be selected in HDevelop any longer. For compatibility reasons, test_obj_def and sensor_kalman can still be called from existing programs. - The operators set_socket_timeout and get_socket_timeout are now obsolete. Their functionalities have been integrated in the new operators that support generic sockets and protocols (set_socket_param and get_socket_param).
-
The following HALCON operators became legacy:
-
Bug Fixes:
- Passing wrong object or channel numbers to operators with multiple iconic parameters might have led to a different behavior when the oprerators were processed sequentially or with automatic parallelization on tuple or channel level. This problem has been fixed.
- Various HALCON operators that open files did not free the associated file handles if a runtime error occurred during the operator execution. This problem has been fixed.
- HALCON leaked memory when error messages with error codes between 3 and 1000 occured. This problem has been fixed.
- On Solaris systems, HALCON applications like HDevelop could have crashed during the initialization of the HALCON library if the locale was set to UTF-8 encoding, e.g., with setenv LANG en_US.UTF-8. This problem has been fixed.
- HALCON operators with more than one iconic input tuple parameter might have crashed if all the values of the first tuple were referenced to the same iconic object while all the elements of the second tuple were referenced to different iconic objects. This problem has been fixed.
- append_channel did not append image channels to empty objects. This problem has been fixed.
- append_channel and compose2 to compose7 returned an error code different to other operators when passing a wrong number of objects to iconic input parameters. The old error 3017 ("Number of images unequal in input parameters") has been replaced by the errors 1501 to 1509 ("Wrong number of values of object parameter: x"), where x denotes the first parameter position (beginning with 1) having an object number that is wrong or different from the number of objects in the first object parameter.
- auto_threshold sometimes returned regions that did not contain the brightest pixels of an uint2 image. This occured especially if the brightest pixels had a gray value larger than 65472. This problem has been fixed.
- boundary crashed for an empty input region. This problem has been fixed.
- clear_component_model and clear_training_components left small portions of the respective model in memory causing small memory leaks (44 Bytes for a component-based model, 88 Bytes for a component training model). This problem affected the corresponding clear_all_* operators, too. This problem has been fixed.
- close_ocv had a small memory leak. This problem has been fixed.
- According to the reference manual entries of the compose* operators, the definition domain of the composed image is calculated as the intersection of the definition domains of the input images. In contrast to the documentation, the compose* operators used the domain of the first image as domain of the composed image. This problem has been fixed. Now, the behavior of the operators has been adapted to the description in the reference manual entries. Note that because of the changed behavior, the domains of the composed images might differ between different HALCON versions.
- convol_image returned wrong results with certain masks due to internal integer overflows. 64 bit systems were not affected. This problem has been fixed.
- convol_image, median_image, and rank_image returned the error 8109 ("no filter object has got empty region") with empty image domains. This problem has been fixed.
- create_bar_code_model had a memory leak if generic parameters were supplied that were invalid. No bar code handle was returned, but the memory was allocated. This problem has been fixed.
- create_component_model hung in rare cases. This problem has been fixed.
- create_matrix crashed for an empty input parameter 3. This problem has been fixed.
- crop_part, crop_rectangle1, and crop_domain returned wrong error messages. This problem has been fixed.
- dev_display returned a low-level error using an 8 bit display. This problem has been fixed.
-
The operators
- dev_display,
- disp_obj,
- disp_region,
- drag_region1,
- drag_region2, and
- drag_region3
sometimes returned the error 3513 ("Internal error: number of chords too big for num_max") when called with regions that were much wider than high and that consisted of many single chords. This problem has been fixed. - disp_obj crashed in rare cases if the width of the object to be displayed was much greater than its height. This problem has been fixed.
- distance_funct_1d often returned an incorrect distance. This problem has been fixed.
- div_image returned a wrong value for int4, int8, and complex images when dividing by zero. In particular, it returned the value of the 'Add' parameter instead of zero. This problem has been fixed.
- drag_region1, drag_region2, and drag_region3 used the wrong mouse position after terminating. Instead of the last position where the left mouse button was pressed, the position where the right mouse button was pressed was used. This problem has been fixed. Furthermore, these operators now use double buffered drawing instead of the old XOR-based drawing.
- draw_nurbs_interp and draw_nurbs_interp_mod did not work with closed curves of a degree higher than 3. This problem has been fixed.
- edges_sub_pix leaked memory when error messages occured. This problem has been fixed.
-
The multi-value slot of the iconic parameters of the following operators
was incorrectly set to 'false' instead of 'optional':
- exhaustive_match,
- cfa_to_rgb,
- eliminate_min_max,
- cooc_feature_matrix,
- segment_characters, and
- polar_trans_contour_xld_inv.
This problem has been fixed. This change also affects HALCON/C++. The operators now become members of the corresponding iconic array class. - find_aniso_shape_model(s) did not find shape models that were created with create_shape_model or create_scaled_shape_model. This problem has been fixed. The reference manual entries of find_aniso_shape_model and find_aniso_shape_model have been extended accordingly.
- find_[un]calib_descriptor_model was causing a small memory leak. This problem has been fixed.
- find_ncc_model did not find matches if the model fitted equally well at neighboring pixels of the start level of the used image pyramid. Typically, this occured only on artificial images. This problem has been fixed.
- find_*shape_models in rare cases crashed when executed in parallel mode, the number of threads exceeded the number of models passed in ModelIDs, and the number of threads was at least 3. This problem has been fixed.
- find_*shape_model(s) in rare cases returned different results when executed with a different number of threads. This problem has been fixed.
- find_shape_model_3d sometimes returned different results in sequential and in parallel mode. Additionally, find_shape_model_3d sometimes returned inaccurate results for objects with curved surfaces. This might have happened if the curved surfaces were approximated by a large number of planar faces resulting in 3D model edges that were smaller than 2 pixels when projected into the image. These problems have been fixed.
- gen_arbitrary_distortion_map sometimes returned image maps that contained negative values. This problem has been fixed.
- gen_circle_contour_xld and gen_ellipse_contour_xld created wrong results with an angle extent of nearly 0 degrees. This problem has been fixed.
- The end points of a closed NURBS generated by gen_contour_nurbs_xld were not identical, but were slightly different due to numerical issues. This problem has been fixed.
- gen_gauss_pyramid returned wrong values at the lower image border for input images with an odd image height and a scale factor of 0.5. The same holds for images with an odd image width, for which gen_gauss_pyramid returned wrong values at the right image border. This error occured if interpolation was set to 'nearest_neighbor', 'constant', 'min', or 'max'. This problem has been fixed.
- gen_grid_rectification_map might have crashed when the passed grid points and connecting lines did not correspond, in particular, when there were connecting lines without corresponding grid points at one or both ends. This problem has been fixed.
- The results of gen_image_interleaved were incorrect and the operator sometimes crashed with ColorFormat set to 'rgb555', 'bgr555', 'rgb565', or 'bgr565'. Furthermore, gen_image_interleaved returned the wrong error 9000 ("Function not implemented on this machine") if ColorFormat is unknown. gen_image_interleaved now supports the additional conversions 'rgb5551' and 'bgr5551' with the padding bit being the last bit. The values 'rgb555', 'bgr555', 'rgb565', 'bgr565', 'rgb5551', and 'bgr5551' for the parameter ColorFormat now support Little and Big Endian encoding with the suffixes 'le' and 'be'.
- gen_region_polygon returned wrong results for big regions on 32 bit architectures. This problem has been fixed.
- Calling get_operator_info for the slot 'references' always returned an empty tuple even if references were available. This problem has been fixed.
- get_rectangle_pose did not accept camera parameters with a polynomial radial distortion model. This problem has been fixed.
- get_region_thickness sometimes incorrectly returned the error 3148 ("Region not compact or not connected"). This problem has been fixed.
- get_sheet_of_light_result returned incorrect calibrated results ('x', 'y', and 'z') if it was called more than once and new profiles have been measured (with measure_profile_sheet_of_light) in the meantime. This problem has been fixed.
- If an empty tuple was passed to get_system as Query tuple, the operator crashed. This problem has been fixed.
-
The multi-channel slot of the iconic parameters of the following operators was
incorrectly set to 'false' intead of 'optional':
- gray_closing_shape,
- gray_opening_shape,
- gray_dilation_shape,
- gray_erosion_shape,
- gray_range_rect,
- gray_closing_rect,
- gray_opening_rect,
- gray_erosion_rect, and
- gray_dilation_rect
This problem has been fixed. - gray_erosion_shape and gray_dilation_shape might have returned the error 3513 ("number of chords too big for num_max") when working on reduced domains and using rhombus shaped masks with mask widths smaller than 3.0 (interpolation mode). This problem has been fixed.
- gray_projections returned wrong results for the Parameters HorProjection and VertProjection if the Parameter Mode was set to 'rectangle'. Both, the number of returned values and the mean values were wrong. This problem has been fixed.
- gray_range_rect did not saturate int2 images such that there may have been negative ranges due to integer overflows. This problem has been fixed.
- hit_or_miss, thickening, and thinning returned the wrong error 1501 ("Wrong number of values of object parameter: 1") when passing object numbers bigger than one to the parameters StructElement1 or StructElement2. This problem has been fixed. Now, the error 1502 ("Wrong number of values of object parameter: 2") or 1503 ("Wrong number of values of object parameter: 3") is returned.
- mean_image returned wrong results for float images if the intersection of the input domain and the rectangle region defined by (MaskHeight/2, MaskWidth/2, ImageHeight-MaskHeight/2-1, ImageWidth-MaskWidth/2-1) was empty. This problem has been fixed.
- measure_profile_sheet_of_light might have crashed if calibration was set to 'xyz' or 'xz' and some calibration data was not set correctly. This problem has been fixed.
- move_contour_orig sometimes returned contours with the last point erroneously set to a point in the middle of the contour. Furthermore, contours that are not closed were not moved correctly. These problems have been fixed. Now, open contours are closed automatically. Furthermore, move_contour_orig is no longer processed exclusively.
- With standard HALCON (non-XL), the operator paint_xld sometimes failed to paint the border of the region properly if the input XLD was too long (15000 or more points). Instead of making a smooth transition to the original color of the image being painted, it seemed to set random gray values. This problem has been fixed.
- points_foerstner returned inaccurate point coordinates. The positional error of the returned points was up to 0.5 pixels. This problem has been fixed.
- polar_trans_image_inv sometimes returned the error 6002 ("Memory partition on heap has been overwritten") if the parallelization was turned on. This problem has been fixed.
- project_object_model_3d and project_shape_model_3d returned contours that belong to two faces of the 3D object twice. This problem has been fixed. read_image and write_image returned the wrong error messages if files could not be read or written. This problem has been fixed. In particular,
- read_image returned the error 5235 ("Wrong graphic format") when trying to read non-existing or unreadable JPEG2000 files and the error 5237 ("File with extension 'tiff' is no Tiff-file") when trying to read unreadable TIFF files. Now, the error 5200 ("File not found") is returned for all read attempts to non-existing or unreadable files.
- read_image returned the error 5235 ("Wrong graphic format") when trying to read JPEG2000 files with a given file name extension in upper or mixed case writing (i.e., JP2, Jp2, and jP2). Now, image files with this extensions can be read.
- write_image returned the error 5550 ("Error while reading a file") when trying to write TIFF files to non-existing directories, the error 5215 ("Error while opening the file") when trying to write BMP, JPEG, or JPEG2000 files to non-existing directories, and the error 5200 ("File not found") when trying to write PNG or IMA files to non-existing directories. Now, the error 3142 ("Can not open file for writing") is returned for all write attempts to non-existing or non-writable directories for all supported image file types.
- write_image returned no error when trying to write JPEG2000 files when there is not enough space left on the drive. Now, the error 5201 ("Error while writing image data (sufficient memory ?)") is returned.
- read_region returned the error 5200 ("File not found") if a TIFF, BMP, or PNG file existed but contained corrupt data. Furthermore, depending on the file format, a specific low-level error could have occurred if the filename had an unknown ending or the ending REG (uppercase), even if the file contained a valid HALCON region. This problem has been fixed.
- read_region in HALCON XL read the region data incorrectly if a part of the region had negative coordinates and therefore was outside of the image domain on the left or upper side. The problem occurred only if the region was previously saved in HALCON. This problem has been fixed.
-
Various HALCON operators might have returned erroneous results for
large input control real values. In particular, the following
operators were affected:
- select_shape,
- add_image,
- sub_image,
- mult_image,
- div_image,
- scale_image,
- disp_arrow,
- write_image,
- create_bar_code_model,
- decode_2d_bar_code,
- gen_2d_bar_code_descr,
- set_data_code_2d_param,
- create_data_code_2d_model,
- expand_gray,
- expand_region,
- gray_dilation_shape,
- gray_erosion_shape,
- gray_opening_shape,
- gray_closing_shape,
- gray_histo_range,
- select_lines,
- partition_lines,
- line_position,
- gen_caltab,
- hand_eye_calibration,
- lut_trans,
- opening_rectangle1,
- closing_rectangle1,
- binocular_disparity_mg,
- binocular_distance_mg,
- fast_threshold,
- threshold,
- watersheds_threshold,
- select_shape_xld,
- set_class_box_param,
- add_sample_class_svm,
- tuple_int,
- tuple_str_first_n,
- tuple_str_last_n,
- tuple_gen_const,
- tuple_str_bit_select,
- tuple_select,
- tuple_remove,
- tuple_first_n,
- tuple_last_n,
- tuple_select_range,
- tuple_sum,
- tuple_min,
- tuple_max,
- tuple_cumul,
- tuple_rand,
- tuple_select_rank, and
- tuple_histo_range.
This problem has been fixed. -
Color names were not properly resolved for 8 bit displays under Windows. If
set_check('color') was enabled, the following
problems could have occurred:
- dev_open_window could have returned an error if dev_set_colored(12) was set before, or, alternatively, if a 12 color pen was selected in Edit->Preferences ...->Visualization Settings->Pen->Color->12.
- Some of the colors queried by query_color() were not accepted by dev_set_color().
- set_shape_model_metric crashed in very rare cases. This problem has been fixed.
- shade_height_field returned an incorrect shadow if the parameter Shadows='true'. This problem has been fixed.
- test_obj_def, which is obsolete but can still be called from existing programs, returned an empty tuple for empty input objects. Now, test_obj_def returns TRUE or FALSE, respectively, also for empty input objects. Additionally, the setting of the system parameter 'no_object_result' no longer has any influence on the operator test_obj_def.
-
threshold did not correctly report the error 3100
("Wrong segmentation threshold") when the parameter MinGray was
bigger than the parameter MaxGray for various image types (int1, int2, int4,
int8, real, and vector_field). This problem has been fixed.
The examples optical_flow_bicycle.hdev and optical_flow_hydraulic_engineering.hdev from the subdirectory hdevelop/Applications/Security-Systems have been revised so that they now check if the parameters are correct before calling threshold. -
train_class_gmm returned float values for the
output parameters Centers and Iter although semantically both are integers.
This problem has been fixed.
Note that programs that use train_class_gmm with older versions of HALCON/C, HALCON/C++, or HALCON/C# might require adjustments in the source code to cope with the changed output types. - tuple_regexp_replace crashed when the input string contained %-escapes or if an empty tuple or a numerical value was used in the parameter Replace. These problems have been fixed.
- There was a memory leak in tuple_regexp_select when no element of the input tuple matched the expression. This problem has been fixed.
- tuple_string and the C++ function HTuple::ToString erroneously returned an error if the format string contained a floating point conversion and the precision was missing, e.g., if the format string was '.f'. These problems have been fixed.
- union_colinear_contours_xld and union_collinear_contours_ext_xld might have crashed for a very large number of input contours. This problem has been fixed.
- write_image did not support the formats 'tiff deflate 0' and 'tiff jpeg 0' although they were listed in the reference manual. This problem has been fixed. Now, the described formats are supported.
-
write_ocr_trainf and append_ocr_trainf did not check the number of input
images. Therefore, it was erroneously possible to pass an image array to the
parameter Image. This problem has been fixed. Now, the error 1502 ("Wrong
number of values of object parameter: 2") is returned if the input image does
not consist of exactly one image.
Programs in which an image array is passed to the operator write_ocr_trainf and append_ocr_trainf must be adapted accordingly. - write_region could not write TIFF files if the input region was empty. The file was created but contained corrupt data. This problem has been fixed. Now, empty regions are saved as correct TIFF files containing one pixel with value 0 indicating an empty region.
HALCON/C
-
Functionality:
- The HALCON/C interface now provides additional functionality for manipulating tuples more efficiently. The functions create_tuple_i, create_tuple_d, and create_tuple_s can be used to create a tuple and set its value in one step similar to calling create_tuple followed by set_i, set_d, or set_s. The functions reuse_tuple_i, reuse_tuple_d, and reuse_tuple_s can be used to destroy, create, and set a tuple's value in one step similar to calling destroy_tuple followed by create_tuple_i, create_tuple_d, or create_tuple_s.
-
C and CPP programs used the anonymous variables _, _i, _d, _s, and _t
for output parameters that were of no further interest. These anonymous
variables are deprecated and are no longer defined by the HALCON
include files by default. Instead, dummy control variables or NULL should be
used. For compatibility reasons, it is possible to continue
using anonymous variables if the define HC_LEGACY_PAR is set before
including HalconC.h:
#define HC_LEGACY_PAR
#include "HalconC.h" ...
HALCON/C++
-
Functionality:
- Tool classes now feature the new member function InvalidateHandle that invalidates the tool handle managed by the tool class without calling the handle destructor (in constrast to SetHandle(-1)). This is suitable when exchanging handles between language interfaces or between procedural and object-oriented coding styles.
-
C and CPP programs used the anonymous variables _, _i, _d, _s, and _t
for output parameters that were of no further interest. These anonymous
variables are deprecated and are no longer defined by the HALCON
include files by default. Instead, dummy control variables should be
used or NULL. For compatibility reasons, it is possible to continue
using anonymous variables if the define HC_LEGACY_PAR is set before
including HalconCpp.h:
#define HC_LEGACY_PAR
#include "HalconCpp.h" ...
-
Bug Fixes:
- The fields "file" and "proc" of the HException class in HALCON/C++ contained corrupt data when the instance was created via the HException(HTuple) constructor. In particular, this was the case for exported HDevelop code raising user exceptions. This problem has been fixed.
- The operator += of the HALCON/C++ class HTuple returned an error when adding a tuple with n elements to a tuple with 1 element. This was inconsistent to the behavior of tuple_add. This problem has been fixed.
-
The multi-value slot of the iconic parameters of the following operators
was incorrectly set to 'false' instead of 'optional':
- exhaustive_match,
- cfa_to_rgb,
- eliminate_min_max,
- cooc_feature_matrix,
- segment_characters, and
- polar_trans_contour_xld_inv.
This problem has been fixed. The operators now become members of the corresponding iconic array class. -
The constructor for NewExternWindow has been removed from HWindow, because
the new signature was ambiguous. The sequence
m_phWindow = new HWindow("");
m_phWindow->NewExternWindow((INT)m_hWnd, 0, 0, Width-1, Height-1);
is used to create a HWindow based on NewExternWindow.
Furthermore, the data types in the signatures have been adapted to use Hlong for window handles and device contexts to ensure their usability on 64 bit systems as well. - The warning 4244 was reported when compiling C++ applications that include HalconCpp.h with a warning level /W4. This problem has been fixed.
- tuple_string and the C++ function HTuple::ToString erroneously returned an error if the format string contained a floating point conversion and the precision was missing, e.g., if the format string was '.f'. These problems have been fixed.
HALCON/.NET
-
Functionality:
-
The usability of the HALCON/.NET API has been improved in various
respects:
-
Type checking for iconic classes is now more strict. Previously, the following
code was valid:
HObject circle = new HRegion(100.0,100.0,50.0);
HXLD xld = new HXLD(circle);
Now, this will raise an exception indicating that the iconic types 'region' and 'xld' do not match.
- Iconic object classes, tool classes, and engine classes now provide a new method "IsInitialized" to check the initialization state of the object instance.
-
Some operators with generic return value types were awkard to use as class
members due to confusing API overloads. The return values of the following
class members have been changed to HTuple in the single API variant:
- GetObjectModel3dParams,
- GetShapeModel3dParams,
- GetDeformableModelParams,
- GetDescriptorModelResults,
- GetBarCodeResult,
- GetBarCodeParamSpecific,
- GetBarCodeParam,
- GetDataCode2dResults,
- GetDataCode2dParam,
- GetFramegrabberParam, and
- GetSystem.
- The class HTuple now offers implicit conversions to array types such as int[], which are equivalent to calling the corresponding ToIArr() method, and an implicit conversion to bool. Please note that this might lead to source code incompatibilities in rare cases.
Additionally, the following problems have been fixed:- The scalar operator overloads for the addition and multiplication implemented by HImage, HRegion, and HFunction1D were not available for scalar values operating from the left.
-
The behavior of the constructor HRegion() was inconsistent with
other iconic object classes in that it created an empty region instead
of an uninitialized object. In particular, code such as
HRegion region = new HRegion();
region.GenRegionPolygonFilled(...);
implied the following operator calls
gen_empty_region
clear_obj
gen_region_polygon_filled
resulting in an unnecessary overhead. Note that this change breaks source code compatibility for .NET applications using the object-oriented style. It needs to be verified that occurences of "HRegion()" are not actually intended to create an empty region. If they were, they now need to be followed by
region.GenEmptyRegion();
-
Type checking for iconic classes is now more strict. Previously, the following
code was valid:
-
HALCON/.NET now offers improved support for .NET 3.5 or higher
(Visual Studio 2008 or higher):
- The new control HWindowControlWPF allows convenient and native integration of HALCON into WPF applications
- HALCON/.NET can now be used with the light-weight .NET Framework Client Profile runtime environments.
-
HWindowControl now features an HMouseWheel event.
Additionally, HWindowControl no longer creates a HALCON window at design time (i.e., in the Visual Studio Form designer). This allows to open and edit forms with HWindowControl in the designer even if the HALCON library dependencies could not be resolved successfully. In particular, it is now possible to develop HALCON applications with Visual Studio on a 64 bit system without installing 32 bit binaries.
Furthermore, even at runtime HWindowControl will no longer throw an exception when encountering a license error or corrupt installation. This allows for more natural exception handling in normal user code after the form has been loaded.
-
The usability of the HALCON/.NET API has been improved in various
respects:
-
Bug Fixes:
- For the class HVariationModel the member function ClearTrainDataVariationModel() was missing. This problem has been fixed.
- Both the constructor of HWindow for the operator open_window and the member functions OpenWindow and OpenTextWindow now use the type IntPtr for the parameter fatherWindow in their single API variant to allow its usage on 64 bit operating systems. Note that although technically a source code incompatibility, the change should go unnoticed due to the availability of the HTuple variant and implicit casts.
- In HALCON/.NET, single API members erroneously did not raise an exception as other language interfaces do when encountering 0 output values. This problem has been fixed.
- It was not possible to pass a HTuple as expression to the member HTuple.TupleRegexpReplace for extra options such as 'replace_all'. Additionally, all parameter names and descriptions for the HTuple.TupleRegexp* members in HALCON/.NET were ordered incorrectly. Both problems have been fixed.
HALCON/COM
-
Bug Fixes:
- The HALCON/COM control HWindowCtrlX exhibited a resource leak when used with a non-zero BorderWidth. This problem has been fixed.
- For the class HVariationModelX the member function ClearTrainDataVariationModel() was missing. This problem has been fixed.
-
Examples:
- The example tree contained a disproportionate amount of examples for the old development environment Visual Basic 6. These have been removed except for the HDevelopTemplate, Matching, and HDevEngine examples. Additionally, the directory "vb" has been renamed to "vb6" to avoid confusion (most examples did not work when opened in newer versions of Visual Basic via the upgrade wizard because Visual Basic 6 was based on a fundamentally different technology).
HDevEngine
-
Functionality:
-
HDevelop and the HDevEngine now support global
variables. For using a global variable within a procedure the variable
must be declared as global by the new keyword 'global' and one of the type
identifiers 'object' or 'tuple', e.g.:
- global object MyGlobalImage or
- global tuple MyGlobalCounter
A global variable can be accessed within every procedure that contains the global variable declaration. Within HDevEngine, global variables can be accessed via new methods of the HDevEngine class. In detail, these are:- GetGlobalIconicVarNames and
- GetGlobalCtrlVarNames
- GetGlobalIconicVarObject and
- GetGlobalCtrlVarTuple
- SetGlobalIconicVarObject and
- SetGlobalCtrlVarTuple
- Within HDevEngine, it is now possible to access user exception data that is thrown within an HDevelop program or procedure by the throw operator. For this, the class HDevEngineException was extended with a new method UserData() that returns the user-defined data in the same way as the HDevelop operator dev_get_exception_data for the slot 'user_data' does. This means that for a true user exception that starts with an error code greater or equal to 30000 as the first tuple item, everything except the error code is returned. For a caught system exception tuple that has been extended by additional user data and re-thrown using the throw operator, only the additional data is returned.
-
In HDevEngine, the classes HDevProgram and HDevProcedure provide new
methods to query the procedures that are used by a program or by a
procedure, respectively. Additionally, for a program it is possible
to query all local procedures of the program. In particular, the
following methods are added to all HDevEngine interfaces:
- HDevProgram::GetUsedProcedureNames(): all local and external procedures that are (directly or indirectly) used by the main procedure of the encapsulated program,
- HDevProgram::GetLocalProcedureNames(): all local procedures of the encapsulated program, and
- HDevProcedure::GetUsedProcedureNames(): all local and external procedures that are (directly or indirectly) used via the encapsulated procedure.
- Until now, a program or procedure could not be loaded and executed by HDevEngine if it referred to an external procedure with invalid code lines or unresolved procedure calls, independently of whether the code lines were used or not. This behavior was changed in the following way: On the one hand, now also the program and used local procedures are checked for invalid or unresolved program lines. On the other hand, it is now possible to configure HDevEngine so that these types of exceptions are suppressed while loading the program or procedure. For this the new method HDevEngine::SetEngineAttribute(name,value) is provided that allows to set the attributes 'ignore_unresolved_lines' and 'ignore_invalid_lines' to 'true' or 'false' (alternatively 1 or 0), where 'false' is the default. The current state is returned by the new method HDevEngine::GetEngineAttribute(name).
- HDevEngine now allows to call HALCON operators via the same generic interface as procedures.
-
HDevelop and the HDevEngine now support global
variables. For using a global variable within a procedure the variable
must be declared as global by the new keyword 'global' and one of the type
identifiers 'object' or 'tuple', e.g.:
-
Bug Fixes:
- After disposing an instance of HDevProgram or HDevProcedure, the member IsLoaded still reported true. This problem has been fixed.
HALCON Codelets
-
Functionality:
- HALCON has been extended with new source code and classes for HALCON Codelets, which can be used to integrate the new Measure Assistant functionality into an application.
-
Bug Fixes:
- The quality assessment of calibration plate images in the Calibration Assistant did not work for calibration plates with more than 80 marks. This problem has been fixed both in HDevelop and in the calibration codelet.
HALCON Extension Packages
-
Functionality:
-
The HTML documentation for extension packages is now generated in a new
syntax-independent format. Additionally, the support for generating individual
manual sections has been dropped. Therefore, the syntax of the hcomp command line
parameter '-R' has been changed.
The extension package example "halconuser" has been adapted accordingly. Additionally, building this example under Windows will now create interfaces for COM and .NET without the need to specify explicit targets. When compiling existing extension packages, please note that class and library definitions are now required (see, e.g., threshold.def).
-
The HTML documentation for extension packages is now generated in a new
syntax-independent format. Additionally, the support for generating individual
manual sections has been dropped. Therefore, the syntax of the hcomp command line
parameter '-R' has been changed.
Image Acquisition Interfaces
-
The latest information about new interface revisions and newly supported
image acquisition devices can be found on MVTec's web
server.
-
New Image Acquisition Interfaces:
- HALCON now includes the ADLINK interface that supports the CPL64 Camera Link boards from ADLINK. The new HDevelop example programs adlink.hdev, adlink_simple.hdev, and adlink_parameters.hdev in the directory hdevelop/Images/Acquisition show how to use this interface.
- HALCON now includes the GenICamTL interface to access all cameras that are compliant to the GenICam GenTL standard. The new HALCON GenICamTL interface acts as a complete GenTL Consumer, i.e., it can be used with every compliant GenTL Producer. Note that this interface does not install any new drivers, but will access the vendor-specific drivers which are encapsulated by the installed GenTL Producers. Like the HALCON GigEVision interface, this new interface also uses the GenApi runtime installation in %HALCONROOT%/genicam which was already part of HALCON 9.0.2. The new HDevelop example programs genicamtl.hdev, genicamtl_simple.hdev, and genicamtl_parameters.hdev in the directory hdevelop/Images/Acquisition show how to use this interface.
- HALCON now includes the LPS36 interface that supports the LPS 36 light-section sensors from Leuze electronic. This new interface allows the easy grabbing of equidistant depth images via laser triangulation with sheet of light. The new HDevelop example programs lps36_simple.hdev and lps36_parameters.hdev in the directory hdevelop/Images/Acquisition show how to use this interface.
- HALCON now includes the PcEyeCL interface that supports the PC_EYE/CL Camera Link boards from ELTEC. The new HDevelop example programs pceyecl.hdev, pceyecl_crop.hdev, pceyecl_simple.hdev, and pceyecl_parameters.hdev in the directory hdevelop/Images/Acquisition show how to use this interface.
- HALCON now includes the VRmAreaScan3D interface that supports the new AreaScan3D cameras from VRmagic. This new interface allows the easy grabbing of depth images based on structured-light technology. The new HDevelop example programs vrmareascan3d_simple.hdev and vrmareascan3d_parameters.hdev in the directory hdevelop/Images/Acquisition show how to use this interface.
-
Modified Image Acquisition Interfaces:
-
The following HALCON image acquisition interfaces have been
revised since HALCON 9.0.2:
- The 1394IIDC interface is now based on the new FirePackage driver 2v33 and allows to trigger a bus reset to all connected cameras. Additionally, it enables the use of a user-specific callback to indicate that a new image has been grabbed and four missing '_description' parameters were added. Furthermore, a problem when using the internal callback function of FireGrab API has been fixed.
- The Andor interface is now based on the new Andor SDK version 2.88 and supports the dual exposure mode as well as the continuous grabbing mode.
- The BitFlow interface is now based on the BitFlow SDK 5.30 and provides several new parameters and improved internal thread handling.
- The Crevis interface is now based on the new Crevis driver V2.0.0.2 and supports also the new camera models MV-BU10U, MV-BU17U, MV-CU10U, and MV-CU17U.
- The DahengCAM interface now includes nine missing '_description' parameters. Additionally, a memory problem in info_framegrabber('info_boards') has been fixed.
- For the DirectFile interface a problem regarding the calculation of the actual buffer size has been fixed.
- For the DirectShow interface a problem regarding the calculation of the actual buffer size has been fixed.
- The eneo interface is now based on the camera firmware and SDK version 3.4.0.
- The GigEVision interface now supports peripheral (non-streaming) GigEVision devices according to the GigE Vision 1.2 standard and enables to get notified in case of any available device-specific event via user-specific callbacks. Furthermore, some enhancements when using the filter driver have been applied and a memory problem when using the filter driver has been fixed.
- The GingaDG and Ginga++ interfaces now provide several new parameters. Additionally, problems in the operators grab_image and grab_image_async have been fixed.
- The LinX interface is now based on the LinX SDK 5.30 and provides several new parameters for advanced users.
- For the MatrixVisionAcquire interface problems regarding a memory leak in the operator close_framegrabber and the error handling in case of invalid values for specifying a specific image part in the operator open_framegrabber have been fixed.
- The mEnableIII and mEnableIV interfaces now enable the direct buffer access mode to access only the pointer to the image buffer instead of the actual image data.
- For the MILLite interface a problem regarding the error handling in continuous grabbing mode has been fixed.
- The p3i2 interface now supports the ELTEC PC_EYE (PCI Express) frame grabber boards. Additionally, for color images, the conversion into the corresponding three-channel HALCON image objects has been accelerated.
- For the PixeLINK interface a problem regarding the implementation of the parameter 'trigger_mode_values' has been fixed to avoid a possible application crash caused by accessing uninitialized memory.
- The pylon interface has been adapted to the new Basler pylon SDK version 2.2 and thus supports now also the ace GigE Vision camera series. Additionally, it provides the new parameter 'num_buffers' and supports the parameter 'UserSetLoad'. Furthermore, the re-allocation of image buffers has been improved and the current camera value of the parameter 'AcquisitionMode' is no more changed to 'SingleFrame' when opening the camera. Finally, problems regarding the SingleFrame acquisition mode and a problem when changing the image size after setting the parameter 'do_unlock_parameters' have been fixed.
- The SaperaLT interface now supports the acquisition of four-channel RGB images and provides additional parameters to control the line trigger and to query the camera signal status. Additionally, problems in combination with DALSA Genie cameras, problems regarding the continuous grabbing mode, and a problem when setting the parameters 'TriggerEnable' and 'continuous_grabbing' have been fixed.
- The SICK-3DCamera interface has been adapted to the new SDK version 4.1 and now supports the ColorRanger E camera. Additionally, the interface enables the reading of mark data for each scan and includes several improvements regarding trigger modes and error handling.
- The SiliconSoftware interface is now based on the new SDK version 5.1 and supports the new GigE Vision boards. Furthermore, SmartApplets and other applets with multiple DMA channels are supported and the board names have been adapted to reflect the new Silicon Software product names. The new HDevelop example programs siliconsoftware_smartapplets.hdev and siliconsoftware_gige_vision.hdev in the directory hdevelop/Images/Acquisition show how to use the extended functionality of this interface.
- The SVCam-GigE interface now provides all supported Generic parameters also for the value list of the HDevelop Image Acquisition Assistant and enables to query them via the operator get_framegrabber_param.
- The uEye interface is now based on the uEye SDK 3.5 (or higher) and now runs also on Linux x64_86 systems.
- The VRmUsbCam interface is now based on the new VRmUsbCam SDK version 3.13 and supports the 'triggered internal' model for asynchronous grabbing.
Please refer to the corresponding documentation for information about additional changes, especially whether a new revision of the corresponding device driver is required.
-
The following HALCON image acquisition interfaces have been
revised since HALCON 9.0.2:
-
Legacy Image Acquisition Interfaces:
-
The following HALCON 10.0 image acquisition interfaces are now only
available in the Legacy download area:
- BaumerFCAM
- dPict
- FALCON
- FlashBusMX
- mEnableIII (it is recommended to use the SiliconSoftware interface instead)
- mEnableIV (it is recommended to use the SiliconSoftware interface instead)
- mEnableVisualApplets (it is recommended to use the SiliconSoftware interface instead)
- PXC
- PXR
- TAG
The following HALCON image acquisition interfaces are no longer supported for HALCON 10.0:- 1394IIDC for Linux (it is recommended to use the 1394IIDC-2 interface instead)
- DFG-BW
- DFG-LC
- DT315x
- DT3162
- eXcite
- FlashBusMV
- Ginga
- iPORT
- p3i4
- PX
- PXD
- RangerC (it is recommended to use the SICK-3DCamera interface instead)
- RangerE (it is recommended to use the SICK-3DCamera interface instead)
- SonyXCI (see also the SonyXCI-2 interface)
-
The following HALCON 10.0 image acquisition interfaces are now only
available in the Legacy download area:
Documentation
-
Installation Guide:
The Installation Guide is available in a new edition. It has been adapted to the changes in HALCON 10.0.
-
Quick Guide:
The Quick Guide is available in a new edition. It has been adapted to the changes in HALCON 10.0. Amongst others, a new section shows a typical application from the solar industry.
-
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 10.0. Amongst others, it describes
- the new Measure Assistant,
- the new global variables,
- the new Line Profile tool, and
- the new ROI tool.
In addition to the PDF version, the HDevelop User's Guide is now completely available in HTML.
-
Solution Guide I (Basics):
The Solution Guide I (Basics) is available in a new edition. It has been adapted to the changes of HALCON 10.0. Amongst others,
- the chapter about template matching has been renamed to matching and it has been extended with the new local deformable matching,
- the chapter about OCR has been extended with the available fonts and the new smart text finder,
- the chapter about stereo vision has been extended to describe also the new multi-view camera calibration and multi-view stereo reconstruction, and
- the chapter about 3D matching has been revised to provide an overview on the shape-based 3D matching and the new surface-based 3D matching. The details that were previously described for shape-based 3D matching have been moved to the Solution Guide on 3D Vision.
-
Solution Guide II+III (Advanced):
-
Solution Guide II-B on Matching:
HALCON has been extended with a new Solution Guide II-B on Matching. This Solution Guide describes all 2D matching approaches that are available in HALCON 10.0. It replaces the former Solution Guide II-B on Shape-Based Matching.
The HDevelop example programs that were used for the Solution Guide on Shape-Based Matching and that are still used by the Solution Guide on Matching have been moved from the directory solution_guide /shape-matching to the directory solution_guide/matching. -
Solution Guide II-D on Classification:
The Solution Guide II-D on Classification is available in a new edition. It has been extended with a description of the new LUT-accelerated classification.
-
Solution Guide III-C on 3D Vision:
The Solution Guide III-C on 3D Vision is available in a new edition. It has been revised as follows:
- The introductory chapter has been updated and revised to guide more conveniently through the different methods related to 3D vision.
- The sequence of the chapters has been revised so that the methods for 3D reconstruction occur in sequence and all auxiliary methods have been moved to the end of the guide.
- The chapter that describes the 3D pose estimation has been revised so that also the shape-based 3D matching, the new surface-based 3D matching, and the new 3D primitives fitting are introduced. For that, parts of the description for shape-based 3D matching that were previously described in the Solution Guide Basics have been moved to the Solution Guide on 3D Vision.
- The chapters that describe the camera calibration and stereo vision have been extended to describe the new multi-view camera calibration and multi-view stereo reconstruction.
- A new chapter has been added that describes how to use depth from focus.
Additionally, the name of the directory for the HDevelop example programs that are used for the Solution Guide on 3D Vision has been renamed from solution_guide/3d_machine_vision to solution_guide/3d_vision.
-
Solution Guide II-B on Matching:
-
Programmer's Guide:
The Programmer's Guide is available in a new edition. It has been adapted to the changes in HALCON 10.0. Amongst others, the chapter on parallelization has been adapted to the new operators for automatic operator parallelization and the new functionality of HDevEngine has been integrated.
Furthermore, the index has been revised and is now also available in the tab Index of HDevelop's help browser.
-
Extension Package Programmer's Manual:
The Extension Package Programmer's Manual is available in a new edition. It has been adapted to the changes in HALCON 10.0 like the new names of the help files and the syntax-independent HTML help files.
-
Reference Manual:
-
The chapter structure in which the HALCON operators are arranged in the HALCON
reference manual and in the HDevelop operator menu has been reorganized.
Note that following this new structure, also the chapter structure for the HDevelop example programs in the subdirectory hdevelop has been reorganized. Additionally, the chapter structure for the application-specific HDevelop examples in the subdirectory hdevelop/Applications has been revised to correspond to HALCON's common application areas. - The operator reference is now available in a single version, i.e., it is independent from the syntax. This holds for the HTML and the PDF version. In the HTML version, the language interfaces can be switched, whereas for the PDF version, the HDevelop syntax is used.
- The HTML version and the PDF version of the HALCON reference manual are now available in Japanese.
- The reference manual entries of create_bar_code_model and create_data_code_2d_model have been extended with references to the standards used for the individual bar code or data code types.
- The reference manual entry of create_funct_1d_pairs now states that the ascending order of the x-values is examined in their double representation. Some other operators like sample_funct_1d apply the same check but use the float representation of the x-values. For this reason, the error handling of both operators might differ. The documentation has been extended accordingly.
- The reference manual entry of hysteresis_threshold stated no or incorrect value restrictions in the parameters Low and High. This problem has been fixed.
- The reference manual entries of set_system and get_system have been revised regarding form and content.
- The reference manual entry of svd_matrix, eigenvalues_symmetric_matrix, and eigenvalues_general_matrix has been extended.
- The reference manual entries of trainf_ocr_class_mlp and trainf_ocr_class_svm have been extended with more information on how to avoid an error that may occur when selecting 'canonical_variates' with too few training samples.
- The documentation of the parameters of tuple_rand, tuple_mean, and tuple_deviation was incorrect. tuple_rand does not support a real value in the parameter Length. tuple_mean and tuple_deviation do not support strings in the parameter Tuple. These problems have been fixed.
- The reference manual entry of vector_to_pose has been adapted to the obsolete parameter value 'planar_analytic_svd' of the parameter Method.
-
The chapter structure in which the HALCON operators are arranged in the HALCON
reference manual and in the HDevelop operator menu has been reorganized.
Supported Operating Systems
-
Windows:
HALCON 10.0 has been compiled in the following Windows versions:
- x86-win32 version for Windows XP/2003/Vista/7 on Intel Pentium or compatible processors without SSE2 instructions
- x86sse2-win32 version for Windows XP/2003/Vista/7 on x86 processors with SSE2 extension, e.g., Intel Pentium 4 / AMD Athlon64 or newer
- x64-win64 version for Windows XP/2003/Vista/7 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 architecture.
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).
-
Linux:
HALCON 10.0 has been compiled in the following Linux versions:
- 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-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-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-gcc40, x86sse2-linux2.4-gcc40, x64-linux2.4-gcc40) and use it to extend the environment variables PATH and LD_LIBRARY_PATH (see the Installation Guide for more information).
-
Solaris:
HALCON 10.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
-
General:
-
The usability of HALCON has been increased with respect
to the security features of Windows Vista and Windows 7.
In particular,
- hcheck_parallel can now be executed without requiring elevation to Administrator,
- all executables (*.exe) and libraries (*.dll) are now signed by MVTec using a digital certificate, in particular, the uninstaller is now also signed, and
- because some examples require write permissions in their respective directory, for Windows Vista/7, they are now by default installed into the directory for shared user documents. The new environment variable %HALCONEXAMPLES% is set accordingly. It is used by HDevelop to locate examples. Examples that made use of %HALCONROOT% to locate files under the example directory tree have been adapted accordingly.
-
The use of spin locks and/or license errors during the
initialization can now be controlled via C-style API setters,
which allow to configure the behaviors from within all common
development environments without requiring a wrapper dll.
For HALCON/.NET, the use of spin locks can now be controlled directly via the HalconAPI class. -
hbench has been extended and is now available as revision 3.0.
Amongst others,
- it provides a new run mode 'compute device' to benchmark compute devices,
- it provides a new benchmark 'filter' to show the performance of compute devices,
- it provides a new benchmark 'operator' to show the performance of different HALCON operators,
- it now supports all combinations of run modes and benchmarks, and
- the benchmark 'memory' now benchmarks also compute devices.
Further information is available via hbench -help.
-
The usability of HALCON has been increased with respect
to the security features of Windows Vista and Windows 7.
In particular,
-
Installation:
- Under Windows Vista and higher, the installer now offers to install HALCON examples into the directory for shared user documents and sets the variable %HALCONEXAMPLES accordingly.
- The installer GUI is now also available in German and Japanese. The language will be selected automatically based on the operating system language.
- The installer now offers to install the GigE Vision Streaming Filter 1.0.5 under Windows.
- If HALCON has already been installed, it is now possible to install drivers and change the language of the installed documentation by executing the installer a second time.
- Under Windows, new versions of the dongle drivers are included: HASP 5.86 and Sentinel 7.6.1.
- Now, the official runtime version of GenICam v2.1 is included. The corresponding files are located in the directory genicam under %HALCONROOT%.
-
Licensing:
HALCON now uses version 11.8 of the FLEXnet Publisher license manager software.
-
Example Images:
For several of the new HDevelop example programs, new images are available:
- The new images 25interleaved_exposure_* from the subdirectory images/barcode/25interleaved are used in the example that shows how to use the new functionality to return diagnostic status messages for the bar code reader.
- The new images 3d_primitives_xyz_* from the subdirectory images/3d_machine_vision/segmentation are used in the examples that show how to use 3D primitives fitting.
- The new images barcode_mixed_* from the subdirectory images/barcode/mixed are used in the examples that show how to read multiple bar code types in one call to find_bar_code (autodiscrimination).
- The new images bottle_label_* from the subdirectory images/ocr are used by one of the examples that show how to use the new operators for text segmentation.
- The new images brake_disk_bike* from the subdirectory images/brake_disk and bracket_tilted_* from the subdirectory images/metal-parts are used in the examples that show how to use the new functionality to create a perspective deformable model from XLD contours and to derive the polarity of the model edges from an image after a first successful match.
- The new images cocoa_packages_* from the subdirectory images/food are used in one of the examples that show how to use the new parameter value 'max_deformation ' for the parameter SubPixel.
- The new images images/gasket/gasket*, images/food/cocoa_package*, and images/food/peanut_chocolate_candies_* are used in the examples that show the new matching approach that finds locally deformable models.
- The new images multi_view_calib_cam_* from the subdirectory images/3d_machine_vision/multi_view are used in one of the examples for the new multi-view camera calibration and in the examples for the new multi-view stereo reconstruction.
- The new images multi_view_pipe_joints_cam_* from the subdirectory images/3d_machine_vision/multi_view are used in the examples for the new multi-view stereo reconstruction and in the examples for the new surface-based 3D matching.
- The new images engine_cover_xyz_* from the subdirectory images/time_of_flight are used in the examples that show how to use the new surface-based 3D matching.
- The new image qr_version_25.png from the subdirectory images/datacode/qrcode is used in the example that demonstrates the improved robustness of the QR code reader related to distortions like local deformations.
- The new images tile_spacers_color_* from the subdirectory images/tile_spacers are used by the example that shows how to use the new generic parameter 'lowest_model_level' for shape-based 3D matching.
- The new images tile_spacers_*.png from the subdirectory images/tile_spacers are used in the example that shows how to use the new metric 'ignore_part_polarity' for shape-based 3D matching.
-
The following new images are used by the new examples that show selected applications and HALCON features in detail:
- ampoules_* from the subdirectory images/ampoules,
- ball_bond_ccd_*, ball_bond_lead_frame_*, wedge_bond_chip_*, and wedge_bond_chip_model from the subdirectory images/bonds,
- cd_print, wafer_semi_font_*, and yogurt_lid_* from the subdirectory images/ocr,
- diamond_* from the subdirectory images/diamond,
- die_pads_* and die_* from the subdirectory images/die,
- engine_part_* and engine_part_model.reg from the subdirectory images/automotive,
- fish_sticks_raw_* and fish_stick_package_* from the subdirectory images/food,
- focus_bga_* and focus_pcb_solder_paste_* from the subdirectory images/dff,
- grid/grid_* from the subdirectory images,
- pdf417_bottle_* from the subdirectory images/datacode/pdf417,
- pcb_color from the subdirectory images,
- plan_* from the subdirectory images,
- plastics_* from the subdirectory images/plastics,
- smd_tilted_*, smd_samples, and smd_backlight_* from the subdirectory images/smd,
- solar_cell_* from the subdirectory images/solar_cell,
- square_tube_* from the subdirectory images/square_tube,
- targets_l and targets_r from the subdirectory images/stereo/targets, and
- wafer_dies, wafer_rotated, and wafer_mirror_dies_* from the subdirectory images/wafer.
The following images have been changed:
- The image sequence images/bicycle/bicycle_*.png that is used by a set of HDevelop examples has been converted from color images to gray images.
- The images die* from the subdirectory images have been moved to the subdirectory images/die.
- The images smd_capacitors_* from the subdirectory images/smd_capacitors have been moved to the subdirectory images/smd.
- The images smd_on_chip_* from the subdirectory images/smd_on_chip have been moved to the subdirectory images/smd.