Release Notes for HALCON 12.0
This document provides the release notes for MVTec HALCON 12.0, as released in November 2014.
- Major New Features of HALCON 12.0
- Compatibility
- Detailed Description of Changes in HALCON 12.0 (relative to HALCON 11.0.3)
Major New Features of HALCON 12.0
General Features
Identification and Classification
- HALCON now provides an automatic text reader that is able to segment and read characters of any size robustly without the need for extensive parameter tuning.
- The MLP-based classifiers (for general classification and for OCR) now provide a mechanism to regularize the weights of the MLP to enforce smoother transitions of the confidences between classes and to prevent overfitting.
- The MLP-based classifiers (for general classification and for OCR) now provide a mechanism to automatically generate a rejection class.
- The MLP-based classifiers (for general classification and for OCR) now provide a mechanism automatically determine the regularization parameters.
- HALCON has been extended with the pretrained OCR fonts 'Document' and 'Industrial' with regularized weights and a rejection class.
- HALCON now provides improved robustness of the sample-based identification.
- HALCON now provides improved robustness of the bar code reader.
- HALCON now enables to assess the direct part mark quality of an Data Matrix ECC 200 code, compliant with the SEMI T10-0701 standard.
Camera Calibration
- HALCON now supports new easy to use calibration plates.
- HALCON now provides a camera model for tilt lenses (also called Scheimpflug optics) both for regular lenses and for bilaterally telecentric lenses.
Hand-Eye Calibration
- HALCON now supports the calibration of SCARA (Selective Compliance Assembly Robot Arm) robots.
Sheet of Light
- HALCON now provides operators to support sheet-of-light calibration with a 3D calibration object.
Surface-Based 3D Matching
- HALCON now provides a deformable surface-based 3D matching that finds objects and determines their poses and deformation in 2.5D as well as in 3D data.
- Surface-based matching is now more robust when matching in noisy data, such as data from time-of-flight cameras.
3D Vision
- HALCON now provides a new operator to simplify a triangulated 3D object model by removing less important points.
- HALCON now provides a new interface for the visualization of 3D object models.
I/O Devices
- HALCON now provides a generic interface for accessing I/O devices.
- HALCON has been extended with an I/O interface for OPC UA that allows reading and writing data to and from OPC UA servers and with an I/O interface for OPC Classic that allows reading and writing data to and from OPC Classic servers. The interfaces allow to communicate with virtually every PLC.
- HALCON has been extended with four ready-to-use I/O interfaces for I/O boards of Advantech, Contec, Interface, and National Instruments that allow the easy controlling of digital input and digital output devices.
Speedup
- HALCON now exploits the AVX2 instruction set under Windows and Linux. This leads to a significant speedup on machines that support the AVX2 instruction set.
- Various HALCON operators have been speeded up.
Further Enhancements
- HALCON now provides an operator to compute the pointwise distance of contours.
- HALCON now provides operators to measure and inspect adhesive beads.
- HALCON now provides operators for binocular stereo that solve the stereo correspondence using multi-scanline optimization.
- HALCON now provides operators to calculate the scene flow (a representation of the 3D motion of points in a scene) of two consecutive stereo image pairs.
- HALCON now provides operators for inter-thread communication
- HALCON now provides event-based interaction with drawing objects.
- The new binary file format HOBJ supports all kinds of iconic HALCON objects, i.e., images, regions, and XLDs.
- Several operators have been revised to be reentrant.
IDE
- HDevelop now supports vector variables, i.e., containers that may contain multiple tuples, multiple iconic objects, or multiple vectors.
- HDevelop now allows to execute several operators and procedures in parallel.
- HDevelop now provides a new inspection window to graphically visualize functions and numeric tuples as 1D or 2D plots.
- HDevelop now provides a Start dialog.
- HDevelop has been given a new look.
- HALCON now provides an extension for Visual Studio that allows to inspect the contents of HALCON variables directly in the debug mode of Visual Studio.
Language Interfaces
- HDevEngine and HDevelop now provide a just-in-time (JIT) compiler that - depending on the code structure - may significantly accelerate the runtime of HDevelop procedures.
Compatibility
Licenses
All HALCON 11.0 licenses or licenses of earlier versions must be replaced or upgraded. Please contact your local distributor.
HDevelop
- The default behavior regarding the export of single external procedures via command line with the option -convert has been changed. Now, if the procedure contains references to other external procedures, the implementation of the referenced procedures is exported by default. In order to obtain the previous default behavior, where only the declarations of referenced procedures were exported, the option -no_export_of_referred_procs must be used.
- HDevelop now supports the handling of different preferences files. Consequently, the old HDevelop command line option -preferences is deprecated but will still be supported for compatibility reasons.
HALCON Library
Compared to HALCON 11.0, many extensions have been introduced. Thus, the HALCON 12.0 libraries are not binary compatible with HALCON 11.0.x or earlier versions. However, HALCON 12.0 is mostly source-code compatible to HALCON 11.0.x except for the changes listed below:
-
The following pretrained OCR fonts
are no longer part of HALCON:
- Document.omc,
- Document_0-9.omc,
- Document_0-9A-Z.omc,
- Document_A-Z+.omc,
- Industrial.omc,
- Industrial_0-9.omc,
- Industrial_0-9+.omc,
- Industrial_0-9A-Z.omc, and
- Industrial_A-Z+.omc.
- create_text_model is now legacy and is only provided for compatibility reasons. Existing applications that use create_text_model do not need to be adapted. New applications should use the new operatorcreate_text_model_reader instead. The behavior that is obtained with text models that were created by create_text_model can be obtained by calling create_text_model_reader and setting Mode to 'manual'.
- Because of the fix of a problem with prepare_sample_identifier that occurred when an identical set of preparation images was added to a sample identifier multiple times by using add_sample_identifier_preparation_data, the resulting prepared sample identifier slightly differs from the sample identifier that was prepared with previous HALCON versions with the same set of preparation images. Consequently, the sample-based identification may show a slightly different behavior compared to previous HALCON versions.
- Because of a modification of the influence of the parameters 'element_size_min' and 'element_size_max' on the bar code reader, it may be necessary to check existing bar code applications. It may be necessary to adapt the values of these two parameters to suit the application at hand. You may use the bar code parameter training in order to train the values for both parameters.
- The bar code reader has been extended with the possibility to specify the minimal width of the bar code. In conjunction with this, the parameter 'element_height_min' has been renamed to 'barcode_height_min' and a new parameter 'barcode_width_min' has been introduced. For backward compatibility, 'element_height_min' is still supported. However, note that the lower bound of this parameter has been changed to 3 pixels.
- Because of the improved robustness of the bar code reader, it may be necessary to revise existing bar code applications with respect to parameter settings. Because of the improvements, the resulting candidate regions will not be the same as in earlier HALCON versions and it may be necessary to adapt the settings of the bar code reader to best suit its new behavior. In conjunction with these improvements, the parameters 'max_diff_orient' and 'slanted' have been removed. Although it is still possible to set those parameters, they have no effect on the result of the bar code reader.
-
Because of a fix regarding the
calculation of image pyramids, all operators for the creation
of matching models (e.g., create_shape_model) and for finding these models
in search images (e.g., find_shape_model) may produce slightly different
results. This means that models created with earlier HALCON
versions are not fully consistent with the current find
operators, which may lead to slightly worse matching results.
As a consequence, it is recommended to regenerate all
matching models that have been created or modified with one
of the following operators:
- create_aniso_shape_model,
- create_aniso_shape_model_xld,
- create_component_model,
- create_local_deformable_model,
- create_local_deformable_model_xld,
- create_ncc_model,
- create_planar_calib_deformable_model,
- create_planar_calib_deformable_model_xld,
- create_planar_uncalib_deformable_model,
- create_planar_uncalib_deformable_model_xld,
- create_scaled_shape_model,
- create_scaled_shape_model_xld,
- create_shape_model,
- create_shape_model_3d,
- create_shape_model_xld,
- create_template,
- create_template_rot,
- create_trained_component_model,
- set_local_deformable_model_metric,
- set_planar_calib_deformable_model_metric,
- set_planar_uncalib_deformable_model_metric, and
- set_shape_model_metric.
- The generic parameters 'max_angle_distortion' and 'max_aniso_scale_distortion' of find_planar_uncalib_deformable_model were replaced by the new generic parameters 'angle_change_restriction' and 'aniso_scale_change_restriction'. The old parameters are still supported for backward compatibility.
- Because of relaxed default values for some generic parameters of fit_primitives_object_model_3d and segment_object_model_3d, these operators may return fitted primitives in cases where no results were returned in earlier HALCON versions.
- Because of the introduction of new calibration plates, the signature of create_caltab, which was previously legacy, has been adapted to the design of the new calibration plates. Therefore, create_caltab is not binary compatible to earlier versions of HALCON.
- Because of the change of the default behavior of the procedure visualize_object_model_3d with respect to the use of the currently displayed window content as background for the visualization, you might have to adapt those HDevelop example programs that use the procedure visualize_object_model_3d. If you displayed, e.g., a background image or some messages before the call of visualize_object_model_3d without having set the parameter 'use_background' to 'false', you now must set the new generic parameter 'disp_background' to 'true' explicitly. In addition, if 'use_background' (now: 'disp_background') was set to 'false', the window was cleared when leaving visualize_object_model_3d. Now, the behavior is similar to the case when 'disp_background' is set to 'true', i.e., the 3D object model is displayed in the window. To achieve the old behavior, dev_clear_window must be called explicitly after the call of visualize_object_model_3d.
- For gen_polygons_xld, the methods 'sato' and 'ray' have been deprecated and have been removed from the documentation. They are still supported as undocumented features for backward compatibility. It is recommended that all applications use the method 'ramer'.
- set_grayval
and get_grayvalnow support
complex and vector field images. For these image types, two gray values
must be specified or are returned per pixel.
In previous HALCON versions, get_grayval supported complex images, but handled them by returning the absolute value of the complex number at the requested pixel. Suppose that get_grayval was called as follows:
get_grayval (Image, R, C, V)
To achieve the old semantics, the following lines of code can be inserted after the call to get_grayval (for complex images only):
J := [0:2:|V|-2]
VP := sqrt(V[J]*V[J]+V[J+1]*V[J+1])
If a single pixel is requested, this reduces to:
VP := sqrt(V[0]*V[0]+V[1]*V[1]) - set_system now
throws an exception if a value of a generic parameter was set
outside the allowed range. The affected parameters are
- 'thread_num',
- 'tsp_thread_num',
- 'height',
- 'tsp_height',
- 'width',
- 'tsp_width',
- 'current_runlength_number',
- 'tsp_current_runlength_number',
- 'image_dpi',
- 'graphic_stack_size', and
- 'int2_bits'.
- Iconic HALCON objects that have been serialized with HALCON 12 or higher cannot be deserialized by older HALCON versions, because serialize_object uses the new binary HOBJ format internally.
- The error codes returned by approx_chain in case of invalid input parameters MinWidthCoord or MinWidthSmooth have been changed. Instead of the error code 10000 ("unknown extension error"), now the error codes 1303 ("Wrong value of control parameter: 3") and 1308 ("Wrong value of control parameter: 8") are returned. Programs that evaluate the returned error codes must be adapted accordingly.
- Because of a fix concerning an error code that may be returned by programs that evaluate the error code returned by these operators must be adapted. Now, instead of the error code 9003 ("Undefined gray values") the error code 3359 ("Wrong number of image channels") is returned if the image to be decomposed does not have enough channels. Programs that evaluate the returned error codes must be adapted accordingly.
- The error code that is returned by disp_object_model_3d if the index appended to a generic parameter name is invalid has been changed. Instead of the error code 1306 ("Wrong value of control parameter: 6"), now the error code 1305 ("Wrong value of control parameter: 5") is returned. Programs that evaluate the returned error codes must be adapted accordingly.
- In the case of a closed socket on the sender side, now return the error code 5606 ("Error while reading from socket") instead of the error code 5617 ("No data on socket"). Programs that evaluate the error codes returned by these operators must be adapted accordingly.
- The error code returned by vector_to_pose has been changed. Instead of the error code 10052 ("unknown extension error"), now the error code 9205 ("Matrix is singular") is returned. Programs that evaluate the error codes returned by vector_to_pose must be adapted accordingly.
- For consistency, the information associated with an error should be always described as "error code" and "error message". Therefore, "error number" and "error text", which have been used in the exception management of HALCON/C++, HALCON/.NET, and HDevEngineCpp, have been replaced with "error code" and "error message", respectively. For reasons of clarity, abbreviated slot names, such as 'error_msg', 'add_error_msg', and 'proc_line', as used in dev_get_exception_data and GetExceptionData, have been replaced with 'error_message', 'add_error_message', and 'program_line', respectively. Note that for compatibility reasons, the abbreviated slot names are still supported.
- The HTuple class in HALCON/.NET now features a bool constructor. In rare cases this could make existing source code ambiguous (if a tuple was created from an unsupported type that allows cast to bool and exactly one other supported type). To fix this, introduce an explicit type cast.
-
The segnatures of some operators have been changed in the following language interfaces:
HALCON/C++:- HXLD::GetRectanglePose and HPose::CreateCamPoseLookAtPoint now returns HPoseArray instead of HPose.
- HObjectModel3D::SmallestSphereObjectModel3d(double* Radius) now returns HTuple instead of double.
- HXLD.GetRectanglePose and HPose.CreateCamPoseLookAtPoint now returns HPose[] instead of HPose.
- HObjectModel3D.SmallestSphereObjectModel3d now returns HTuple instead of double.
- Herror smallest_sphere_object_model_3d(const HTuple& ObjectModel3D, double* CenterPoint, double* Radius) is not provided anymore.
- Herror smallest_sphere_object_model_3d(const Hlong ObjectModel3D, double* CenterPoint, double* Radius) is not provided anymore.
- The semantic type of the parameter ObjInCameraPose of set_calib_data_observ_pose and get_calib_data_observ_pose has been changed. Therefore, in HALCON/C++ and HALCON/.NET, SetCalibDataObservPose and GetCalibDataObservPose now set and return HPose instead of HTuple, respectively.
HALCON Applications
Please re-compile all C, C++, .NET, or COM programs developed with HALCON 11.0.x.
The incompatibility with HALCON 11.0.x or earlier versions mainly concerns the binaries, with only few changes in the language interfaces. If you encounter problems during recompiling your programs, please check the detailed description of changes below.
Image Acquisition Interfaces
The system requirements of the following image acquisition interfaces have been changed since HALCON 11.0.3:
- For using the updated Opteon interface you must install the new v5.0 of the Opteon software distribution.
- For using the updated pylon interface you must install the new version 4.2 of the Basler pylon camera software suite.
- For using the updated SICK-3DCamera interface you must install the new SICK icon API 4.4.3 and, for ethernet cameras, the eBus driver 3.1.
If you have developed your own acquisition interfaces with HALCON 11.0.x, you can re-generate them with HALCON 12.0.
Extension Packages
Please re-generate your own extension packages developed with HALCON 11.0.x.
No Longer Supported Operating Systems and Platform Versions
- Since Windows XP is now officially discontinued by Microsoft, HALCON no longer supports Windows XP.
- HALCON no longer supports Visual Studio 6.
-
HALCON no longer supports the Linux platform versions
x86sse2-linux2.4-gcc40
andx64-linux2.4-gcc40
. - HALCON no longer supports Mac OS X 10.7.
Legacy or No Longer Supported Features
Note that legacy operators may be discontinued in a future major release. See the reference manual entries of these operators for details on how to replace them.
-
The following HDevelop functionality became
legacy:
- The export to the HALCON/C++ (HALCON-10) interface is now legacy.
- Saving HDevelop programs and procedures to the old HDevelop 5.0 - 9.0 file format (file extensions .dev and .dvp) is now legacy.
- The HALCON Codelets are now legacy. They are still available, but they have not been updated to new features of HALCON 12. When using applications with HALCON Codelets only features of HALCON 11 may be used.
-
The following operators became legacy:
- bin_thresholdis now legacy.
- create_text_modelis now legacy.
- gauss_imageis now legacy .
-
The following
close_all_* and clear_all_* operators are now legacy:
- clear_all_bar_code_models,
- clear_all_barriers,
- clear_all_calib_data,
- clear_all_camera_setup_models,
- clear_all_class_gmm,
- clear_all_class_knn,
- clear_all_class_lut,
- clear_all_class_mlp,
- clear_all_class_svm,
- clear_all_class_train_data,
- clear_all_color_trans_luts,
- clear_all_component_models,
- clear_all_conditions,
- clear_all_data_code_2d_models,
- clear_all_deformable_models,
- clear_all_descriptor_models,
- clear_all_events,
- clear_all_lexica,
- clear_all_matrices,
- clear_all_metrology_models,
- clear_all_mutexes,
- clear_all_ncc_models,
- clear_all_object_model_3d,
- clear_all_ocr_class_knn,
- clear_all_ocr_class_mlp,
- clear_all_ocr_class_svm,
- clear_all_sample_identifiers,
- clear_all_scattered_data_interpolators,
- clear_all_serialized_items,
- clear_all_shape_model_3d,
- clear_all_shape_models,
- clear_all_sheet_of_light_models,
- clear_all_stereo_models,
- clear_all_surface_matching_results,
- clear_all_surface_models,
- clear_all_templates,
- clear_all_text_models,
- clear_all_text_results,
- clear_all_training_components,
- clear_all_variation_models,
- close_all_bg_esti,
- close_all_class_box,
- close_all_files,
- close_all_framegrabbers,
- close_all_measures,
- close_all_ocrs,
- close_all_ocvs,
- close_all_serials, and
- close_all_sockets.
-
The following file formats became legacy:
- The file format IMA, which was used for image data, is now legacy and the new file format HOBJ should be used instead.
-
The following image acquisition interfaces are no
longer supported for HALCON 12.0:
- dPict
- INSPECTA-5
- MatrixVision
- SonyXCI-2
- SVCam-GigE
- Leutron
-
The following image acquisition interfaces are now
legacy:
- 1394IIDC-2
- INSPECTA
- OpenNI
- p3i2
- PcEyeCL
-
Some example programs have been
removed.
-
The HDevelop example programs
- hdevelop/Applications/Security-Systems/movement.hdev and
- hdevelop/Applications/Security-Systems/movement_bg.hdev
-
The HDevelop example programs
-
Some images have been removed.
- The example image woodcell.png in the directory %HALCONIMAGES% was not used by any example program and, thus, has been removed from the set of installed example images. Furthermore, the example images calib_image_[01-07].png in the directory %HALCONIMAGES%/3d_machine_vision/calib are not used by any example program and, thus, have been removed from the set of installed example images.
Detailed Description of Changes in HALCON 12.0 (relative to HALCON 11.0.3)
Detailed release notes can be obtained for the following topics:
- HDevelop
- HALCON Library
- HALCON
- HALCON/C
- HALCON/C++
- HALCON/C++ (Legacy)
- HALCON/.NET
- HDevEngine
- HALCON Codelets
- Image Acquisition Interfaces
- Documentation
- Supported Operating Systems
- Miscellaneous
HDevelop
HDevelop Language
-
HDevelop now supports the new variable type 'vector'. Vector
variables are containers that may contain multiple tuples,
multiple iconic objects, or multiple vectors. Note that all
elements of a vector variable must have the same type and
dimension. The type of vector variables and expressions is
determined statically in HDevelop like for all other
variables and expressions.
The HDevelop language has been extended with constructs for- the creation of vectors: {...},
- read and write access to vector elements: .at(),
- the assignment and comparison of two vectors: :=, ==, and !=,
- the modification of vectors: .insert(), .remove(), and .clear(),
- the concatenation of two vectors: .concat(), and
- for querying the length of a vector: .length().
- executable_expression(), which makes it possible to use modifying vector methods like an operator,
- convert_tuple_to_vector_1d(), and
- convert_vector_to_tuple().
HDevelop supports the export of vector variables to C, C++, C#, and Visual Basic .NET, and the language interfaces have been adapted accordingly.
The HDevEngine/C++ and HDevEngine/.NET interfaces have been adapted to support vector variables.
The new HDevelop example program- hdevelop/Control/vector_variables.hdev
The new HDevelop example program- hdevelop/Control/align_measurements_multithreading.hdev
The new HDevEngine/C++ example program- hdevengine/cpp/source/use_vector_variables.cpp
Furthermore, the new HDevEngine/.NET example project UseVectorVariables under hdevengine/c# demonstrates the use of vector variables in C#.
Both examples use the new HDevelop program- hdevengine/hdevelop/use_vector_variables.hdev
- hdevengine/procedures/use_vector_variables.hdvp.
-
HDevelop now allows to execute several operators and
procedures in parallel. For this, the HDevelop language was
extended by new statements that control the parallel program
execution.
- par_start is a qualifier that is added to a program line in order to execute the procedure or operator call in a new sub thread in parallel to the current thread. It returns a thread handle.
- par_join is a new operator that waits for specified sub threads in order to synchronize the continuation of the main thread with the sub threads.
As a default, HDevelop supports the execution of up to 20 sub-threads in parallel. This value can be changed in the Preferences dialog via the option: General Options / General Options / Maximum number of sub threads.
HDevelop supports the export of parallelization instructions to C, C++, C#, and Visual Basic .NET.
The HDevEngine also supports the starting of sub threads from within an HDevelop script.
The new HDevelop example programs- hdevelop/Control/par_start.hdev,
- hdevelop/Control/align_measurements_multithreading.hdev,
- hdevelop/System/Multithreading/message_queue_producer_consumer.hdev, and
- hdevelop/System/Multithreading/message_queue_producer_consumer_abort.hdev
The example program par_start.hdev uses the new image- barcode/mixed/barcodes_datacodes_mixed_01.png.
Functionality
-
HDevelop and the HDevEngine have been extended with a just-in-time (JIT)
compiler that - depending on the code structure - may significantly
accelerate the runtime of HDevelop procedures. Especially procedures with
loops and many calculations that are implemented in HDevelop language
will benefit from that. However, there are some statements that are not
supported by the JIT compiler. Procedures using these statements are
executed as before without compilation. In HDevelop, also procedures with
breakpoints and stop statements are not executed JIT-compiled. Details
can be found in the documentation within the HDevelop User's Guide. It is
possible to enable and disable the use of the JIT compiler globally - in
HDevelop via the Preferences dialog and in HDevEngine via the method
HDevEngine::SetEngineAttributes.
The new HDevelop example program- hdevelop/Runtime/test_jit_speedup.hdev
The new HDevEngine/C++ example program- hdevengine/cpp/source/use_jit_compiler.cpp
Furthermore, the new HDevEngine/.NET example project UseJitCompiler under hdevengine/c# demonstrates the use of this functionality in C#. -
HALCON has been extended with a Start dialog which provides
the following functions:
- It enables the user to
- start with a new program,
- open an existing program,
- open the Browse Examples dialog and start with one of the example programs,
- open a recovered program, and
- open one of the recently used programs.
- It helps the user to get started by providing examples of how to work with HALCON and HDevelop.
- It provides an entry point to the documentation to easily get more information about HALCON and HDevelop.
- It informs the user
- with news about MVTec and its products and
- with a Tip of the Day.
- It enables the user to
-
HDevelop now features a new inspection window to graphically visualize
functions and numeric tuples. For bona fide functions (semantic type
function_1d), this is the default inspection mode when double-clicking on a
variable in the Variable View window.
Tuples of numbers can be plotted by selecting "Plot as Function" from the context menu. Multiple tuples and functions can be inspected simultaneously in a single inspection window. A pair of tuples of matching length can be plotted as an x/y scatter plot.
Finally, it is possible to generate HDevelop code for plotting functions and tuples in a HALCON window. - In HDevelop, the runtime of assignment operations and the passing of tuple parameters to procedures scaled with the size of the input tuple. For large tuples, these operations could use significant amount of time. Now, only a reference to the tuple and not a copy is passed to the result of an assignment operation or as input to a procedure. This reduces the runtime of operations with large tuples significantly.
- Starting with HALCON 12.0, the HDevelop demo version is no longer provided. As a side-effect of this change HDevelop programs are now always saved without a checksum, and the corresponding option in the HDevelop preferences has been removed.
- dev_open_tool has now been extended to throw an error if wrong values for the parameter GenParamValues are used for pages in the Preferences dialog and the Program Line View.
- For complex and vector field image types, the full gray value information is now displayed, consisting of two values per channel. Previously, pixel information was not supported for vector fields and for complex images only the absolute value of each channel was shown.
-
In previous versions, HDevelop used any occurrence of a
variable to determine its type, regardless whether the value
of the variable was set by this expression or not. If
different occurrences resulted in conflicting variable types,
the variable type was chosen according to the first
occurrence and all program lines that indicated a different
type became invalid.
However, this behavior leads to some undesired effects:- Not all program lines that were involved in a type conflict were marked as invalid.
- Which program lines were marked as invalid depended on the order in which they were edited or loaded.
- Variables that were never initialized were only noticed during the program execution.
As a side effect, the type of variables that were never initialized cannot be determined, and thus, this error becomes obvious before executing a program.
In addition, incomplete or syntactically incorrect lines will no longer be used to create a variable and determine its type. -
HDevelop now supports the handling of different preferences
files. Besides the use of the default preferences file that is
stored in the user's application data folder (e.g., under
Windows in
C:\Users\<UserName>\AppData\Roaming\MVTec\HDevelop.ini),
the user can now use a different file via the new HDevelop
command line option -use_preferences <file>. This file is
used instead of the default file for reading and writing of all
HDevelop preferences within the current HDevelop session. If
this file is unavailable, it is created and HDevelop is
started with all preferences set to the defaults values.
In addition, the new command line option -load_preferences <file> is available for loading the preferences exclusively from one specific file, e.g., for starting always with a defined environment. If this option is passed, only those preferences that are set within the passed file are adopted - all other preferences are set to the default values. The passed file is not modified, instead of that the preferences are written to the default file or to the file that is passed with -use_preferences.
Finally, the old option -preferences was renamed into -add_preferences <file> to clarify that the preferences that are defined in this file are loaded after the default preferences file (or the file passed after -use_preferences). Only the preferences that are defined in this file will be adopted. The old option -preferences is deprecated but will still be supported for compatibility reasons. - HDevelop did not save all persistent settings into the file HDevelop.ini. Under Windows, some settings, e.g., the paths of the recently opened files, were written into the registry. To make it possible to copy the persistent settings from one system to another, now all persistent settings are written to the file HDevelop.ini.
-
The GUI of HDevelop has been improved in several ways:
- The main tool bar of HDevelop has been cleaned up, i.e., some tool buttons have been removed.
- Under Windows, the default font of the Program Editor is now 'consolas'.
- The Program Editor provides the new color scheme 'Dark'.
- The current program line is highlighted in the Program Editor.
- Lines with type conflicts are now marked in a different color.
- The background in the workspace has been darkened.
- HDevelop now uses a Windows 8 style to draw its sub-windows under Windows. The old style can be selected by specifying one of the --style options on the command line.
- New icons are used for the HDevelop executable, the Help window, and the HDevelop program and procedure files.
-
The HDevelop help window has been updated with the following
changes:
- The page display now supports actual zooming instead of simply changing the font size (note that the font size can still be changed in the HDevelop preferences). A new option is available to determine whether the selected font should override the default font that is specified in the documentation pages.
- The syntax selection in the operator reference now works in the same way as in a browser via links within in the page. The syntax selection box in the toolbar has been removed.
- The current location is now displayed in the tool bar, and link targets are displayed in the status bar. Links can be copied or opened in an external browser via the context menu
- External links (e.g., to MVTec website) will be redirected to an external web browser.
- Procedure documentation pages now show the full procedure path.
- Page layout / rendering may differ slightly from earlier versions.
- The keyboard navigation in the Help window has been improved. After searching for help on the Operators, Index, or Search tabs, the results can now be selected using the Up and Down arrow keys, while the cursor and focus remain in the search box for further editing. The content for selected items will be displayed immediately. On the Index tab, it is also possible to navigate subtopics using Ctrl-Up and Ctrl-Down.
- In HDevelop's OCR Training File Browser it took very long to load and act on training files with many samples. Because of this, the sorting was restricted to files with fewer than 1000 samples. If more than 1000 samples existed, sorting was impossible. This has been changed. Now the loading and handling is much faster and the restrictions for the sorting were removed.
-
The plot area used in the Histogram and Line Profile dialogs
has been improved. These improvements also apply to the new
Function Inspect dialog.
Navigation and zooming:- The plot area can be moved by clicking and dragging it.
- Selection lines will only move when dragged from their current position.
- The mouse wheel on the plot area zooms both x- and y-axis by default.
- The mouse wheel on an axis now zooms instead of scrolling.
- The displayed range can be modified by dragging one of the min/max ticks on an axis.
- Keyboard shortcuts have been added for navigation (shift + arrow keys), zooming (+/-), and reset (r).
- The main plot area and both axes can be configured via the context menu.
- Logarithmic scaling is also supported for the x-axis.
- The plot area features an optional background grid.
- Function values are displayed in the plot area, not as a tooltip.
- The axis label area uses the same background color as the plot area.
-
The range handling for Histogram and Line Profile dialogs has
been improved:
The "fixed" mode has been renamed to "user-defined" and will prevent any automatic scale adaption, even when the data changes drastically.
The "adaptive" mode now chooses more useful ranges that remain stable against small variations in the data:- int1, byte, direction, and cyclic images automatically use their maximum data range (e.g., byte images use the range 0 to 255).
- int2, uint2, int4, and int8 images use limits that are based on the actual data range but rounded to powers of two.
- int2 and uint2 images can be forced to an explicit bit range using the set_system() parameter "int2_bits".
- real images and values in the feature histogram use limits that are based on the actual data range, but rounded to values that are round in base 10 (e.g., 0.1, 0.2, 0.5 or 100, 200, 500).
-
The Histogram and Line Profile tools have been streamlined:
- Many common operations can now be performed by direct interaction with the plot area and its context menus. In addition to configuring the plot itself, this also offers control of output to Graphics window, code generation, and feature selection.
- GUI elements that are no longer required have been removed from the main GUI. This includes plot configuration buttons, numeric entry of limits, and selection of range adaption mode.
- All other GUI elements can now be hidden.
- Images with 3 channels are now displayed in RGB mode by default.
- The x-axis can now be switched into logarithmic mode. Note, however, that histogram quantization is still performed using equal-sized linear bins.
- The visible plot area can now be moved freely without restriction to the current data range (with the exception that negative values are not permitted for logarithmic scales).
- In the full text editor, the block end statements are now inserted automatically after the control statement has been inserted. For example, after inserting the 'for' statement, the 'endfor' statement is now inserted automatically.
-
The auto completion in HDevelop's full text editor was
improved in the following ways:
- The auto completion now suggests values after starting a new parameter in a new line after the line continue sign ('\').
- At the beginning of a program line, variables are now suggested, too.
- Within a parameter area after entering a part of a function name, not only those functions that start with the string as prefix are suggested, but also all functions that contain the substring somewhere inside their name.
- Pressing Tab at the end of an assignment operation now opens the suggestion list also in cases where the assignment is already valid but there exist additional possible completions.
- If a function within an expression has more than one parameter, pressing Tab after the first parameter now enters a comma instead of the closing parenthesis.
-
The behavior of HDevelop when canceling drawing operators has been
changed slightly. Now, pressing F9 terminates the drawing operators
identically to the right mouse button. In addition, on Windows and X11
systems, pressing the Esc key cancels the drawing operation without
returning any results.
This behavior is used in the ROI dialog of the Graphics Window, in the Line Profile tool, in the Matching-, Measure-, and OCR-Assistant, and for the following drawing operators: - The procedures are now integrated into the submenus of the Operators menu. They are clearly indicated as procedures by the respective procedure icons.
- If the export mode 'Use HALCON Windows' was selected, HDevelop exported stop operator calls to C# and Visual Basic in the form of calls to the empty function HDevelopStop(). Because there was no real usage for this functionality and for reasons of consistency with other exports, now, HDevelop no longer exports stop operator calls to C# and Visual Basic in export mode 'Use HALCON Windows'.
Legacy and Obsolete Operations
- The export to the HALCON/C++ (HALCON-10) interface is now legacy. The export will remain available for now, but is marked as legacy, which means that it could be discontinued in the next major version. Note that new features of HDevelop like parallel execution and vector variables are not supported by the export to HALCON/C++ (HALCON-10).
- Saving HDevelop programs and procedures to the old HDevelop 5.0 - 9.0 file format (file extensions .dev and .dvp) is now legacy. While the option will remain available for now, all entries that offer the saving or loading of programs or procedures into these file formats are marked as legacy. That means that the saving into these file formats could be discontinued in the next major release. Note that new features of HDevelop like parallel execution and vector variables are not supported by these file formats.
Bug Fixes
- HDevelop crashed if two case statements with the same label were entered in one switch block via the full text editor. This problem has been fixed.
- When catching a user defined exception that was thrown by the throw operator, the user data of the exception returned by dev_get_exception_data could have been wrong. In some cases HDevelop even crashed. This problem has been fixed.
- HDevelop's copy and paste operation inserted unexpected text when the full text editor was used. The copy of an empty line was inserted as a new comment line, i.e., a line with a '*' at its beginning. The copy of read_image () was inserted as read_image (, ). These problems have been fixed.
- If two instances of HDevelop were executed in parallel and if in both instances a program was running that wrote to the preferences file HDevelop.ini, the preferences file could be destroyed so that all preferences were lost. This problem has been fixed.
- In the Operator Window, it can be chosen to automatically insert the end-statements for blocks like for, while, repeat, if, ifelse, try, and switch. This only works if new blocks are inserted but not if an existing block statement is edited. Nevertheless, the respective check box in the Operator Window was always shown, even if it did not work. This problem has been fixed. Now, the check box is only shown if it has an effect.
- After starting HDevelop, the auto save functionality was always deactivated, even if the corresponding checkbox (Edit→Preferences...→General Options→Auto Save) was checked. This problem has been fixed. Note that this problem has already been fixed in HALCON 11.0.3.1.
- The status message of HDevelop sometimes showed no memory usage although the option 'Show memory usage' was enabled. This problem has been fixed.
- The background color in the user-defined color scheme could not be changed. This problem has been fixed.
- After inserting a program line that consists of several text lines connected via backslashes ('\') at the end of the program, the program counter and the text insert marker could have disappeared. This problem has been fixed.
- On some Linux systems using the Window manager Xfce, the Program Editor could lose the focus when the auto completion window was opened. This problem has been fixed.
- In the OCR Training File Browser, copying samples from one training file to another training file did not work correctly. A training sample consists of an image and a region. The image contains the gray values and the region contains the area of the character. When samples were copied from one training file to a different training file, either via drag and drop or via copy and paste, the region data of the character was lost. After this action, the region of the copied image was the full domain, so the image had lost the region information of the character. This problem has been fixed.
- The Generate Sample Variations dialog of the OCR Training File Browser created some training samples twice. This problem has been fixed.
- The Visualize Object Model 3D window froze if several empty and non-empty models were displayed together. This problem has been fixed.
- The HDevelop Help Window sometimes displayed unreadable characters in the title of an operator help file. This problem has been fixed.
- The magnify mode of HDevelop's Graphics window did not work. If that mode was selected via the tool bar of the Graphics window and the left mouse button was pressed, only a black square was displayed instead of an overlay with the magnified part. This problem has been fixed. Note that this problem has already been fixed in HALCON 11.0.3.2.
- The zoom rectangle in the HDevelop Graphics Window was not always visible when dragging. This problem has been fixed.
- The overlay for the Graphics window, which was provided by the Gray Histogram tool for a selected threshold, was not properly cleared for RGB images when switching from single channel mode to RGB mode in the Gray Histogram tool. This problem has been fixed.
- Some tools that allow to draw an ROI in HDevelop added empty components if ROI drawing was immediately canceled using the right mouse button before actually drawing an ROI. This problem has been fixed.
- The selection of variables in the Variable View window may have changed if new variables were added or if existing ones were deleted. This problem has been fixed.
- The Line Profile tool of HDevelop crashed when a Measure Assistant that was connected with the tool was closed via File→Exit and afterwards the input source of the Line Profile tool was changed to Window. This problem has been fixed.
- The Line Profile tool hid behind the Measure Assistant and the Graphics window, when it was opened via the Measure Assistant. This problem has been fixed.
- HDevelop's profiler wrongly counted calls to local, external, or library procedures twice. As a consequence, the profiler also calculated an average execution time for procedures that is only half the size of the actual average execution time. This problem has been fixed.
- The Image Acquisition Assistant might have crashed when picking the VideoForLinux2 Interface on Linux 32-bit platforms. This problem has been fixed.
- The teaching process of the OCR assistant in HDevelop did not work correctly. The segmented characters stored in a training file during the teaching process missed their region information. Only the image data was written to the training file, but not the image and the corresponding region. This problem has been fixed. Now the image data and the region information of the character is stored in the training file.
- The code generation of the OCR Assistant generated wrong code in the case when the text that was found contained more than one line. In this case, the call of clear_text_result was displaced. As a result, the error code 8341 ("Invalid text result") was returned. This problem has been fixed.
- HDevelop's Matching Assistant used a wrong parameter value for Metric when loading a DXF file for the deformable matching. This problem has been fixed. Now 'ignore_color_polarity' instead of 'use_polarity' is used for the parameter Metric if no image is used.
- The layout of the Matching Assistant was not intuitive when descriptor-based or deformable matching was selected. The calibration widgets were sometimes visible and sometimes they were invisible. Furthermore, for deformable matching, the edit control with the model name became smaller when 'Using Image' had been checked. These problems have been fixed. Now. the calibration widgets are always visible and the edit control with the model name is resized as expected.
- The Matching Assistant of HDevelop did not scale the DXF model when the deformable matching was selected. The code generation also did not scale the model. These problems have been fixed.
- The Matching Assistant may have shown an info message that some test images could not be loaded during the loading of settings. This happened when test images were used that have been acquired with the Image Acquisition Assistant. These images have been inserted with names like Image01, Image02. These images cannot be loaded together with the settings because they have not been stored on disk. This problem has been fixed.
- In the Calibration Assistant the 'fill' mode for displaying the plate region did not work. This problem has been fixed.
-
HDevelop crashed when in the Operator window a global variable
was declared that used the name of a procedure parameter as
variable name.
This problem has been fixed. - Using the Tab key or Ctrl+I to fix the indent of a line changed the cursor position if the cursor was inside the leading whitespaces of that line. This problem has been fixed.
- HDevelop crashed when the position of a procedure's parameter was changed in the procedure interface dialog, this change was applied, and the parameter's position was changed again without reselecting the parameter. This problem has been fixed.
- If an HDevelop program or procedure contained two or more identical import statements and if one of these import statements was deleted and if the last line of the edited procedure was a procedure call that was resolved solely via the import statements, then this line became invalid (i.e., unresolved). This problem has been fixed.
- HDevelop in very rare cases shows a warning while copying standard procedures between two HDevelop instances. This problem has been fixed.
- HDevelop still listed libraries and their procedures, even when the associated path or library had been deleted via the Edit/Preferences/Directories Delete-Button. The libraries and the procedures were still listed in the Preferences Dialog under Procedures/Manage Procedure Libraries and under Procedures/External Procedures. This problem has been fixed.
- HDevelop could not resolve library procedures if they were imported via the import statement and if the parameter of the import statement was the name of the directory that contained the procedure library instead of the library name itself. This was contrary to the documentation of the import statement. This problem has been fixed.
- The Edit Procedure Interface dialog did not work correctly when renaming a parameter in very rare cases. If a program line contained a parameter more than once, for example in an expression, not all parameters were renamed correctly. This may have led to invalid program lines. Note that this problem only occurred if the parameter had the form xxx1[2], where 'xxx' stands for an arbitrary sequence of characters. This problem has been fixed.
-
Pressing F1 in the Procedure Interface dialog and in the
Operator window was not consistent. This problem has been
fixed. Now, F1 behaves consistently as follows:
- If no operator or procedure is selected, it opens the description of the Operator window in the HDevelop Users' Guide.
- If an operator or procedure is selected, it opens the reference of the selected operator/procedure.
- HDevelop crashed when an invalid parameter name was defined in the Edit Procedure Interface dialog and then, the Help button was pressed. This problem has been fixed.
- In HDevelop it was possible to create a valid and executable procedure call of main. However, calling main recursively could crash or freeze HDevelop. Therefore, 'main ()' is no longer a valid statement.
- HDevelop crashed if a new procedure was created from the selection and in the selected program lines a variable, which would have become a procedure parameter, was used as a control variable as well as an iconic variable. This problem has been fixed.
- If the interface of a local procedure is edited but not yet applied, and the program is closed (e.g., because a different program is loaded) while the interface dialog is still open, HDevelop offers to keep a copy of that procedure. If afterwards the procedure interface dialog was closed without applying the interface changes, HDevelop crashed. This problem has been fixed.
- HDevelop exported single external procedures via the command line with the option -convert incorrectly if the exported procedure contained references to other external procedures. In this case, the exported code contained only the declarations of the referenced procedures but not their implementations. This problem has been fixed. Now, the above described behavior only applies if the command line export option -no_export_of_referred_procs is active, as it is the case when exporting HDevelop programs or procedure libraries.
- If 'Export local procedures body' was unchecked in HDevelop's export dialog, HDevelop unnecessarily exported local procedures as procedures with an empty procedure body to C# and VB.NET. Now in this case local procedures are not exported at all, analogously to the export behavior regarding external procedures if 'Export external procedures body' is unchecked.
-
HDevelop exported single external procedures via the command
line option -convert incorrectly in the following case:
- The external procedure contained references, i.e. calls, to other external procedures.
- The directory containing the referenced procedures was contained in the list of external procedure paths.
- The command line call contained the absolute path to the external procedure to be exported.
- The paths used in (2.) and (3.) were equal (case sensitivity).
- The Export dialog warned twice about overwriting an existing file. This happened if an existing file was selected via the browse button. Then, a warning dialog was shown. After pressing the export button, the warning dialog appeared again. This problem has been fixed.
- HDevelop exported operator and procedure calls that used the same global variable as input and output incorrectly to C, C#, and Visual Basic. The regarding call did not modify the value of the global variable, which was an incorrect behavior. This problem has been fixed.
- HDevelop code exported to .NET created a memory leak if global iconic variables were used as output parameters of operator or procedure calls. This problem has been fixed.
- HDevelop in rare cases exported programs incorrectly to C# if they contained some handling of HDevelop Graphics windows. This happened if a Graphics window handle was referenced only via dev_get_window and if the option 'Window export' was set to 'Use HALCON Windows'. This problem has been fixed.
- When opening a procedure for editing failed, HDevelop solely displayed a message that the procedure could not be loaded. This problem has been fixed. Now, HDevelop additionally displays the same information that is shown in the External Procedures tab or when loading a program fails.
- Creating a local procedure from a selection of code lines caused a problem when there was an import statement amongst the selected code lines and a procedure call that was resolved solely via that import statement. In this case, the procedure call in the newly created procedure remained unresolved. This problem has been fixed.
- HDevelop crashed when trying to export continue or break statements if the program code between the regarding continue (or break) statement and its first valid enclosing loop structure contained an invalid loop structure, conditional statement, or the like. This problem has been fixed.
- HDevelop exported for loops inside case statements incorrectly to HALCON/C++. This problem has been fixed.
- There was a problem with entering East Asian characters into the full text editor. During or after entering East Asian characters like Hiragana, Katakana, or Hanja via a phonetic or shape based input method the text cursor might have jumped to the beginning of the next line. This could not only happen after the conversion into the East Asian characters but also in the middle of entering a character by a key sequence. If this happened, the complete program line could become corrupted. This problem has been fixed.
Examples
New Example Programs
HALCON has been extended with more than 70 new HDevelop example programs:
-
The new HDevelop example programs
- hdevelop/System/IO-Devices/advantech_digital_read.hdev and
- hdevelop/System/IO-Devices/advantech_digital_write.hdev
-
The new HDevelop example programs
- hdevelop/System/IO-Devices/nidaqmx_counter.hdev,
- hdevelop/System/IO-Devices/nidaqmx_digital_read.hdev, and
- hdevelop/System/IO-Devices/nidaqmx_digital_write.hdev
-
The new HDevelop example programs
- hdevelop/System/IO-Devices/contec_digital_read.hdev and
- hdevelop/System/IO-Devices/contec_digital_write.hdev
-
The new HDevelop example programs
- hdevelop/System/IO-Devices/interface_digital_read.hdev and
- hdevelop/System/IO-Devices/interface_digital_write.hdev
-
The new HDevelop example programs
- hdevelop/System/IO-Devices/opc_ua_browse_variables.hdev,
- hdevelop/System/IO-Devices/opc_ua_channel_access.hdev,
- hdevelop/System/IO-Devices/opc_ua_discovery.hdev,
- hdevelop/System/IO-Devices/opc_ua_parameters.hdev, and
- hdevelop/System/IO-Devices/opc_ua_security.hdev
-
The new HDevelop example programs
- hdevelop/System/IO-Devices/opc_classic_browse_variables.hdev,
- hdevelop/System/IO-Devices/opc_classic_channel_access.hdev, and
- hdevelop/System/IO-Devices/opc_classic_parameters.hdev
-
The new HDevelop example program
- hdevelop/Control/vector_variables.hdev
- hdevelop/Control/align_measurements_multithreading.hdev
-
The new HDevelop example programs
- hdevelop/Control/par_start.hdev,
- hdevelop/Control/align_measurements_multithreading.hdev,
- hdevelop/System/Multithreading/message_queue_producer_consumer.hdev, and
- hdevelop/System/Multithreading/message_queue_producer_consumer_abort.hdev
- barcode/mixed/barcodes_datacodes_mixed_01.png.
-
The new HDevelop example program
- hdevelop/Runtime/test_jit_speedup.hdev
-
The new HDevelop example programs
- hdevelop/Graphics/Object/create_drawing_object_circle_sector.hdev and
- hdevelop/Graphics/Object/create_drawing_object_rectangle2.hdev
The new Visual Studio projects for the C# example programs- c#/DrawingObjects/vs2005/DrawingObjects/ and
- c#/DrawingObjectsWPF/vs2010/DrawingObjectsWPF/
-
The new HDevelop example program
- hdevelop/Calibration/Multi-View/calibrate_cameras_monocular.hdev
- calib/calib_single_camera_[01-07].png.
-
The HDevelop example programs
- hdevelop/3D-Reconstruction/Multi-View/reconstruct_points_stereo.hdev,
- solution_guide/3d_vision/3d_information_for_selected_points.hdev, and
- solution_guide/3d_vision/two_camera_calibration.hdev,
-
The new HDevelop example programs
- hdevelop/Calibration/Hand-Eye/calibrate_hand_eye_scara_moving_cam.hdev and
- hdevelop/Calibration/Hand-Eye/calibrate_hand_eye_scara_stationary_cam.hdev
- 3d_machine_vision/handeye/scara_moving_cam_setup_01_[01-10].png and
- 3d_machine_vision/handeye/scara_stationary_cam_setup_01_[01-10].png.
- hdevelop/Calibration/Hand-Eye/calibrate_hand_eye_scara_stationary_cam_approx.hdev
- 3d_machine_vision/handeye/scara_stationary_cam_setup_01_calib_approx_01.png.
- hdevelop/Calibration/Hand-Eye/pick_and_place_scara_stationary_cam.hdev
- 3d_machine_vision/handeye/scara_stationary_cam_setup_01_metal_parts_[01-06].png.
-
The new HDevelop example programs
- hdevelop/Calibration/Multi-View/calibrate_cameras_telecentric_tilt.hdev and
- hdevelop/Calibration/Multi-View/calibrate_cameras_telecentric_tilt_stereo.hdev
The example program calibrate_cameras_telecentric_tilt.hdev calibrates a single camera and uses the new images- caliper/caliper_with_tilt.png,
- caliper/caliper_no_tilt.png,
- calib/calib_telecentric_tilt_[01-17].png, and
- caliper/caliper_measurement_plane.png.
- stereo/telecentric_tilt/cam_0_calib_plate_[01-08].png,
- stereo/telecentric_tilt/cam_1_calib_plate_[01-08].png,
- stereo/telecentric_tilt/cam_0_cartridge.png,
- stereo/telecentric_tilt/cam_1_cartridge.png,
- stereo/telecentric_tilt/cam_0_tissue.png, and
- stereo/telecentric_tilt/cam_1_tissue.png.
-
The new HDevelop example program
- hdevelop/Graphics/Scene-3D/display_scene_3d.hdev
The HDevelop procedure library- procedures/general/visualize_object_model_3d.hdpl
-
The new HDevelop example program
- hdevelop/3D-Object-Model/Transformations/simplify_object_model_3d.hdev
-
The new HDevelop example program
- hdevelop/Applications/Measuring-2D/measure_stamping_part.hdev
-
The new HDevelop example program
- hdevelop/OCR/Neural-Nets/regularized_ocr_mlp.hdev
-
The new HDevelop example program
- hdevelop/Classification/Neural-Nets/mlp_regularization.hdev
-
The new HDevelop example program
- hdevelop/Classification/Neural-Nets/set_rejection_params_class_mlp.hdev
-
The new HDevelop example program
- hdevelop/OCR/Segmentation/find_text.hdev
- ocr/medication_package_02_right.png.
- hdevelop/OCR/Segmentation/find_expiration_date.hdev
- ocr/medication_package_[01-03]_front.png,
- ocr/medication_package_[01-03]_left.png,
- ocr/medication_package_[01-03]_back.png,
- ocr/medication_package_[01-03]_right.png,
- ocr/medication_package_[01-03]_bottom.png, and
- ocr/medication_package_[01-03]_top.png.
-
The new HDevelop example program
- hdevelop/Identification/Bar-Code/barcode_param_meas_param_estimation.hdev
- barcode/ean13/ean13_meas_param_estimation_[01-10].png.
-
The new HDevelop example program
- hdevelop/Identification/Bar-Code/barcode_param_contrast_min.hdev
- barcode/25interleaved/25interleaved_zeiss1.png.
-
The new HDevelop example program
- hdevelop/Identification/Bar-Code/barcode_param_width_height.hdev
-
The new HDevelop example program
- hdevelop/Identification/Bar-Code/code32.hdev
- general/convert_decoded_string_code39_to_code32.hdvp.
- barcode/code32/code32_01.png.
-
The new HDevelop example program
- hdevelop/Identification/Bar-Code/barcode_param_majority_voting.hdev
- barcode/ean13.png.
-
The new HDevelop example program
- hdevelop/Identification/Data-Code/ecc200_direct_mark_quality_semi_t10.hdev
-
The new HDevelop example program
- hdevelop/Identification/Data-Code/ecc200_direct_mark_quality_semi_t10.hdev
- hdevelop/Identification/Data-Code/ecc200_print_quality.hdev
- datacode/ecc200/ecc200_print_quality_01.png,
-
The new HDevelop example program
- hdevelop/3D-Matching/Surface-Based/find_surface_model_noisy_data.hdev
-
The new HDevelop example program
- hdevelop/3D-Matching/Deformable-Surface-Based/find_deformable_surface_model.hdev
It uses the new 3D object models- silicone_baking_mold/silicone_baking_mold_3d_model.om3 and
- silicone_baking_mold/silicone_baking_mold_3d_scene_[01-07].om3.
-
The new HDevelop example program
- hdevelop/3D-Reconstruction/Sheet-Of-Light/calibrate_sheet_of_light_3d_calib_object.hdev
- sheet_of_light/calib_object_disparity.tif.
-
The new HDevelop example program
- hdevelop/Applications/Surface-Inspection/check_for_holes_sheet_of_light.hdev
The example program uses the new images- sheet_of_light/injection_mould_[01-06]_disparity.tif
-
The HDevelop example program
- hdevelop/Applications/Surface-Inspection/compare_surface_sheet_of_light.hdev
-
The new HDevelop example program
- hdevelop/Filters/Scene-Flow/scene_flow_globe.hdev
- stereo/globe/globe_l_[01-05].png and
- stereo/globe/globe_r_[01-05].png.
-
The new HDevelop example program
- hdevelop/XLD/Features/test_closed_xld.hdev
-
The new HDevelop example program
- hdevelop/Transformations/2D-Transformations/point_line_to_hom_mat2d.hdev
-
The new HDevelop example program
- hdevelop/Filters/Smoothing/compare_gauss_filters.hdev
-
The new HDevelop
example program
- hdevelop/Filters/FFT/phase_correlation_fft.hdev
-
The new HDevelop example programs
- hdevelop/Segmentation/Threshold/local_threshold.hdev and
- hdevelop/Segmentation/Threshold/binary_threshold.hdev
-
The new HDevelop example programs
- hdevelop/Applications/Measuring-2D/inspect_frame_width.hdev and
- hdevelop/Tools/Geometry/apply_distance_transform.hdev
- plastic_parts/phone_camera_frame_01.png and
- plastic_parts/phone_camera_frame_02.png.
-
The new HDevelop example programs
- hdevelop/3D-Reconstruction/Binocular-Stereo/binocular_disparity_ms.hdev and
- hdevelop/3D-Reconstruction/Binocular-Stereo/binocular_distance_ms.hdev
-
The new HDevelop example program
- hdevelop/3D-Reconstruction/Binocular-Stereo/binocular_disparity_comparison.hdev
- stereo/middlebury_cones/im2.png,
- stereo/middlebury_cones/im6.png,
- stereo/middlebury_cones/disp2.png, and
- stereo/middlebury_cones/occl.png.
-
HALCON has been extended with an operator evaluate_class_svm that evaluates a feature
vector by a support vector machine. The HDevelop example
program
- hdevelop/Classification/Support-Vector-Machines/novelty_detection.hdev
-
The new HDevelop example programs
- hdevelop/System/Multithreading/message_as_dictionary.hdev,
- hdevelop/System/Multithreading/message_queue_as_container.hdev,
- hdevelop/System/Multithreading/message_queue_producer_consumer_abort.hdev, and
- hdevelop/System/Multithreading/message_queue_producer_consumer.hdev
-
The new HDevelop example program
- hdevelop/Object/Information/compare_obj.hdev
-
The new HDevelop example programs
- hdevelop/File/Images/write_image_benchmark.hdev and
- hdevelop/File/Misc/write_object.hdev
-
The new HDevelop example program
- hdevelop/Tuple/Sets/tuple_sets.hdev
-
The new HDevelop example program
- hdevelop/Tuple/Selection/tuple_find.hdev
-
The new HDevelop example program
- hdevelop/Inspection/Bead-Inspection/apply_bead_inspection_model.hdev
- bead/adhesive_bead_[01-07].png
-
The new HDevelop example programs
- hdevelop/Image/Acquisition/argos3d-p1xx_simple.hdev and
- hdevelop/Image/Acquisition/argos3d-p1xx_objectmodel3d.hdev
Modified Example Programs
-
HALCON now exploits the AVX2 instruction set under Windows and Linux. This
leads to a significant speedup on machines that support the AVX2 instruction
set.
The HDevelop example program- hdevelop/System/Parameters/query_system_parameters.hdev
-
The HDevelop example program
- hdevelop/Filters/Color/cfa_to_rgb.hdev
-
The HDevelop example program
- hdevelop/System/Parameters/query_system_parameters.hdev
-
The HDevelop example program
- hdevelop/Applications/Print-Inspection/ inspect_bottle_label_360_degree.hdev
-
The HDevelop example program
- hdevelop/Applications/Print-Inspection/ inspect_bottle_label_360_degree.hdev
-
The HDevelop example program
- solution_guide/3d_vision/camera_calibration_multi_image.hdev
- 3d_machine_vision/calib/calib_image_[01-07].png and
- 3d_machine_vision/calib/ruler.png
-
The HDevelop example program
- hdevelop/Applications/Position-Recognition-3D/3d_matching_clamps.hdev
-
The HDevelop example programs
- hdevelop/Tools/Grid-Rectification/grid_rectification.hdev and
- solution_guide/3D-vision/grid_rectification_ruled_surface.hdev
- hdevelop/Tools/Grid-Rectification/grid_rectification.hdev
- solution_guide/3D-vision/grid_rectification_ruled_surface.hdev
-
For the HDevelop example program
- hdevelop/Applications/Surface-Inspection/determine_tilt_slant_photometric_stereo.hdev
-
The HDevelop example program
- hdevelop/Segmentation/Threshold/var_threshold.hdev
-
The HDevelop example programs
- hdevelop/Applications/Measuring-2D/angio.hdev,
- hdevelop/Applications/Measuring-2D/segment_wedge_bonds.hdev,
- hdevelop/Applications/Object-Recognition-2D/roads.hdev,
- hdevelop/Applications/Surface-Inspection/detect_mura_defects_blur.hdev, and
- hdevelop/Filters/Lines/lines_gauss.hdev
-
The HDevelop example program
- hdevelop/Applications/OCR/generate_system_font.hdev,
-
The results of the existing HDevelop example
program
- hdevelop/Identification/Bar-Code/print_quality_isoiec15416.hdev
-
The HDevelop example program
- hdevelop/Identification/Data-Code/ecc200_print_quality.hdev,
-
The HDevelop example programs
- hdevelop/Applications/Position-Recognition-3D/locate_car_door.hdev,
- hdevelop/Applications/Position-Recognition-3D/locate_engine_parts.hdev, and
- explore_halcon.hdev
-
For the following HDevelop example programs in the
subdirectory solution_guide/image_acquisition that are used
for the Solution Guide on Image Acquisition, the names have
been changed such that the names of the used HALCON image
acquisition interfaces are no longer contained:
- first_example_acquisition_saperalt.hdev → first_example_acquisition.hdev,
- info_framegrabber_1394iidc.hdev → info_framegrabber.hdev,
- multiple_boards_bitflow.hdev → multiple_boards.hdev,
- multiple_ports_bitflow.hdev → multiple_ports.hdev,
- port_switching_bitflow.hdev → port_switching.hdev,
- real_time_grabbing_bitflow.hdev → real_time_grabbing.hdev,
- simultaneous_grabbing_bitflow.hdev → simultaneous_grabbing.hdev, and
- volatile_grabbing_bitflow.hdev → volatile_grabbing.hdev.
- c/win/examples.dsw,
- c/win/error_handling_timeout_leutron/ error_handling_timeout_leutron.dsp,
- cpp/win/examples.dsw,
- cpp/win/error_handling_timeout_leutron/ error_handling_timeout_leutron.dsp,
- vb/error_handling_timeout_leutron/error_handling_timeout_leutron.frm,
- vb/error_handling_timeout_leutron/error_handling_timeout_leutron.frx,
- vb/error_handling_timeout_leutron/error_handling_timeout_leutron.vbp,
- vb/error_handling_timeout_leutron/error_handling_timeout_leutron.vbw, and
- vb/error_handling_timeout_leutron/error_handling_timeout_leutron.xml.
-
The Leutron image acquisition interface is no longer
supported and has been removed. Consequently, the following
HDevelop example programs have been removed:
- hdevelop/Image/Acquisition/leutron_trigger.hdev,
- hdevelop/Image/Acquisition/leutron.hdev, and
- hdevelop/Image/Acquisition/leutron_2cameras.hdev.
- solution_guide/image_acquisition/error_handling_timeout_leutron.hdev
- solution_guide/image_acquisition/c/error_handling_timeout_leutron.c
- solution_guide/image_acquisition/cpp/error_handling_timeout_leutron.cpp
- solution_guide/image_acquisition/vb/error_handling_timeout_leutron.vb
-
Some HDevelop example programs have been reordered in the
file structure.
The HDevelop example programs- hdevelop/Calibration/Monocular/compare_calibration_models.hdev and
- hdevelop/Calibration/Monocular/line_scan_calibration.hdev
- hdevelop/Calibration/Multi-View
- hdevelop/Calibration/Monocular/camera_calibration.hdev
The HDevelop example program- hdevelop/Calibration/Multi-View/calibrate_cameras.hdev
- hdevelop/Calibration/Multi-View/calibrate_cameras_multiple_camera_setup.hdev
Removed Example Programs
The following example programs have been removed:
-
The HDevelop example program
- solution_guide/3D-vision/grid_rectification_ruled_surface.hdev
- hdevelop/Tools/Grid-Rectification/grid_rectification.hdev,
-
For the following HDevelop example programs in the
subdirectory solution_guide/image_acquisition that are used
for the Solution Guide on Image Acquisition, the names have
been changed such that the names
of the used HALCON image
acquisition interfaces are no longer contained:
- first_example_acquisition_saperalt.hdev → first_example_acquisition.hdev,
- info_framegrabber_1394iidc.hdev → info_framegrabber.hdev,
- multiple_boards_bitflow.hdev → multiple_boards.hdev,
- multiple_ports_bitflow.hdev → multiple_ports.hdev,
- port_switching_bitflow.hdev → port_switching.hdev,
- real_time_grabbing_bitflow.hdev → real_time_grabbing.hdev,
- simultaneous_grabbing_bitflow.hdev → simultaneous_grabbing.hdev, and
- volatile_grabbing_bitflow.hdev → volatile_grabbing.hdev.
- c/win/examples.dsw,
- c/win/error_handling_timeout_leutron/ error_handling_timeout_leutron.dsp,
- cpp/win/examples.dsw,
- cpp/win/error_handling_timeout_leutron/ error_handling_timeout_leutron.dsp,
- vb/error_handling_timeout_leutron/error_handling_timeout_leutron.frm,
- vb/error_handling_timeout_leutron/error_handling_timeout_leutron.frx,
- vb/error_handling_timeout_leutron/error_handling_timeout_leutron.vbp,
- vb/error_handling_timeout_leutron/error_handling_timeout_leutron.vbw, and
- vb/error_handling_timeout_leutron/error_handling_timeout_leutron.xml.
-
The Leutron image acquisition interface is no longer
supported and has been removed. Consequently, the following
HDevelop example programs have been removed:
- hdevelop/Image/Acquisition/leutron_trigger.hdev,
- hdevelop/Image/Acquisition/leutron.hdev, and
- hdevelop/Image/Acquisition/leutron_2cameras.hdev.
- solution_guide/image_acquisition/error_handling_timeout_leutron.hdev
- solution_guide/image_acquisition/c/error_handling_timeout_leutron.c
- solution_guide/image_acquisition/cpp/error_handling_timeout_leutron.cpp
- solution_guide/image_acquisition/vb/error_handling_timeout_leutron.vb
HALCON Library
- New Operators
- Speedup and Enhancements
- Newly Reentrant Operators
- Modified Operators
- Legacy and Obsolete Operators
- Bug Fixes
New Operators
3D Matching → Deformable Surface-Based
-
HALCON has been extended with the operators
- create_deformable_surface_model,
- clear_deformable_surface_model,
- add_deformable_surface_model_sample,
- add_deformable_surface_model_reference_point,
- get_deformable_surface_model_param,
- find_deformable_surface_model,
- refine_deformable_surface_model,
- clear_deformable_surface_matching_result,
- get_deformable_surface_matching_result,
- write_deformable_surface_model,
- read_deformable_surface_model,
- serialize_deformable_surface_model, and
- deserialize_deformable_surface_model
The new HDevelop example program- hdevelop/3D-Matching/Deformable-Surface-Based/find_deformable_surface_model.hdev
It uses the new 3D object models- silicone_baking_mold/silicone_baking_mold_3d_model.om3 and
- silicone_baking_mold/silicone_baking_mold_3d_scene_[01-07].om3.
3D Object Model → Transformations
-
HALCON has been extended with an operator simplify_object_model_3d that simplifies a
triangulated 3D object model by removing less important
points. For this, the user is able to specify the number of
points that are to be removed or, alternatively, the number
of remaining points.
The new HDevelop example program- hdevelop/3D-Object-Model/Transformations/simplify_object_model_3d.hdev
3D Reconstruction → Binocular Stereo
-
HALCON has been extended with two new operators for stereo
reconstruction.
- binocular_disparity_ms calculates the disparity of a rectified stereo image pair while
- binocular_distance_ms computes the distance.
The new HDevelop example programs- hdevelop/3D-Reconstruction/Binocular-Stereo/binocular_disparity_ms.hdev and
- hdevelop/3D-Reconstruction/Binocular-Stereo/binocular_distance_ms.hdev
The new HDevelop example program- hdevelop/3D-Reconstruction/Binocular-Stereo/binocular_disparity_comparison.hdev
- stereo/middlebury_cones/im2.png,
- stereo/middlebury_cones/im6.png,
- stereo/middlebury_cones/disp2.png, and
- stereo/middlebury_cones/occl.png.
3D Reconstruction → Sheet of Light
-
HALCON has been extended with two operators to support
sheet-of-light calibration with a 3D calibration object.
- create_sheet_of_light_calib_object can be used to create CAD models of suitable 3D calibration objects.
- calibrate_sheet_of_light can be used to calibrate a sheet-of-light model.
- hdevelop/3D-Reconstruction/Sheet-Of-Light/calibrate_sheet_of_light_3d_calib_object.hdev
- sheet_of_light/calib_object_disparity.tif.
Calibration → Multi-View
-
HALCON has been extended with a camera model for tilt lenses
(also called Scheimpflug optics) both for regular lenses and
for bilaterally telecentric lenses.
The new HDevelop example program- hdevelop/Calibration/Multi-View/calibrate_cameras_telecentric_tilt.hdev
- caliper/caliper_with_tilt.png,
- caliper/caliper_no_tilt.png,
- calib/calib_telecentric_tilt_[01-17].png, and
- caliper/caliper_measurement_plane.png.
- hdevelop/Calibration/Multi-View/calibrate_cameras_telecentric_tilt_stereo.hdev
- stereo/telecentric_tilt/cam_0_calib_plate_[01-08].png,
- stereo/telecentric_tilt/cam_1_calib_plate_[01-08].png,
- stereo/telecentric_tilt/cam_0_cartridge.png,
- stereo/telecentric_tilt/cam_1_cartridge.png,
- stereo/telecentric_tilt/cam_0_tissue.png, and
- stereo/telecentric_tilt/cam_1_tissue.png.
The following operators have been extended to support the new camera models:- add_metrology_object_circle_measure,
- add_metrology_object_ellipse_measure,
- add_metrology_object_line_measure,
- add_metrology_object_rectangle2_measure,
- apply_sheet_of_light_calibration,
- binocular_calibration,
- binocular_distance,
- binocular_distance_mg,
- cam_mat_to_cam_par,
- cam_par_pose_to_hom_mat3d,
- cam_par_to_cam_mat,
- calibrate_cameras,
- calibrate_hand_eye,
- camera_calibration,
- change_radial_distortion_cam_par,
- change_radial_distortion_contours_xld,
- change_radial_distortion_image,
- change_radial_distortion_points,
- contour_to_world_plane_xld,
- copy_metrology_model,
- create_calib_descriptor_model,
- create_planar_calib_deformable_model,
- create_planar_calib_deformable_model_xld,
- create_shape_model_3d,
- create_stereo_model,
- deserialize_calib_data,
- deserialize_cam_par,
- deserialize_camera_setup_model,
- deserialize_deformable_model,
- deserialize_descriptor_model,
- deserialize_metrology_model,
- deserialize_shape_model_3d,
- determine_deformable_model_params,
- disp_caltab,
- disp_object_model_3d,
- disparity_image_to_xyz,
- disparity_to_distance,
- disparity_to_point_3d,
- distance_to_disparity,
- find_calib_descriptor_model,
- find_calib_object,
- find_marks_and_pose,
- find_planar_calib_deformable_model,
- find_shape_model_3d,
- gen_binocular_rectification_map,
- gen_image_to_world_plane_map,
- gen_radial_distortion_map,
- get_calib_data,
- get_camera_setup_param,
- get_deformable_model_params,
- get_circle_pose,
- get_line_of_sight,
- get_metrology_object_param,
- get_rectangle_pose,
- get_shape_model_3d_params,
- get_sheet_of_light_param,
- hand_eye_calibration,
- image_points_to_world_plane,
- image_to_world_plane,
- intersect_lines_of_sight,
- match_rel_pose_ransac,
- measure_profile_sheet_of_light,
- object_model_3d_to_xyz,
- project_3d_point,
- project_object_model_3d,
- project_shape_model_3d,
- radial_distortion_self_calibration,
- read_calib_data,
- read_cam_par,
- read_camera_setup_model,
- read_deformable_model,
- read_descriptor_model,
- read_metrology_model,
- read_shape_model_3d,
- reconstruct_points_stereo,
- reconstruct_surface_stereo,
- reduce_object_model_3d_by_view,
- rel_pose_to_fundamental_matrix,
- render_object_model_3d,
- serialize_calib_data,
- serialize_cam_par,
- serialize_camera_setup_model,
- serialize_deformable_model,
- serialize_descriptor_model,
- serialize_metrology_model,
- serialize_shape_model_3d,
- set_calib_data,
- set_calib_data_cam_param,
- set_camera_setup_cam_param,
- set_camera_setup_param,
- set_metrology_object_param,
- set_profile_sheet_of_light,
- set_sheet_of_light_param,
- set_stereo_model_image_pairs,
- sim_caltab,
- vector_to_pose,
- vector_to_rel_pose,
- write_calib_data,
- write_cam_par,
- write_camera_setup_model,
- write_deformable_model,
- write_descriptor_model,
- write_metrology_model, and
- write_shape_model_3d.
- HALCON has been extended with the operators remove_calib_data_observ and remove_calib_data to remove observations from a calibration data model.
Classification → Neural Nets
-
The MLP-based classifiers (for general classification and for
OCR) now provide a mechanism to regularize the weights of the
MLP to enforce smoother transitions of the confidences
between classes and to prevent overfitting. For the general
MLP classifier, HALCON has been extended with the two
operators
For the OCR MLP classifier, HALCON has been extended
with the two operators
The new HDevelop example program
- hdevelop/Classification/Neural-Nets/mlp_regularization.hdev
-
The MLP-based classifiers (for general classification and for
OCR) now provide a mechanism to automatically generate a
rejection class.
For the general MLP classifier, HALCON has been extended with the two operators For the MLP-based OCR classifier, HALCON has been extended with the two operators The new HDevelop example program- hdevelop/Classification/Neural-Nets/set_rejection_params_class_mlp.hdev
Classification → Support Vector Machines
-
HALCON has been extended with an operator evaluate_class_svm that evaluates a feature
vector by a support vector machine. The HDevelop example
program
- hdevelop/Classification/Support-Vector-Machines/novelty_detection.hdev
File → Misc
- HALCON has been extended with two new operators set_current_dir and get_current_dir to set and determine the current directory, respectively.
File → Object
-
HALCON has been extended with the operators write_object and read_object, which provide the
functionality to write and read all kinds of iconic HALCON
objects (images, regions, and XLDs). The operators use the
new binary file format HOBJ. For runtime efficiency reasons,
no compression is applied to the data. The default file
extension for this file format is '.hobj'. The existing
operators write_image,
read_image, write_region, and read_region have been extended to also
support the HOBJ format. serialize_object also uses the HOBJ format
internally. Consequently, objects that have been serialized
with HALCON 12 or higher cannot be deserialized by older
HALCON versions. The file format IMA, which was used for
image data, is now legacy and the file format HOBJ should be
used instead. The file format HALCON Region ('.reg'), which
was used for region data, is now legacy and the file format
HOBJ should be used instead. For compatibility reasons, the
file formats IMA and HALCON Region are still supported by
write_image, read_image, write_region,
and read_region.
The new HDevelop example programs- hdevelop/File/Images/write_image_benchmark.hdev and
- hdevelop/File/Misc/write_object.hdev
The region files- automotive/car_door.reg,
- automotive/engine_part_model.reg, and
- xing/xing.reg
- automotive/car_door_region.hobj,
- automotive/engine_part_model_region.hobj, and
- xing/xing_region.hobj.
- The Image Acquisition interface and all other assistants that expect an image can open images that are stored as hobj files.
- The Read Image dialog can now handle all .hobj files including preview and inserting the appropriate operator into the HDevelop program.
- If an iconic variable is saved via the context menu of the Variable window, for regions, XLDs, and mixed object tuples .hobj is the new default format.
Filters → FFT
-
HALCON has been extended with an operator phase_correlation_fft. The new HDevelop
example program
- hdevelop/Filters/FFT/phase_correlation_fft.hdev
Filters → Scene Flow
-
HALCON has been extended with two new operators to calculate
the scene flow (a representation of the 3D motion of points
in a scene) of two consecutive stereo image pairs:
- scene_flow_uncalib computes the uncalibrated scene flow and
- scene_flow_calib computes the calibrated scene flow.
- hdevelop/Filters/Scene-Flow/scene_flow_globe.hdev
- stereo/globe/globe_l_[01-05].png and
- stereo/globe/globe_r_[01-05].png.
Graphics → Object
-
HALCON has been extended with the operators
- attach_background_to_window,
- attach_drawing_object_to_window,
- clear_drawing_object,
- create_drawing_object_ellipse,
- create_drawing_object_ellipse_sector,
- create_drawing_object_line,
- create_drawing_object_rectangle1,
- create_drawing_object_rectangle2,
- create_drawing_object_text,
- create_drawing_object_xld,
- detach_background_from_window,
- detach_drawing_object_from_window,
- get_drawing_object_iconic,
- get_drawing_object_params,
- get_window_background_image,
- set_drawing_object_callback,
- set_drawing_object_params, and
- set_drawing_object_xld
The new HDevelop example programs- hdevelop/Graphics/Object/create_drawing_object_circle_sector.hdev and
- hdevelop/Graphics/Object/create_drawing_object_rectangle2.hdev
In addition, it is possible to dynamically react to interactions by setting callbacks, which are then executed on determined events. Note that this functionality is only available through the different language interfaces.
The new Visual Studio projects for the C# example programs- c#/DrawingObjects/vs2005/DrawingObjects/ and
- c#/DrawingObjectsWPF/vs2010/DrawingObjectsWPF/
Filters → Smoothing
-
HALCON has been extended with the new operator gauss_filter
to smooth an image using discrete Gaussian functions. In
contrast to the operator gauss_image, the smoothing parameter sigma
increases linearly with the given filter size.
The new HDevelop example program- hdevelop/Filters/Smoothing/compare_gauss_filters.hdev
gauss_image is now declared as legacy, i.e., its use is now deprecated in favor of the operator gauss_filter.
Inspection → Bead Inspection
-
HALCON has been extended with a set of operators to measure
and inspect adhesive beads. The following operators have been
added:
- create_bead_inspection_model,
- apply_bead_inspection_model,
- set_bead_inspection_param,
- get_bead_inspection_param, and
- clear_bead_inspection_model.
- hdevelop/Inspection/Bead-Inspection/apply_bead_inspection_model.hdev
- bead/adhesive_bead_[01-07].png
OCR → Neural Nets
-
The MLP-based classifiers (for general classification and for
OCR) now provide a mechanism to regularize the weights of the
MLP to enforce smoother transitions of the confidences
between classes and to prevent overfitting. For the general
MLP classifier, HALCON has been extended with the two
operators
For the OCR MLP classifier, HALCON has been extended
with the two operators
The new HDevelop example program
- hdevelop/Classification/Neural-Nets/mlp_regularization.hdev
-
The MLP-based classifiers (for general classification and for
OCR) now provide a mechanism to automatically generate a
rejection class.
For the general MLP classifier, HALCON has been extended with the two operators For the MLP-based OCR classifier, HALCON has been extended with the two operators The new HDevelop example program- hdevelop/Classification/Neural-Nets/set_rejection_params_class_mlp.hdev
OCR → Segmentation
-
HALCON has been extended with an automatic text reader that
is able to segment and read characters of any size robustly
without the need for extensive parameter tuning. With the new
operator create_text_model_reader,
it is possible to create a text model that can be used
for automatic text reading. All existing operators that
handle text models have been extended accordingly.
The new HDevelop example program- hdevelop/OCR/Segmentation/find_text.hdev
- ocr/medication_package_02_right.png.
- hdevelop/OCR/Segmentation/find_expiration_date.hdev
- ocr/medication_package_[01-03]_front.png,
- ocr/medication_package_[01-03]_left.png,
- ocr/medication_package_[01-03]_back.png,
- ocr/medication_package_[01-03]_right.png,
- ocr/medication_package_[01-03]_bottom.png, and
- ocr/medication_package_[01-03]_top.png.
Object → Information
-
HALCON has been extended with the operator compare_obj to compare iconic objects. In contrast to
test_equal_obj, this
operator compares all objects regarding their actual
content.
The new HDevelop example program- hdevelop/Object/Information/compare_obj.hdev
Regions → Creation
-
HALCON has been extended with the two operators
- gen_circle_sector, which creates a region in the form of a circular sector, and
- gen_ellipse_sector, which creates a region in the form of an ellipse sector.
Segmentation → Threshold
-
HALCON has been extended with the operators
which provide functionality for image thresholding.
binary_threshold provides the functionality of bin_threshold as well as an implementation of the thresholding method proposed by Otsu, which uses statistics to divide the pixels into foreground and background. local_threshold provides an implementation of the method proposed by Sauvola, which is well suited for the binarization of images of text documents.
The new HDevelop example programs- hdevelop/Segmentation/Threshold/local_threshold.hdev and
- hdevelop/Segmentation/Threshold/binary_threshold.hdev
System → Error Handling
- HALCON has been extended with the operator get_extended_error_info. It returns additional error information for the last HALCON error that occurred in the calling thread.
System → Multithreading
-
HALCON has been extended with a set of operators for
inter-thread communication:
- clear_message,
- clear_message_queue,
- create_message,
- create_message_queue,
- dequeue_message,
- enqueue_message,
- get_message_obj,
- get_message_param,
- get_message_queue_param,
- get_message_tuple,
- set_message_obj,
- set_message_param,
- set_message_queue_param, and
- set_message_tuple.
The new HDevelop example programs- hdevelop/System/Multithreading/message_as_dictionary.hdev,
- hdevelop/System/Multithreading/message_queue_as_container.hdev,
- hdevelop/System/Multithreading/message_queue_producer_consumer_abort.hdev, and
- hdevelop/System/Multithreading/message_queue_producer_consumer.hdev
System → Operating System
-
HALCON has been extended with the operator get_system_time that reads out the current
system time.
The HDevelop example program hdevelop/System/Parameters/query_system_parameters.hdev has been adapted to use the new operator get_system_time.
Tools → Geometry
-
HALCON has been extended with an operator distance_contours_xld that computes the
pointwise distance of contours. In contrast to
distance_cc, distance_contours_xld computes the minimal
distance for each point of the contour. The resulting
distances are returned as attributes of the output
contour. To facilitate further processing, HALCON has
also been extended with an operator segment_contour_attrib_xld, which
segments XLD contours based on their attributes.
For a faster computation of the pointwise distance of contours to a repeatedly used template contour, HALCON has been extended with the following operators for an XLD distance transform: The new HDevelop example programs- hdevelop/Applications/Measuring-2D/inspect_frame_width.hdev and
- hdevelop/Tools/Geometry/apply_distance_transform.hdev
- plastic_parts/phone_camera_frame_01.png and
- plastic_parts/phone_camera_frame_02.png.
Transformations → 2D Transformations
-
HALCON has been extended with an operator point_line_to_hom_mat2d that computes an
affine transformation of a user-selectable type from
point-to-line correspondences. The new HDevelop example
program
- hdevelop/Transformations/2D-Transformations/point_line_to_hom_mat2d.hdev
Tuple → Selection
-
HALCON has been extended with the operators tuple_find_first and tuple_find_last. tuple_find_first returns only the first match of
a tuple search. tuple_find_last
returns the respective last match.
The new HDevelop example program- hdevelop/Tuple/Selection/tuple_find.hdev
Tuple → Sets
-
HALCON has been extended with four new operators to apply set
operations on tuples:
The new HDevelop example program
- hdevelop/Tuple/Sets/tuple_sets.hdev
XLD → Features
-
HALCON has been extended with an operator test_closed_xld that tests whether a
contour is closed or not.
The new HDevelop example program- hdevelop/XLD/Features/test_closed_xld.hdev
Speedup and Enhancements
Miscellaneous
-
HALCON now exploits the AVX2 instruction set under Windows and Linux. This
leads to a significant speedup on machines that support the AVX2 instruction
set.
The HDevelop example program- hdevelop/System/Parameters/query_system_parameters.hdev
It is possible to determine if AVX2 is available with get_system, with the Parameter Query set to 'avx2_supported'.
Furthermore, HDevelop's About dialog now displays AVX2 after the platform version, if AVX2 is available.
3D Object Model
-
The repeated visualization of 3D object models is now faster if
the new interface for the visualization of 3D object models is
used and if only the poses of the objects change between
successive visualizations. Note that the compatibility mode for
older graphics cards is not supported.
The speedup depends on various factors, such as the size of the models and the graphics card. With larger models (more than one million points), the speedup for high-end graphic cards may be up to 4000%.
3D Matching → Surface-Based
- find_surface_model is up to 70% faster. Note that when using a surface model created and written with versions earlier than HALCON 12.0, some of the optimizations have no effect. In order to fully exploit the speedups, create the surface model anew with the latest version of HALCON.
3D Object Model → Features
- get_object_model_3d_params is now faster by up to 250% for 'diameter_axis_aligned_bounding_box', 'bounding_box1', and 'center'. 3D object models containing 3D primitives are not affected.
Calibration → Multi-View
- calibrate_cameras and camera_calibration are now significantly faster for line scan cameras. The speedup depends on the number of images and is greater the more images are used. For example, the speedup is approximately a factor of 30 if 17 images are used.
Classification → Neural Nets
- The MLP classifiers (classify_class_mlp, classify_image_class_mlp, do_ocr_multi_class_mlp, do_ocr_single_class_mlp, do_ocr_word_mlp, and evaluate_class_mlp) are now faster by up to 100%. The speedup is higher for a higher number of neurons.
Filters → Arithmetic
- invert_image is now faster by up to 4800% for int1 images, by up to 3000% for int2 images, by up to 1800% for int4 images, and by up to 1900% for real images.
Filters → Lines
-
The performance of several edge, line, and point filters has
been improved significantly.
- lines_gauss is now faster and is parallelized more extensively internally. As a result, lines_gauss is faster by up to 220% on modern Intel processors.
- lines_color is now faster and is parallelized internally. As a result, lines_color is faster by up to 450% on modern Intel processors.
- lines_facet is now faster and is parallelized internally. As a result, lines_facet is faster by up to 400% on modern Intel processors.
- edges_sub_pix is now faster and is parallelized more extensively internally. As a result, edges_sub_pix is faster by up to 60% on modern Intel processors.
- edges_color_sub_pix is now faster and is parallelized more extensively internally. As a result, edges_color_sub_pix is faster by up to 90% on modern Intel processors.
- edges_color is now faster and is parallelized internally. As a result, edges_color is faster by up to 450% on modern Intel processors.
- saddle_points_sub_pix, critical_points_sub_pix, local_max_sub_pix, and local_min_sub_pix are now faster and are parallelized internally. As a result, these operators are faster by up to 500% on modern Intel processors (for local_max_sub_pix and local_min_sub_pix the comparison is with respect to HALCON 11.0.2).
Filters → Match
- gen_gauss_pyramid, zoom_image_factor, and zoom_image_size are now faster on systems that support SSSE3 for the interpolation mode 'constant' and a scale factor of 0.5. The speedup for images of type 'byte' and 'int2' is up to 100%. The speedup for images of type 'uint2' is up to 25%. On systems that support AVX2 the speedup for images of type 'byte' is up to 130%.
Filters → Smoothing
- mean_n is now faster by up to 140% for byte, int2, and uint2 images and by up to 40% for int4 and real images.
Image → Format
- The operators are much faster now. For images of type byte, direction, and cyclic, the cropping operators are up to 25% faster. For all other image types, they are up to 2500% faster.
Segmentation → Threshold
- threshold is now faster by up to 54% for real and int4 images.
Newly Reentrant Operators
3D Matching → Shape-Based
- The operators are now reentrant.
3D Matching → Surface-Based
- The operators are now reentrant.
Calibration → Calibration Object
- sim_caltab is now reentrant.
Classification → Gaussian Mixture Models
- The operators are now reentrant.
Classification → Look-Up Table
- The operators are now reentrant.
Classification → Neural Nets
-
The operators
- add_sample_class_mlp,
- add_samples_image_class_mlp,
- classify_image_class_mlp,
- clear_class_mlp,
- clear_samples_class_mlp,
- create_class_mlp,
- deserialize_class_mlp,
- get_regularization_params_class_mlp,
- get_rejection_params_class_mlp,
- read_class_mlp,
- read_samples_class_mlp,
- select_feature_set_mlp,
- set_regularization_params_class_mlp,
- set_rejection_params_class_mlp, and
- train_class_mlp
Classification → Support Vector Machines
- The operators are now reentrant.
File → Text
- The operators are now reentrant.
Identification → Bar Code
- The operators are now reentrant.
Inspection → Variation Model
- The operators are now reentrant.
Matching → Deformable
-
The operators
- create_planar_uncalib_deformable_model,
- deserialize_deformable_model,
- create_planar_calib_deformable_model_xld,
- create_local_deformable_model,
- create_planar_uncalib_deformable_model_xld,
- read_deformable_model,
- clear_deformable_model,
- create_local_deformable_model_xld,
- create_planar_calib_deformable_model, and
- clear_all_deformable_models
Matching → Descriptor-Based
- The operators are now reentrant.
OCR → Neural Nets
- The operators are now reentrant.
OCR → Support Vector Machines
- The operators are now reentrant.
Segmentation → Classification
- The operators are now reentrant.
Tools → Interpolation
- The operators are now reentrant.
Modified Operators
Miscellaneous
- The HALCON window stack of the HALCON language interfaces has been modified such that it is not thread-local anymore but thread-safe and shared among all threads. That is, setting the active window so far was working thread-specifically, but now it affects all threads.
- The undocumented but exported function HMessage was renamed to HErrorMessage.
2D Metrology
-
HALCON has been extended by several new operators for the
metrology model. Other operators for the metrology model have
been revised.
- The new operator align_metrology_model rotates and translates the whole metrology model in order to align the model with the object in the current image.
- The new operator get_metrology_object_model_contour returns the contours of the added metrology objects.
- The new operator get_metrology_object_result_contour returns the contours of the approximated metrology objects.
- The operators for adding a metrology object add_metrology_object_circle_measure etc. now allow adding several metrology objects to the metrology model at once.
- The new operator add_metrology_object_generic allows adding any of the geometric forms (circle, ellipse, rectangle, line).
- The operator get_metrology_object_result has been revised. It now allows to query the edge points that were used during the fitting of the geometric forms.
- The camera parameters, the pose, and the scale of the approximated object parameters are now set for the whole metrology model using the new operator set_metrology_model_param.
- The parameters can be queried using the new operator get_metrology_model_param.
- hdevelop/Applications/Measuring-2D/measure_stamping_part.hdev
Note that the two operators now are legacy. - set_metrology_object_param and get_metrology_object_param have been extended with the generic parameter 'distance_threshold' to allow setting and querying the distance threshold used in the RANSAC algorithm.
3D Matching → Surface-Based
-
Surface-based matching is now more robust when matching in
noisy data, such as data from time-of-flight cameras. For
this, a new parameter 'scene_normal_computation' was
introduced in the operator find_surface_model. Setting this parameter
to 'mls' enables a more robust normal computation, which
leads to a more robust matching.
The new HDevelop example program- hdevelop/3D-Matching/Surface-Based/find_surface_model_noisy_data.hdev
3D Object Model → Features
- distance_object_model_3d now
supports signed distances. Signed distances can be calculated
for points, triangles, and primitives. Please note that
signed distances are only calculated if the corresponding
parameter 'signed_distances' is set to 'true'.
Additionally, distance_object_model_3d can now return the index
of the closest point or triangle for each query point in an
extended attribute. Please note that the index is only
computed if the parameter 'store_closest_index' is set to
'true'.
The HDevelop example program- hdevelop/Applications/Surface-Inspection/compare_surface_sheet_of_light.hdev
3D Object Model → Transformations
- rigid_trans_object_model_3d and affine_trans_object_model_3d now allow to pass a single 3D object model and multiple poses or HomMat3Ds, respectively. Furthermore, projective_trans_object_model_3d now allows to pass multiple 3D object models.
3D Reconstruction → Binocular Stereo
-
Parameters of the following operators have been renamed to
make their semantics clearer:
- binocular_disparity: Image1 → ImageRect1, Image2 → ImageRect2
- binocular_disparity_mg: Image1 → ImageRect1, Image2 → ImageRect2
- binocular_distance: Image1 → ImageRect1, Image2 → ImageRect2
- binocular_distance_mg: Image1 → ImageRect1, Image2 → ImageRect2
- optical_flow_mg: Image1 → ImageT1, Image2 → ImageT2
- get_error_text: ErrorNumber → ErrorCode, ErrorText → ErrorMessage
- get_operator_name: ProcNames → OperatorNames
- get_param_types: ProcName → OperatorName
- get_param_num: ProcName → OperatorName
- get_param_names: ProcName → OperatorName
- get_operator_info: ProcName → OperatorName
- get_param_info: ProcName → OperatorName
- search_operator: ProcNames → OperatorNames
- get_keywords: ProcName → OperatorName
- gen_caltab: CalTabDescrFile → CalPlateDescr, CalTabPSFile → CalPlatePSFile
- caltab_points: CalTabDescrFile → CalPlateDescr
- sim_caltab: CalTabDescrFile → CalPlateDescr, CaltabPose → CalPlatePose, GrayCaltab → GrayPlate
- disp_caltab: CalTabDescrFile → CalPlateDescr , CaltabPose → CalPlatePose
- find_marks_and_pose: CalTabRegion → CalPlateRegion, CalTabDescrFile → CalPlateDescr
- find_caltab: CalTabDescrFile → CalPlateDescr
3D Reconstruction → Sheet of Light
- HALCON has been extended with the operators to write sheet-of-light models to a file or to serialize and deserialize sheet-of-light models.
Calibration → Calibration Object
-
HALCON now supports new easy to use calibration plates. In
contrast to the previous calibration plates, the new plates
do not have to be completely visible in the calibration
images. This especially simplifies multi-view calibration and
the placement of the calibration plate near the image border.
Furthermore, the new design contains a significantly larger
number of calibration marks, which allows reliable
calibration with fewer calibration images. The description
files for the new calibration plates can be created with
create_caltab, which was
previously legacy. Note that, because the signature
of create_caltab has
been adapted to the design of the new calibration
plates, create_caltab is not
binary compatible to earlier versions of HALCON.
The file extension for the new description
files is '.cpd'.
have been
adapted to use these new description files. Note that the
previous calibration plates are still supported and that
their description files can still be created with
gen_caltab.
The following new description files are now provided in %HALCONROOT%/calib:- calplate_5mm.cpd,
- calplate_10mm.cpd,
- calplate_20mm.cpd,
- calplate_40mm.cpd,
- calplate_80mm.cpd,
- calplate_160mm.cpd,
- calplate_320mm.cpd,
- calplate_640mm.cpd,
- calplate_1200mm.cpd,
- calplate_20mm_dark_on_light.cpd,
- calplate_40mm_dark_on_light.cpd, and
- calplate_80mm_dark_on_light.cpd.
- caltab_6mm_old.descr,
- caltab_10mm_old.descr,
- caltab_30mm_old.descr,
- caltab_100mm_old.descr,
- caltab_200mm_old.descr,
- caltab_650um_old.descr,
- caltab_2500mm_old.descr,
- campar.dat,
- campose.dat, and
- gridspace_campar.cal.
- hdevelop/Calibration/Multi-View/calibrate_cameras_monocular.hdev
- calib/calib_single_camera_[01-07].png.
- solution_guide/3d_vision/camera_calibration_multi_image.hdev
- 3d_machine_vision/calib/calib_image_[01-07].png and
- 3d_machine_vision/calib/ruler.png
- find_calib_object now stores the calibration mark contours for line scan cameras. Furthermore, calibrate_cameras uses the mark contours, if available, to achieve more accurate calibration results for line scan cameras.
Calibration → Hand-Eye
-
The hand-eye calibration of HALCON is now able to calibrate
SCARA (Selective Compliance Assembly Robot Arm) robots. SCARA
robots have three degrees of freedom in translation but - in
contrast to conventional articulated robots - only one degree
of freedom in rotation. Therefore with SCARA robots it is not
possible to approach calibration poses with different tilts
(i.e., with different rotations around the x-and y-axis of
the calibration plate). Because up to now the hand-eye
calibration required tilted calibration poses, SCARA robots
could not be calibrated.
The new HDevelop example programs- hdevelop/Calibration/Hand-Eye/calibrate_hand_eye_scara_moving_cam.hdev and
- hdevelop/Calibration/Hand-Eye/calibrate_hand_eye_scara_stationary_cam.hdev
- 3d_machine_vision/handeye/scara_moving_cam_setup_01_[01-10].png and
- 3d_machine_vision/handeye/scara_stationary_cam_setup_01_[01-10].png.
- hdevelop/Calibration/Hand-Eye/calibrate_hand_eye_scara_stationary_cam_approx.hdev
- 3d_machine_vision/handeye/scara_stationary_cam_setup_01_calib_approx_01.png.
- hdevelop/Calibration/Hand-Eye/pick_and_place_scara_stationary_cam.hdev
- 3d_machine_vision/handeye/scara_stationary_cam_setup_01_metal_parts_[01-06].png.
Calibration → Monocular
- camera_calibration and binocular_calibration now support the values 'k1', 'k2', 'k3' and 'k1_i', 'k2_i', 'k3_i', respectively, which can be passed in the parameter EstimateParams.
Calibration → Multi-View
- calibrate_cameras and camera_calibration no longer optimize Sx for line scan cameras because Sx and Focus cannot be determined simultaneously for line scan cameras.
- For line scan calibration, the restriction that all markers of a calibration object must be visible in every observation has been removed.
Classification → Neural Nets
-
The MLP-based classifiers (for general classification and for
OCR) now provide a mechanism to automatically determine the
regularization parameters. For the general MLP classifier,
this can be achieved by calling set_regularization_params_class_mlp twice
with GenParamName set to 'num_outer_iterations' and
'num_inner_iterations', respectively, and with GenParamValue
set to a value > 0. For the OCR MLP classifier, this can
be achieved by calling set_regularization_params_ocr_class_mlp
analogously.
The new HDevelop example program- hdevelop/OCR/Neural-Nets/regularized_ocr_mlp.hdev
- are now parallelized internally. Depending on the number of cores available, this can result in a significant speedup on multi-core processors.
Filters → Color
- cfa_to_rgb now supports an
enhanced bilinear interpolation mode ('bilinear_enhanced')
that leads to fewer zipper-like and color artifacts at
edges.
The HDevelop example program- hdevelop/Filters/Color/cfa_to_rgb.hdev
Filters → Geometric Transformations
- mirror_image now supports non-quadratic images for the mode 'diagonal'. Until now, mirror_image supported only quadratic images for this mode.
Filters → Lines
-
HALCON has been extended with a procedure
calculate_lines_gauss_parameters to calculate the parameters
Sigma, Low, and High of the operator lines_gauss from the
width and the gray value contrast of the lines to be
extracted.
The HDevelop example programs- hdevelop/Applications/Measuring-2D/angio.hdev,
- hdevelop/Applications/Measuring-2D/segment_wedge_bonds.hdev,
- hdevelop/Applications/Object-Recognition-2D/roads.hdev,
- hdevelop/Applications/Surface-Inspection/detect_mura_defects_blur.hdev, and
- hdevelop/Filters/Lines/lines_gauss.hdev
Furthermore, the reference manual entry of lines_gauss has been extended with the formula that can be used to calculate the parameters Sigma, Low, and High of the operator lines_gauss from the width and the gray value contrast of the lines to be extracted.
Graphics → 3D Scene
-
HALCON now provides a new interface for the visualization of
3D object models. It has been extended by the following
operators:
- add_scene_3d_camera,
- add_scene_3d_instance,
- add_scene_3d_light,
- clear_scene_3d,
- create_scene_3d,
- display_scene_3d,
- get_display_scene_3d_info,
- remove_scene_3d_camera,
- remove_scene_3d_instance,
- remove_scene_3d_light,
- render_scene_3d,
- set_scene_3d_camera_pose,
- set_scene_3d_instance_param,
- set_scene_3d_instance_pose,
- set_scene_3d_light_param,
- set_scene_3d_param, and
- set_scene_3d_to_world_pose.
The new HDevelop example program- hdevelop/Graphics/Scene-3D/display_scene_3d.hdev
The HDevelop procedure library- procedures/general/visualize_object_model_3d.hdpl
The Solution Guide on 3D Vision has been extended by information on how to use this functionality.
Graphics → Window
-
The HALCON graphics operators are now automatically executed
by the appropriate thread on Windows and OS X systems. This
affects the following operators:
- clear_rectangle,
- clear_window,
- close_window,
- copy_rectangle,
- disp_arc,
- disp_arrow,
- disp_caltab,
- disp_channel,
- disp_circle,
- disp_color,
- disp_cross,
- disp_distribution,
- disp_ellipse,
- disp_image,
- disp_line,
- disp_lut,
- disp_obj,
- disp_polygon,
- disp_rectangle1,
- disp_rectangle2,
- disp_region,
- disp_xld,
- display_scene_3d,
- drag_region1,
- drag_region2,
- drag_region3,
- draw_circle,
- draw_circle_mod,
- draw_ellipse,
- draw_line,
- draw_line_mod,
- draw_lut,
- draw_nurbs,
- draw_nurbs_interp,
- draw_nurbs_interp_mod,
- draw_nurbs_mod,
- draw_point,
- draw_point_mod,
- draw_polygon,
- draw_rectangle1,
- draw_rectangle1_mod,
- draw_rectangle2,
- draw_rectangle2_mod,
- draw_region,
- draw_xld,
- draw_xld_mod,
- dump_window,
- dump_window_image,
- get_comprise,
- get_disp_object_model_3d_info,
- get_display_scene_3d_info,
- get_draw,
- get_fix,
- get_fixed_lut,
- get_font,
- get_font_extents,
- get_hsi,
- get_icon,
- get_insert,
- get_line_approx,
- get_line_style,
- get_line_width,
- get_lut,
- get_lut_style,
- get_mbutton,
- get_mbutton_sub_pix,
- get_mposition,
- get_mposition_sub_pix,
- get_mshape,
- get_os_window_handle,
- get_paint,
- get_part,
- get_part_style,
- get_pixel,
- get_rgb,
- get_shape,
- get_string_extents,
- get_tshape,
- get_window_extents,
- get_window_param,
- get_window_pointer3,
- get_window_type,
- move_rectangle,
- new_extern_window,
- new_line,
- open_textwindow,
- open_window,
- query_all_colors,
- query_color,
- query_colored,
- query_font,
- query_gray,
- query_insert,
- query_lut,
- query_mshape,
- query_paint,
- query_shape,
- query_tshape,
- query_window_type,
- read_char,
- read_string,
- set_color,
- set_colored,
- set_comprise,
- set_draw,
- set_fix,
- set_fixed_lut,
- set_font,
- set_gray,
- set_hsi,
- set_icon,
- set_insert,
- set_line_approx,
- set_line_style,
- set_line_width,
- set_lut,
- set_lut_style,
- set_mshape,
- set_paint,
- set_part,
- set_part_style,
- set_pixel,
- set_rgb,
- set_shape,
- set_tposition,
- set_tshape,
- set_window_dc,
- set_window_extents,
- set_window_param,
- set_window_type,
- slide_image,
- unproject_coordinates,
- update_window_pose,
- write_lut, and
- write_string.
Identification → Bar Code
-
The bar code reader is now more robust in finding potential
candidate regions. Interfering edges that are aligned with
the bar code will not disturb find_bar_code anymore. Also, the search for
candidate regions is more robust in the presence of noise or
distortions within the bar code. In conjunction with these
improvements, the parameters 'max_diff_orient' and 'slanted'
have been removed. The corresponding HDevelop examples
- hdevelop/Identification/Bar-Code/barcode_param_max_diff_orient.hdev
- hdevelop/Identification/Bar-Code/barcode_slanted.hdev
Note that, because of the improved robustness of the bar code reader, it may be necessary to revise existing bar code applications with respect to parameter settings. Because of the improvements, the resulting candidate regions will not be the same as in earlier HALCON versions and it may be necessary to adapt the settings of the bar code reader to best suit its new behavior. Additionally, although it is still possible to set the removed parameters 'max_diff_orient' and 'slanted', they have no effect on the result of the bar code reader. - The training mode of the bar code reader was significantly slower than a conventional call of find_bar_code. This made the parameter training unusable for very large input images. Now, the runtime has been improved significantly. In most cases, the runtime of the training mode is very close to a conventional call of find_bar_code.
-
The bar code reader is now more robust when decoding small resolution bar
codes. On internal test data, an improvement of 70% for the success rate
of find_bar_code on challenging noisy low
resolution images with respect to HALCON 11 was achieved. If general
resolutions are considered, improvements of 100% were achieved.
The reference manual entry of find_bar_code has been extended with the following advice: "This advice applies to bar code applications that use low resolution images, i.e., images in which a single bar is between one and two pixels wide. In these cases, one should optimize the bar code imaging system in order to eliminate noise and focal blur because a combination of these optical distortions lead to problems in the decodability of low resolution bar codes."
In addition, the success rate of find_bar_code for low resolution bar codes in the presence of noise and focal blur can be further improved via the new parameter 'meas_param_estimation'. If set to 'true' via the operator set_bar_code_param, a different approach to determine the internal smoothing parameters is used.
The new HDevelop example program- hdevelop/Identification/Bar-Code/barcode_param_meas_param_estimation.hdev
- barcode/ean13/ean13_meas_param_estimation_[01-10].png.
- find_bar_code now allows to
reject bar code candidate regions depending on their
contrast. This rejection can be enabled by setting
'contrast_min' to a value larger than 5 with the operator
set_bar_code_param. This allows
to reduce the runtime and the number of false decodes in
images with low contrast bar-like structures, in particular,
if one can ensure that bar codes always have a high contrast
in the image.
The new HDevelop example program- hdevelop/Identification/Bar-Code/barcode_param_contrast_min.hdev
- barcode/25interleaved/25interleaved_zeiss1.png.
-
The effect of the bar code parameters 'element_size_min' and
'element_size_max' was unclear and it was difficult to specify
optimal values. As a result, some users may have set these
parameters to unrealistic values. Now, both parameters control
the bar code reader according to their natural meaning. They
specify the minimal and maximal expected element size in
pixels.
Because of this modification of the influence of the parameters 'element_size_min' and 'element_size_max' on the bar code reader, it may be necessary to check existing bar code applications. It may be necessary to adapt the values of these two parameters to suit the application at hand. You may use the bar code parameter training in order to train the values for both parameters. - The training mode of the bar code reader required a maximum of one bar code per training image. Now, the training may be used on images with multiple bar codes as well. All bar codes contribute to the training result equally.
-
The bar code reader has been extended with the possibility to
specify the minimal width of the bar code. In conjunction
with this, the parameter 'element_height_min' has been
renamed to 'barcode_height_min' and a new parameter
'barcode_width_min' has been introduced. For backward
compatibility, 'element_height_min' is still supported. But
note, that the lower bound of this parameter has been changed
to 3 pixels.
The new HDevelop example program- hdevelop/Identification/Bar-Code/barcode_param_width_height.hdev
-
The bar code reader only supported a single mode for selecting decoding
results. This led to problems in rare cases. Now, a new result selection
mode based on a majority voting scheme exists. It is possible to enable
majority voting with the new parameter 'majority_voting' (list of values:
['true','false']). If majority voting is enabled, most of the scanlines are
evaluated and the decoding result that is returned by the majority of the
scanlines is returned as the overall result. By default, this mode is
disabled. Please note that setting the parameter to 'true' leads to a
slightly increased runtime since nearly all scanlines must be evaluated.
See the reference manual entry of set_bar_code_param for more details about this new
feature.
The new HDevelop example program- hdevelop/Identification/Bar-Code/barcode_param_majority_voting.hdev
- barcode/ean13.png.
-
HALCON has been extended with a procedure
- general/convert_decoded_string_code39_to_code32.hdvp
The new HDevelop example program- hdevelop/Identification/Bar-Code/code32.hdev
-
The bar code reader has been adapted to calculate the symbol
gradings of bar codes according to the latest ISO/IEC
standards.
Note that the results of the existing HDevelop example program- hdevelop/Identification/Bar-Code/print_quality_isoiec15416.hdev
Identification → Data Code
-
The 2D data code reader has been extended to support the
ISO/IEC 15415 quality gradings for reflectance margin,
contrast uniformity, and print growth for the 2D data code
types Data Matrix ECC 200, QR code, Micro QR code, and Aztec.
The HDevelop example program- hdevelop/Identification/Data-Code/ecc200_print_quality.hdev,
The reference manual entry of get_data_code_2d_results has been extended to describe the new ISO/IEC 15415 quality gradings for reflectance margin, contrast uniformity, and print growth.
The Solution Guide on 2D Data Codes has been extended to describe the new ISO/IEC 15415 quality gradings for reflectance margin, contrast uniformity, and print growth. -
The 2D data code reader now provides functionality for the
assessment of direct part mark quality, compliant with the SEMI
T10-0701 standard. Note that direct part mark quality assessment
is provided only for the Data Matrix ECC 200 code.
The new HDevelop example program- hdevelop/Identification/Data-Code/ecc200_direct_mark_quality_semi_t10.hdev
- For the 2D data code reader the print quality grading of the Data Matrix ECC 200 clock track is now more robust against print growth. The tracking of the symbol has been refined.
Identification → Sample-Based
- In some cases, the identification rate of the sample-based identification was suboptimal if different objects were trained with a different number of sample images. In such cases, the robustness of the identification of objects for which more training images were passed was lower compared to objects for which fewer training images were passed. Now, the sample-based identification allows to use a different number of training images per class. Thus it is no longer necessary that the number of training images is approximately similar for each different view of each object. Furthermore, the sample-based identification is now more robust to image clutter.
Image → Features
- fit_surface_first_order and fit_surface_second_order are now parallelized on internal data level for Algorithm='huber' and Algorithm='tukey'.
Image → Format
- The operators now support images of type complex and vector field.
- crop_rectangle1 and crop_part allowed to crop just one rectangle per image. Both operators now accept an array of coordinates and thus let the user crop multiple rectangles from each input image.
Image → Manipulation
- set_grayval and get_grayval now support complex and vector field
images. For these image types, two gray values must be specified or are
returned per pixel. In previous HALCON versions, get_grayval supported complex images, but handled them by
returning the absolute value of the complex number at the requested pixel.
Suppose that get_grayval was called as follows:
get_grayval (Image, R, C, V)
To achieve the old semantics, the following lines of code can be inserted after the call to get_grayval (for complex images only):
J := [0:2:|V|-2]
VP := sqrt(V[J]*V[J]+V[J+1]*V[J+1])
If a single pixel is requested, this reduces to:
VP := sqrt(V[0]*V[0]+V[1]*V[1])
Matching → Deformable
- get_deformable_model_contours
returned the contours in the world plane coordinate system if
the model was created by create_planar_calib_deformable_model_xld.
Otherwise the contours were returned in the (undistorted)
image coordinate system. Now, for convenience reasons, it is
possible to specify the coordinate system of the output
contours of get_deformable_model_contours. For this,
set_deformable_model_param
offers the new generic parameter
'get_deformable_model_contours_coord_system', which can be
set to 'world' or 'image' in order to depart from the default
behavior. The reference manual entries of get_deformable_model_contours, set_deformable_model_param, and get_deformable_model_params were adapted
accordingly. Furthermore, the HDevelop example programs
- hdevelop/Applications/Position-Recognition-3D/locate_car_door.hdev,
- hdevelop/Applications/Position-Recognition-3D/locate_engine_parts.hdev, and
- explore_halcon.hdev
Note that models for which the default behavior of get_deformable_model_contours was changed by using the new generic parameter 'get_deformable_model_contours_coord_system' of set_deformable_model_param cannot be read by previous HALCON versions.
OCR
-
HALCON has been extended with the pretrained OCR fonts 'Document' and
'Industrial' with regularized weights and a rejection class. Because of
the regularization, the new pretrained OCR fonts provide more meaningful
confidences. Because of the rejection class it is possible to
distinguish characters from background clutter.
The new pretrained fonts with regularization weights and without a rejection class are:- Document_NoRej.omc,
- Document_0-9_NoRej.omc,
- Document_0-9A-Z_NoRej.omc,
- Document_A-Z+_NoRej.omc,
- Industrial_NoRej.omc,
- Industrial_0-9_NoRej.omc,
- Industrial_0-9+_NoRej.omc,
- Industrial_0-9A-Z_NoRej.omc, and
- Industrial_A-Z+_NoRej.omc.
- Document_Rej.omc,
- Document_0-9_Rej.omc,
- Document_0-9A-Z_Rej.omc,
- Document_A-Z+_Rej.omc,
- Industrial_Rej.omc,
- Industrial_0-9_Rej.omc,
- Industrial_0-9+_Rej.omc,
- Industrial_0-9A-Z_Rej.omc, and
- Industrial_A-Z+_Rej.omc.
The following pretrained fonts are no longer shipped with HALCON:- Document.omc,
- Document_0-9.omc,
- Document_0-9A-Z.omc,
- Document_A-Z+.omc,
- Industrial.omc,
- Industrial_0-9.omc,
- Industrial_0-9+.omc,
- Industrial_0-9A-Z.omc, and
- Industrial_A-Z+.omc.
The documentation of the Solution Guide I has been extended accordingly. -
The pretrained OCR fonts OCRA, OCRB, Industrial, and Document have been
extended with the currency symbols pound ('£') and yen ('¥').
Additionally, besides the Industrial font now also the OCRA, the OCRB, and
the Document fonts include the currency symbol euro ('€'). Thus, the
three mentioned currency symbols are included in the following pretrained
font files:
- Industrial_NoRej.omc,
- Industrial_Rej.omc,
- Industrial_0-9+_NoRej.omc,
- Industrial_0-9+_Rej.omc,
- Industrial_A-Z+_NoRej.omc,
- Industrial_A-Z+_Rej.omc,
- Document_NoRej.omc,
- Document_Rej.omc,
- Document_A-Z+_NoRej.omc,
- Document_A-Z+_Rej.omc,
- OCRA.omc,
- OCRA_A-Z+.omc,
- OCRB.omc, and
- OCRB_A-Z+.omc.
Regions → Creation
- gen_region_polygon_xld now accepts arrays of XLD contours and returns an array of regions.
Regions → Tests
- test_region_point now also accepts one region and several points.
System → I/O Devices
- HALCON now provides a generic interface for accessing I/O devices. In detail, it has been extended by the following new operators:
-
HALCON has been extended with an I/O interface for OPC UA
that allows reading and writing data to and from OPC UA
servers.
The new HDevelop example programs- hdevelop/System/IO-Devices/opc_ua_browse_variables.hdev,
- hdevelop/System/IO-Devices/opc_ua_channel_access.hdev,
- hdevelop/System/IO-Devices/opc_ua_discovery.hdev,
- hdevelop/System/IO-Devices/opc_ua_parameters.hdev, and
- hdevelop/System/IO-Devices/opc_ua_security.hdev
-
HALCON has been extended with an I/O interface for OPC
Classic that allows reading and writing data to and from OPC
Classic servers.
The new HDevelop example programs- hdevelop/System/IO-Devices/opc_classic_browse_variables.hdev,
- hdevelop/System/IO-Devices/opc_classic_channel_access.hdev, and
- hdevelop/System/IO-Devices/opc_classic_parameters.hdev
-
HALCON now also provides an I/O interface for accessing the
Interface Digital I/O boards that uses the Interface SDK and
allows the easy controlling of digital input and digital
output devices.
The new HDevelop example programs- hdevelop/System/IO-Devices/interface_digital_read.hdev and
- hdevelop/System/IO-Devices/interface_digital_write.hdev
-
HALCON has been extended with an Advantech I/O interface that
uses the Advantech SDK and allows the easy controlling of
digital input and digital output devices.
The new HDevelop example programs- hdevelop/System/IO-Devices/advantech_digital_read.hdev and
- hdevelop/System/IO-Devices/advantech_digital_write.hdev
-
HALCON has been extended with a National Instruments NI-DAQmx
I/O interface that uses the National Instruments NI-DAQmx SDK
and allows the easy controlling of digital input and digital
output devices.
The new HDevelop example programs- hdevelop/System/IO-Devices/nidaqmx_counter.hdev,
- hdevelop/System/IO-Devices/nidaqmx_digital_read.hdev, and
- hdevelop/System/IO-Devices/nidaqmx_digital_write.hdev
-
HALCON has been extended with a Contec I/O interface that
uses the Contec SDK and allows the easy controlling of
digital input and digital output devices.
The new HDevelop example programs- hdevelop/System/IO-Devices/contec_digital_read.hdev and
- hdevelop/System/IO-Devices/contec_digital_write.hdev
System → Sockets
- open_socket_accept now provides the generic parameter 'address', which can be used to instruct the socket to accept only connection requests addressed to this specific address.
Tuple → Element Order
- tuple_sort is now parallelized on internal data level. Note that only the sorting of tuples containing native arrays with more than 4096 elements is parallelized. With 8 threads the achieved speedup is up to factor 3.
XLD → Creation
- For gen_polygons_xld the methods 'sato' and 'ray' have been deprecated and have been removed from the documentation. They are still supported as undocumented features for reasons of backward compatibility. It is recommended that all applications use the method 'ramer'.
Legacy Operators
Note that legacy operators may be discontinued in a future major release. See the reference manual entries of these operators for details on how to replace them.
Legacy → 2D Metrology
The operators are now legacy. Use align_metrology_model instead of transform_metrology_object.Legacy → Filters
- gauss_image is now declared as legacy, i.e., its use is now deprecated in favor of the operator gauss_filter.
Legacy → Segmentation
- bin_threshold is now legacy and is only provided for compatibility reasons. New applications should use the new operatorbinary_threshold instead.
Previously Legacy → Calibration → Calibration Object
- The operator create_caltab previously was legacy, but now is back with new functionality to create description files for the new calibration plates.
Legacy → OCR
- create_text_model now is legacy. Its functionality is provided by the new operatorcreate_text_model_reader.
Legacy → Tools
-
The close_all_* and
clear_all_* operators are legacy now. The
operators appear in the Legacy chapter, but they are not
mentioned in the user manuals, do not appear in examples, and
are not linked in 'see also', 'predecessor', or 'successor'
slots in the reference manual.
The following 49 operators are affected:- clear_all_bar_code_models,
- clear_all_barriers,
- clear_all_calib_data,
- clear_all_camera_setup_models,
- clear_all_class_gmm,
- clear_all_class_knn,
- clear_all_class_lut,
- clear_all_class_mlp,
- clear_all_class_svm,
- clear_all_class_train_data,
- clear_all_color_trans_luts,
- clear_all_component_models,
- clear_all_conditions,
- clear_all_data_code_2d_models,
- clear_all_deformable_models,
- clear_all_descriptor_models,
- clear_all_events,
- clear_all_lexica,
- clear_all_matrices,
- clear_all_metrology_models,
- clear_all_mutexes,
- clear_all_ncc_models,
- clear_all_object_model_3d,
- clear_all_ocr_class_knn,
- clear_all_ocr_class_mlp,
- clear_all_ocr_class_svm,
- clear_all_sample_identifiers,
- clear_all_scattered_data_interpolators,
- clear_all_serialized_items,
- clear_all_shape_model_3d,
- clear_all_shape_models,
- clear_all_sheet_of_light_models,
- clear_all_stereo_models,
- clear_all_surface_matching_results,
- clear_all_surface_models,
- clear_all_templates,
- clear_all_text_models,
- clear_all_text_results,
- clear_all_training_components,
- clear_all_variation_models,
- close_all_bg_esti,
- close_all_class_box,
- close_all_files,
- close_all_framegrabbers,
- close_all_measures,
- close_all_ocrs,
- close_all_ocvs,
- close_all_serials, and
- close_all_sockets.
Bug Fixes
Miscellaneous
- Operators parallelized on data level had a memory leak under Windows operating systems when the thread pool for the automatic operator parallelization (AOP) had been switched off. This problem has been fixed.
- Operators parallelized on channel level leaked memory in certain cases. The problem occurred only if operators with multiple input object parameters were called with multichannel images with a mismatching number of channels, such that an error was raised. This problem has been fixed.
- HALCON hung if the Windows system call SystemParametersInfo was called. This problem also caused HDevelop to hang if the keyboard layout was switched while HDevelop was running. This problem has been fixed.
-
The operators
gen_gauss_pyramid, zoom_image_factor,
and zoom_image_size returned slightly incorrect results in certain cases. If
the scale factor was exactly 0.5 and Interpolation was set to
'constant' or weighted', the resulting images were slightly
too dark because of incorrect rounding in these cases. This
problem has been fixed. Note that the following operators
were also affected and therefore might show a slightly
different behavior:
- add_sample_identifier_preparation_data,
- add_sample_identifier_training_data,
- apply_sample_identifier,
- best_match_mg,
- best_match_rot_mg,
- binocular_disparity,
- binocular_distance,
- check_par_hw_potential,
- cluster_model_components,
- create_aniso_shape_model,
- create_aniso_shape_model_xld,
- create_component_model,
- create_local_deformable_model,
- create_local_deformable_model_xld,
- create_ncc_model,
- create_planar_calib_deformable_model,
- create_planar_calib_deformable_model_xld,
- create_planar_uncalib_deformable_model,
- create_planar_uncalib_deformable_model_xld,
- create_scaled_shape_model,
- create_scaled_shape_model_xld,
- create_shape_model,
- create_shape_model_3d,
- create_shape_model_xld,
- create_template,
- create_template_rot,
- create_trained_component_model,
- determine_deformable_model_params,
- determine_ncc_model_params,
- determine_shape_model_params,
- fast_match_mg, find_aniso_shape_model,
- find_aniso_shape_models,
- find_calib_object,
- find_caltab,
- find_component_model,
- find_data_code_2d,
- find_local_deformable_model,
- find_ncc_model,
- find_planar_calib_deformable_model,
- find_planar_uncalib_deformable_model,
- find_scaled_shape_model,
- find_scaled_shape_models,
- find_shape_model,
- find_shape_model_3d,
- find_shape_models,
- gen_gauss_pyramid,
- gen_initial_components,
- inspect_shape_model,
- optimize_aop,
- reconstruct_surface_stereo,
- set_local_deformable_model_metric,
- set_planar_calib_deformable_model_metric,
- set_planar_uncalib_deformable_model_metric,
- set_shape_model_metric,
- text_line_orientation,
- text_line_slant,
- train_model_components,
- zoom_image_factor, and
- zoom_image_size.
- create_aniso_shape_model,
- create_aniso_shape_model_xld,
- create_component_model,
- create_local_deformable_model,
- create_local_deformable_model_xld,
- create_ncc_model,
- create_planar_calib_deformable_model,
- create_planar_calib_deformable_model_xld,
- create_planar_uncalib_deformable_model,
- create_planar_uncalib_deformable_model_xld,
- create_scaled_shape_model,
- create_scaled_shape_model_xld,
- create_shape_model,
- create_shape_model_3d,
- create_shape_model_xld,
- create_template,
- create_template_rot,
- create_trained_component_model,
- set_local_deformable_model_metric,
- set_planar_calib_deformable_model_metric,
- set_planar_uncalib_deformable_model_metric, and
- set_shape_model_metric.
1D Measuring
- measure_pairs sometimes returned incorrect values for IntraDistance when measuring along a circular arc, i.e., if the measure was created with gen_measure_arc. This problem has been fixed.
2D Metrology
- apply_metrology_model did not always return a result when camera parameters and a measurement plane pose was set. This problem has been fixed. Note that result parameters in existing programs may change slightly.
- apply_metrology_model sometimes did not find a rectangle if a measurement plane was set. The problem occurred if the chosen measurement plane had a rotation around the z-axis different from zero. This problem has been fixed.
- get_metrology_object_param returned wrong values for the main axis if the values of at least 2 ellipses were returned. This problem has been fixed.
- set_metrology_object_param did not return an error if measure_distance was set to a value equal or below zero. This problem has been fixed. Now the error code 1312 ("Wrong value of control parameter: 12) is returned.
3D Matching → Shape-Based
- create_cam_pose_look_at_point returned three poses in CamPose if in RefPlaneNormal a tuple with three elements, which represent the three components of the normal vector, was passed. In this case, in CamPose a tuple of 21 elements was returned, which contained the correct pose three times. This problem has been fixed.
- create_shape_model_3d crashed in rare cases if no OpenGL was available on the system or OpenGL was disabled by previously calling set_system ('opengl_hidden_surface_removal_enable', 'false'). This problem has been fixed.
- create_shape_model_3d sometimes needed a very long time in HALCON XL if 'opengl_hidden_surface_removal_enable' was set to 'false' and DistMin was set to a small value such that the camera was very close to the 3D model, and hence the projection of the 3D model into the image became large. This problem has been fixed.
- find_shape_model_3d in rare cases did not check the overlap between matches correctly. In such cases, matches that overlapped each other by more than the fraction that was passed in the generic parameter 'max_overlap' were returned. This problem has been fixed.
3D Object Model → Features
- distance_object_model_3d returned the wrong error code 1306 ("Wrong value of control parameter: 6") if the passed object model ObjectModel3DTo did not have the required attributes. This problem has been fixed. Now, in this case the error code 9514 ("Required attribute missing in 3D object model") is returned.
- get_object_model_3d_params returned incorrect diameters for rotated boxes. This problem has been fixed.
- max_diameter_object_model_3d always returned 0 for 3D primitives. This problem has been fixed.
3D Object Model → Segmentation
- fit_primitives_object_model_3d and segment_object_model_3d had very restrictive default values for the generic parameters 'min_radius' and 'max_radius'. Therefore, in many cases, the operators did not return any results. Now, the default values have been relaxed to make them suitable for a broader range of applications. Note that if the parameters 'min_radius' and 'max_radius' are not explicitely specified, fit_primitives_object_model_3d and segment_object_model_3d may now return fitted primitives in cases where no results were returned in earlier HALCON versions.
3D Object Model → Transformations
- convex_hull_object_model_3d returned wrong results if a 3D object model was passed that contains points that all lie in a plane. This problem has been fixed.
- project_object_model_3d in rare cases returned fragmented contours if there was no OpenGL support. This problem has been fixed.
- register_object_model_3d_global, register_object_model_3d_pair, and create_surface_model crashed if one of the passed 3D object models contained points where one coordinate had the non-regular floating point values 'infinity' or 'not a number'. This problem has been fixed.
- render_object_model_3d and disp_object_model_3d did not always throw an exception if the passed generic parameters were invalid. This problem has been fixed.
- sample_object_model_3d copied extended attributes if the parameter Method was set to 'accurate' or 'accurate_use_normals'. This problem has been fixed.
- sample_object_model_3d returned slightly incorrect results if the parameter Method was set to 'accurate' or to 'accurate_use_normals'. This problem has been fixed.
- sample_object_model_3d crashed or showed undefined behavior when sampling faces (triangles, polygons, or primitives) with the sampling distance set to zero. This problem has been fixed. The operator now returns the error code 1303 ("Wrong value of control parameter: 3") instead.
- triangulate_object_model_3d, called with the parameter Method set to 'greedy', returns consistently ordered triangles (clockwise or anti-clockwise) over the entire surface. However, small changes of the 3D object model used as input could have switched the orientation of the triangles in the triangulated 3D object model. This impacted on further processing steps of the triangulated 3D object model, for example with sample_object_model_3d or create_surface_model and find_surface_model. This problem has been fixed. Now, the orientation of the triangles is chosen in such a way that for the majority of triangles [0,1,2] the triangle normals (P1-P0)x(P2-P0) lie in the same half space as the mean of the input point normals N0, N1 and N2.
3D Reconstruction → Binocular Stereo
- binocular_disparity did not initialize points outside the image domain. Instead, points outside the image domain were set to a random value. This problem has been fixed.
- binocular_disparity, binocular_distance, and reconstruct_surface_stereo sometimes returned unexpected results. This problem has been fixed.
- binocular_distance did not return an error if RelPoseRect contained strings. This problem has been fixed.
3D Reconstruction → Sheet of Light
- create_sheet_of_light_model crashed if the number of parameters in GenParamNames was not equal to the number of values in GenParamValues. This problem has been fixed.
- measure_profile_sheet_of_light computed wrong results if the last profile was empty and the calibration type was set to 'xyz' or 'offset_scale'. This problem has been fixed.
- set_profile_sheet_of_light did not take into account more than one MovementPoses. If MovementPoses contained only one pose, there was no problem. If the number of elements in MovementPoses was the height of the disparity image times 7, which is also correct, an error was raised. If the number of elements in MovementPoses was incorrect, the algorithm did not raise a corresponding error. Instead of the poses passed in MovementPoses, the algorithm then used the current setting of the 'movement_pose' of the sheet of light model. If the 'movement_pose' of the sheet of light model was not set, an error was raised. These problems have been fixed. Now, if MovementPoses contains more than one pose, the number of elements in MovementPoses must be equal to seven times the height of the disparity image, otherwise an error is raised. The algorithm now uses the poses passed in MovementPoses.
- set_profile_sheet_of_light and apply_sheet_of_light_calibration may have crashed if the region of the input image Disparity did not intersect all lines. Note that set_profile_sheet_of_light crashed only if 'calibration' was set to 'none' or 'xz'. apply_sheet_of_light_calibration crashed only if 'calibration' was set to 'xz'. These problems have been fixed.
- set_profile_sheet_of_light ignored empty profiles. This problem has been fixed and set_profile_sheet_of_light is now consistent with apply_sheet_of_light_calibration.
Calibration → Hand-Eye
-
The semantic type of the parameter ObjInCameraPose of
set_calib_data_observ_pose and
get_calib_data_observ_pose was
real instead of pose. This problem has been fixed.
Note that changing the semantic type of ObjInCameraPose affects HALCON/C++ and HALCON/.NET, where SetCalibDataObservPose and GetCalibDataObservPose now get and return HPose instead of HTuple, respectively.
Calibration → Multi-View
- get_calib_data returned camera parameters that were not available for the currently set camera if the parameter DataName was set to 'calib_settings' or 'excluded_settings'. This problem has been fixed. Now, get_calib_data only returns camera parameters that are available for the currently set camera. Furthermore, get_calib_data now returns the default values for 'calib_settings' and 'excluded_settings' for the currently set camera if the parameter ItemIdx is set to 'general'.
- get_calib_data returned incorrect statistical values. This problem has been fixed. Now, get_calib_data returns correct statistical information.
- set_calib_data allowed to set camera parameters that do not match the current camera type. This problem has been fixed. Now, set_calib_data sets only camera parameters that are supported by the underlying camera type.
- set_calib_data crashed in some cases where numbers were passed instead of strings. The problem occurred in particular, if the parameter ItemType was set to 'camera' and numbers were given for the parameter DataValue and if ItemType was set to 'calib_obj_pose', ItemIdx was not set to 'general', and numbers were given for DataValue. Furthermore, if ItemType was set to 'calib_obj_pose', ItemIdx was set to 'general', and numbers were given for DataValue, set_calib_data returned the wrong error code 1301 ("Wrong value of control parameter: 1"). These problems have been fixed. Now, the error code 1205 ("Wrong type of control parameter: 5") is returned in these cases.
Classification → Gaussian Mixture Models
- get_class_train_data_gmm, get_class_train_data_mlp, and get_class_train_data_svm crashed if the passed classifier handle did not contain any training data. This problem has been fixed.
Classification → K-Nearest Neighbors
- Exact k-NN-Classification did not work as expected. This problem has been fixed. Now, setting the generic parameter 'num_checks' to 0 triggers an exact search.
Classification → Neural Nets
- add_class_train_data_mlp added wrong training data to the MLP if the number of input nodes was different from the number of output nodes. This problem has been fixed.
- create_class_mlp crashed if it ran out of memory. This problem has been fixed.
File
- list_image_files returned invalid paths in the output parameter ImageFiles if it was called with the parameter ImageDirectory set to a path that started with two slashes ('//'). In this case, the returned paths had only one leading slash. This problem has been fixed.
File → Images
- read_image crashed with 32-bit BMP images that contained only gray value data. This problem has been fixed.
- read_sequence could not handle files larger than 2GB on Windows systems. This problem has been fixed
File → XLD
- read_contour_xld_dxf did not support POLYLINEs of the type 3D POLYLINE although the status message stated that only the z coordinates are ignored. This problem has been fixed. Now, the x and y coordinates of POLYLINEs of type 3D POLYLINE are read and respective (2D) contours are returned for 3D POLYLINES.
- read_polygon_xld_dxf might have returned corrupt polygons that could have caused a crash in successive operators using these polygons. This problem has been fixed.
Filters → Edges
- edges_sub_pix and lines_gauss did not close contours in rare cases. This problem has been fixed.
- info_edges returned incorrect results in certain cases. This problem has been fixed.
Filters → FFT
- power_byte did not round correctly. This problem has been fixed.
Filters → Geometric Transformations
- projective_trans_image, projective_trans_image_size, and gen_projective_mosaic may have crashed with very large images. This problem has been fixed.
Filters → Inpainting
- harmonic_interpolation could have crashed when processing a color image on a multicore processor with automatic operator parallelization turned on. This problem has been fixed.
Filters → Lines
- lines_gauss had a memory leak if a runtime error occurred. This problem has been fixed.
Filters → Texture
- texture_laws returned incorrect
values on compute devices in rare cases. Only filters of width
7 and specific image widths were affected.
This problem has been fixed.
Graphics → Output
- disp_circle was inconsistent with gen_circle. It did not produce the same results as gen_circle followed by disp_region. This problem has been fixed.
- disp_ellipse and disp_rectangle2 allowed negative values for the half-axes, which may have led to an error. This problem has been fixed.
- disp_object_model_3d and render_object_model_3d used incorrect colors or shading in specific cases. This problem occurred if the OpenGL compatibility mode was activated and points were rendered for at least one model. This problem has been fixed.
- disp_object_model_3d crashed if the index appended to a generic parameter name was negative. Moreover, disp_object_model_3d crashed if intensity_idx, intensity_red_idx, intensity_green_idx, or intensity_blue_idx referred to a non-existing object model of index idx. These problems have been fixed.
- disp_object_model_3d returned the wrong error code 1306 ("Wrong value of control parameter: 6") if the index appended to a generic parameter name was invalid or referred to a non-existing object model. This problem has been fixed. Now, the error code 1305 ("Wrong value of control parameter: 5") is returned. Note that programs that evaluate the returned error codes of disp_object_model_3d must be adapted accordingly.
- disp_object_model_3d did not display poses if 'colored' was used after 'disp_pose' or 'disp_pose_n'. This problem has been fixed.
- The visualization of 3D object models provided by the procedure visualize_object_model_3d did not fit properly into the given window if the image part to be displayed by this window and its size were not identical. This may have happened if dev_set_part has been called explicitly for the window or if the window has been opened or resized with one of the procedures dev_open_window_fit_image, dev_open_window_fit_size, dev_resize_window_fit_image, or dev_resize_window_fit_size. This problem has been fixed.
-
The procedure visualize_object_model_3d has been adapted to be
more consistent with the operator disp_object_model_3d.
visualize_object_model_3d provides the possibility to use the
current window content as background for the visualization of
the 3D object model. This possibility is also provided by
disp_object_model_3d. In contrast to
disp_object_model_3d, where this is
controlled with the parameter 'disp_background', which has the
default value 'false', in visualize_object_model_3d, the
respective parameter was 'use_background' and had the default
value 'true'. To make the parameters and their default values
more consistent, the respective parameter of
visualize_object_model_3d has been changed to 'disp_background'
and its default value has been changed to 'false'. For
compatibility reasons, the old parameter 'use_background' is
supported as well. In addition, if 'use_background' (now:
'disp_background') was set to 'false', the window was cleared
when leaving visualize_object_model_3d. Now, the behavior is
similar to the case when 'disp_background' is set to 'true',
i.e., the 3D object model is displayed in the window.
Note that because of the change of the default behavior of visualize_object_model_3d with respect to the use of the currently displayed window content as background for the visualization, you might have to adapt those HDevelop example programs that use the procedure visualize_object_model_3d. If you displayed, e.g., a background image or some messages before the call of visualize_object_model_3d without having set the parameter 'use_background' to 'false', you now have to set the new generic parameter 'disp_background' to 'true', explicitly. In addition, if 'use_background' (now: 'disp_background') was set to 'false', the window was cleared when leaving visualize_object_model_3d. Now, the behavior is similar to the case when 'disp_background' is set to 'true', i.e., the 3D object model is displayed in the window. To achieve the old behavior, dev_clear_window has to be called explicitly after the call of visualize_object_model_3d.
Graphics → Parameters
- set_line_style did not return an error for some invalid patterns. This problem has been fixed. Additionally, the reference manual entry has been extended with the valid range for the parameter 'Style' (1-120).
Graphics → Text
- query_font returned monospaced fonts (e.g., Courier or Consolas) incorrectly on Windows. Instead of returning '*' for width and height, query_font returned a number for width and height, even if arbitrary sizes were possible in set_font. This problem has been fixed.
Graphics → Window
- clear_window did not reset the text cursor position correctly. This problem has been fixed. clear_window now sets the text cursor position to (1,1) in window coordinates.
Identification → Bar Code
- decode_bar_code_rectangle2 rejected successfully decoded candidates in some special cases. This problem has been fixed.
- find_bar_code sometimes returned duplicate symbol regions. This was the case if there were two candidate regions for one bar code. The bar code reader detected this overlap and returned only one result in DecodedStrings but two regions in SymbolRegions. This problem has been fixed.
- find_bar_code did not read certain bar codes of type GS1 DataBar Limited correctly because the decoding algorithm was not adapted to the new symbol structure of GS1 DataBar Limited. This problem has been fixed.
- get_bar_code_result calculated the decodability incorrectly for EAN-13, EAN-8, UPC-A, and UPC-E bar codes. This happened also if an Add-On (Add-On 2, Add-On 5) was added to one of the four code types. This problem has been fixed.
- The bar code reader did not decode multiple bar codes that were located close to each other horizontally. This problem has been fixed. Now, multiple bar codes, located close to each other horizontally, are decoded correctly in general.
- The bar code reader for composite codes and the data code reader for PDF417 codes sometimes returned varying results depending on the number of threads the HALCON library used. This problem has been fixed.
Identification → Data Code
- find_data_code_2d in very rare cases trained the parameter 'finder_pattern_tolerance' for Data Matrix ECC 200 codes incorrectly. This problem has been fixed.
- get_data_code_2d_results returned an incorrect unused error correction grade for Data Matrix ECC 200 and QR codes for quality_aimdpm_1_2006 when the polarity was set to 'light_on_dark' and the code was light on dark. This problem has been fixed.
- get_data_code_2d_results returned an incorrect unused error correction grade for Aztec codes for quality_aimdpm_1_2006 when the polarity was light on dark. This problem has been fixed.
- The Aztec code reader did not handle the ECI protocol correctly. The reader failed to decode ECI character sets 000001 through 000009. Furthermore, it doubled the '\' of the ECI escape sequence instead of all other occurrences of the byte value 92 ('\'). This problem has been fixed.
- The data code print quality inspection for Aztec Codes returned wrong values for UEC in some cases. This problem has been fixed
- The data code quality grading of unused error correction was incorrect for Data Matrix ECC 200, QR code, Micro QR code, and Aztec when the symbol had error correction codewords reserved for error detection. This problem has been fixed.
- The QR code reader returned incorrect grades for unused error correction in most cases. This problem occurred most likely with module sizes larger than 4 pixels. This problem has been fixed. Note that this problem has already been fixed in HALCON 11.0.3.2.
- The QR code reader in rare cases returned the error 8506. This problem has been fixed.
- The Data Matrix ECC 200 code reader in rare cases produced duplicate results, when the parameter 'finder_pattern_tolerance' was set to 'any' or 'low'. This problem has been fixed.
- The Data Matrix ECC 200 reader returned false positives in very rare cases. The decoded data of these false positives contained values larger than 255. This problem has been fixed.
- Print quality inspection of non-square Data Matrix ECC 200 codes may have returned some incorrect grades and values for Fixed Pattern Damage, Axial Nonuniformity, Grid Nonuniformity, and Unused Error Correction. This problem has been fixed.
- For Data Matrix ECC 200 codes, the data code reader in very rare cases returned incorrect codes when the code was found with 'module_grid' set to 'variable'. This problem has been fixed.
- The ISO/IEC 15415 and AIMDPM-1-2006 print quality grades and values of QR codes were incorrect. This problem has been fixed.
- The AIM DPM-1-2006 cell contrast grade was evaluated with the wrong grading table. This problem has been fixed.
- The PDF417 reader sometimes failed to decode if one finder pattern could not be detected or only one finder pattern was present. The latter is always the case for Truncated/Compact PDF417 codes. This problem has been fixed.
- The PDF417 reader was sometimes not able to find the data code if the polarity was set to light_on_dark. This problem has been fixed.
Identification → Sample-Based
- prepare_sample_identifier in very
rare cases did not work correctly if an identical set of
preparation images was added to the sample identifier multiple
times by using add_sample_identifier_preparation_data. In
this case, the robustness of the identification was
significantly reduced. This problem has been fixed.
Note that because of the fix the resulting prepared sample identifier slightly differs from the sample identifier that was prepared with previous HALCON versions with the same set of preparation images. Consequently, the sample-based identification may show a slightly different behavior compared to previous HALCON versions.
Image → Channel
-
returned a wrong error code if
the image to be decomposed did not have enough channels. Now,
instead of the error code 9003 ("Undefined gray values") the error
code 3359 ("Wrong number of image channels") is returned.
Because of a fix concerning an error code that may be returned by decompose2, decompose3, decompose4, decompose5, decompose6, and decompose7, programs that evaluate the error code returned by these operators must be adapted. Now, instead of the error code 9003 ("Undefined gray values") the error code 3359 ("Wrong number of image channels") is returned if the image to be decomposed does not have enough channels.
Image → Creation
- gen_image_surface_first_order and gen_image_surface_second_order truncated the gray values instead of rounding them for uint2 images. This problem has been fixed.
Image → Type Conversion
- The operators did not raise an error if the input consisted of multichannel images. Instead, only the first channel was processed and additional channels of the first iconic input object were copied to the output. This problem has been fixed.
Matching → Correlation-Based
- create_ncc_model in rare cases crashed or returned the error code 6041 ("No memory block allocated at last"). This problem has been fixed. Note that this problem has already been fixed in HALCON 11.0.3.1.
Matching → Deformable
- create_planar_calib_deformable_model_xld might have crashed if the number of shape model points were too small. This problem has been fixed. Now, the error code 8510 ("Number of shape model points too small") is returned in this case.
- find_planar_calib_deformable_model in rare cases returned different results when called multiple times on 32-bit systems. This problem has been fixed.
- find_planar_uncalib_deformable_model provides the possibility to restrict the extent of the change of angles and anisotropic scalings imposed by the projective transformation that encode the position of the found instances of the model. This was controlled with the two generic parameters 'max_angle_distortion' and 'max_aniso_scale_distortion'. These parameter names were misleading. Therefore, they were replaced by the new generic parameters 'angle_change_restriction' and 'aniso_scale_change_restriction'. The old parameters are still supported for backward compatibility.
Matching → Descriptor-Based
- find_calib_descriptor_model and find_uncalib_descriptor_model did not accept values larger than 20 for NumMatches. This problem has been fixed.
Matching → Gray-Value-Based
- create_template and create_template_rot may have corrupted memory in case of an error. Subsequent calls to create_all_templates (e.g., by pressing F2 in HDevelop) could have caused a crash. This problem has been fixed.
Matching → Shape-Based
-
The operators
- create_shape_model_xld,
- create_scaled_shape_model_xld,
- create_aniso_shape_model_xld,
- create_local_deformable_model_xld,
- create_planar_calib_deformable_model_xld, and
- create_planar_uncalib_deformable_model_xld
- find_shape_model sometimes exceeded the timeout significantly under some circumstances, especially with textured images and low values of MinContrast and MinScore. This problem has been fixed.
- find_shape_model, find_shape_models, find_scaled_shape_model, find_scaled_shape_models, find_aniso_shape_model, and find_aniso_shape_models crashed in rare cases if the parameter SubPixel was set to anything else but 'none'. This problem has been fixed.
Morphology → Region
-
The HALCON morphology operators
- erosion1,
- erosion2,
- erosion_circle,
- erosion_rectangle1,
- erosion_golay,
- erosion_seq,
- dilation1,
- dilation2,
- dilation_circle,
- dilation_rectangle1,
- dilation_golay,
- dilation_seq,
- minkowski_add1,
- minkowski_add2,
- minkowski_sub1, and
- minkowski_sub2
OCR → Segmentation
- find_text may have returned warnings if low level error messages were switched on and 'local_mem_warnings' were set to 'true'. This problem has been fixed.
- select_characters sometimes returned characters twice. This problem has been fixed.
- set_text_model_param crashed when a text_line_structure with a negative index was passed. Furthermore, it was possible to pass illegal text_line_structures, which could lead to an incorrect behavior of find_text. These problems have been fixed.
Regions → Creation
- gen_circle and gen_ellipse returned an empty region if they were called with a huge radius/huge radii. This problem has been fixed.
Regions → Features
- select_shape returned wrong results if the operator was called with the feature 'area_holes' and real values for the parameters Min and Max. This problem has been fixed.
- The operators returned the error code 1401 ("Wrong number of values of control parameter: 1"), 1402 ("Wrong number of values of control parameter: 2"), 1403, 1404, 1405, 1406, 1407, or 1408 ("Wrong number of values of control parameter: 8") if more than 100 control parameters were passed. This problem has been fixed.
Regions → Transformations
- merge_regions_line_scan sometimes returned the error code 3501 ("Number of chords too big. Increase 'current_runlength_number' using set_system!") in the case of a large number of input regions. This problem has been fixed.
System → Operating System
- count_seconds counted the elapsed time since process start on Windows systems if the system parameter 'clock_mode' was set to 'processor_time'. This problem has been fixed. Now, count_seconds with 'clock_mode' set to 'processor_time' counts only the used CPU cycles on all standard platforms.
System → Parallelization
- write_aop_knowledge returned the error code 5198 ("Insufficient rights on file") for file names without path. hcheck_parallel was affected as well. This problem has been fixed.
System → Parameters
- set_system did not check the
allowed range for the following generic parameter values
correctly:
- 'thread_num',
- 'tsp_thread_num',
- 'height',
- 'tsp_height',
- 'width',
- 'tsp_width',
- 'current_runlength_number',
- 'tsp_current_runlength_number',
- 'image_dpi',
- 'graphic_stack_size', and
- 'int2_bits'.
System → Sockets
- On Windows, receive_data did not return the correct address for the sender for TCP sockets. This problem has been fixed.
- receive_tuple returned wrong numbers on 64-bit systems when negative integer values were send via send_tuple. E.g., sending -1 to a 64-bit system resulted in the received number 4294967295. This problem has been fixed.
- In the case of a closed socket on the sender side, returned the error code 5617 ("No data on socket"). This problem has been fixed. Now, all receive_* operators return the error code 5606 ("Error while reading from socket"). Programs that evaluate the error codes returned by these operators must be adapted accordingly.
Tools → Function
- match_funct_1d_trans sometimes crashed when the parameter Border was set to 'mirror'. This problem has been fixed.
Tools → Geometry
- intersection_contours_xld in rare cases did not intersect vertical contours correctly. Instead, no intersection was reported even if two contours intersected. This problem has been fixed.
- intersection_contours_xld returned no intersection point in rare cases. This problem has been fixed.
Tools → Lines
- approx_chain returned the wrong error code 10000 ("unknown extension error") in case of invalid input parameters MinWidthCoord or MinWidthSmooth. This problem has been fixed. Now, the error codes 1303 ("Wrong value of control parameter: 8") and 1308 ("Wrong value of control parameter: 3") are returned, respectively. Note that programs that evaluate the returned error codes of approx_chain must be adapted accordingly.
Transformations → Poses
- pose_to_quat was numerically unstable for rotation angles close to 180 degrees. This problem has been fixed.
- vector_to_pose in some cases returned the error code 10052 ("unknown extension error") instead of 9205 ("Matrix is singular"). This problem has been fixed. Note that programs that evaluate the error codes returned by vector_to_pose must be adapted accordingly.
Tuple → Conversion
- tuple_number did not convert hex encoded numbers containing 'e' or 'E'. This problem has been fixed. Note that this problem has already been fixed in HALCON 11.0.3.3.
- tuple_number did not convert some real numbers. Strings containing an e/E but no decimal point were affected. This problem occurred first in HALCON 11.0.3.3. This problem has been fixed.
XLD → Creation
- gen_contour_polygon_rounded_xld did not sample the new contour as specified. The spacing between some subsequent points was too large. This problem has been fixed.
- gen_contours_skeleton_xld sometimes did not return the expected contours at a junction point with a quite straightforward vicinity. This problem has been fixed. Note that this problem has already been fixed in HALCON 11.0.3.2.
XLD → Features
- select_contours_xld sometimes did not return contours if the parameter Feature was set to 'direction', even if the direction of their regression line was between Min1 and Max1. This problem has been fixed.
XLD → Transformations
- segment_contours_xld and union_cotangential_contours_xld in rare cases returned different results if called multiple times. This problem has been fixed.
HALCON/C
Functionality
-
The C and C++ code exported by HDevelop for OS X systems will
now set up a CFRunLoop in the main thread and runs the HALCON
code in a separate thread. Therefore, such exported code must
be linked against the CoreFoundation framework.
The C and C++ Code exported by HDevelop for Unix/Linux systems will now call the XInitThreads function from the main() function. Therefore, it may be necessary to explicitly link exported code against libX11.so.
Bug Fixes
- smallest_sphere_object_model_3d
does not provide the useless signature variant offering a
double type for parameter CenterPoint anymore. This means in
detail:
Herror smallest_sphere_object_model_3d(const Hlong ObjectModel3D, double* CenterPoint, double* Radius) is not provided anymore.
Examples
-
The C example programs
- c/source/example3.c,
- c/source/example4.c,
- c/source/example5.c,
- c/source/example7.c, and
- c/source/example8.c
The C example program- c/source/example9.c
The C example program- c/source/example_extern8.c
The folder structure of the C examples has been made consistent with the C++ examples in cpp/console.
HALCON/C++
Functionality
- The HALCON/CPP class HTuple was not thread safe. Tuples always had to be cloned when used in multiple threads, even when merely reading. This problem has been fixed. Now, the HTuple is thread safe. Copies of a HTuple instance can be used in different threads. They do not need to be cloned before anymore.
-
Some operators were hard to use in the object-oriented
language interfaces HALCON/CPP and HALCON/.NET. These
operators did not offer a suitable signature for their class
method variant. In particular, it was impossible to pass a
multivalue control parameter (e.g., for generic parameters)
when using a single pose, although it would make sense for
the operator. For a better usability, the listed input
control parameters of the following operators now support
only a tuple type in all language interfaces:
- render_object_model_3d: GenParamName,GenParamValue
- disp_object_model_3d: GenParamName,GenParamValue
- camera_calibration: EstimParams
- find_shape_model_3d: NumLevels,GenParamName,GenParamValue
- create_cam_pose_look_at_point: RefPlaneNormal
- find_surface_model: GenParamName,GenParamValue
- refine_surface_model_pose: GenParamName,GenParamValue
- binocular_calibration: EstimateParams
-
The C and C++ code exported by HDevelop for OS X systems will
now set up a CFRunLoop in the main thread and runs the HALCON
code in a separate thread. Therefore, such exported code must
be linked against the CoreFoundation framework.
The C and C++ Code exported by HDevelop for Unix/Linux systems will now call the XInitThreads function from the main() function. Therefore, it may be necessary to explicitly link exported code against libX11.so. -
The semantic type of the parameter ObjInCameraPose of
set_calib_data_observ_pose and
get_calib_data_observ_pose was
real instead of pose. This problem has been fixed.
Note that because of this change, SetCalibDataObservPose and GetCalibDataObservPose now get and return HPose instead of HTuple, respectively.
Bug Fixes
- The class implementation of legacy HALCON/C++ returned the error code 7200 ("Wrong number of output object parameter") in specific cases. The error occurred if an operator with more than one iconic output parameter was called with a non-empty HALCON object as iconic output parameter. This problem has been fixed.
- HALCON/C++ returned inconsistent tuples in some cases. The problem occurred if output tuples containing only one value were reused, e.g., in a loop. The further use of these tuples was not safe and may have introduced undefined values. This problem has been fixed.
- The HALCON/C++ data array classes (HPoseArray, HHomMat2DArray, HHomMat3DArray, HQuaternionArray) now have a copy constructor. The lack of a copy constructor meant that operators returning this type of value did not work except when using a variable initializer. This problem has been fixed.
- HOperatorException::ThrowInstance() and HTupleAccessException::ThrowInstance() delegated to the base class HException. Therefore, only a copy of HException was thrown, meaning that the user always got an exception of the base class HException, only, even if the C++ interface raised an HOperatorException or an HTupleAccessException. This problem has been fixed.
- Using the HObject::operator [] in HALCON/CPP might have caused the error code 4051 ("Image data management: object has been deleted already "). This problem has been fixed. Note that this problem has already been fixed in HALCON 11.0.3.1.
- Iconic classes in HALCON/C++ were not type-safe. For example, it was possible to assign a region object to an instance of HImage. This problem has been fixed. Now, in this situation an exception will be raised.
-
HXLD.GetRectanglePose and HPose.CreateCamPoseLookAtPoint
returned only a single pose although the operators
get_rectangle_pose and
create_cam_pose_look_at_point are able
to return multiple poses. This problem has been
fixed.
In HALCON/C++, the signatures of HXLD::GetRectanglePose and HPose::CreateCamPoseLookAtPoint have been changed. They now return HPoseArray instead of HPose. Note that these changes are not source code compatible.
In HALCON/.NET, the signatures of HXLD.GetRectanglePose and HPose.CreateCamPoseLookAtPoint have been changed. They now return HPose[] instead of HPose. Note that these changes are not source code compatible. - smallest_sphere_object_model_3d
does not provide the useless signature variant offering a
double type for parameter CenterPoint anymore. This means in
detail:
HTuple HObjectModel3D::SmallestSphereObjectModel3d(double* Radius) const replaces double HObjectModel3D::SmallestSphereObjectModel3d(double* Radius) const
HALCON/C++ (Legacy)
Bug Fixes
- smallest_sphere_object_model_3d
does not provide the useless signature variant offering a
double type for parameter CenterPoint anymore. This means in
detail:
Herror smallest_sphere_object_model_3d(const HTuple& ObjectModel3D, double* CenterPoint, double* Radius) is not provided anymore.
HALCON/.NET
Functionality
- All tool classes (derived from HToolBase) in HALCON/C++ and HALCON/.NET now feature a Detach() method that relinquishes ownership of a handle, but allows to continue using the object as long as the handle is kept alive externally.
-
The HTuple class in HALCON/.NET now has a bool constructor that
creates an integer tuple with a value of 0 or 1,
respectively.
Note that in rare cases this could make existing source code ambiguous (if a tuple was created from an unsupported type that allows cast to bool and exactly one other supported type). To fix this, introduce an explicit type cast. -
The semantic type of the parameter ObjInCameraPose of
set_calib_data_observ_pose and
get_calib_data_observ_pose was
real instead of pose. This problem has been fixed.
Note that because of this change, SetCalibDataObservPose and GetCalibDataObservPose now get and return HPose instead of HTuple, respectively.
Bug Fixes
-
HXLD.GetRectanglePose and HPose.CreateCamPoseLookAtPoint
returned only a single pose although the operators
get_rectangle_pose and
create_cam_pose_look_at_point are able
to return multiple poses. This problem has been
fixed.
In HALCON/C++, the signatures of HXLD::GetRectanglePose and HPose::CreateCamPoseLookAtPoint have been changed. They now return HPoseArray instead of HPose. Note that these changes are not source code compatible.
In HALCON/.NET, the signatures of HXLD.GetRectanglePose and HPose.CreateCamPoseLookAtPoint have been changed. They now return HPose[] instead of HPose. Note that these changes are not source code compatible. - Some XLD classes could not be serialized. The affected classes were HXLDCont, HXLDExtPara, HXLDModPara, HXLDPara, and HXLDPoly. This problem has been fixed.
-
Some operators were hard to use in the object-oriented
language interfaces HALCON/CPP and HALCON/.NET. These
operators did not offer a suitable signature for their class
method variant. In particular, it was impossible to pass a
multivalue control parameter (e.g., for generic parameters)
when using a single pose, although it would make sense for
the operator. For a better usability, the listed input
control parameters of the following operators now support
only a tuple type in all language interfaces:
- render_object_model_3d: GenParamName,GenParamValue
- disp_object_model_3d: GenParamName,GenParamValue
- camera_calibration: EstimParams
- find_shape_model_3d: NumLevels,GenParamName,GenParamValue
- create_cam_pose_look_at_point: RefPlaneNormal
- find_surface_model: GenParamName,GenParamValue
- refine_surface_model_pose: GenParamName,GenParamValue
- binocular_calibration: EstimateParams
- smallest_sphere_object_model_3d
does not provide the useless signature variant offering a
double type for parameter CenterPoint anymore. This means in
detail:
HTuple HObjectModel3D.SmallestSphereObjectModel3d(out double radius) replaces double HObjectModel3D.SmallestSphereObjectModel3d(out double radius)
HDevEngine
Functionality
-
HDevEngine has been extended to support the new vector variables.
The new HDevEngine/C++ example program
- hdevengine/cpp/source/use_vector_variables.cpp
Furthermore, the new HDevEngine/.NET example project UseVectorVariables under hdevengine/c# demonstrates the use of vector variables in C#.
Both examples use the new HDevelop program- hdevengine/hdevelop/use_vector_variables.hdev
- hdevengine/procedures/use_vector_variables.hdvp.
- The HDevEngine has been extended to support the starting of sub threads from within an HDevelop script.
-
HDevelop and the HDevEngine have been extended with a
just-in-time (JIT) compiler that - depending on the code
structure - may significantly accelerate the runtime of
HDevelop procedures. Especially procedures with loops and
lots of calculations that are implemented in HDevelop
language will benefit from that. However, there are some
statements that are not supported by the JIT compiler.
Procedures using these statements are executed as hitherto
without compilation. In HDevelop, also procedures with
breakpoints and stop statements are not executed
JIT-compiled. Details can be found in the respective
documentation within the HDevelop User's Guide. It is
possible to enable and disable the use of the JIT compiler
globally - in HDevelop via the Preferences dialog and in
HDevEngine via the method
HDevEngine::SetEngineAttributes.
The new HDevelop example program- hdevelop/Runtime/test_jit_speedup.hdev
The new HDevEngine/C++ example program- hdevengine/cpp/source/use_jit_compiler.cpp
Furthermore, the new HDevEngine/.NET example project UseJitCompiler under hdevengine/c# demonstrates the use of this functionality in C#.
Bug Fixes
- HDevEngine was not able to resolve import statements in programs when This problem has been fixed.
- Import statements with paths relative to the program's file location (like import .) were not resolved correctly. This problem has been fixed.
- HDevengine did not throw exceptions if license errors occurred during the initialization. Instead, an error message popped up and the application quit. This problem has been fixed.
-
Using a dummy implementation for dev_open_window and dev_get_window, e.g.,
int MyHDevOperatorImpl::DevOpenWindow(...) { return H_MSG_TRUE; }
resulted in an error code 1501 ("Wrong number of values of object parameter: 1") from dev_open_window/dev_get_window. Moreover, if no implementation was set at all, the window handles returned by dev_open_window and dev_get_window were uninitialized. These problems have been fixed. Now, in such a case they are both initialized with the value -1. - Applications using HDevEngine/.NET in rare cases could have crashed when the engine classes were not explicitely disposed. This problem has been fixed.
HALCON Codelets
Legacy
- The HALCON Codelets are now legacy. They are still available, but they have not been updated to new features of HALCON 12. When using applications with HALCON Codelets, only features of HALCON 11 may be used.
HALCON (general)
Functionality
- For consistency, the information associated with an error should be always described as "error code" and "error message". Therefore, "error number" and "error text", which have been used in the exception management of HALCON/C++, HALCON/.NET, and HDevEngineCpp, have been replaced with "error code" and "error message", respectively. For reasons of clarity, abbreviated slot names, such as 'error_msg', 'add_error_msg', and 'proc_line', as used in dev_get_exception_data and GetExceptionData, have been replaced with 'error_message', 'add_error_message', and 'program_line', respectively. Note that for compatibility reasons, the abbreviated slot names are still supported.
- HALCON now provides an extension for Visual Studio that allows to inspect the contents of HALCON variables directly in the debug mode of Visual Studio. The new HALCON Variable Inspect extension can easily be installed by double-clicking the file %HALCONROOT%/misc/HALCON_Variable_Inspect.vsix and provides the inspection of HALCON/CPP and HALCON/C# iconic objects and tuples. This Visual Studio extension requires a development license of HALCON and Visual Studio 2010 Professional or higher.
-
The support for Visual Studio 2002, Visual Studio 2003 and
Visual Basic 6 is no longer provided. The minimum system
requirement is now Visual Studio 2005 or higher. The file
export to 'Visual Basic 6.0 - HALCON/COM' has been removed
and is no longer possible.
The following example applications have been removed:- vb6/HDevelopTemplate/,
- vb6/Matching/,
- hdevengine/vb6/ErrorHandling/,
- hdevengine/vb6/ExecExtProc/,
- hdevengine/vb6/ExecProgram,
- solution_guide/image_acquisition/vb/error_handling_timeout_leutron, and
- extension_package/halconuser/source/testthresholdcom.
Image Acquisition Interfaces
The latest information about new interface revisions and newly supported image acquisition devices can be found on MVTec's web server.New Image Acquisition Interfaces:
-
The following HALCON image acquisition interfaces have been
introduced since HALCON 11.0.3:
- HALCON has been extended with the Argos3D-P1xx interface. It supports the Argos3D-P1xx camera family from the Austrian camera manufacturer Bluetechnix. This new interface allows the easy acquisition of calibrated 3D data (distance, amplitude, and Cartesian X/Y/Z images) based on time-of-flight technology.
- HALCON has been extended with the SICK-ScanningRuler interface. It supports the new ScanningRuler 3D camera from SICK. This new interface allows accurate and reliable 3D measurements of stationary objects using a built-in laser light source. Due to the large field of view the acquired 3D data can easily be processed in various application areas such as bin picking or de-palletizing. It uses the new SICK icon API 5.1.
- The following three interfaces are now available for Windows x64:
- the Opteon interface,
- the DahengCAM interface, and
- the Ginga++ interface.
Modified Image Acquisition Interfaces
-
The following HALCON image acquisition interfaces have been
revised since HALCON 11.0.3:
- The new revision of the ABS interface supports now also USB 3.0 devices. Furthermore, the new interface revision includes two minor bugfixes and provides the new parameter 'framerate_mode'.
- The new revision of the Crevis interface includes an updated documentation that describes the system requirements and limitations in more detail.
- The new revision of the DahengCAM interface supports now also the HV-xx51 camera series.
- The new revision of the DirectShow interface provides a bug fix to prevent opening the same device twice.
- The new revision of the Ensenso-NxLib interface includes an updated system requirements section within the interface documentation.
- The new revision of the GigEVision interface provides bug fixes regarding unregistering a callback via set_framegrabber_callback and setting "empty" parameter values.
- The new revision of the Ginga++ interface includes several minor bug fixes.
- The new revision of the GingaDG interface includes a bug fix regarding the parameter 'do_force_trigger'.
- The new revision of the MatrixVisionAcquire interface supports now the ibpfMono12Packed_V1 pixel format, 64-bit integer properties, and mvVirtualDevice virtual devices. Furthermore, the new interface revision fixes issues in the operators open_framegrabber and info_framegrabber that could occur under certain circumstances, and includes several minor fixes regarding parameterization.
- The new revision of the OpenNI interface includes an updated documentation that describes the dependencies and the installation of the underlying driver and SDK packages.
- The new revision of the Opteon interface is now based on v5.0 of the Opteon software distribution. Furthermore, the new interface revision supports also multi-channel controllers via the new parameter 'line_in'.
- The new revision of the pylon interface has been adapted to the latest version 4.2 of the Basler pylon camera software suite. Furthermore, the new interface revision includes several bugfixes, in particular regarding volatile grabbing mode and regarding the usage of user-defined callbacks.
- The new revision of the SaperaLT interface includes various extensions and improvements such as new parameters, a new callback type, a revised documentation, a new HDevelop program showing the usage of the GIO pins, and an improved function to show low-level error messages. Furthermore, the new interface revision fixes several issues, in particular regarding the acquisition engine in case of timeouts and regarding a memory leak in the acquisition engine.
- The new revision of the SICK-3DCamera interface has been adapted to the new SICK icon API 4.4.3 and eBus driver 3.1. Furthermore, the new interface revision provides two minor bug fixes regarding parameterization and provides several minor bug fixes regarding the operators open_framegrabber, info_framegrabber, and set_framegrabber_param.
- The new revision of the uEye interface supports now the 12-bit RGB color format and provides also the new parameter 'burst_size'. Furthermore, the new interface revision allows the application to get notified via the two new callback types 'device_removed' and 'device_reconnected'.
- The new revision of the USB3Vision interface supports more host controllers for driver installation on Windows and fixes a possible deadlock during initialization on Windows.
- The new revision of the Video4Linux2 interface adds support for the 'RGGB' format, solves problems regarding debug messages and regarding error handling and grab timeout, and includes several minor bug fixes.
- Please refer to the corresponding documentation for information about additional changes, especially whether a new revision of the corresponding device driver is required.
Legacy Image Acquisition Interfaces
-
The following HALCON 12.0 image acquisition interfaces are now only
available in the
Legacy
download area:- 1394IIDC-2
- INSPECTA
- OpenNI
- p3i2
- PcEyeCL
-
The following HALCON image acquisition interfaces are no longer
supported for HALCON 12.0:
- dPict
- INSPECTA-5
- MatrixVision
- SonyXCI-2
- SVCam-GigE
- Leutron
Documentation
Installation Guide
The Installation Guide is available in a new edition. It has been adapted to the changes in HALCON 12.0. Amongst others, it now includes a list of installed registry keys on Windows systems in the appendix.
HDevelop User's Guide
The HDevelop User's Guide is now available in a new edition. It has been adapted to the changes in HALCON 12.0. Amongst others, it has been extended by documentation related to
- the just-in-time (JIT) compiler,
- the inspection window to graphically visualize functions and numeric tuples as 1D or 2D plots,
- the vector variables,
- the execution of several operators and procedures in parallel, and
- the Start dialog.
- changes of the Gray Histogram tool and
- the camera calibration using the Calibration Assistant with the new easy to use calibration plate.
- Furthermore, information related to Visual Basic 6, which is not supported anymore, has been removed from the documentation.
Quick Guide
The Quick Guide is available in a new edition. It has been adapted to the changes in HALCON 12.0. Amongst others,
- it has been extended by documentation related to the generic interface for accessing I/O devices.
- Additionally, information related to Visual Basic 6 and the HDevelop demo version, which are not supported anymore, have been removed from the documentation.
Solution Guide I (Basics)
The Solution Guide I (Basics) is available in a new edition. It has been adapted to the changes in HALCON 12.0. Amongst others, it has been extended by documentation related to
- the deformable surface-based 3D matching,
- the rejection class and the mechanism to regularize the weights for MLP-based OCR classifiers, and
- the functionality to calculate the pointwise distance between contours.
Solution Guide II+III (Advanced)
- The Solution Guide on 2D Data Codes is available in a new edition. It has been adapted to the changes in HALCON 12.0. Amongst others, it has been adapted to the extended print quality gradings for 2D data codes.
- The Solution Guide on 2D Measuring is available in a new edition. It has been adapted to the changes in HALCON 12.0. Amongst others, it has been adapted to the extensions of the metrology model.
-
The Solution Guide on 3D Vision is available in a new
edition. It has been adapted to the changes in HALCON 12.0.
Amongst others, it has been extended with documentation
related to
- the deformable surface-based 3D matching,
- the stereo reconstruction using multi-scanline optimization,
- the sheet-of-light calibration,
- the easy to use camera calibration,
- the new interface for the visualization of 3D object models,
- the hand-eye calibration of SCARA robots, and
- the camera model for tilt lenses.
Programmer's Guide
The Programmer's Guide is available in a new edition. It has been adapted to the changes in HALCON 12.0. Amongst others, it has been extended by documentation related to
- the just-in-time (JIT) compiler,
- the automatic execution of HALCON graphics operators by the appropriate thread on Windows and OS X systems,
- the usage of vector variables in C, C++, and .NET(C#), and
- the HALCON Variable Inspect extension.
Extension Package Programmer's Manual
The Extension Package Programmer's Manual is available in a new edition. It has been adapted to the changes in HALCON 12.0. Amongst others, it has been extended to describe the new table environment for the operator reference.
Reference Manual
-
The HALCON Operator Reference now supports the following new
features:
- figures (HTML and PDF),
- formulae, i.e., instead of simplified ASCII formulae, the HTML version now includes formulae similar to the PDF version, and
- tables (HTML and PDF).
- The warnings concerning the usage of handles in multiple threads were not consistent in the reference manual. In some reference manual entries, those warnings were not clear enough and in some other entries the warning was completely missing. This problem has been fixed.
- The error returned by the camera calibration was documented as the average back projection error. Instead, it is the root mean square error of the back projection. This problem has been fixed.
- The reference manual entry of create_planar_calib_deformable_model did not mention the orientation in which the ReferencePose must be specified. This problem has been fixed.
- The reference manual entry of do_ocr_single_class_knn, do_ocr_multi_class_knn, and do_ocr_word_knn now shortly describes the meaning of the confidence values returned by the classification.
- The reference manual entries of did not mention that the parameter AngleExtent must be set to 0 if approximately rotationally objects are searched for with 'max_deformation' set to a value greater than 0. This problem has been fixed.
- The reference manual entries of operators that use the internal 3D point cloud pose refinement (ICP), namely now state the maximal numerical accuracy of the refinement.
- The reference manual entry of fit_primitives_object_model_3d stated that "If no primitive can be fitted to the set of 3D points, an empty 3D object model is returned". This was not correct. The content of the returned object model depends on the chosen values for 'output_point_coord' and 'output_xyz_mapping'. This problem has been fixed.
- The reference manual entries of stated that pointers are generic (long) and thus a cast becomes necessary. This was misleading, as a cast from the data type 'long' may have led to truncated pointers depending on the used operator signature and programming environment. In some cases, 'Hlong' must be used instead of 'long'. This problem has been fixed.
- The reference manual entry of gen_region_runs did not contain a warning concerning the restriction that ColumnEnd must be greater or equal to ColumnBegin. This problem has been fixed. Now, it contains a warning, which mentions that this restriction is not checked by gen_region_runs and that a violation of this restriction may result in errors and unexpected behavior of subsequent operations.
- The reference manual entry of get_calib_data_observ_points did not contain detailed information about the returned values for Row and Column. The documentation now gives more information about the values that are returned for the coordinates of the detected points depending on the used operator for the calibration. This problem has been fixed.
- The reference manual entry of get_data_code_2d_results did not describe the parameters 'quality_aimdpm_1_2006', 'quality_aimdpm_1_2006_labels', and 'quality_aimdpm_1_2006_values' for Aztec codes. This problem has been fixed.
- The reference manual entries of optimize_fft_speed and optimize_rft_speed were not clear enough. There was no information if the optimized data may be transferred and used on other computers. This problem has been fixed. The documentation now contains the information that the resulting data is not suited for the use on other computers with different configurations.
- The reference manual entry of read_object_model_3d has been improved. Now, it is described what exactly happens when passing string values to the parameter Scale, and that it is possible to pass numeric values, as well.
- The reference manual entry of reconstruct_surface_stereo did not describe how point normals are determined. This problem has been fixed. Now, it is described that the normal vector of a point is calculated by fitting a plane through its neighboring points and using the normal vector of the plane as normal vector of the respective point.
- The reference manual entry of set_line_style has been extended with the valid range for the parameter 'Style' (1-120).
- In the reference manual entries of tuple_is_int, tuple_is_real, and tuple_is_string it is now mentioned more explicitly, that those operators return the type of the internal representation of a tuple, and that this type does not necessarily correspond to the type of the tuple's elements.
- The reference manual entry of union_collinear_contours_xld has been rewritten. Now, it has a clear structure and the parameters are described with drawings.
- The reference manual entry of write_object_model_3d stated that the STL format supports triangles and triangle normals. This suggested that normals that were contained in a 3D object model were written to file. However, as triangle normals are not supported by 3D object models and point normals are not supported by the STL format, no normals were written to file. The documentation was extended accordingly.
Supported Operating Systems
Windows
HALCON 12.0 has been compiled in the following Windows platform versions:
x86sse2-win32
platform version for Windows Vista/2008/7/8/2012 on x86 processors with SSE2 extension, i.e., Intel Pentium 4 / AMD Athlon 64 or newerx64-win64
platform version for Windows Vista/2008/7/8/2012 x64 Edition on Intel 64 or AMD64 processors
- Since Windows XP is now officially discontinued by Microsoft, HALCON no longer supports Windows XP. The documentation has been adapted accordingly.
The setup process checks whether it is running on a 32-bit or 64-bit system and provides a suitable list of platform versions that can be installed.
On machines that support the AVX2 instruction set, HALCON automatically exploits the AVX2 instruction set under Windows and Linux.
During the installation, the environment variable
HALCONARCH
is set to x86sse2-win32
or
x64-win64
to indicate the installed architecture.
Please note that if you want to switch to another platform version,
you must first install it. Then, you must adapt the environment
variables HALCONARCH
and PATH
(see the
Installation Guide for more information).
Linux
HALCON 12.0 has been compiled in the following Linux platform versions:
x64-linux
platform version for Linux x86_64, Kernel 2.6 or higher with ABI 2, on Intel 64 or AMD64 processors. Note that the two platform versionx86sse2-linux2.4-gcc40
andx64-linux2.4-gcc40
are not longer supported. Therefore, the value of $HALCONARCH changes.
Please refer to the Installation Guide for detailed system requirements corresponding to the different Application Binary Interfaces.
The installation script checks whether it is running on a 32-bit or 64-bit system and provides a suitable list of platfrom versions that can be installed.
OS X
HALCON 12.0 has been compiled for OS X in the following platform version:
x64-macosx
platform version for OS X 10.8, 10.9., and 10.10
Miscellaneous
General
Installation
- The HALCON 11.0.3 installer missed to install the auxiliary DLLs haspsrm_win32.dll (and haspsrm_win64.dll, respectively) if the dongle driver installation was not selected within the setup procedure. This problem has been fixed. Note that this problem has already been fixed in HALCON 11.0.3.2.
-
The HALCON installer did not install the following binaries
in the directory %HALCONROOT%/bin/%HALCONARCH%, which are
necessary to run the HALCON USB3Vision interface:
- hAcqUSB3VisionElevate.exe
- libusb-1.0-usan.dll
- libwdi-usan.dll
-
The following changes have been made on the Windows Installer
for HALCON:
- The entries in the Windows Start Menu have been reduced. All links to examples or tutorials have been removed. Now a link to the overview page of the documentation is available.
- The Visual Studio 2010 Redistributable Package has been added and will be installed, if it isn't already installed.
- The HALCON GigE Vision Filter Driver comes now with a separate installer, so it isn't necessary anymore to install it manually. Please note that this installer has also an own Uninstaller and will not automatically removed with the de-installation of HALCON.
- To use USB dongles unter Linux, it is necessary, to install the dongle daemon manually as described in the Installation Guide.
- If the support of USB dongles is selected during the installation on OS X, the file hasp_darwin.dylib will be copied into the directory /usr/bin.
Licensing
- HALCON now uses version 11.12.1.4 of the FLEXnet Publisher license manager software.
Example Images
New Example Images
For several of the new HDevelop example programs, new images are available:
-
The new example image
- barcode/mixed/barcodes_datacodes_mixed_01.png.
- hdevelop/Control/par_start.hdev
-
The new example image
- datacode/ecc200/ecc200_print_quality_01.png
- hdevelop/Identification/Data-Code/ecc200_direct_mark_quality_semi_t10.hdev
- hdevelop/Identification/Data-Code/ecc200_print_quality.hdev.
-
The new example images
- calib/calib_single_camera_[01-07].png.
- hdevelop/Calibration/Multi-View/calibrate_cameras_monocular.hdev
The new example images- 3d_machine_vision/calib/calib_image_[01-07].png and
- 3d_machine_vision/calib/ruler.png
- solution_guide/3d_vision/camera_calibration_multi_image.hdev
-
The new example images
- caliper/caliper_with_tilt.png,
- caliper/caliper_no_tilt.png,
- calib/calib_telecentric_tilt_[01-17].png, and
- caliper/caliper_measurement_plane.png.
- hdevelop/Calibration/Multi-View/calibrate_cameras_telecentric_tilt.hdev
- stereo/telecentric_tilt/cam_0_calib_plate_[01-08].png,
- stereo/telecentric_tilt/cam_1_calib_plate_[01-08].png,
- stereo/telecentric_tilt/cam_0_cartridge.png,
- stereo/telecentric_tilt/cam_1_cartridge.png,
- stereo/telecentric_tilt/cam_0_tissue.png, and
- stereo/telecentric_tilt/cam_1_tissue.png.
- hdevelop/Calibration/Multi-View/calibrate_cameras_telecentric_tilt_stereo.hdev
-
The new example images
- 3d_machine_vision/handeye/scara_moving_cam_setup_01_[01-10].png and
- 3d_machine_vision/handeye/scara_stationary_cam_setup_01_[01-10].png.
- hdevelop/Calibration/Hand-Eye/calibrate_hand_eye_scara_moving_cam.hdev and
- hdevelop/Calibration/Hand-Eye/calibrate_hand_eye_scara_stationary_cam.hdev
The new example image- 3d_machine_vision/handeye/scara_stationary_cam_setup_01_calib_approx_01.png.
- hdevelop/Calibration/Hand-Eye/calibrate_hand_eye_scara_stationary_cam_approx.hdev
The new example images- 3d_machine_vision/handeye/scara_stationary_cam_setup_01_metal_parts_[01-06].png.
- hdevelop/Calibration/Hand-Eye/pick_and_place_scara_stationary_cam.hdev
-
The new example image
- sheet_of_light/calib_object_disparity.tif.
- hdevelop/3D-Reconstruction/Sheet-Of-Light/calibrate_sheet_of_light_3d_calib_object.hdev
-
The new example images
- sheet_of_light/injection_mould_[01-06]_disparity.tif
- hdevelop/Applications/Surface-Inspection/check_for_holes_sheet_of_light.hdev
-
The new example images
- plastic_parts/phone_camera_frame_01.png and
- plastic_parts/phone_camera_frame_02.png.
- hdevelop/Applications/Measuring-2D/inspect_frame_width.hdev and
- hdevelop/Tools/Geometry/apply_distance_transform.hdev
-
The new example image
- ocr/medication_package_02_right.png.
- hdevelop/OCR/Segmentation/find_text.hdev
- ocr/medication_package_[01-03]_front.png,
- ocr/medication_package_[01-03]_left.png,
- ocr/medication_package_[01-03]_back.png,
- ocr/medication_package_[01-03]_right.png,
- ocr/medication_package_[01-03]_bottom.png, and
- ocr/medication_package_[01-03]_top.png.
- hdevelop/OCR/Segmentation/find_expiration_date.hdev
-
The new example images
- barcode/ean13/ean13_meas_param_estimation_[01-10].png.
- hdevelop/Identification/Bar-Code/barcode_param_meas_param_estimation.hdev
-
The new example image
- barcode/25interleaved/25interleaved_zeiss1.png.
- hdevelop/Identification/Bar-Code/barcode_param_contrast_min.hdev
-
The new example image
- barcode/code32/code32_01.png.
- hdevelop/Identification/Bar-Code/code32.hdev
- general/convert_decoded_string_code39_to_code32.hdvp.
-
The new example image
- barcode/ean13.png.
- hdevelop/Identification/Bar-Code/barcode_param_majority_voting.hdev
-
The new example images
- stereo/middlebury_cones/im2.png,
- stereo/middlebury_cones/im6.png,
- stereo/middlebury_cones/disp2.png, and
- stereo/middlebury_cones/occl.png.
- hdevelop/3D-Reconstruction/Binocular-Stereo/binocular_disparity_comparison.hdev
Changed Example Images
The following example images have been removed:
- The example image woodcell.png in the directory %HALCONIMAGES% was not used by any example program and, thus, has been removed from the set of installed example images. Furthermore, the example images calib_image_[01-07].png in the directory %HALCONIMAGES%/3d_machine_vision/calib are not used by any example program and, thus, have been removed from the set of installed example images.
3D Object Models
New 3D Object Models
The following new 3D object models are available:
-
The new 3D object models
- silicone_baking_mold/silicone_baking_mold_3d_model.om3 and
- silicone_baking_mold/silicone_baking_mold_3d_scene_[01-07].om3.
- hdevelop/3D-Matching/Deformable-Surface-Based/find_deformable_surface_model.hdev