Major New Features of HALCON 12.0
General Features
Identification and Classification
Camera Calibration
Hand-Eye Calibration
Sheet of Light
Surface-Based 3D Matching
3D Vision
I/O Devices
Speedup
Further Enhancements
IDE
Language Interfaces
- HDevEngine and HDevelop now provide a
just-in-time (JIT) compiler that - depending on the code
structure - may significantly accelerate the runtime of
HDevelop procedures.
Compatibility
Licenses
All HALCON 11.0 licenses or licenses of earlier versions must be replaced
or upgraded. Please contact your local distributor.
HDevelop
-
The default behavior regarding the export of single
external procedures via command line with the option -convert has been
changed. Now, if the procedure contains references to other external
procedures, the implementation of the referenced procedures is exported by
default. In order to obtain the previous default behavior, where only the
declarations of referenced procedures were exported, the option
-no_export_of_referred_procs must be used.
-
HDevelop now supports the handling of different preferences
files. Consequently, the old HDevelop
command line option -preferences is deprecated but will
still be supported for compatibility reasons.
HALCON Library
Compared to HALCON 11.0, many extensions have been introduced. Thus, the
HALCON 12.0 libraries are not binary compatible with HALCON 11.0.x or
earlier versions. However, HALCON 12.0 is mostly source-code compatible to
HALCON 11.0.x except for the changes listed below:
-
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.
They have been replaced by the respective OCR fonts with
regularization weights and with or without a rejection class.
To distinguish these new fonts from the previously used
fonts, their names have been extended with the suffix '_Rej'
(for fonts with a rejection class) or '_NoRej' (for fonts
without a rejection class). Existing applications that use
these fonts can be rewritten to use one of the above-mentioned new
pretrained fronts. Note, however, that the behavior of the application
might change. To obtain the same behavior as in former HALCON versions,
the pretrained fonts of the former HALCON version can be used.
- 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++:
HALCON/.NET:
HALCON/CPP (legacy):
HALCON/C:
Note that these changes are not source code compatible.
-
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 and x64-linux2.4-gcc40.
-
HALCON no longer supports Mac OS X 10.7.
Legacy or No Longer Supported Features
Note that legacy operators may be discontinued in a future major release. See
the reference manual entries of these operators for details on how to replace
them.
-
The following HDevelop functionality became
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
have been removed.
-
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
HDevelop Language
-
HDevelop now supports the new variable type 'vector'. Vector
variables are containers that may contain multiple tuples,
multiple iconic objects, or multiple vectors. Note that all
elements of a vector variable must have the same type and
dimension. The type of vector variables and expressions is
determined statically in HDevelop like for all other
variables and expressions.
The HDevelop language has been extended with constructs for
- the creation of vectors: {...},
- read and write access to vector elements: .at(),
- the assignment and comparison of two vectors: :=, ==,
and !=,
- the modification of vectors: .insert(), .remove(), and
.clear(),
- the concatenation of two vectors: .concat(), and
- for querying the length of a vector: .length().
Additionally, HDevelop has been extended with the new
HDevelop operators
HDevelop has been extended to support vector variables
in the Variable View window, with tooltips, and with auto
completion in the Program Editor. Furthermore, HDevelop
procedures and the Procedure Interface dialog were extended
to support vector variables as procedure parameters.
HDevelop supports the export of vector variables to C, C++,
C#, and Visual Basic .NET, and the language interfaces have
been adapted accordingly.
The HDevEngine/C++ and HDevEngine/.NET interfaces have been
adapted to support vector variables.
The new HDevelop example program
- hdevelop/Control/vector_variables.hdev
shows how to use vector variables in HDevelop.
The new HDevelop example program
-
hdevelop/Control/align_measurements_multithreading.hdev
demonstrates how to use vector variables as output for
procedures that are executed in parallel.
The new HDevEngine/C++ example program
- hdevengine/cpp/source/use_vector_variables.cpp
demonstrates the usage of the vector variables in
HDevEngine. A suitable Visual Studio 2005 Project has been
added in the directory
hdevengine/cpp/vs2005/use_vector_variables and the solution
vs2005/examples.sln has been extended accordingly.
Furthermore, the new HDevEngine/.NET example project
UseVectorVariables under hdevengine/c# demonstrates
the use of vector variables in C#.
Both examples use the new HDevelop program
- hdevengine/hdevelop/use_vector_variables.hdev
and the new HDevelop procedure
- hdevengine/procedures/use_vector_variables.hdvp.
-
HDevelop now allows to execute several operators and
procedures in parallel. For this, the HDevelop language was
extended by new statements that control the parallel program
execution.
- par_start is a qualifier that is added to a program
line in order to execute the procedure or operator call in
a new sub thread in parallel to the current thread. It
returns a thread handle.
- par_join is a new
operator that waits for specified sub threads in order to
synchronize the continuation of the main thread with the
sub threads.
All active and recently stopped threads can be inspected
with the help of the new Thread View. This view and the Call
Stack are combined to the new Thread View / Call Stack
window, which can now easily be accessed via a button in the
main tool bar. The Thread View allows to select one thread
for closer inspection and exclusive (e.g., single step)
execution. In addition, via the Thread View single threads
can be suspended and resumed. The Call Stack has been
extended by a column that displays the current line number of
the called procedures.
As a default, HDevelop supports the execution of up to 20 sub-threads in
parallel. This value can be changed in the Preferences dialog via the
option: General Options / General Options / Maximum number of sub
threads.
HDevelop supports the export of parallelization instructions
to C, C++, C#, and Visual Basic .NET.
The HDevEngine also supports the starting of sub threads from
within an HDevelop script.
The new HDevelop example programs
- hdevelop/Control/par_start.hdev,
- hdevelop/Control/align_measurements_multithreading.hdev,
- hdevelop/System/Multithreading/message_queue_producer_consumer.hdev,
and
- hdevelop/System/Multithreading/message_queue_producer_consumer_abort.hdev
show how to use the new HDevelop statements par_start
and par_join to control the parallel
execution of operators and procedures in HDevelop.
The example program par_start.hdev uses the new image
- barcode/mixed/barcodes_datacodes_mixed_01.png.
A detailed description on how to develop multithreaded
HDevelop programs with the help of the new statements can be
found in the HDevelop User's Guide, which was extended
accordingly.
Functionality
-
HDevelop and the HDevEngine have been extended with a just-in-time (JIT)
compiler that - depending on the code structure - may significantly
accelerate the runtime of HDevelop procedures. Especially procedures with
loops and many calculations that are implemented in HDevelop language
will benefit from that. However, there are some statements that are not
supported by the JIT compiler. Procedures using these statements are
executed as before without compilation. In HDevelop, also procedures with
breakpoints and stop statements are not executed JIT-compiled. Details
can be found in the documentation within the HDevelop User's Guide. It is
possible to enable and disable the use of the JIT compiler globally - in
HDevelop via the Preferences dialog and in HDevEngine via the method
HDevEngine::SetEngineAttributes.
The new HDevelop example program
- hdevelop/Runtime/test_jit_speedup.hdev
demonstrates the usage and the effect of the just-in-time compiler in
HDevelop.
The new HDevEngine/C++ example program
- hdevengine/cpp/source/use_jit_compiler.cpp
demonstrates the usage of the just-in-time compiler in HDevEngine. A
suitable Visual Studio 2005 Project was added in the directory
hdevengine/cpp/vs2005/use_jit_compiler, and the solution
vs2005/examples.sln was extended accordingly.
Furthermore, the new HDevEngine/.NET example project UseJitCompiler under
hdevengine/c# demonstrates the use of this functionality in C#.
-
HALCON has been extended with a Start dialog which provides
the following functions:
- It enables the user to
- start with a new program,
- open an existing program,
- open the Browse Examples dialog and start with one of
the example programs,
- open a recovered program, and
- open one of the recently used programs.
- It helps the user to get started by providing examples of how to work
with HALCON and HDevelop.
- It provides an entry point to the documentation to easily get more
information about HALCON and HDevelop.
- It informs the user
- with news about MVTec and its products and
- with a Tip of the Day.
-
HDevelop now features a new inspection window to graphically visualize
functions and numeric tuples. For bona fide functions (semantic type
function_1d), this is the default inspection mode when double-clicking on a
variable in the Variable View window.
Tuples of numbers can be plotted by selecting "Plot as Function" from the
context menu. Multiple tuples and functions can be inspected simultaneously
in a single inspection window. A pair of tuples of matching length can be
plotted as an x/y scatter plot.
Finally, it is possible to generate HDevelop code for plotting functions and
tuples in a HALCON window. -
In HDevelop, the runtime of assignment operations and the passing of tuple
parameters to procedures scaled with the size of the input tuple. For large
tuples, these operations could use significant amount of time. Now, only a
reference to the tuple and not a copy is passed to the result of an
assignment operation or as input to a procedure. This reduces the runtime
of operations with large tuples significantly.
-
Starting with HALCON 12.0, the HDevelop demo version is no longer provided.
As a side-effect of this change HDevelop programs are now always saved
without a checksum, and the corresponding option in the HDevelop preferences
has been removed.
- dev_open_tool has now been
extended to throw an error if wrong values for the parameter
GenParamValues are used for pages in the Preferences dialog and
the Program Line View.
-
For complex and vector field image types, the full gray value
information is now displayed, consisting of two values per
channel. Previously, pixel information was not supported for
vector fields and for complex images only the absolute value of
each channel was shown.
-
In previous versions, HDevelop used any occurrence of a
variable to determine its type, regardless whether the value
of the variable was set by this expression or not. If
different occurrences resulted in conflicting variable types,
the variable type was chosen according to the first
occurrence and all program lines that indicated a different
type became invalid.
However, this behavior leads to some undesired effects:
- Not all program lines that were involved in a type
conflict were marked as invalid.
- Which program lines were marked as invalid depended on
the order in which they were edited or loaded.
- Variables that were never initialized were only noticed
during the program execution.
Now, only those occurrences of a variable are used to
determine its type, in which the value of the variable is set.
All program lines that use a variable with either a
completely undefined or a conflicting type become invalid.
If, however, a variable with a valid type is used in the
wrong context (i.e., either a control variable that is used
as iconic input parameter or an iconic variable that is used
as control input parameter) only that specific program line
becomes invalid.
As a side effect, the type of variables that were never
initialized cannot be determined, and thus, this error
becomes obvious before executing a program.
In addition, incomplete or syntactically incorrect lines will
no longer be used to create a variable and determine its
type.
-
HDevelop now supports the handling of different preferences
files. Besides the use of the default preferences file that is
stored in the user's application data folder (e.g., under
Windows in
C:\Users\<UserName>\AppData\Roaming\MVTec\HDevelop.ini),
the user can now use a different file via the new HDevelop
command line option -use_preferences <file>. This file is
used instead of the default file for reading and writing of all
HDevelop preferences within the current HDevelop session. If
this file is unavailable, it is created and HDevelop is
started with all preferences set to the defaults values.
In addition, the new command line option -load_preferences
<file> is available for loading the preferences
exclusively from one specific file, e.g., for starting always
with a defined environment. If this option is passed, only
those preferences that are set within the passed file are
adopted - all other preferences are set to the default values.
The passed file is not modified, instead of that the
preferences are written to the default file or to the file that
is passed with -use_preferences.
Finally, the old option -preferences was renamed into
-add_preferences <file> to clarify that the preferences
that are defined in this file are loaded after the default
preferences file (or the file passed after -use_preferences).
Only the preferences that are defined in this file will be
adopted. The old option -preferences is deprecated but will
still be supported for compatibility reasons. -
HDevelop did not save all persistent settings into the file
HDevelop.ini. Under Windows, some settings, e.g., the paths of
the recently opened files, were written into the registry. To
make it possible to copy the persistent settings from one
system to another, now all persistent settings are written to
the file HDevelop.ini.
-
The GUI of HDevelop has been improved in several ways:
- The main tool bar of HDevelop has been cleaned up, i.e., some tool
buttons have been removed.
- Under Windows, the default font of the Program Editor is now 'consolas'.
- The Program Editor provides the new color scheme 'Dark'.
- The current program line is highlighted in the Program Editor.
- Lines with type conflicts are now marked in a different color.
- The background in the workspace has been darkened.
- HDevelop now uses a Windows 8 style to draw its sub-windows under
Windows. The old style can be selected by specifying one of the --style
options on the command line.
- New icons are used for the HDevelop executable, the Help window,
and the HDevelop program and procedure files.
-
The HDevelop help window has been updated with the following
changes:
- The page display now supports actual zooming instead of simply
changing the font size (note that the font size can still be changed in
the HDevelop preferences). A new option is available to determine
whether the selected font should override the default font that is
specified in the documentation pages.
- The syntax selection in the operator reference now works in the
same way as in a browser via links within in the page. The syntax
selection box in the toolbar has been removed.
- The current location is now displayed in the tool bar, and link
targets are displayed in the status bar. Links can be copied or opened
in an external browser via the context menu
- External links (e.g., to MVTec website) will be redirected to an
external web browser.
- Procedure documentation pages now show the full procedure
path.
- Page layout / rendering may differ slightly from earlier
versions.
-
The keyboard navigation in the Help window has been improved.
After searching for help on the Operators, Index, or Search
tabs, the results can now be selected using the Up and Down
arrow keys, while the cursor and focus remain in the search box
for further editing. The content for selected items will be
displayed immediately. On the Index tab, it is also possible to
navigate subtopics using Ctrl-Up and Ctrl-Down.
-
In HDevelop's OCR Training File Browser it took very long to
load and act on training files with many samples. Because of
this, the sorting was restricted to files with fewer than 1000
samples. If more than 1000 samples existed, sorting was
impossible. This has been changed. Now the loading and handling
is much faster and the restrictions for the sorting were
removed.
-
The plot area used in the Histogram and Line Profile dialogs
has been improved. These improvements also apply to the new
Function Inspect dialog.
Navigation and zooming:
- The plot area can be moved by clicking and dragging
it.
- Selection lines will only move when dragged from their
current position.
- The mouse wheel on the plot area zooms both x- and
y-axis by default.
- The mouse wheel on an axis now zooms instead of
scrolling.
- The displayed range can be modified by dragging one of
the min/max ticks on an axis.
- Keyboard shortcuts have been added for navigation
(shift + arrow keys), zooming (+/-), and reset (r).
Other changes:
- The main plot area and both axes can be configured via the
context menu.
- Logarithmic scaling is also supported for the x-axis.
- The plot area features an optional background grid.
- Function values are displayed in the plot area, not as a
tooltip.
- The axis label area uses the same background color as the
plot area.
-
The range handling for Histogram and Line Profile dialogs has
been improved:
The "fixed" mode has been renamed to "user-defined" and will
prevent any automatic scale adaption, even when the data
changes drastically.
The "adaptive" mode now chooses more useful ranges that
remain stable against small variations in the data:
- int1, byte, direction, and cyclic images automatically
use their maximum data range (e.g., byte images use the
range 0 to 255).
- int2, uint2, int4, and int8 images use limits that are
based on the actual data range but rounded to powers of
two.
- int2 and uint2 images can be forced to an explicit bit
range using the set_system()
parameter "int2_bits".
- real images and values in the feature histogram use
limits that are based on the actual data range, but rounded
to values that are round in base 10 (e.g., 0.1, 0.2, 0.5 or
100, 200, 500).
-
The Histogram and Line Profile tools have been streamlined:
- Many common operations can now be performed by direct
interaction with the plot area and its context menus. In
addition to configuring the plot itself, this also offers
control of output to Graphics window, code generation, and
feature selection.
- GUI elements that are no longer required have been
removed from the main GUI. This includes plot configuration
buttons, numeric entry of limits, and selection of range
adaption mode.
- All other GUI elements can now be hidden.
Further changes include:
- Images with 3 channels are now displayed in RGB mode by
default.
- The x-axis can now be switched into logarithmic mode.
Note, however, that histogram quantization is still
performed using equal-sized linear bins.
- The visible plot area can now be moved freely without
restriction to the current data range (with the exception that
negative values are not permitted for logarithmic scales).
-
In the full text editor, the block end statements are now
inserted automatically after the control statement has been
inserted. For example, after inserting the
'for' statement, the
'endfor' statement is now
inserted automatically.
-
The auto completion in HDevelop's full text editor was
improved in the following ways:
- The auto completion now suggests values after starting
a new parameter in a new line after the line continue sign
('\').
- At the beginning of a program line, variables are now
suggested, too.
- Within a parameter area after entering a part of a
function name, not only those functions that start with the
string as prefix are suggested, but also all functions that
contain the substring somewhere inside their name.
- Pressing Tab at the end of an assignment operation now
opens the suggestion list also in cases where the
assignment is already valid but there exist additional
possible completions.
- If a function within an expression has more than one
parameter, pressing Tab after the first parameter now
enters a comma instead of the closing parenthesis.
-
The behavior of HDevelop when canceling drawing operators has been
changed slightly. Now, pressing F9 terminates the drawing operators
identically to the right mouse button. In addition, on Windows and X11
systems, pressing the Esc key cancels the drawing operation without
returning any results.
This behavior is used in the ROI dialog of the Graphics
Window, in the Line Profile tool, in the Matching-, Measure-,
and OCR-Assistant, and for the following drawing operators:
- draw_circle,
- draw_circle_mod,
- draw_ellipse,
- draw_ellipse_mod,
- draw_line,
- draw_line_mod,
- draw_nurbs,
- draw_nurbs_mod,
- draw_nurbs_interp,
- draw_nurbs_interp_mod,
- draw_point,
- draw_point_mod,
- draw_polygon,
- draw_rectangle1,
- draw_rectangle1_mod,
- draw_rectangle2,
- draw_rectangle2_mod,
- draw_region,
- draw_xld, and
- draw_xld_mod.
-
The procedures are now integrated into the submenus of the Operators menu.
They are clearly indicated as procedures by the respective procedure
icons.
-
If the export mode 'Use HALCON Windows' was selected, HDevelop exported stop
operator calls to C# and Visual Basic in the form of calls to the empty
function HDevelopStop(). Because there was no real usage for this
functionality and for reasons of consistency with other exports, now,
HDevelop no longer exports stop operator calls to C# and Visual Basic in
export mode 'Use HALCON Windows'.
Legacy and Obsolete Operations
-
The export to the HALCON/C++ (HALCON-10) interface is now legacy. The export
will remain available for now, but is marked as legacy, which means that it
could be discontinued in the next major version. Note that new features of
HDevelop like parallel execution and vector variables are not supported by
the export to HALCON/C++ (HALCON-10).
-
Saving HDevelop programs and procedures to the old HDevelop 5.0
- 9.0 file format (file extensions .dev and .dvp) is now legacy. While the
option will remain available for now, all entries that offer the saving or
loading of programs or procedures into these file formats are marked as
legacy. That means that the saving into these file formats could be
discontinued in the next major release. Note that new features of HDevelop
like parallel execution and vector variables are not supported by these file
formats.
Bug Fixes
-
HDevelop crashed if two case statements with the same label
were entered in one switch block
via the full text editor. This problem has been fixed.
-
When catching a user defined exception that was thrown by the
throw operator, the user data of the exception returned by
dev_get_exception_data could have
been wrong. In some cases HDevelop even crashed. This problem
has been fixed.
-
HDevelop's copy and paste operation inserted unexpected text
when the full text editor was used. The copy of an empty line
was inserted as a new comment
line, i.e., a line with a '*' at its beginning. The copy of
read_image () was inserted as
read_image (, ). These problems have
been fixed.
-
If two instances of HDevelop were executed in parallel and if
in both instances a program was running that wrote to the
preferences file HDevelop.ini, the preferences file could be
destroyed so that all preferences were lost. This problem has
been fixed.
-
In the Operator Window, it can be chosen to automatically
insert the end-statements for blocks like
for, while,
repeat, if, ifelse, try, and switch. This only works if new blocks are
inserted but not if an existing block statement is edited.
Nevertheless, the respective check box in the Operator Window
was always shown, even if it did not work. This problem has
been fixed. Now, the check box is only shown if it has an effect.
-
After starting HDevelop, the auto save functionality was always
deactivated, even if the corresponding checkbox
(Edit→Preferences...→General Options→Auto Save) was
checked. This problem has been fixed. Note that this problem
has already been fixed in HALCON 11.0.3.1.
-
The status message of HDevelop sometimes showed no memory usage
although the option 'Show memory usage' was enabled. This
problem has been fixed.
-
The background color in the user-defined color scheme could not
be changed. This problem has been fixed.
-
After inserting a program line that consists of several text
lines connected via backslashes ('\') at the end of the
program, the program counter and the text insert marker could
have disappeared. This problem has been fixed.
-
On some Linux systems using the Window manager Xfce, the Program Editor could
lose the focus when the auto completion window was opened. This problem has
been fixed.
-
In the OCR Training File Browser, copying samples from one
training file to another training file did not work correctly.
A training sample consists of an image and a region. The image
contains the gray values and the region contains the area of
the character. When samples were copied from one training file
to a different training file, either via drag and drop or via
copy and paste, the region data of the character was lost.
After this action, the region of the copied image was the full
domain, so the image had lost the region information of the
character. This problem has been fixed.
-
The Generate Sample Variations dialog of the OCR Training File
Browser created some training samples twice. This problem has
been fixed.
-
The Visualize Object Model 3D window froze if several empty and
non-empty models were displayed together. This problem has been
fixed.
-
The HDevelop Help Window sometimes displayed unreadable
characters in the title of an operator help file. This problem
has been fixed.
-
The magnify mode of HDevelop's Graphics window did not work. If
that mode was selected via the tool bar of the Graphics window
and the left mouse button was pressed, only a black square was
displayed instead of an overlay with the magnified part. This
problem has been fixed. Note that this problem has already been
fixed in HALCON 11.0.3.2.
-
The zoom rectangle in the HDevelop Graphics Window was not
always visible when dragging. This problem has been fixed.
-
The overlay for the Graphics window, which was provided by the
Gray Histogram tool for a selected threshold, was not properly cleared for RGB
images when switching from single channel mode to RGB mode in
the Gray Histogram tool. This problem has been fixed.
-
Some tools that allow to draw an ROI in HDevelop added empty
components if ROI drawing was immediately canceled using the
right mouse button before actually drawing an ROI. This problem
has been fixed.
-
The selection of variables in the Variable View window may have
changed if new variables were added or if existing ones were
deleted. This problem has been fixed.
-
The Line Profile tool of HDevelop crashed when a Measure Assistant that was
connected with the tool was closed via File→Exit and afterwards the
input source of the Line Profile tool was changed to Window. This problem has
been fixed.
-
The Line Profile tool hid behind the Measure Assistant and the
Graphics window, when it was opened via the Measure Assistant.
This problem has been fixed.
-
HDevelop's profiler wrongly counted calls to local, external,
or library procedures twice. As a consequence, the profiler
also calculated an average execution time for procedures that
is only half the size of the actual average execution time.
This problem has been fixed.
-
The Image Acquisition Assistant might have crashed when picking
the VideoForLinux2 Interface on Linux 32-bit platforms. This
problem has been fixed.
-
The teaching process of the OCR assistant in HDevelop did not
work correctly. The segmented characters stored in a training
file during the teaching process missed their region
information. Only the image data was written to the training
file, but not the image and the corresponding region. This
problem has been fixed. Now the image data and the region
information of the character is stored in the training
file.
-
The code generation of the OCR Assistant generated wrong code
in the case when the text that was found contained more than
one line. In this case, the call of clear_text_result was displaced. As a result,
the error code 8341 ("Invalid text result") was returned. This
problem has been fixed.
-
HDevelop's Matching Assistant used a wrong parameter value for
Metric when loading a DXF file for the deformable matching.
This problem has been fixed. Now 'ignore_color_polarity'
instead of 'use_polarity' is used for the parameter Metric if
no image is used.
-
The layout of the Matching Assistant was not intuitive when
descriptor-based or deformable matching was selected. The
calibration widgets were sometimes visible and sometimes they
were invisible. Furthermore, for deformable matching, the
edit control with the model name became smaller when 'Using Image'
had been checked. These problems have been fixed. Now. the
calibration widgets are always visible and the edit control
with the model name is resized as expected.
-
The Matching Assistant of HDevelop did not scale the DXF model
when the deformable matching was selected. The code generation
also did not scale the model. These problems have been
fixed.
-
The Matching Assistant may have shown an info message that some
test images could not be loaded during the loading of settings.
This happened when test images were used that have been
acquired with the Image Acquisition Assistant. These images
have been inserted with names like Image01, Image02. These
images cannot be loaded together with the settings because
they have not been stored on disk. This problem has been
fixed.
-
In the Calibration Assistant the 'fill' mode for displaying the
plate region did not work. This problem has been fixed.
-
HDevelop crashed when in the Operator window a global variable
was declared that used the name of a procedure parameter as
variable name.
This problem has been fixed. -
Using the Tab key or Ctrl+I to fix the indent of a line changed
the cursor position if the cursor was inside the leading
whitespaces of that line. This problem has been fixed.
-
HDevelop crashed when the position of a procedure's parameter
was changed in the procedure interface dialog, this change was
applied, and the parameter's position was changed again without
reselecting the parameter. This problem has been fixed.
-
If an HDevelop program or procedure contained two or more
identical import statements and
if one of these import statements was
deleted and if the last line of the edited procedure was a
procedure call that was resolved solely via the
import statements, then this line
became invalid (i.e., unresolved). This problem has been
fixed.
-
HDevelop in very rare cases shows a warning while copying
standard procedures between two HDevelop instances. This
problem has been fixed.
-
HDevelop still listed libraries and their procedures, even when
the associated path or library had been deleted via the
Edit/Preferences/Directories Delete-Button. The libraries and
the procedures were still listed in the Preferences Dialog
under Procedures/Manage Procedure Libraries and under
Procedures/External Procedures. This problem has been
fixed.
-
HDevelop could not resolve library procedures if they were
imported via the import statement
and if the parameter of the import
statement was the name of the directory that contained the
procedure library instead of the library name itself. This was
contrary to the documentation of the import statement. This problem has been fixed.
-
The Edit Procedure Interface dialog did not work correctly when
renaming a parameter in very rare cases. If a program line
contained a parameter more than once, for example in an
expression, not all parameters were renamed correctly. This may
have led to invalid program lines. Note that this problem only
occurred if the parameter had the form xxx1[2], where 'xxx'
stands for an arbitrary sequence of characters. This problem
has been fixed.
-
Pressing F1 in the Procedure Interface dialog and in the
Operator window was not consistent. This problem has been
fixed. Now, F1 behaves consistently as follows:
- If no operator or procedure is selected, it opens the description of
the Operator window in the HDevelop Users' Guide.
- If an operator or procedure is selected, it opens the reference of the
selected operator/procedure.
Note that Shift-F1 always opens the HDevelop User's Guide.
-
HDevelop crashed when an invalid parameter name was defined in
the Edit Procedure Interface dialog and then, the Help button
was pressed. This problem has been fixed.
-
In HDevelop it was possible to create a valid and executable
procedure call of main. However, calling main recursively could
crash or freeze HDevelop. Therefore, 'main ()' is no longer a
valid statement.
-
HDevelop crashed if a new procedure was created from the
selection and in the selected program lines a variable, which
would have become a procedure parameter, was used as a control
variable as well as an iconic variable. This problem has been
fixed.
-
If the interface of a local procedure is edited but not yet
applied, and the program is closed (e.g., because a different
program is loaded) while the interface dialog is still open,
HDevelop offers to keep a copy of that procedure. If afterwards
the procedure interface dialog was closed without applying the
interface changes, HDevelop crashed. This problem has been
fixed.
-
HDevelop exported single external procedures via the command
line with the option -convert incorrectly if the exported
procedure contained references to other external procedures. In
this case, the exported code contained only the declarations of
the referenced procedures but not their implementations. This
problem has been fixed. Now, the above described behavior only
applies if the command line export option
-no_export_of_referred_procs is active, as it is the case when
exporting HDevelop programs or procedure libraries.
-
If 'Export local procedures body' was unchecked in HDevelop's
export dialog, HDevelop unnecessarily exported local procedures
as procedures with an empty procedure body to C# and VB.NET.
Now in this case local procedures are not exported at all,
analogously to the export behavior regarding external procedures
if 'Export external procedures body' is unchecked.
-
HDevelop exported single external procedures via the command
line option -convert incorrectly in the following case:
- The external procedure contained references, i.e.
calls, to other external procedures.
- The directory containing the referenced procedures
was contained in the list of external procedure paths.
- The command line call contained the absolute path to
the external procedure to be exported.
- The paths used in (2.) and (3.) were equal (case
sensitivity).
In these cases, the exported code contained only
comments instead of calls to the referenced procedures. This
problem has been fixed.
-
The Export dialog warned twice about overwriting an existing
file. This happened if an existing file was selected via the
browse button. Then, a warning dialog was shown. After pressing
the export button, the warning dialog appeared again. This
problem has been fixed.
-
HDevelop exported operator and procedure calls that used the
same global variable as input and output incorrectly to C, C#,
and Visual Basic. The regarding call did not
modify the value of the global variable, which was an incorrect
behavior. This problem has been fixed.
-
HDevelop code exported to .NET created a memory leak if global
iconic variables were used as output parameters of operator or
procedure calls. This problem has been fixed.
-
HDevelop in rare cases exported programs incorrectly to C# if
they contained some handling of HDevelop Graphics windows. This
happened if a Graphics window handle was referenced only via
dev_get_window and if the option
'Window export' was set to 'Use HALCON Windows'. This problem
has been fixed.
-
When opening a procedure for editing failed, HDevelop solely
displayed a message that the procedure could not be loaded.
This problem has been fixed. Now, HDevelop additionally
displays the same information that is shown in the External
Procedures tab or when loading a program fails.
-
Creating a local procedure from a selection of code lines
caused a problem when there was an import statement amongst the selected code
lines and a procedure call that was resolved solely via that
import statement. In this case, the
procedure call in the newly created procedure remained
unresolved. This problem has been fixed.
-
HDevelop crashed when trying to export continue or break
statements if the program code between the regarding continue
(or break) statement and its first valid enclosing loop
structure contained an invalid loop structure, conditional
statement, or the like. This problem has been fixed.
-
HDevelop exported for loops inside case statements incorrectly
to HALCON/C++. This problem has been fixed.
-
There was a problem with entering East Asian characters into
the full text editor. During or after entering East Asian
characters like Hiragana, Katakana, or Hanja via a phonetic or
shape based input method the text cursor might have jumped to the
beginning of the next line. This could not only happen after the
conversion into the East Asian characters but also in the
middle of entering a character by a key sequence. If this
happened, the complete program line could become corrupted.
This problem has been fixed.
Examples
New Example Programs
HALCON has been extended with more than 70 new HDevelop example
programs:
-
The new HDevelop example programs
- hdevelop/System/IO-Devices/advantech_digital_read.hdev
and
-
hdevelop/System/IO-Devices/advantech_digital_write.hdev
show how to use the new Advantech I/O interface.
-
The new HDevelop example programs
- hdevelop/System/IO-Devices/nidaqmx_counter.hdev,
- hdevelop/System/IO-Devices/nidaqmx_digital_read.hdev, and
- hdevelop/System/IO-Devices/nidaqmx_digital_write.hdev
show the simple use of the new National Instruments
NI-DAQmx I/O interface.
-
The new HDevelop example programs
- hdevelop/System/IO-Devices/contec_digital_read.hdev and
- hdevelop/System/IO-Devices/contec_digital_write.hdev
show how to use the new Contec I/O interface.
-
The new HDevelop example programs
- hdevelop/System/IO-Devices/interface_digital_read.hdev and
- hdevelop/System/IO-Devices/interface_digital_write.hdev
show the ease of use of the new I/O interface for
accessing the Interface Digital I/O boards.
-
The new HDevelop example programs
- hdevelop/System/IO-Devices/opc_ua_browse_variables.hdev,
- hdevelop/System/IO-Devices/opc_ua_channel_access.hdev,
- hdevelop/System/IO-Devices/opc_ua_discovery.hdev,
- hdevelop/System/IO-Devices/opc_ua_parameters.hdev, and
- hdevelop/System/IO-Devices/opc_ua_security.hdev
show how to use the new OPC UA I/O interface.
-
The new HDevelop example programs
- hdevelop/System/IO-Devices/opc_classic_browse_variables.hdev,
- hdevelop/System/IO-Devices/opc_classic_channel_access.hdev, and
- hdevelop/System/IO-Devices/opc_classic_parameters.hdev
show how to use the new OPC Classic I/O interface.
-
The new HDevelop example program
- hdevelop/Control/vector_variables.hdev
shows how to use vector variables in HDevelop and
the new HDevelop example program
-
hdevelop/Control/align_measurements_multithreading.hdev
demonstrates how to use vector variables as output for
procedures that are executed in parallel.
-
The new HDevelop example programs
- hdevelop/Control/par_start.hdev,
- hdevelop/Control/align_measurements_multithreading.hdev,
- hdevelop/System/Multithreading/message_queue_producer_consumer.hdev, and
- hdevelop/System/Multithreading/message_queue_producer_consumer_abort.hdev
show how to use the new HDevelop statements par_start and par_join to control the
parallel execution of operators and procedures in HDevelop. The
example program par_start.hdev uses the new image
-
barcode/mixed/barcodes_datacodes_mixed_01.png.
-
The new HDevelop example program
- hdevelop/Runtime/test_jit_speedup.hdev
demonstrates the usage and the effect of the
just-in-time (JIT) compiler in HDevelop.
-
The new HDevelop example programs
-
hdevelop/Graphics/Object/create_drawing_object_circle_sector.hdev
and
-
hdevelop/Graphics/Object/create_drawing_object_rectangle2.hdev
show how to use the event-based interaction with drawing
objects.
The new Visual Studio projects for the C# example programs
- c#/DrawingObjects/vs2005/DrawingObjects/
and
-
c#/DrawingObjectsWPF/vs2010/DrawingObjectsWPF/
show how to use the event-based interaction with drawing
objects in HALCON's C# interface. The project DrawingObjects
shows how to use drawing objects within a WinForms dialog,
whereas the project DrawingObjectsWPF shows how to use
drawing objects within a WPF Form and how to integrate
exported C#-code into your application.
-
The new HDevelop example program
-
hdevelop/Calibration/Multi-View/calibrate_cameras_monocular.hdev
demonstrates the calibration of a single camera with the
new easy to use calibration plate. It uses the new images
- calib/calib_single_camera_[01-07].png.
-
The HDevelop example programs
-
hdevelop/3D-Reconstruction/Multi-View/reconstruct_points_stereo.hdev,
-
solution_guide/3d_vision/3d_information_for_selected_points.hdev, and
-
solution_guide/3d_vision/two_camera_calibration.hdev,
which are described in the Solution Guide on 3D Vision,
have been adapted to not use find_caltab and find_marks_and_pose anymore. These
operators do not work for the new calibration plates with
hexagonally arranged marks. Now, the general processes
demonstrated within the documentation and the corresponding
examples can be applied for any of the standard HALCON
calibration plates.
-
The new HDevelop example programs
- hdevelop/Calibration/Hand-Eye/calibrate_hand_eye_scara_moving_cam.hdev and
- hdevelop/Calibration/Hand-Eye/calibrate_hand_eye_scara_stationary_cam.hdev
show how to calibrate a SCARA hand-eye system. The
example programs use the new images
- 3d_machine_vision/handeye/scara_moving_cam_setup_01_[01-10].png and
- 3d_machine_vision/handeye/scara_stationary_cam_setup_01_[01-10].png.
The new HDevelop example program
- hdevelop/Calibration/Hand-Eye/calibrate_hand_eye_scara_stationary_cam_approx.hdev
shows how to approximately calibrate a SCARA handy-eye system without using
a calibration plate. The example program uses the new image
- 3d_machine_vision/handeye/scara_stationary_cam_setup_01_calib_approx_01.png.
The new HDevelop example program
-
hdevelop/Calibration/Hand-Eye/pick_and_place_scara_stationary_cam.hdev
shows how to use the (exact or approximate) calibration results provided by
the HDevelop example programs calibrate_hand_eye_scara_stationary_cam.hdev
and calibrate_hand_eye_scara_stationary_cam_approx.hdev for a
pick-and-place application. The example program uses the new images
- 3d_machine_vision/handeye/scara_stationary_cam_setup_01_metal_parts_[01-06].png.
-
The new HDevelop example programs
-
hdevelop/Calibration/Multi-View/calibrate_cameras_telecentric_tilt.hdev
and
-
hdevelop/Calibration/Multi-View/calibrate_cameras_telecentric_tilt_stereo.hdev
show how to calibrate cameras using the new camera model for
telecentric tilt lenses.
The example program calibrate_cameras_telecentric_tilt.hdev calibrates a
single camera and uses the new images
- caliper/caliper_with_tilt.png,
- caliper/caliper_no_tilt.png,
- calib/calib_telecentric_tilt_[01-17].png, and
- caliper/caliper_measurement_plane.png.
The example program calibrate_cameras_telecentric_tilt_stereo.hdev
calibrates a stereo camera setup and uses the new images
- stereo/telecentric_tilt/cam_0_calib_plate_[01-08].png,
- stereo/telecentric_tilt/cam_1_calib_plate_[01-08].png,
- stereo/telecentric_tilt/cam_0_cartridge.png,
- stereo/telecentric_tilt/cam_1_cartridge.png,
- stereo/telecentric_tilt/cam_0_tissue.png, and
- stereo/telecentric_tilt/cam_1_tissue.png.
-
The new HDevelop example program
- hdevelop/Graphics/Scene-3D/display_scene_3d.hdev
shows how to use the new interface for the visualization
of 3D object models.
The HDevelop procedure library
- procedures/general/visualize_object_model_3d.hdpl
has been adapted to use 3D scenes for the visualization
of 3D object models.
-
The new HDevelop example program
- hdevelop/3D-Object-Model/Transformations/simplify_object_model_3d.hdev
shows how to use the new operator simplify_object_model_3d that simplifies a triangulated 3D object model by removing less
important points.
-
The new HDevelop example program
-
hdevelop/Applications/Measuring-2D/measure_stamping_part.hdev
demonstrates the use of the new metrology operators and the
alignment of a metrology model with, e.g., shape-based
matching.
-
The new HDevelop example program
- hdevelop/OCR/Neural-Nets/regularized_ocr_mlp.hdev
shows how to use the new mechanism to automatically determine the
regularization parameters for the MLP-based OCR classifier.
-
The new HDevelop example program
-
hdevelop/Classification/Neural-Nets/mlp_regularization.hdev
shows the effect of the new mechanism to regularize the weights of the
MLP-based classification to enforce smoother transitions of the confidences
between classes and to prevent overfitting.
-
The new HDevelop example program
- hdevelop/Classification/Neural-Nets/set_rejection_params_class_mlp.hdev
shows how to automatically generate a rejection class
for an MLP classifier with the new operator set_rejection_params_class_mlp.
-
The new HDevelop example program
- hdevelop/OCR/Segmentation/find_text.hdev
shows how to use the new automatic text reader. It uses
the new image - ocr/medication_package_02_right.png.
The new HDevelop example program
-
hdevelop/OCR/Segmentation/find_expiration_date.hdev
shows an application of the new automatic text reader.
It uses the new images
- ocr/medication_package_[01-03]_front.png,
- ocr/medication_package_[01-03]_left.png,
- ocr/medication_package_[01-03]_back.png,
- ocr/medication_package_[01-03]_right.png,
- ocr/medication_package_[01-03]_bottom.png, and
- ocr/medication_package_[01-03]_top.png.
-
The new HDevelop example program
- hdevelop/Identification/Bar-Code/barcode_param_meas_param_estimation.hdev
demonstrates the usage and use cases for the new bar code parameter
'meas_param_estimation'. It uses the new images
- barcode/ean13/ean13_meas_param_estimation_[01-10].png.
-
The new HDevelop example program
-
hdevelop/Identification/Bar-Code/barcode_param_contrast_min.hdev
shows how to reject bar code candidate regions
depending on their contrast. It uses
the new image
- barcode/25interleaved/25interleaved_zeiss1.png.
-
The new HDevelop example program
-
hdevelop/Identification/Bar-Code/barcode_param_width_height.hdev
shows how to use the parameters 'barcode_width_min' and
'barcode_height_min' to specify the maximal dimensions of a
bar code.
-
The new HDevelop example program
- hdevelop/Identification/Bar-Code/code32.hdev
shows how to read a bar code of type 'Code 32' by using
the bar code reader for the code type 'Code 39' in
combination with the new external procedure-
general/convert_decoded_string_code39_to_code32.hdvp.
The example program uses the new image
- barcode/code32/code32_01.png.
-
The new HDevelop example program
-
hdevelop/Identification/Bar-Code/barcode_param_majority_voting.hdev
shows how to use the new parameter 'majority_voting' of
the bar code reader. It uses the new image
-
The new HDevelop example program
-
hdevelop/Identification/Data-Code/ecc200_direct_mark_quality_semi_t10.hdev
shows how to assess the direct part mark quality of an Data Matrix ECC
200 code, compliant with the SEMI
T10-0701 standard.
-
The new HDevelop example program
- hdevelop/Identification/Data-Code/ecc200_direct_mark_quality_semi_t10.hdev
and the extended HDevelop example program- hdevelop/Identification/Data-Code/ecc200_print_quality.hdev
use the new image
- datacode/ecc200/ecc200_print_quality_01.png,
which corresponds to the requirements of the ISO/IEC
15415 standard. The modules of the data code measure 10
pixels in width and height.
-
The new HDevelop example program
-
hdevelop/3D-Matching/Surface-Based/find_surface_model_noisy_data.hdev
shows how surface-based matching can be used to find
objects even in noisy data.
-
The new HDevelop example program
-
hdevelop/3D-Matching/Deformable-Surface-Based/find_deformable_surface_model.hdev
shows how to use the deformable surface-based 3D
matching.
It uses the new 3D object models
- silicone_baking_mold/silicone_baking_mold_3d_model.om3 and
- silicone_baking_mold/silicone_baking_mold_3d_scene_[01-07].om3.
-
The new HDevelop example program
-
hdevelop/3D-Reconstruction/Sheet-Of-Light/calibrate_sheet_of_light_3d_calib_object.hdev
shows how to use the new operator calibrate_sheet_of_light to calibrate a
sheet-of-light model with a 3D calibration object. It uses
the new image
- sheet_of_light/calib_object_disparity.tif.
-
The new HDevelop example program
-
hdevelop/Applications/Surface-Inspection/check_for_holes_sheet_of_light.hdev
shows how to detect additional, missing, or incorrectly
placed holes as well as holes that have a wrong diameter in
3D objects.
The example program uses the new images
- sheet_of_light/injection_mould_[01-06]_disparity.tif
-
The HDevelop example program
- hdevelop/Applications/Surface-Inspection/compare_surface_sheet_of_light.hdev
has been adapted to show how the new generic parameter 'signed_distances'
of distance_object_model_3d is used to compute signed distances between 3D object models.
-
The new HDevelop example program
- hdevelop/Filters/Scene-Flow/scene_flow_globe.hdev
shows how to use the new operators to calculate the
scene flow. It uses the new example images
- stereo/globe/globe_l_[01-05].png and
- stereo/globe/globe_r_[01-05].png.
-
The new HDevelop example program
- hdevelop/XLD/Features/test_closed_xld.hdev
shows how to use the new operator test_closed_xld that tests whether a
contour is closed or not.
-
The new HDevelop example program
-
hdevelop/Transformations/2D-Transformations/point_line_to_hom_mat2d.hdev
shows how the new operator point_line_to_hom_mat2d can be used for alignment
purposes in an OCV application.
-
The new HDevelop example program
-
hdevelop/Filters/Smoothing/compare_gauss_filters.hdev
compares the properties of the new operatorgauss_filter and the operators
derivate_gauss,
binomial_filter, and
smooth_image.
-
The new HDevelop
example program
- hdevelop/Filters/FFT/phase_correlation_fft.hdev
shows how to use the new operator phase_correlation_fft to compute the translation
between two images.
-
The new HDevelop example programs
- hdevelop/Segmentation/Threshold/local_threshold.hdev
and
-
hdevelop/Segmentation/Threshold/binary_threshold.hdev
show how to use the new operatorsbinary_threshold and
local_threshold.
-
The new HDevelop example programs
- hdevelop/Applications/Measuring-2D/inspect_frame_width.hdev and
- hdevelop/Tools/Geometry/apply_distance_transform.hdev
show how to use the new functionality to calculate the
pointwise distance between contours. They use the new images
- plastic_parts/phone_camera_frame_01.png and
- plastic_parts/phone_camera_frame_02.png.
-
The new HDevelop example programs
- hdevelop/3D-Reconstruction/Binocular-Stereo/binocular_disparity_ms.hdev
and
- hdevelop/3D-Reconstruction/Binocular-Stereo/binocular_distance_ms.hdev
show how to use the new operators for binocular stereo binocular_disparity_ms and binocular_distance_ms that solve
the stereo correspondence using multi-scanline optimization.
-
The new HDevelop example program
- hdevelop/3D-Reconstruction/Binocular-Stereo/binocular_disparity_comparison.hdev
compares the different approaches for stereo reconstruction with regard to
accuracy and runtime. It uses the new images
- stereo/middlebury_cones/im2.png,
- stereo/middlebury_cones/im6.png,
- stereo/middlebury_cones/disp2.png, and
- stereo/middlebury_cones/occl.png.
-
HALCON has been extended with an operator evaluate_class_svm that evaluates a feature
vector by a support vector machine. The HDevelop example
program
-
hdevelop/Classification/Support-Vector-Machines/novelty_detection.hdev
has been modified accordingly to show how to use the new
functionality to evaluate a feature vector by a support
vector machine.
-
The new HDevelop example programs
-
hdevelop/System/Multithreading/message_as_dictionary.hdev,
-
hdevelop/System/Multithreading/message_queue_as_container.hdev,
-
hdevelop/System/Multithreading/message_queue_producer_consumer_abort.hdev,
and
-
hdevelop/System/Multithreading/message_queue_producer_consumer.hdev
show how to use the new message queue operators to
implement multithreaded producer-consumer problems and, in
addition, how to use messages as dictionaries and message
queues as data containers.
-
The new HDevelop example program
- hdevelop/Object/Information/compare_obj.hdev
shows how to use the new operator compare_obj to compare iconic
objects.
-
The new HDevelop example programs
-
hdevelop/File/Images/write_image_benchmark.hdev
and
- hdevelop/File/Misc/write_object.hdev
show the usage of the new HOBJ format.
-
The new HDevelop example program
- hdevelop/Tuple/Sets/tuple_sets.hdev
shows how to use the new operators to apply set
operations on tuples.
-
The new HDevelop example program
- hdevelop/Tuple/Selection/tuple_find.hdev
shows how to use the new operatorstuple_find_first and tuple_find_last.
-
The new HDevelop example program
-
hdevelop/Inspection/Bead-Inspection/apply_bead_inspection_model.hdev
shows how to use the new set of operators to measure
and inspect adhesive beads. It uses the new example
images
- bead/adhesive_bead_[01-07].png
-
The new HDevelop example programs
- hdevelop/Image/Acquisition/argos3d-p1xx_simple.hdev and
- hdevelop/Image/Acquisition/argos3d-p1xx_objectmodel3d.hdev
show how to use the new Argos3D-P1xx interface, which allows the easy
acquisition of 3D depth images from Argos P1xx 3D sensors.
Modified Example Programs
-
HALCON now exploits the AVX2 instruction set under Windows and Linux. This
leads to a significant speedup on machines that support the AVX2 instruction
set.
The HDevelop example program
-
hdevelop/System/Parameters/query_system_parameters.hdev
has been extended to display the supported SIMD
extensions. -
The HDevelop example program
- hdevelop/Filters/Color/cfa_to_rgb.hdev
has been extended by the new mode for enhanced bilinear
interpolation for cfa_to_rgb.
-
The HDevelop example program
- hdevelop/System/Parameters/query_system_parameters.hdev
has
been adapted to use the new operatorget_system_time.
-
The HDevelop example program
- hdevelop/Applications/Print-Inspection/
inspect_bottle_label_360_degree.hdev
may have returned errors or it may have produced an
empty mosaic image if it was adapted to another assembly of
cameras and if therefore the geometry of the camera setup
deviated from the one used in the example program. This
problem has been fixed.
-
The HDevelop example program
- hdevelop/Applications/Print-Inspection/
inspect_bottle_label_360_degree.hdev
contained memory leaks, e.g., handles were created and
not deleted. This problem has been fixed.
-
The HDevelop example program
-
solution_guide/3d_vision/camera_calibration_multi_image.hdev
has been adapted to use the new easy to use calibration plate. It
uses the new images
- 3d_machine_vision/calib/calib_image_[01-07].png
and
- 3d_machine_vision/calib/ruler.png
-
The HDevelop example program
-
hdevelop/Applications/Position-Recognition-3D/3d_matching_clamps.hdev
contains the local procedure
inspect_object_model_3d,
which is used to determine input parameters for
create_shape_model_3d. This
procedure now supports all camera types that can be used
for shape-based 3D matching.
-
The HDevelop example programs
-
hdevelop/Tools/Grid-Rectification/grid_rectification.hdev
and
-
solution_guide/3D-vision/grid_rectification_ruled_surface.hdev
were nearly identical. Therefore,
-
hdevelop/Tools/Grid-Rectification/grid_rectification.hdev
has been revised and
-
solution_guide/3D-vision/grid_rectification_ruled_surface.hdev
has been removed.
-
For the HDevelop example program
-
hdevelop/Applications/Surface-Inspection/determine_tilt_slant_photometric_stereo.hdev
the slant calculation was wrong. This problem has been fixed.
-
The HDevelop example program
- hdevelop/Segmentation/Threshold/var_threshold.hdev
has been revised.
-
The HDevelop example programs
- hdevelop/Applications/Measuring-2D/angio.hdev,
-
hdevelop/Applications/Measuring-2D/segment_wedge_bonds.hdev,
-
hdevelop/Applications/Object-Recognition-2D/roads.hdev,
-
hdevelop/Applications/Surface-Inspection/detect_mura_defects_blur.hdev,
and
- hdevelop/Filters/Lines/lines_gauss.hdev
have been adapted to use the new procedurecalculate_lines_gauss_parameters.
-
The HDevelop example program
-
hdevelop/Applications/OCR/generate_system_font.hdev,
which creates OCR training samples from system fonts,
created some training samples twice. This problem has been
fixed.
-
The results of the existing HDevelop example
program
-
hdevelop/Identification/Bar-Code/print_quality_isoiec15416.hdev
may differ because the bar code reader has been adapted to calculate the symbol
gradings of bar codes according to the latest ISO/IEC
standards.
-
The HDevelop example program
-
hdevelop/Identification/Data-Code/ecc200_print_quality.hdev,
which shows how to access ISO/IEC 15415 quality gradings, has been
extended according to the new symbol gradings for reflectance margin,
contrast uniformity, and print growth for the 2D data code
types Data Matrix ECC 200, QR code, Micro QR code, and Aztec.
-
The HDevelop example programs
- hdevelop/Applications/Position-Recognition-3D/locate_car_door.hdev,
- hdevelop/Applications/Position-Recognition-3D/locate_engine_parts.hdev, and
- explore_halcon.hdev
were modified to show how to use the new functionality
to specify the coordinate system of the output contours of get_deformable_model_contours.
-
For the following HDevelop example programs in the
subdirectory solution_guide/image_acquisition that are used
for the Solution Guide on Image Acquisition, the names have
been changed such that the names of the used HALCON image
acquisition interfaces are no longer contained:
- first_example_acquisition_saperalt.hdev →
first_example_acquisition.hdev,
- info_framegrabber_1394iidc.hdev →
info_framegrabber.hdev,
- multiple_boards_bitflow.hdev →
multiple_boards.hdev,
- multiple_ports_bitflow.hdev →
multiple_ports.hdev,
- port_switching_bitflow.hdev →
port_switching.hdev,
- real_time_grabbing_bitflow.hdev →
real_time_grabbing.hdev,
- simultaneous_grabbing_bitflow.hdev →
simultaneous_grabbing.hdev, and
- volatile_grabbing_bitflow.hdev →
volatile_grabbing.hdev.
Additionally, the following files have been removed:
- c/win/examples.dsw,
- c/win/error_handling_timeout_leutron/
error_handling_timeout_leutron.dsp,
- cpp/win/examples.dsw,
- cpp/win/error_handling_timeout_leutron/
error_handling_timeout_leutron.dsp,
-
vb/error_handling_timeout_leutron/error_handling_timeout_leutron.frm,
-
vb/error_handling_timeout_leutron/error_handling_timeout_leutron.frx,
-
vb/error_handling_timeout_leutron/error_handling_timeout_leutron.vbp,
-
vb/error_handling_timeout_leutron/error_handling_timeout_leutron.vbw,
and
-
vb/error_handling_timeout_leutron/error_handling_timeout_leutron.xml.
-
The Leutron image acquisition interface is no longer
supported and has been removed. Consequently, the following
HDevelop example programs have been removed:
- hdevelop/Image/Acquisition/leutron_trigger.hdev,
- hdevelop/Image/Acquisition/leutron.hdev, and
- hdevelop/Image/Acquisition/leutron_2cameras.hdev.
The example programs
-
solution_guide/image_acquisition/error_handling_timeout_leutron.hdev
-
solution_guide/image_acquisition/c/error_handling_timeout_leutron.c
-
solution_guide/image_acquisition/cpp/error_handling_timeout_leutron.cpp
-
solution_guide/image_acquisition/vb/error_handling_timeout_leutron.vb
that were described in the Solution Guide on Image
Acquisition have been replaced by corresponding programs with
the name error_handling_timeout.*.
-
Some HDevelop example programs have been reordered in the
file structure.
The HDevelop example programs
-
hdevelop/Calibration/Monocular/compare_calibration_models.hdev
and
-
hdevelop/Calibration/Monocular/line_scan_calibration.hdev
have been moved to the directory
- hdevelop/Calibration/Multi-View
The HDevelop example program
-
hdevelop/Calibration/Monocular/camera_calibration.hdev
has been removed.
The HDevelop example program
-
hdevelop/Calibration/Multi-View/calibrate_cameras.hdev
has been renamed to
-
hdevelop/Calibration/Multi-View/calibrate_cameras_multiple_camera_setup.hdev
Removed Example Programs
The following example programs have been removed:
-
The HDevelop example program
-
solution_guide/3D-vision/grid_rectification_ruled_surface.hdev
has been removed because it was nearly identical
to the HDevelop example program -
hdevelop/Tools/Grid-Rectification/grid_rectification.hdev,
which has been revised accordingly.
-
For the following HDevelop example programs in the
subdirectory solution_guide/image_acquisition that are used
for the Solution Guide on Image Acquisition, the names have
been changed such that the names
of the used HALCON image
acquisition interfaces are no longer contained:
- first_example_acquisition_saperalt.hdev →
first_example_acquisition.hdev,
- info_framegrabber_1394iidc.hdev →
info_framegrabber.hdev,
- multiple_boards_bitflow.hdev →
multiple_boards.hdev,
- multiple_ports_bitflow.hdev →
multiple_ports.hdev,
- port_switching_bitflow.hdev →
port_switching.hdev,
- real_time_grabbing_bitflow.hdev →
real_time_grabbing.hdev,
- simultaneous_grabbing_bitflow.hdev →
simultaneous_grabbing.hdev, and
- volatile_grabbing_bitflow.hdev →
volatile_grabbing.hdev.
Additionally, the following files have been removed:
- c/win/examples.dsw,
- c/win/error_handling_timeout_leutron/
error_handling_timeout_leutron.dsp,
- cpp/win/examples.dsw,
- cpp/win/error_handling_timeout_leutron/
error_handling_timeout_leutron.dsp,
-
vb/error_handling_timeout_leutron/error_handling_timeout_leutron.frm,
-
vb/error_handling_timeout_leutron/error_handling_timeout_leutron.frx,
-
vb/error_handling_timeout_leutron/error_handling_timeout_leutron.vbp,
-
vb/error_handling_timeout_leutron/error_handling_timeout_leutron.vbw,
and
-
vb/error_handling_timeout_leutron/error_handling_timeout_leutron.xml.
-
The Leutron image acquisition interface is no longer
supported and has been removed. Consequently, the following
HDevelop example programs have been removed:
- hdevelop/Image/Acquisition/leutron_trigger.hdev,
- hdevelop/Image/Acquisition/leutron.hdev, and
- hdevelop/Image/Acquisition/leutron_2cameras.hdev.
The example programs
-
solution_guide/image_acquisition/error_handling_timeout_leutron.hdev
-
solution_guide/image_acquisition/c/error_handling_timeout_leutron.c
-
solution_guide/image_acquisition/cpp/error_handling_timeout_leutron.cpp
-
solution_guide/image_acquisition/vb/error_handling_timeout_leutron.vb
that were described in the Solution Guide on Image
Acquisition have been replaced by corresponding programs with
the name error_handling_timeout.*.
HALCON Library
New Operators
3D Matching → Deformable
Surface-Based
-
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
to enable a deformable surface-based 3D matching that
finds objects and determines their poses and deformation in
2.5D as well as in 3D data.
The new HDevelop example program
-
hdevelop/3D-Matching/Deformable-Surface-Based/find_deformable_surface_model.hdev
shows how to use the deformable surface-based 3D
matching.
It uses the new 3D object models
- silicone_baking_mold/silicone_baking_mold_3d_model.om3 and
- silicone_baking_mold/silicone_baking_mold_3d_scene_[01-07].om3.
3D Object Model → Transformations
-
HALCON has been extended with an operator simplify_object_model_3d that simplifies a
triangulated 3D object model by removing less important
points. For this, the user is able to specify the number of
points that are to be removed or, alternatively, the number
of remaining points.
The new HDevelop example program
-
hdevelop/3D-Object-Model/Transformations/simplify_object_model_3d.hdev
shows how to use the new operator.
3D Reconstruction → Binocular Stereo
-
HALCON has been extended with two new operators for stereo
reconstruction.
Both operators solve the stereo
correspondence using multi-scanline optimization.
The new HDevelop example programs
-
hdevelop/3D-Reconstruction/Binocular-Stereo/binocular_disparity_ms.hdev
and
-
hdevelop/3D-Reconstruction/Binocular-Stereo/binocular_distance_ms.hdev
show how to use the new operators for binocular stereo
that solve the stereo correspondence using multi-scanline
optimization.
The new HDevelop example program
-
hdevelop/3D-Reconstruction/Binocular-Stereo/binocular_disparity_comparison.hdev
compares the different approaches for stereo
reconstruction with regard to accuracy and runtime. It uses
the new images
- stereo/middlebury_cones/im2.png,
- stereo/middlebury_cones/im6.png,
- stereo/middlebury_cones/disp2.png, and
- stereo/middlebury_cones/occl.png.
3D Reconstruction → Sheet of Light
-
HALCON has been extended with two operators to support
sheet-of-light calibration with a 3D calibration object.
The new HDevelop example program
-
hdevelop/3D-Reconstruction/Sheet-Of-Light/calibrate_sheet_of_light_3d_calib_object.hdev
shows how to use the new operator calibrate_sheet_of_light to calibrate a
sheet-of-light model with a 3D calibration object. It uses
the new image
- sheet_of_light/calib_object_disparity.tif.
Calibration → Multi-View
-
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
demonstrates the new functionality for a camera with a telecentric tilt lens.
It uses the images
- caliper/caliper_with_tilt.png,
- caliper/caliper_no_tilt.png,
- calib/calib_telecentric_tilt_[01-17].png, and
- caliper/caliper_measurement_plane.png.
The new HDevelop example program
- hdevelop/Calibration/Multi-View/calibrate_cameras_telecentric_tilt_stereo.hdev
uses the new functionality to calibrate a stereo camera setup. It uses the new images
- stereo/telecentric_tilt/cam_0_calib_plate_[01-08].png,
- stereo/telecentric_tilt/cam_1_calib_plate_[01-08].png,
- stereo/telecentric_tilt/cam_0_cartridge.png,
- stereo/telecentric_tilt/cam_1_cartridge.png,
- stereo/telecentric_tilt/cam_0_tissue.png, and
- stereo/telecentric_tilt/cam_1_tissue.png.
The HDevelop Calibration Assistant has been extended to
support the new functionality.
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
shows the effect of regularizing an MLP.
-
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
shows how to create a rejection class for an MLP
classifier with the new operator set_rejection_params_class_mlp.
Classification → Support Vector
Machines
-
HALCON has been extended with an operator evaluate_class_svm that evaluates a feature
vector by a support vector machine. The HDevelop example
program
-
hdevelop/Classification/Support-Vector-Machines/novelty_detection.hdev
has been modified accordingly to show how to use the new
functionality to evaluate a feature vector by a support
vector machine.
File → Misc
File → Object
-
HALCON has been extended with the operators write_object and read_object, which provide the
functionality to write and read all kinds of iconic HALCON
objects (images, regions, and XLDs). The operators use the
new binary file format HOBJ. For runtime efficiency reasons,
no compression is applied to the data. The default file
extension for this file format is '.hobj'. The existing
operators write_image,
read_image, write_region, and read_region have been extended to also
support the HOBJ format. serialize_object also uses the HOBJ format
internally. Consequently, objects that have been serialized
with HALCON 12 or higher cannot be deserialized by older
HALCON versions. The file format IMA, which was used for
image data, is now legacy and the file format HOBJ should be
used instead. The file format HALCON Region ('.reg'), which
was used for region data, is now legacy and the file format
HOBJ should be used instead. For compatibility reasons, the
file formats IMA and HALCON Region are still supported by
write_image, read_image, write_region,
and read_region.
The new HDevelop example programs
-
hdevelop/File/Images/write_image_benchmark.hdev
and
- hdevelop/File/Misc/write_object.hdev
show the usage of the HOBJ format.
The region files
- automotive/car_door.reg,
- automotive/engine_part_model.reg, and
- xing/xing.reg
have been removed and replaced by the following HALCON
Iconic Object files:
- automotive/car_door_region.hobj,
- automotive/engine_part_model_region.hobj,
and
- xing/xing_region.hobj.
HDevelop was also extended to handle the new file
format:
- The Image Acquisition interface and all other assistants
that expect an image can open images that are stored as hobj
files.
- The Read Image dialog can now handle all .hobj files
including preview and inserting the appropriate operator into
the HDevelop program.
- If an iconic variable is saved via the context menu of the
Variable window, for regions, XLDs, and mixed object tuples
.hobj is the new default format.
Filters → FFT
-
HALCON has been extended with an operator phase_correlation_fft. The new HDevelop
example program
- hdevelop/Filters/FFT/phase_correlation_fft.hdev
shows how to use phase_correlation_fft to compute the translation
between two images.
Filters → Scene Flow
-
HALCON has been extended with two new operators to calculate
the scene flow (a representation of the 3D motion of points
in a scene) of two consecutive stereo image pairs:
The new HDevelop example program
- hdevelop/Filters/Scene-Flow/scene_flow_globe.hdev
shows how to use the new operators to calculate the
scene flow. It uses the new example images
- stereo/globe/globe_l_[01-05].png and
- stereo/globe/globe_r_[01-05].png.
Graphics → Object
-
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
to support event-based interaction. So far, an
interaction with HALCON windows was synchronous and it was
only possible to interact with one object at a time. Now,
HALCON enables an asynchronous interaction. It is possible to
interact with one or more graphical objects, so-called
drawing objects, simultaneously in a HALCON window without
blocking the application.
The new HDevelop example programs
-
hdevelop/Graphics/Object/create_drawing_object_circle_sector.hdev
and
-
hdevelop/Graphics/Object/create_drawing_object_rectangle2.hdev
show how to use the event-based interaction with drawing
objects.
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/
show how to use the event-based interaction with drawing
objects in HALCON's C# interface. The project DrawingObjects
shows how to use drawing objects within a WinForms dialog,
whereas the project DrawingObjectsWPF shows how to use
drawing objects within a WPF Form and how to integrate
exported C#-code into your application.
Filters → Smoothing
-
HALCON has been extended with the new operator gauss_filter
to smooth an image using discrete Gaussian functions. In
contrast to the operator gauss_image, the smoothing parameter sigma
increases linearly with the given filter size.
The new HDevelop example program
-
hdevelop/Filters/Smoothing/compare_gauss_filters.hdev
compares the properties of the four operators
gauss_filter, derivate_gauss,
binomial_filter, and
smooth_image.
gauss_image is now declared as
legacy, i.e., its use is now deprecated in favor of the
operator gauss_filter.
Inspection → Bead Inspection
-
HALCON has been extended with a set of operators to measure
and inspect adhesive beads. The following operators have been
added:
The new HDevelop example program
-
hdevelop/Inspection/Bead-Inspection/apply_bead_inspection_model.hdev
shows how to use this new tool. It uses the new example
images
- 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
shows the effect of regularizing an MLP.
-
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
shows how to create a rejection class for an MLP
classifier with the new operator set_rejection_params_class_mlp.
OCR → Segmentation
-
HALCON has been extended with an automatic text reader that
is able to segment and read characters of any size robustly
without the need for extensive parameter tuning. With the new
operator create_text_model_reader,
it is possible to create a text model that can be used
for automatic text reading. All existing operators that
handle text models have been extended accordingly.
The new HDevelop example program
- hdevelop/OCR/Segmentation/find_text.hdev
shows how to use the new automatic text reader. It uses
the new image - ocr/medication_package_02_right.png.
The new HDevelop example program
-
hdevelop/OCR/Segmentation/find_expiration_date.hdev
shows an application of the new automatic text reader.
It uses the new images
- ocr/medication_package_[01-03]_front.png,
- ocr/medication_package_[01-03]_left.png,
- ocr/medication_package_[01-03]_back.png,
- ocr/medication_package_[01-03]_right.png,
- ocr/medication_package_[01-03]_bottom.png, and
- ocr/medication_package_[01-03]_top.png.
create_text_model is now legacy and is only
provided for compatibility reasons. Existing applications
that use create_text_model do not
need to be adapted. New applications should use
create_text_model_reader instead.
The behavior that is obtained with text models that were
created by create_text_model can
be obtained by calling create_text_model_reader and setting Mode to
'manual'.
Object → Information
-
HALCON has been extended with the operator compare_obj to compare iconic objects. In contrast to
test_equal_obj, this
operator compares all objects regarding their actual
content.
The new HDevelop example program
- hdevelop/Object/Information/compare_obj.hdev
shows how to use compare_obj.
Regions → Creation
-
HALCON has been extended with the two operators
Segmentation → Threshold
-
HALCON has been extended with the operators
which provide functionality for image thresholding.
binary_threshold provides the
functionality of bin_threshold
as well as an implementation of the thresholding method
proposed by Otsu, which uses statistics to divide the pixels
into foreground and background. local_threshold provides an implementation of the
method proposed by Sauvola, which is well suited for the
binarization of images of text documents.
The new HDevelop example programs
- hdevelop/Segmentation/Threshold/local_threshold.hdev and
- hdevelop/Segmentation/Threshold/binary_threshold.hdev
show how to use these new operators. The HALCON operator bin_threshold has become legacy.
System → Error Handling
-
HALCON has been extended with the operator get_extended_error_info. It returns
additional error information for the last HALCON error that
occurred in the calling thread.
System → Multithreading
-
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.
They implement message queues to pass HALCON data
between threads and allow an easy implementation of a
multithreaded producer-consumer problem.
The new HDevelop example programs
-
hdevelop/System/Multithreading/message_as_dictionary.hdev,
-
hdevelop/System/Multithreading/message_queue_as_container.hdev,
-
hdevelop/System/Multithreading/message_queue_producer_consumer_abort.hdev,
and
-
hdevelop/System/Multithreading/message_queue_producer_consumer.hdev
show how to use the new message queue operators to
implement multithreaded producer-consumer problems and, in
addition, how to use messages as dictionaries and message
queues as data containers.
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
show how to use the new functionality to calculate the
pointwise distance between contours. They use the new images
- plastic_parts/phone_camera_frame_01.png and
- plastic_parts/phone_camera_frame_02.png.
Transformations → 2D Transformations
-
HALCON has been extended with an operator point_line_to_hom_mat2d that computes an
affine transformation of a user-selectable type from
point-to-line correspondences. The new HDevelop example
program
-
hdevelop/Transformations/2D-Transformations/point_line_to_hom_mat2d.hdev
shows how point_line_to_hom_mat2d can be used for alignment
purposes in an OCV application.
Tuple → Selection
Tuple → Sets
-
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
shows how to use these new operators.
XLD → Features
-
HALCON has been extended with an operator test_closed_xld that tests whether a
contour is closed or not.
The new HDevelop example program
- hdevelop/XLD/Features/test_closed_xld.hdev
shows how to use this operator.
Speedup and Enhancements
Miscellaneous
-
HALCON now exploits the AVX2 instruction set under Windows and Linux. This
leads to a significant speedup on machines that support the AVX2 instruction
set.
The HDevelop example program
-
hdevelop/System/Parameters/query_system_parameters.hdev
has been extended to display the supported SIMD
extensions.
It is possible to determine if AVX2 is available with get_system, with the Parameter Query set to
'avx2_supported'.
Furthermore, HDevelop's About dialog now displays AVX2 after the platform
version, if AVX2 is available.
3D Object Model
-
The repeated visualization of 3D object models is now faster if
the new interface for the visualization of 3D object models is
used and if only the poses of the objects change between
successive visualizations. Note that the compatibility mode for
older graphics cards is not supported.
The speedup depends on various factors, such as the size of the
models and the graphics card. With larger models (more than one
million points), the speedup for high-end graphic cards may be
up to 4000%.
3D Matching → Surface-Based
- find_surface_model is up to 70%
faster. Note that when using a surface model created and
written with versions earlier than HALCON 12.0, some of the
optimizations have no effect. In order to fully exploit the
speedups, create the surface model anew with the latest version
of HALCON.
3D Object Model → Features
- get_object_model_3d_params is now
faster by up to 250% for 'diameter_axis_aligned_bounding_box',
'bounding_box1', and 'center'. 3D object models containing 3D
primitives are not affected.
Calibration → Multi-View
- calibrate_cameras and
camera_calibration are now
significantly faster for line scan cameras. The speedup
depends on the number of images and is greater the more
images are used. For example, the speedup is
approximately a factor of 30 if 17 images are used.
Classification → Neural Nets
Filters → Arithmetic
- invert_image is now faster by up
to 4800% for int1 images, by up to 3000% for int2 images, by up
to 1800% for int4 images, and by up to 1900% for real
images.
Filters → Lines
-
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 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
Classification → Gaussian Mixture
Models
-
The operators
- deserialize_class_gmm,
- select_feature_set_gmm,
- clear_samples_class_gmm,
- read_samples_class_gmm,
- add_samples_image_class_gmm,
- read_class_gmm,
- clear_class_gmm,
- create_class_gmm,
- train_class_gmm,
- add_sample_class_gmm,
and
- clear_all_class_gmm
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
are now reentrant.
Classification → Support Vector
Machines
-
The operators
- create_class_svm,
- train_class_svm,
- reduce_class_svm,
- add_sample_class_svm,
- add_samples_image_class_svm,
- read_samples_class_svm,
- read_class_svm,
- deserialize_class_svm,
- clear_samples_class_svm,
- clear_class_svm,
- clear_all_class_svm,
and
- select_feature_set_svm
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
are now reentrant.
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 HDevelop example program
- hdevelop/Applications/Measuring-2D/measure_stamping_part.hdev
demonstrates the use of the new operators and the alignment of a
metrology model with, e.g., shape-based matching.
Note that the two operators
now are legacy.
- set_metrology_object_param and
get_metrology_object_param have
been extended with the generic parameter 'distance_threshold'
to allow setting and querying the distance threshold used in
the RANSAC algorithm.
3D Matching → Surface-Based
-
Surface-based matching is now more robust when matching in
noisy data, such as data from time-of-flight cameras. For
this, a new parameter 'scene_normal_computation' was
introduced in the operator find_surface_model. Setting this parameter
to 'mls' enables a more robust normal computation, which
leads to a more robust matching.
The new HDevelop example program
-
hdevelop/3D-Matching/Surface-Based/find_surface_model_noisy_data.hdev
shows how surface-based matching can be used to find
objects even in noisy data.
3D Object Model → Features
- distance_object_model_3d now
supports signed distances. Signed distances can be calculated
for points, triangles, and primitives. Please note that
signed distances are only calculated if the corresponding
parameter 'signed_distances' is set to 'true'.
Additionally, distance_object_model_3d can now return the index
of the closest point or triangle for each query point in an
extended attribute. Please note that the index is only
computed if the parameter 'store_closest_index' is set to
'true'.
The HDevelop example program
-
hdevelop/Applications/Surface-Inspection/compare_surface_sheet_of_light.hdev
has been adapted to show how the new generic parameter
'signed_distances' is used to compute signed distances
between 3D object models.
3D Object Model → Transformations
3D Reconstruction → Binocular Stereo
-
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.
The following files in %HALCONROOT%/calib have been removed:
- caltab_6mm_old.descr,
- caltab_10mm_old.descr,
- caltab_30mm_old.descr,
- caltab_100mm_old.descr,
- caltab_200mm_old.descr,
- caltab_650um_old.descr,
- caltab_2500mm_old.descr,
- campar.dat,
- campose.dat, and
- gridspace_campar.cal.
The new HDevelop example program
-
hdevelop/Calibration/Multi-View/calibrate_cameras_monocular.hdev
demonstrates the calibration of a single camera with the
new calibration plate. It uses the new images
- calib/calib_single_camera_[01-07].png.
The existing HDevelop example program
-
solution_guide/3d_vision/camera_calibration_multi_image.hdev
has been adapted to use the new calibration plate. It
uses the new images
- 3d_machine_vision/calib/calib_image_[01-07].png
and
- 3d_machine_vision/calib/ruler.png
The documentation related to camera calibration, in
particular the Solution Guide on 3D Vision, the documentation
of the Calibration Assistant in the HDevelop User's Guide,
and the affected reference manual entries have been adapted
accordingly. Within the documentation, the new calibration
plates are referred to as "calibration plates with
hexagonally arranged marks" and the previous calibration
plates are referred to as "calibration plates with
rectangularly arranged marks".
- find_calib_object now stores the
calibration mark contours for line scan cameras. Furthermore,
calibrate_cameras uses the mark
contours, if available, to achieve more accurate calibration
results for line scan cameras.
Calibration → Hand-Eye
-
The hand-eye calibration of HALCON is now able to calibrate
SCARA (Selective Compliance Assembly Robot Arm) robots. SCARA
robots have three degrees of freedom in translation but - in
contrast to conventional articulated robots - only one degree
of freedom in rotation. Therefore with SCARA robots it is not
possible to approach calibration poses with different tilts
(i.e., with different rotations around the x-and y-axis of
the calibration plate). Because up to now the hand-eye
calibration required tilted calibration poses, SCARA robots
could not be calibrated.
The new HDevelop example programs
-
hdevelop/Calibration/Hand-Eye/calibrate_hand_eye_scara_moving_cam.hdev
and
-
hdevelop/Calibration/Hand-Eye/calibrate_hand_eye_scara_stationary_cam.hdev
show how to calibrate a SCARA hand-eye system. The
example programs use the new images
-
3d_machine_vision/handeye/scara_moving_cam_setup_01_[01-10].png
and
-
3d_machine_vision/handeye/scara_stationary_cam_setup_01_[01-10].png.
The new HDevelop example program
-
hdevelop/Calibration/Hand-Eye/calibrate_hand_eye_scara_stationary_cam_approx.hdev
shows how to approximately calibrate a SCARA handy-eye
system without using a calibration plate. The example program
uses the new image
-
3d_machine_vision/handeye/scara_stationary_cam_setup_01_calib_approx_01.png.
The new HDevelop example program
-
hdevelop/Calibration/Hand-Eye/pick_and_place_scara_stationary_cam.hdev
shows how to use the (exact or approximate) calibration
results provided by the HDevelop example programs
calibrate_hand_eye_scara_stationary_cam.hdev and
calibrate_hand_eye_scara_stationary_cam_approx.hdev for a
pick-and-place application. The example program uses the new
images
- 3d_machine_vision/handeye/scara_stationary_cam_setup_01_metal_parts_[01-06].png.
Calibration → Monocular
Calibration → Multi-View
- calibrate_cameras and
camera_calibration no
longer optimize Sx for line scan cameras because Sx and
Focus cannot be determined simultaneously for line scan
cameras.
-
For line scan calibration, the restriction that all markers of a
calibration object must be visible in every observation has
been removed.
Classification → Neural Nets
-
The MLP-based classifiers (for general classification and for
OCR) now provide a mechanism to automatically determine the
regularization parameters. For the general MLP classifier,
this can be achieved by calling set_regularization_params_class_mlp twice
with GenParamName set to 'num_outer_iterations' and
'num_inner_iterations', respectively, and with GenParamValue
set to a value > 0. For the OCR MLP classifier, this can
be achieved by calling set_regularization_params_ocr_class_mlp
analogously.
The new HDevelop example program
- hdevelop/OCR/Neural-Nets/regularized_ocr_mlp.hdev
shows how to use the automatic determination of the
regularization parameters for OCR.
- are now parallelized internally. Depending on the number
of cores available, this can result in a significant speedup
on multi-core processors.
Filters → Color
- cfa_to_rgb now supports an
enhanced bilinear interpolation mode ('bilinear_enhanced')
that leads to fewer zipper-like and color artifacts at
edges.
The HDevelop example program
- hdevelop/Filters/Color/cfa_to_rgb.hdev
has been extended by the new mode.
Filters → Geometric Transformations
- mirror_image now supports
non-quadratic images for the mode 'diagonal'. Until now,
mirror_image supported only quadratic
images for this mode.
Filters → Lines
-
HALCON has been extended with a procedure
calculate_lines_gauss_parameters to calculate the parameters
Sigma, Low, and High of the operator lines_gauss from the
width and the gray value contrast of the lines to be
extracted.
The HDevelop example programs
- hdevelop/Applications/Measuring-2D/angio.hdev,
-
hdevelop/Applications/Measuring-2D/segment_wedge_bonds.hdev,
-
hdevelop/Applications/Object-Recognition-2D/roads.hdev,
-
hdevelop/Applications/Surface-Inspection/detect_mura_defects_blur.hdev,
and
- hdevelop/Filters/Lines/lines_gauss.hdev
have been adapted to use the new procedure.
Furthermore, the reference manual entry of lines_gauss has
been extended with the formula that can be used to calculate
the parameters Sigma, Low, and High of the operator
lines_gauss from the width and the
gray value contrast of the lines to be extracted.
Graphics → 3D Scene
-
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.
This new interface allows to create a collection of
instances of 3D object models, cameras, and light sources.
This is especially useful if complex scenes must be
visualized multiple times and if the position and orientation
of some of the object models changes over time.
The new HDevelop example program
- hdevelop/Graphics/Scene-3D/display_scene_3d.hdev
shows how to use the new interface for the visualization
of 3D object models.
The HDevelop procedure library
- procedures/general/visualize_object_model_3d.hdpl
has been adapted to use 3D scenes for the visualization
of 3D object models.
The 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
have been removed.
Note that, because of the improved robustness of the
bar code reader, it may be necessary to revise existing bar
code applications with respect to parameter settings. Because
of the improvements, the resulting candidate regions will not
be the same as in earlier HALCON versions and it may be
necessary to adapt the settings of the bar code reader to
best suit its new behavior. Additionally, although it is
still possible to set the removed parameters
'max_diff_orient' and 'slanted', they have no effect on
the result of the bar code reader.
-
The training mode of the bar code reader was significantly
slower than a conventional call of find_bar_code. This made the parameter
training unusable for very large input images. Now, the runtime
has been improved significantly. In most cases, the runtime of
the training mode is very close to a conventional call of
find_bar_code.
-
The bar code reader is now more robust when decoding small resolution bar
codes. On internal test data, an improvement of 70% for the success rate
of find_bar_code on challenging noisy low
resolution images with respect to HALCON 11 was achieved. If general
resolutions are considered, improvements of 100% were achieved.
The reference manual entry of find_bar_code has been extended with the
following advice: "This advice applies to bar code
applications that use low resolution images, i.e., images in
which a single bar is between one and two pixels wide. In
these cases, one should optimize the bar code imaging system
in order to eliminate noise and focal blur because a
combination of these optical distortions lead to problems in
the decodability of low resolution bar codes."
In addition, the success rate of find_bar_code for low resolution bar codes in the
presence of noise and focal blur can be further improved via
the new parameter 'meas_param_estimation'. If set to 'true'
via the operator set_bar_code_param, a different approach to
determine the internal smoothing parameters is used.
The new HDevelop example program
- hdevelop/Identification/Bar-Code/barcode_param_meas_param_estimation.hdev
demonstrates the usage and use cases for the new parameter
'meas_param_estimation'. It uses the new images
- barcode/ean13/ean13_meas_param_estimation_[01-10].png.
- find_bar_code now allows to
reject bar code candidate regions depending on their
contrast. This rejection can be enabled by setting
'contrast_min' to a value larger than 5 with the operator
set_bar_code_param. This allows
to reduce the runtime and the number of false decodes in
images with low contrast bar-like structures, in particular,
if one can ensure that bar codes always have a high contrast
in the image.
The new HDevelop example program
-
hdevelop/Identification/Bar-Code/barcode_param_contrast_min.hdev
shows the usage of the parameter 'contrast_min'. It uses
the new image
- barcode/25interleaved/25interleaved_zeiss1.png.
-
The effect of the bar code parameters 'element_size_min' and
'element_size_max' was unclear and it was difficult to specify
optimal values. As a result, some users may have set these
parameters to unrealistic values. Now, both parameters control
the bar code reader according to their natural meaning. They
specify the minimal and maximal expected element size in
pixels.
Because of this modification of the influence
of the parameters 'element_size_min' and 'element_size_max' on
the bar code reader, it may be necessary to check existing bar
code applications. It may be necessary to adapt the values of
these two parameters to suit the application at hand. You may
use the bar code parameter training in order to train the
values for both parameters. -
The training mode of the bar code reader required a maximum of
one bar code per training image. Now, the training may be used
on images with multiple bar codes as well. All bar codes
contribute to the training result equally.
-
The bar code reader has been extended with the possibility to
specify the minimal width of the bar code. In conjunction
with this, the parameter 'element_height_min' has been
renamed to 'barcode_height_min' and a new parameter
'barcode_width_min' has been introduced. For backward
compatibility, 'element_height_min' is still supported. But
note, that the lower bound of this parameter has been changed
to 3 pixels.
The new HDevelop example program
-
hdevelop/Identification/Bar-Code/barcode_param_width_height.hdev
shows how to use the parameters 'barcode_width_min' and
'barcode_height_min' to specify the maximal dimensions of a
bar code.
-
The bar code reader only supported a single mode for selecting decoding
results. This led to problems in rare cases. Now, a new result selection
mode based on a majority voting scheme exists. It is possible to enable
majority voting with the new parameter 'majority_voting' (list of values:
['true','false']). If majority voting is enabled, most of the scanlines are
evaluated and the decoding result that is returned by the majority of the
scanlines is returned as the overall result. By default, this mode is
disabled. Please note that setting the parameter to 'true' leads to a
slightly increased runtime since nearly all scanlines must be evaluated.
See the reference manual entry of set_bar_code_param for more details about this new
feature.
The new HDevelop example program
-
hdevelop/Identification/Bar-Code/barcode_param_majority_voting.hdev
shows how to use the new parameter 'majority_voting' of
the bar code reader. It uses the new image
-
HALCON has been extended with a procedure
-
general/convert_decoded_string_code39_to_code32.hdvp
to convert decoded data strings read with the 'Code 39'
bar code reader from 'Code 39' to 'Code 32'. This enables to
read bar codes of type 'Code 32' with the bar code reader for
'Code 39' in combination with this procedure.
The new HDevelop example program- hdevelop/Identification/Bar-Code/code32.hdev
demonstrates how to use this procedure.
-
The bar code reader has been adapted to calculate the symbol
gradings of bar codes according to the latest ISO/IEC
standards.
Note that the results of the existing HDevelop example
program
-
hdevelop/Identification/Bar-Code/print_quality_isoiec15416.hdev
may differ because of these changes.
Identification → Data Code
-
The 2D data code reader has been extended to support the
ISO/IEC 15415 quality gradings for reflectance margin,
contrast uniformity, and print growth for the 2D data code
types Data Matrix ECC 200, QR code, Micro QR code, and Aztec.
The HDevelop example program
-
hdevelop/Identification/Data-Code/ecc200_print_quality.hdev,
which shows how to access the symbol gradings, has been
extended accordingly.
The reference manual entry of get_data_code_2d_results has been extended
to describe the new ISO/IEC 15415 quality gradings for
reflectance margin, contrast uniformity, and print
growth.
The Solution Guide on 2D Data Codes has been extended to
describe the new ISO/IEC 15415 quality gradings for
reflectance margin, contrast uniformity, and print growth.
-
The 2D data code reader now provides functionality for the
assessment of direct part mark quality, compliant with the SEMI
T10-0701 standard. Note that direct part mark quality assessment
is provided only for the Data Matrix ECC 200 code.
The new HDevelop example program
-
hdevelop/Identification/Data-Code/ecc200_direct_mark_quality_semi_t10.hdev
shows how to assess the direct mark quality of an Data Matrix ECC
200 code.
-
For the 2D data code reader the print quality grading of the
Data Matrix ECC 200 clock track is now more robust against print growth.
The tracking of the symbol has been refined.
Identification → Sample-Based
-
In some cases, the identification rate of the sample-based
identification was suboptimal if different objects were trained
with a different number of sample images. In such cases, the
robustness of the identification of objects for which more
training images were passed was lower compared to objects for
which fewer training images were passed. Now, the sample-based
identification allows to use a different number of training
images per class. Thus it is no longer necessary that the
number of training images is approximately similar for each
different view of each object. Furthermore, the sample-based
identification is now more robust to image clutter.
Image → Features
Image → Format
-
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
OCR
-
HALCON has been extended with the pretrained OCR fonts 'Document' and
'Industrial' with regularized weights and a rejection class. Because of
the regularization, the new pretrained OCR fonts provide more meaningful
confidences. Because of the rejection class it is possible to
distinguish characters from background clutter.
The new pretrained fonts with regularization weights and without a
rejection class are:
- Document_NoRej.omc,
- Document_0-9_NoRej.omc,
- Document_0-9A-Z_NoRej.omc,
- Document_A-Z+_NoRej.omc,
- Industrial_NoRej.omc,
- Industrial_0-9_NoRej.omc,
- Industrial_0-9+_NoRej.omc,
- Industrial_0-9A-Z_NoRej.omc, and
- Industrial_A-Z+_NoRej.omc.
The new pretrained fonts with regularization weights and a rejection class
are:
- Document_Rej.omc,
- Document_0-9_Rej.omc,
- Document_0-9A-Z_Rej.omc,
- Document_A-Z+_Rej.omc,
- Industrial_Rej.omc,
- Industrial_0-9_Rej.omc,
- Industrial_0-9+_Rej.omc,
- Industrial_0-9A-Z_Rej.omc, and
- Industrial_A-Z+_Rej.omc.
All pretrained fonts can be found in the HALCON subdirectory ocr.
The following pretrained fonts are no longer shipped with HALCON:
- Document.omc,
- Document_0-9.omc,
- Document_0-9A-Z.omc,
- Document_A-Z+.omc,
- Industrial.omc,
- Industrial_0-9.omc,
- Industrial_0-9+.omc,
- Industrial_0-9A-Z.omc, and
- Industrial_A-Z+.omc.
They have been replaced by the respective OCR fonts with regularization
weights and with or without a rejection class. To distinguish these new
fonts from the previously used fonts, their names have been extended with
the suffix '_Rej' (for fonts with a rejection class) or '_NoRej' (for fonts
without a rejection class). Existing applications that use these fonts can
be rewritten to use one of the above mentioned new pretrained fronts. Note,
however, that the behavior of the application might change. To obtain the
same behavior as in previous HALCON versions, the pretrained fonts of the
previous HALCON version can be used.
The documentation of the Solution Guide I has been extended accordingly.
-
The pretrained OCR fonts OCRA, OCRB, Industrial, and Document have been
extended with the currency symbols pound ('£') and yen ('¥').
Additionally, besides the Industrial font now also the OCRA, the OCRB, and
the Document fonts include the currency symbol euro ('€'). Thus, the
three mentioned currency symbols are included in the following pretrained
font files:
- Industrial_NoRej.omc,
- Industrial_Rej.omc,
- Industrial_0-9+_NoRej.omc,
- Industrial_0-9+_Rej.omc,
- Industrial_A-Z+_NoRej.omc,
- Industrial_A-Z+_Rej.omc,
- Document_NoRej.omc,
- Document_Rej.omc,
- Document_A-Z+_NoRej.omc,
- Document_A-Z+_Rej.omc,
- OCRA.omc,
- OCRA_A-Z+.omc,
- OCRB.omc, and
- OCRB_A-Z+.omc.
The Solution Guide I Basics has been adapted accordingly.
Regions → Creation
Regions → Tests
System → I/O Devices
-
HALCON now provides a generic interface for accessing I/O
devices. In detail, it has been extended by the following new
operators:
- close_io_channel,
- close_io_device,
- control_io_channel,
- control_io_device,
- control_io_interface,
- get_io_channel_param,
- get_io_device_param,
- open_io_channel,
- open_io_device,
- query_io_device,
- query_io_interface,
- read_io_channel,
- set_io_channel_param,
- set_io_device_param,
and
- write_io_channel.
-
HALCON has been extended with an I/O interface for OPC UA
that allows reading and writing data to and from OPC UA
servers.
The new HDevelop example programs
-
hdevelop/System/IO-Devices/opc_ua_browse_variables.hdev,
-
hdevelop/System/IO-Devices/opc_ua_channel_access.hdev,
- hdevelop/System/IO-Devices/opc_ua_discovery.hdev,
- hdevelop/System/IO-Devices/opc_ua_parameters.hdev,
and
- hdevelop/System/IO-Devices/opc_ua_security.hdev
show how to use the OPC UA I/O interface.
-
HALCON has been extended with an I/O interface for OPC
Classic that allows reading and writing data to and from OPC
Classic servers.
The new HDevelop example programs
-
hdevelop/System/IO-Devices/opc_classic_browse_variables.hdev,
-
hdevelop/System/IO-Devices/opc_classic_channel_access.hdev,
and
-
hdevelop/System/IO-Devices/opc_classic_parameters.hdev
show how to use the OPC Classic I/O interface.
-
HALCON now also provides an I/O interface for accessing the
Interface Digital I/O boards that uses the Interface SDK and
allows the easy controlling of digital input and digital
output devices.
The new HDevelop example programs
- hdevelop/System/IO-Devices/interface_digital_read.hdev
and
-
hdevelop/System/IO-Devices/interface_digital_write.hdev
show the ease of use of the new I/O interface for
accessing the Interface Digital I/O boards.
-
HALCON has been extended with an Advantech I/O interface that
uses the Advantech SDK and allows the easy controlling of
digital input and digital output devices.
The new HDevelop example programs
- hdevelop/System/IO-Devices/advantech_digital_read.hdev
and
-
hdevelop/System/IO-Devices/advantech_digital_write.hdev
show how to use the new Advantech I/O interface.
-
HALCON has been extended with a National Instruments NI-DAQmx
I/O interface that uses the National Instruments NI-DAQmx SDK
and allows the easy controlling of digital input and digital
output devices.
The new HDevelop example programs
- hdevelop/System/IO-Devices/nidaqmx_counter.hdev,
- hdevelop/System/IO-Devices/nidaqmx_digital_read.hdev,
and
-
hdevelop/System/IO-Devices/nidaqmx_digital_write.hdev
show the simple use of the National Instruments
NI-DAQmx I/O interface.
-
HALCON has been extended with a Contec I/O interface that
uses the Contec SDK and allows the easy controlling of
digital input and digital output devices.
The new HDevelop example programs
- hdevelop/System/IO-Devices/contec_digital_read.hdev
and
-
hdevelop/System/IO-Devices/contec_digital_write.hdev
show how to use the new Contec I/O interface.
System → Sockets
- open_socket_accept now provides
the generic parameter 'address', which can be used to instruct
the socket to accept only connection requests addressed to this
specific address.
Tuple → Element Order
- tuple_sort is now parallelized on
internal data level. Note that only the sorting of tuples
containing native arrays with more than 4096 elements is
parallelized. With 8 threads the achieved speedup is up to
factor 3.
XLD → Creation
-
For gen_polygons_xld the methods
'sato' and 'ray' have been deprecated and have been removed
from the documentation. They are still supported as
undocumented features for reasons of backward compatibility. It is
recommended that all applications use the method 'ramer'.
Legacy Operators
Note that legacy operators may be discontinued in a future major release. See
the reference manual entries of these operators for details on how to replace
them.
Legacy → 2D Metrology
The operators
are now legacy. Use
align_metrology_model instead of
transform_metrology_object.
Legacy → Filters
Legacy → Segmentation
Previously Legacy → Calibration → Calibration Object
Legacy → OCR
Legacy → Tools
-
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.
Note that because of the 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.
1D Measuring
- measure_pairs sometimes returned
incorrect values for IntraDistance when measuring along a
circular arc, i.e., if the measure was created with
gen_measure_arc. This problem has
been fixed.
2D Metrology
- apply_metrology_model did not
always return a result when camera parameters and a measurement
plane pose was set. This problem has been fixed. Note that
result parameters in existing programs may change
slightly.
- apply_metrology_model sometimes
did not find a rectangle if a measurement plane was set. The
problem occurred if the chosen measurement plane had a rotation
around the z-axis different from zero. This problem has been
fixed.
- get_metrology_object_param
returned wrong values for the main axis if the values of at
least 2 ellipses were returned.
This problem has been fixed.
- set_metrology_object_param did
not return an error if measure_distance was set to a value
equal or below zero. This problem has been fixed. Now the error
code 1312 ("Wrong value of control parameter: 12) is
returned.
3D Matching → Shape-Based
- create_cam_pose_look_at_point
returned three poses in CamPose if in RefPlaneNormal a tuple
with three elements, which represent the three components of
the normal vector, was passed. In this case, in CamPose a tuple
of 21 elements was returned, which contained the correct pose
three times. This problem has been fixed.
- create_shape_model_3d crashed in
rare cases if no OpenGL was available on the system or OpenGL
was disabled by previously calling set_system
('opengl_hidden_surface_removal_enable', 'false'). This problem
has been fixed.
- create_shape_model_3d sometimes
needed a very long time in HALCON XL if
'opengl_hidden_surface_removal_enable' was set to 'false' and
DistMin was set to a small value such that the camera was very
close to the 3D model, and hence the projection of the 3D model
into the image became large. This problem has been fixed.
- find_shape_model_3d in rare cases
did not check the overlap between matches correctly. In such
cases, matches that overlapped each other by more than the
fraction that was passed in the generic parameter 'max_overlap'
were returned. This problem has been fixed.
3D Object Model → Features
- distance_object_model_3d returned
the wrong error code 1306 ("Wrong value of control parameter:
6") if the passed object model ObjectModel3DTo did not
have the required attributes. This problem has been fixed. Now,
in this case the error code 9514 ("Required attribute missing
in 3D object model") is returned.
- get_object_model_3d_params
returned incorrect diameters for rotated boxes. This problem
has been fixed.
- max_diameter_object_model_3d
always returned 0 for 3D primitives. This problem has been
fixed.
3D Object Model → Segmentation
- fit_primitives_object_model_3d
and segment_object_model_3d had
very restrictive default values for the generic parameters
'min_radius' and 'max_radius'. Therefore, in many cases, the
operators did not return any results. Now, the default values
have been relaxed to make them suitable for a broader range of
applications. Note that if the parameters 'min_radius' and
'max_radius' are not explicitely specified, fit_primitives_object_model_3d and
segment_object_model_3d may now
return fitted primitives in cases where no results were
returned in earlier HALCON versions.
3D Object Model → Transformations
- convex_hull_object_model_3d
returned wrong results if a 3D object model was passed that
contains points that all lie in a plane. This problem has been
fixed.
- project_object_model_3d in rare
cases returned fragmented contours if there was no OpenGL
support. This problem has been fixed.
- register_object_model_3d_global,
register_object_model_3d_pair,
and create_surface_model crashed
if one of the passed 3D object models contained points where
one coordinate had the non-regular floating point values
'infinity' or 'not a number'. This problem has been fixed.
- render_object_model_3d and disp_object_model_3d did not always throw an
exception if the passed generic parameters were invalid. This problem has
been fixed.
- sample_object_model_3d copied
extended attributes if the parameter Method was set to
'accurate' or 'accurate_use_normals'. This problem has been
fixed.
- sample_object_model_3d returned
slightly incorrect results if the parameter Method was set to
'accurate' or to 'accurate_use_normals'. This problem has been
fixed.
- sample_object_model_3d crashed or
showed undefined behavior when sampling faces (triangles,
polygons, or primitives) with the sampling distance set to
zero. This problem has been fixed. The operator now returns the
error code 1303 ("Wrong value of control parameter: 3")
instead.
- triangulate_object_model_3d, called with the
parameter Method set to 'greedy', returns consistently ordered triangles
(clockwise or anti-clockwise) over the entire surface. However, small
changes of the 3D object model used as input could have switched the
orientation of the triangles in the triangulated 3D object model. This
impacted on further processing steps of the triangulated 3D object model,
for example with sample_object_model_3d
or create_surface_model and find_surface_model. This problem has been
fixed. Now, the orientation of the triangles is chosen in such a way
that for the majority of triangles [0,1,2] the triangle normals
(P1-P0)x(P2-P0) lie in the same half space as the mean of the input
point normals N0, N1 and N2.
3D Reconstruction → Binocular Stereo
3D Reconstruction → Sheet of Light
- create_sheet_of_light_model
crashed if the number of parameters in GenParamNames was not equal to the
number of values in GenParamValues. This problem has been fixed.
- measure_profile_sheet_of_light
computed wrong results if the last profile was empty and the
calibration type was set to 'xyz' or 'offset_scale'. This
problem has been fixed.
- set_profile_sheet_of_light did
not take into account more than one MovementPoses. If
MovementPoses contained only one pose, there was no problem. If
the number of elements in MovementPoses was the height of the
disparity image times 7, which is also correct, an error was
raised. If the number of elements in MovementPoses was
incorrect, the algorithm did not raise a corresponding error.
Instead of the poses passed in MovementPoses, the algorithm
then used the current setting of the 'movement_pose' of the
sheet of light model. If the 'movement_pose' of the sheet of
light model was not set, an error was raised. These problems
have been fixed.
Now, if MovementPoses contains more than one pose, the number
of elements in MovementPoses must be equal to seven times the
height of the disparity image, otherwise an error is raised.
The algorithm now uses the poses passed in MovementPoses.
- set_profile_sheet_of_light and
apply_sheet_of_light_calibration
may have crashed if the region of the input image Disparity did
not intersect all lines. Note that set_profile_sheet_of_light crashed only if
'calibration' was set to 'none' or 'xz'. apply_sheet_of_light_calibration crashed only if
'calibration' was set to 'xz'. These problems have been
fixed.
- set_profile_sheet_of_light
ignored empty profiles. This problem has been fixed and
set_profile_sheet_of_light is now
consistent with apply_sheet_of_light_calibration.
Calibration → Hand-Eye
-
The semantic type of the parameter ObjInCameraPose of
set_calib_data_observ_pose and
get_calib_data_observ_pose was
real instead of pose. This problem has been fixed.
Note that changing the semantic type of
ObjInCameraPose affects HALCON/C++ and HALCON/.NET, where
SetCalibDataObservPose and GetCalibDataObservPose now get and
return HPose instead of HTuple, respectively.
Calibration → Multi-View
- get_calib_data returned camera
parameters that were not available for the currently set camera
if the parameter DataName was set to 'calib_settings' or
'excluded_settings'. This problem has been fixed. Now,
get_calib_data only returns camera
parameters that are available for the currently set camera.
Furthermore, get_calib_data now returns
the default values for 'calib_settings' and 'excluded_settings'
for the currently set camera if the parameter ItemIdx is set to
'general'.
- get_calib_data returned incorrect
statistical values. This problem has been fixed. Now,
get_calib_data returns correct
statistical information.
- set_calib_data allowed to set
camera parameters that do not match the current camera type.
This problem has been fixed. Now, set_calib_data sets only camera parameters that are
supported by the underlying camera type.
- set_calib_data crashed in some
cases where numbers were passed instead of strings. The problem
occurred in particular, if the parameter ItemType was set to
'camera' and numbers were given for the parameter DataValue and
if ItemType was set to 'calib_obj_pose', ItemIdx was not set to
'general', and numbers were given for DataValue. Furthermore,
if ItemType was set to 'calib_obj_pose', ItemIdx was set to
'general', and numbers were given for DataValue,
set_calib_data returned the wrong
error code 1301 ("Wrong value of control parameter:
1"). These problems have been fixed. Now, the error
code 1205 ("Wrong type of control parameter: 5") is
returned in these cases.
Classification → Gaussian Mixture
Models
Classification → K-Nearest Neighbors
-
Exact k-NN-Classification did not work as expected. This
problem has been fixed. Now, setting the generic parameter
'num_checks' to 0 triggers an exact search.
Classification → Neural Nets
- add_class_train_data_mlp added
wrong training data to the MLP if the number of input nodes was
different from the number of output nodes. This problem has
been fixed.
- create_class_mlp crashed if it ran out of
memory. This problem has been fixed.
File
- list_image_files returned invalid paths in
the output parameter ImageFiles if it was called with the parameter
ImageDirectory set to a path that started with two slashes ('//'). In this
case, the returned paths had only one leading slash. This problem has been
fixed.
File → Images
- read_image crashed with 32-bit
BMP images that contained only gray value data. This problem
has been fixed.
- read_sequence could not handle
files larger than 2GB on Windows systems. This problem has been
fixed
File → XLD
- read_contour_xld_dxf did not
support POLYLINEs of the type 3D POLYLINE although the status
message stated that only the z coordinates are ignored. This
problem has been fixed. Now, the x and y coordinates of
POLYLINEs of type 3D POLYLINE are read and respective (2D)
contours are returned for 3D POLYLINES.
- read_polygon_xld_dxf might have
returned corrupt polygons that could have caused a crash in
successive operators using these polygons. This problem has
been fixed.
Filters → Edges
- edges_sub_pix and
lines_gauss did not close
contours in rare cases. This problem has been fixed.
- info_edges returned incorrect
results in certain cases. This problem has been fixed.
Filters → FFT
- power_byte did not round
correctly. This problem has been fixed.
Filters → Geometric Transformations
Filters → Inpainting
- harmonic_interpolation could have
crashed when processing a color image on a multicore processor
with automatic operator parallelization turned on. This problem
has been fixed.
Filters → Lines
- lines_gauss had a memory leak if
a runtime error occurred. This problem has been fixed.
Filters → Texture
- texture_laws returned incorrect
values on compute devices in rare cases. Only filters of width
7 and specific image widths were affected.
This problem has been fixed.
Graphics → Output
- disp_circle was inconsistent with
gen_circle. It did not produce
the same results as gen_circle followed
by disp_region. This problem has
been fixed.
- disp_ellipse and disp_rectangle2 allowed negative values for the
half-axes, which may have led to an error. This problem has been
fixed.
- disp_object_model_3d and
render_object_model_3d used
incorrect colors or shading in specific cases. This problem
occurred if the OpenGL compatibility mode was activated and
points were rendered for at least one model. This problem has
been fixed.
- disp_object_model_3d crashed if
the index appended to a generic parameter name was negative.
Moreover, disp_object_model_3d crashed
if intensity_idx, intensity_red_idx, intensity_green_idx, or
intensity_blue_idx referred to a non-existing object model of
index idx. These problems have been fixed.
- disp_object_model_3d returned the
wrong error code 1306 ("Wrong value of control parameter: 6")
if the index appended to a generic parameter name was invalid
or referred to a non-existing object model. This problem has
been fixed. Now, the error code 1305 ("Wrong value of control
parameter: 5") is returned. Note that programs that evaluate
the returned error codes of disp_object_model_3d
must be adapted accordingly.
- disp_object_model_3d did not
display poses if 'colored' was used after 'disp_pose' or
'disp_pose_n'. This problem has been fixed.
-
The visualization of 3D object models provided by the procedure
visualize_object_model_3d
did not fit properly into the given
window if the image part to be displayed by this window and its
size were not identical. This may have happened if
dev_set_part has been
called explicitly for the window or if the window has
been opened or resized with one of the procedures
dev_open_window_fit_image,
dev_open_window_fit_size,
dev_resize_window_fit_image, or
dev_resize_window_fit_size.
This problem has been fixed.
-
The procedure visualize_object_model_3d has been adapted to be
more consistent with the operator disp_object_model_3d.
visualize_object_model_3d provides the possibility to use the
current window content as background for the visualization of
the 3D object model. This possibility is also provided by
disp_object_model_3d. In contrast to
disp_object_model_3d, where this is
controlled with the parameter 'disp_background', which has the
default value 'false', in visualize_object_model_3d, the
respective parameter was 'use_background' and had the default
value 'true'. To make the parameters and their default values
more consistent, the respective parameter of
visualize_object_model_3d has been changed to 'disp_background'
and its default value has been changed to 'false'. For
compatibility reasons, the old parameter 'use_background' is
supported as well. In addition, if 'use_background' (now:
'disp_background') was set to 'false', the window was cleared
when leaving visualize_object_model_3d. Now, the behavior is
similar to the case when 'disp_background' is set to 'true',
i.e., the 3D object model is displayed in the window.
Note that because of the change of the default
behavior of visualize_object_model_3d with respect to the use
of the currently displayed window content as background for the
visualization, you might have to adapt those HDevelop example
programs that use the procedure visualize_object_model_3d. If
you displayed, e.g., a background image or some messages before
the call of visualize_object_model_3d without having set the
parameter 'use_background' to 'false', you now have to set the
new generic parameter 'disp_background' to 'true', explicitly.
In addition, if 'use_background' (now: 'disp_background') was
set to 'false', the window was cleared when leaving
visualize_object_model_3d. Now, the behavior is similar to the
case when 'disp_background' is set to 'true', i.e., the 3D
object model is displayed in the window. To achieve the old
behavior, dev_clear_window has to
be called explicitly after the call of
visualize_object_model_3d.
Graphics → Parameters
- set_line_style did not return an
error for some invalid patterns. This problem has been fixed.
Additionally, the reference manual entry has been extended
with the valid range for the parameter 'Style' (1-120).
Graphics → Text
- query_font returned monospaced
fonts (e.g., Courier or Consolas) incorrectly on Windows.
Instead of returning '*' for width and height,
query_font returned a number for
width and height, even if arbitrary sizes were possible in
set_font. This problem has
been fixed.
Graphics → Window
- clear_window did not reset the
text cursor position correctly. This problem has been fixed.
clear_window now sets the text cursor
position to (1,1) in window coordinates.
Identification → Bar Code
- decode_bar_code_rectangle2 rejected
successfully decoded candidates in some special cases. This problem has been
fixed.
- find_bar_code
sometimes returned duplicate symbol regions. This was the case if there were
two candidate regions for one bar code. The bar code reader detected this
overlap and returned only one result in DecodedStrings but two regions in
SymbolRegions. This problem has been fixed.
- find_bar_code
did not read certain bar codes of type GS1 DataBar Limited correctly because
the decoding algorithm was not adapted to the new
symbol structure of GS1 DataBar Limited. This problem has been
fixed.
- get_bar_code_result calculated
the decodability incorrectly for EAN-13, EAN-8, UPC-A, and
UPC-E bar codes. This happened also if an Add-On (Add-On 2,
Add-On 5) was added to one of the four code types. This problem
has been fixed.
-
The bar code reader did not decode multiple bar codes that were
located close to each other horizontally. This problem has been
fixed. Now, multiple bar codes, located close to each other
horizontally, are decoded correctly in general.
-
The bar code reader for composite codes and the data code
reader for PDF417 codes sometimes returned varying results
depending on the number of threads the HALCON library used.
This problem has been fixed.
Identification → Data Code
- find_data_code_2d in very rare
cases trained the parameter 'finder_pattern_tolerance' for Data Matrix ECC
200 codes incorrectly. This problem has been fixed.
- get_data_code_2d_results returned
an incorrect unused error correction grade for Data Matrix ECC 200 and QR
codes for quality_aimdpm_1_2006 when the polarity was set to
'light_on_dark' and the code was light on dark. This problem
has been fixed.
- get_data_code_2d_results returned
an incorrect unused error correction grade for Aztec codes for
quality_aimdpm_1_2006 when the polarity was light on dark. This
problem has been fixed.
-
The Aztec code reader did not handle the ECI protocol
correctly. The reader failed to decode ECI character sets
000001 through 000009. Furthermore, it doubled the '\' of the ECI
escape sequence instead of all other occurrences of the byte
value 92 ('\'). This problem has been fixed.
-
The data code print quality inspection for Aztec Codes returned
wrong values for UEC in some cases. This problem has been
fixed
-
The data code quality grading of unused error correction was
incorrect for Data Matrix ECC 200, QR code, Micro QR code, and Aztec when
the symbol had error correction codewords reserved for error
detection. This problem has been fixed.
-
The QR code reader returned incorrect grades for unused error
correction in most cases. This problem occurred most likely
with module sizes larger than 4 pixels. This problem has been
fixed. Note that this problem has already been fixed in HALCON
11.0.3.2.
-
The QR code reader in rare cases returned the error 8506. This
problem has been fixed.
-
The Data Matrix ECC 200 code reader in rare cases produced duplicate
results, when the parameter 'finder_pattern_tolerance' was set
to 'any' or 'low'. This problem has been fixed.
-
The Data Matrix ECC 200 reader returned false positives in very rare cases.
The decoded data of these false positives contained values
larger than 255. This problem has been fixed.
-
Print quality inspection of non-square Data Matrix ECC 200 codes may have
returned some incorrect grades and values for Fixed Pattern
Damage, Axial Nonuniformity, Grid Nonuniformity, and Unused
Error Correction. This problem has been fixed.
-
For Data Matrix ECC 200 codes, the data code reader in very rare cases
returned incorrect codes when the code was found with
'module_grid' set to 'variable'. This problem has been
fixed.
-
The ISO/IEC 15415 and AIMDPM-1-2006 print quality grades and
values of QR codes were incorrect. This problem has been
fixed.
-
The AIM DPM-1-2006 cell contrast grade was evaluated with the
wrong grading table. This problem has been fixed.
-
The PDF417 reader sometimes failed to decode if one finder
pattern could not be detected or only one finder pattern was
present. The latter is always the case for Truncated/Compact
PDF417 codes. This problem has been fixed.
-
The PDF417 reader was sometimes not able to find the data code if the
polarity was set to light_on_dark. This problem has been fixed.
Identification → Sample-Based
- prepare_sample_identifier in very
rare cases did not work correctly if an identical set of
preparation images was added to the sample identifier multiple
times by using add_sample_identifier_preparation_data. In
this case, the robustness of the identification was
significantly reduced. This problem has been fixed.
Note that because of the fix the
resulting prepared sample identifier slightly differs from the
sample identifier that was prepared with previous HALCON
versions with the same set of preparation images. Consequently,
the sample-based identification may show a slightly different
behavior compared to previous HALCON versions.
Image → Channel
-
returned a wrong error code if
the image to be decomposed did not have enough channels. Now,
instead of the error code 9003 ("Undefined gray values") the error
code 3359 ("Wrong number of image channels") is returned.
Because of a fix concerning an error
code that may be returned by decompose2, decompose3,
decompose4, decompose5, decompose6, and
decompose7, programs that evaluate the
error code returned by these operators must be adapted. Now,
instead of the error code 9003 ("Undefined gray values") the error
code 3359 ("Wrong number of image channels") is returned if the
image to be decomposed does not have enough channels.
Image → Creation
Image → Type Conversion
-
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
Matching → Gray-Value-Based
- create_template and
create_template_rot may
have corrupted memory in case of an error. Subsequent
calls to create_all_templates (e.g., by pressing F2 in
HDevelop) could have caused a crash. This problem has
been fixed.
Matching → Shape-Based
Morphology → Region
-
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
could have led to a crash in some cases if at the same
time 'clip_region' was set to
'false' and the region was close to the allowed maximal image
size, e.g., if it was generated via gen_rectangle1 (Rectangle, 32758, 194,
32766, 202). This problem has been fixed.
OCR → Segmentation
- find_text may have returned
warnings if low level error messages were switched on and
'local_mem_warnings' were set to 'true'. This problem has been
fixed.
- select_characters sometimes
returned characters twice. This problem has been fixed.
- set_text_model_param crashed when
a text_line_structure with a negative index was passed.
Furthermore, it was possible to pass illegal
text_line_structures, which could lead to an incorrect behavior
of find_text. These problems have
been fixed.
Regions → Creation
- gen_circle and gen_ellipse returned an empty region if they
were called with a huge radius/huge radii. This problem has
been fixed.
Regions → Features
- select_shape returned wrong
results if the operator was called with the feature
'area_holes' and real values for
the parameters Min and Max. This problem has been fixed.
-
The operators
returned the error code 1401 ("Wrong number of values of
control parameter: 1"), 1402 ("Wrong number of values of
control parameter: 2"), 1403, 1404, 1405, 1406, 1407, or 1408
("Wrong number of values of control parameter: 8") if more
than 100 control parameters were passed. This problem has
been fixed.
Regions → Transformations
- merge_regions_line_scan sometimes returned
the error code 3501 ("Number of chords too big. Increase
'current_runlength_number' using set_system!") in the case of a large number of
input regions. This problem has been fixed.
System → Operating System
- count_seconds counted the elapsed
time since process start on Windows systems if the system
parameter 'clock_mode' was set to 'processor_time'. This
problem has been fixed. Now, count_seconds with 'clock_mode' set to
'processor_time' counts only the used CPU cycles on all
standard platforms.
System → Parallelization
- write_aop_knowledge returned the
error code 5198 ("Insufficient rights on file") for file names
without path. hcheck_parallel was affected as well. This
problem has been fixed.
System → Parameters
- set_system did not check the
allowed range for the following generic parameter values
correctly:
- 'thread_num',
- 'tsp_thread_num',
- 'height',
- 'tsp_height',
- 'width',
- 'tsp_width',
- 'current_runlength_number',
- 'tsp_current_runlength_number',
- 'image_dpi',
- 'graphic_stack_size', and
- 'int2_bits'.
This problem has been fixed. Now, set_system
throws an exception if a value of a generic parameter was set
outside the allowed range.
System → Sockets
-
On Windows, receive_data did not
return the correct address for the sender for TCP sockets. This
problem has been fixed.
- receive_tuple returned wrong
numbers on 64-bit systems when negative integer values were
send via send_tuple. E.g.,
sending -1 to a 64-bit system resulted in the received number
4294967295. This problem has been fixed.
-
In the case of a closed socket on the sender side,
returned the error code 5617 ("No data on socket"). This
problem has been fixed. Now, all receive_* operators return
the error code 5606 ("Error while reading from socket").
Programs that evaluate the error codes returned by these operators
must be adapted accordingly.
Tools → Function
- match_funct_1d_trans sometimes
crashed when the parameter Border was set to 'mirror'. This
problem has been fixed.
Tools → Geometry
- intersection_contours_xld in rare
cases did not intersect vertical contours correctly. Instead,
no intersection was reported even
if two contours intersected. This problem has been fixed.
- intersection_contours_xld
returned no intersection point in
rare cases. This problem has been fixed.
Tools → Lines
- approx_chain returned the wrong
error code 10000 ("unknown extension error") in case of invalid
input parameters MinWidthCoord or MinWidthSmooth. This problem
has been fixed. Now, the error codes 1303 ("Wrong value of control
parameter: 8") and 1308 ("Wrong value of control parameter: 3")
are returned, respectively. Note that programs that evaluate the
returned error codes of
approx_chain must be adapted accordingly.
Transformations → Poses
- pose_to_quat was numerically
unstable for rotation angles close to 180 degrees. This problem
has been fixed.
- vector_to_pose in some cases
returned the error code 10052 ("unknown extension error") instead of
9205 ("Matrix is singular"). This problem has been fixed. Note that
programs that evaluate the error codes returned by
vector_to_pose must be adapted
accordingly.
Tuple → Conversion
- tuple_number did not convert hex
encoded numbers containing 'e' or 'E'. This problem has been
fixed. Note that this problem has already been fixed in HALCON
11.0.3.3.
- tuple_number did not convert some
real numbers. Strings containing an e/E but no decimal point
were affected. This problem occurred first in HALCON 11.0.3.3.
This problem has been fixed.
XLD → Creation
- gen_contour_polygon_rounded_xld
did not sample the new contour as specified. The spacing
between some subsequent points was too large. This problem has
been fixed.
- gen_contours_skeleton_xld
sometimes did not return the expected contours at a junction
point with a quite straightforward vicinity. This problem has
been fixed. Note that this problem has already been fixed in
HALCON 11.0.3.2.
XLD → Features
- select_contours_xld sometimes did
not return contours if the parameter Feature was set to
'direction', even if the direction of their regression line was
between Min1 and Max1. This problem has been fixed.
XLD → Transformations
HALCON/C
Functionality
-
The C and C++ code exported by HDevelop for OS X systems will
now set up a CFRunLoop in the main thread and runs the HALCON
code in a separate thread. Therefore, such exported code must
be linked against the CoreFoundation framework.
The C and C++ Code exported by HDevelop for Unix/Linux systems
will now call the XInitThreads function from the main()
function. Therefore, it may be necessary to explicitly link
exported code against libX11.so.
Bug Fixes
Examples
-
The C example programs
- c/source/example3.c,
- c/source/example4.c,
- c/source/example5.c,
- c/source/example7.c, and
- c/source/example8.c
have been revised.
The C example program
has been removed.
The C example program
- c/source/example_extern8.c
has been added. It shows how to create a HALCON image
from user memory. In contrast to example8.c, the memory is
not copied but pointed to.
The folder structure of the C examples has been made
consistent with the C++ examples in cpp/console.
HALCON/C++
Functionality
-
The HALCON/CPP class HTuple was not thread safe. Tuples always
had to be cloned when used in multiple threads, even when
merely reading. This problem has been fixed. Now, the HTuple is
thread safe. Copies of a HTuple instance can be used in
different threads. They do not need to be cloned before
anymore.
-
Some operators were hard to use in the object-oriented
language interfaces HALCON/CPP and HALCON/.NET. These
operators did not offer a suitable signature for their class
method variant. In particular, it was impossible to pass a
multivalue control parameter (e.g., for generic parameters)
when using a single pose, although it would make sense for
the operator. For a better usability, the listed input
control parameters of the following operators now support
only a tuple type in all language interfaces:
-
The C and C++ code exported by HDevelop for OS X systems will
now set up a CFRunLoop in the main thread and runs the HALCON
code in a separate thread. Therefore, such exported code must
be linked against the CoreFoundation framework.
The C and C++ Code exported by HDevelop for Unix/Linux systems
will now call the XInitThreads function from the main()
function. Therefore, it may be necessary to explicitly link
exported code against libX11.so. -
The semantic type of the parameter ObjInCameraPose of
set_calib_data_observ_pose and
get_calib_data_observ_pose was
real instead of pose. This problem has been fixed.
Note that because of this change,
SetCalibDataObservPose and GetCalibDataObservPose now get and
return HPose instead of HTuple, respectively.
Bug Fixes
-
The class implementation of legacy HALCON/C++ returned the
error code 7200 ("Wrong number of output object parameter") in
specific cases. The error occurred if an operator with more than
one iconic output parameter was called with a non-empty HALCON
object as iconic output parameter. This problem has been
fixed.
-
HALCON/C++ returned inconsistent tuples in some cases. The
problem occurred if output tuples containing only one value were
reused, e.g., in a loop. The further use of these tuples was
not safe and may have introduced undefined values. This problem
has been fixed.
-
The HALCON/C++ data array classes (HPoseArray, HHomMat2DArray,
HHomMat3DArray, HQuaternionArray) now have a copy constructor.
The lack of a copy constructor meant that operators returning
this type of value did not work except when using a variable
initializer. This problem has been fixed.
-
HOperatorException::ThrowInstance() and
HTupleAccessException::ThrowInstance() delegated to the base
class HException. Therefore, only a copy of HException was
thrown, meaning that the user always got an exception of the
base class HException, only, even if the C++ interface raised
an HOperatorException or an HTupleAccessException. This problem
has been fixed.
-
Using the HObject::operator [] in HALCON/CPP might have caused
the error code 4051 ("Image data management: object has been deleted
already "). This problem has been fixed. Note that this problem
has already been fixed in HALCON 11.0.3.1.
-
Iconic classes in HALCON/C++ were not type-safe. For example,
it was possible to assign a
region object to an instance of HImage. This problem has been
fixed. Now, in this situation an exception will be raised.
-
HXLD.GetRectanglePose and HPose.CreateCamPoseLookAtPoint
returned only a single pose although the operators
get_rectangle_pose and
create_cam_pose_look_at_point are able
to return multiple poses. This problem has been
fixed.
In HALCON/C++, the signatures of
HXLD::GetRectanglePose and HPose::CreateCamPoseLookAtPoint have
been changed. They now return HPoseArray instead of HPose. Note
that these changes are not source code compatible.
In HALCON/.NET, the signatures of
HXLD.GetRectanglePose and HPose.CreateCamPoseLookAtPoint have
been changed. They now return HPose[] instead of HPose. Note
that these changes are not source code compatible. - smallest_sphere_object_model_3d
does not provide the useless signature variant offering a
double type for parameter CenterPoint anymore. This means in
detail:
HTuple
HObjectModel3D::SmallestSphereObjectModel3d(double* Radius)
const replaces double
HObjectModel3D::SmallestSphereObjectModel3d(double* Radius)
const
HALCON/C++ (Legacy)
Bug Fixes
HALCON/.NET
Functionality
-
All tool classes (derived from HToolBase) in HALCON/C++ and
HALCON/.NET now feature a Detach() method that relinquishes
ownership of a handle, but allows to continue using the object
as long as the handle is kept alive externally.
-
The HTuple class in HALCON/.NET now has a bool constructor that
creates an integer tuple with a value of 0 or 1,
respectively.
Note that in rare cases this could make
existing source code ambiguous (if a tuple was created from an
unsupported type that allows cast to bool and exactly one other
supported type). To fix this, introduce an explicit type
cast. -
The semantic type of the parameter ObjInCameraPose of
set_calib_data_observ_pose and
get_calib_data_observ_pose was
real instead of pose. This problem has been fixed.
Note that because of this change,
SetCalibDataObservPose and GetCalibDataObservPose now get and
return HPose instead of HTuple, respectively.
Bug Fixes
-
HXLD.GetRectanglePose and HPose.CreateCamPoseLookAtPoint
returned only a single pose although the operators
get_rectangle_pose and
create_cam_pose_look_at_point are able
to return multiple poses. This problem has been
fixed.
In HALCON/C++, the signatures of
HXLD::GetRectanglePose and HPose::CreateCamPoseLookAtPoint have
been changed. They now return HPoseArray instead of HPose. Note
that these changes are not source code compatible.
In HALCON/.NET, the signatures of
HXLD.GetRectanglePose and HPose.CreateCamPoseLookAtPoint have
been changed. They now return HPose[] instead of HPose. Note
that these changes are not source code compatible. -
Some XLD classes could not be serialized. The affected classes
were HXLDCont, HXLDExtPara, HXLDModPara, HXLDPara, and
HXLDPoly. This problem has been fixed.
-
Some operators were hard to use in the object-oriented
language interfaces HALCON/CPP and HALCON/.NET. These
operators did not offer a suitable signature for their class
method variant. In particular, it was impossible to pass a
multivalue control parameter (e.g., for generic parameters)
when using a single pose, although it would make sense for
the operator. For a better usability, the listed input
control parameters of the following operators now support
only a tuple type in all language interfaces:
- smallest_sphere_object_model_3d
does not provide the useless signature variant offering a
double type for parameter CenterPoint anymore. This means in
detail:
HTuple
HObjectModel3D.SmallestSphereObjectModel3d(out double radius)
replaces double HObjectModel3D.SmallestSphereObjectModel3d(out
double radius)
HDevEngine
Functionality
-
HDevEngine has been extended to support the new vector variables.
The new HDevEngine/C++ example program
- hdevengine/cpp/source/use_vector_variables.cpp
demonstrates the usage of vector variables in
HDevEngine. A suitable Visual Studio 2005 Project has been
added in the directory
hdevengine/cpp/vs2005/use_vector_variables and the solution
vs2005/examples.sln has been extended accordingly.
Furthermore, the new HDevEngine/.NET example project
UseVectorVariables under hdevengine/c# demonstrates
the use of vector variables in C#.
Both examples use the new HDevelop program
- hdevengine/hdevelop/use_vector_variables.hdev
and the new HDevelop procedure
- hdevengine/procedures/use_vector_variables.hdvp.
-
The HDevEngine has been extended to support the starting of sub threads from
within an HDevelop script.
-
HDevelop and the HDevEngine have been extended with a
just-in-time (JIT) compiler that - depending on the code
structure - may significantly accelerate the runtime of
HDevelop procedures. Especially procedures with loops and
lots of calculations that are implemented in HDevelop
language will benefit from that. However, there are some
statements that are not supported by the JIT compiler.
Procedures using these statements are executed as hitherto
without compilation. In HDevelop, also procedures with
breakpoints and stop statements are not executed
JIT-compiled. Details can be found in the respective
documentation within the HDevelop User's Guide. It is
possible to enable and disable the use of the JIT compiler
globally - in HDevelop via the Preferences dialog and in
HDevEngine via the method
HDevEngine::SetEngineAttributes.
The new HDevelop example program
- hdevelop/Runtime/test_jit_speedup.hdev
demonstrates the usage and the effect of the
just-in-time compiler in HDevelop.
The new HDevEngine/C++ example program
- hdevengine/cpp/source/use_jit_compiler.cpp
demonstrates the usage of the just-in-time compiler in
HDevEngine. A suitable Visual Studio 2005 Project was added in
the directory hdevengine/cpp/vs2005/use_jit_compiler, and the
solution vs2005/examples.sln was extended accordingly.
Furthermore, the new HDevEngine/.NET example project
UseJitCompiler under hdevengine/c# demonstrates the
use of this functionality in C#.
Bug Fixes
-
HDevEngine was not able to resolve import statements in programs when
- the program was specified by a relative path,
- the program contained import
statements, and
- these import statements had a
relative path as parameter.
This problem has been fixed.
-
Import statements with paths relative to the program's file
location (like import .) were not
resolved correctly. This problem has been fixed.
-
HDevengine did not throw exceptions if license errors occurred
during the initialization. Instead, an error message popped up and
the application quit. This problem has been fixed.
-
Using a dummy implementation for dev_open_window and dev_get_window, e.g.,
int MyHDevOperatorImpl::DevOpenWindow(...) { return H_MSG_TRUE;
}
resulted in an error code 1501 ("Wrong number of values of object
parameter: 1") from dev_open_window/dev_get_window. Moreover,
if no implementation was set at all, the window handles
returned by dev_open_window and
dev_get_window were uninitialized. These
problems have been fixed. Now, in such a case they are both
initialized with the value -1. -
Applications using HDevEngine/.NET in rare cases could have
crashed when the engine classes were not explicitely disposed.
This problem has been fixed.
HALCON Codelets
Legacy
-
The HALCON Codelets are now legacy. They are still available,
but they have not been updated to new features of HALCON 12.
When using applications with HALCON Codelets, only features of
HALCON 11 may be used.
HALCON (general)
Functionality
-
For consistency, the information associated with an error
should be always described as "error code" and "error message".
Therefore, "error number" and "error text", which have been
used in the exception management of HALCON/C++, HALCON/.NET,
and HDevEngineCpp, have been replaced with "error code" and
"error message", respectively. For reasons of clarity,
abbreviated slot names, such as 'error_msg', 'add_error_msg',
and 'proc_line', as used in dev_get_exception_data and GetExceptionData,
have been replaced with 'error_message', 'add_error_message',
and 'program_line', respectively. Note that for compatibility
reasons, the abbreviated slot names are still supported.
-
HALCON now provides an extension for Visual Studio that allows
to inspect the contents of HALCON variables directly in the
debug mode of Visual Studio. The new HALCON Variable Inspect
extension can easily be installed by double-clicking the file
%HALCONROOT%/misc/HALCON_Variable_Inspect.vsix and provides the
inspection of HALCON/CPP and HALCON/C# iconic objects and
tuples. This Visual Studio extension requires a development
license of HALCON and Visual Studio 2010 Professional or higher.
-
The support for Visual Studio 2002, Visual Studio 2003 and
Visual Basic 6 is no longer provided. The minimum system
requirement is now Visual Studio 2005 or higher. The file
export to 'Visual Basic 6.0 - HALCON/COM' has been removed
and is no longer possible.
The following example applications have been removed:
- vb6/HDevelopTemplate/,
- vb6/Matching/,
- hdevengine/vb6/ErrorHandling/,
- hdevengine/vb6/ExecExtProc/,
- hdevengine/vb6/ExecProgram,
- solution_guide/image_acquisition/vb/error_handling_timeout_leutron, and
- extension_package/halconuser/source/testthresholdcom.
Image Acquisition Interfaces
The latest information about new interface revisions and newly supported
image acquisition devices can be found on MVTec's web
server.New Image Acquisition Interfaces:
-
The following HALCON image acquisition interfaces have been
introduced since HALCON 11.0.3:
-
HALCON has been extended with the Argos3D-P1xx interface.
It supports the Argos3D-P1xx camera family from the Austrian
camera manufacturer Bluetechnix. This new interface allows the easy
acquisition of calibrated 3D data (distance, amplitude, and Cartesian X/Y/Z
images) based on time-of-flight technology.
-
HALCON has been extended with the SICK-ScanningRuler
interface. It supports the new ScanningRuler 3D camera from SICK. This
new interface allows accurate and reliable 3D measurements of stationary
objects using a built-in laser light source. Due to the large field of view
the acquired 3D data can easily be processed in various application areas
such as bin picking or de-palletizing. It uses the new SICK icon API 5.1.
- The following three interfaces are now available for Windows x64:
- the Opteon
interface,
- the DahengCAM
interface, and
- the Ginga++
interface.
Modified Image Acquisition Interfaces
-
The following HALCON image acquisition interfaces have been
revised since HALCON 11.0.3:
-
The new revision of the ABS
interface supports now also USB 3.0 devices. Furthermore, the new interface
revision includes two minor bugfixes and provides the new parameter
'framerate_mode'.
-
The new revision of the Crevis
interface includes an updated documentation that describes the system
requirements and limitations in more detail.
-
The new revision of the DahengCAM
interface supports now also the HV-xx51 camera series.
-
The new revision of the DirectShow
interface provides a bug fix to prevent opening the same device twice.
-
The new revision of the Ensenso-NxLib
interface includes an updated system requirements section within the
interface documentation.
-
The new revision of the GigEVision
interface provides bug fixes regarding unregistering a callback via set_framegrabber_callback and setting "empty" parameter
values.
-
The new revision of the Ginga++
interface includes several minor bug fixes.
-
The new revision of the GingaDG
interface includes a bug fix regarding the parameter 'do_force_trigger'.
-
The new revision of the MatrixVisionAcquire
interface supports now the ibpfMono12Packed_V1 pixel format, 64-bit integer
properties, and mvVirtualDevice virtual devices. Furthermore, the new interface
revision fixes issues in the operators open_framegrabber and info_framegrabber that could occur under certain
circumstances, and includes several minor fixes regarding parameterization.
-
The new revision of the OpenNI
interface includes an updated documentation that describes the dependencies
and the installation of the underlying driver and SDK packages.
-
The new revision of the Opteon
interface is now based on v5.0 of the Opteon software
distribution. Furthermore, the new interface revision supports also
multi-channel controllers via the new parameter 'line_in'.
-
The new revision of the pylon
interface has been adapted to the latest version 4.2 of the Basler pylon
camera software suite. Furthermore, the new interface revision includes several
bugfixes, in particular regarding volatile grabbing mode and regarding the
usage of user-defined callbacks.
-
The new revision of the SaperaLT
interface includes various extensions and improvements such as new
parameters, a new callback type, a revised documentation, a new HDevelop
program showing the usage of the GIO pins, and an improved function to show
low-level error messages. Furthermore, the new interface revision fixes several
issues, in particular regarding the acquisition engine in case of timeouts and
regarding a memory leak in the acquisition engine.
-
The new revision of the SICK-3DCamera
interface has been adapted to the new SICK icon API 4.4.3 and eBus driver
3.1. Furthermore, the new interface revision provides two minor bug fixes
regarding parameterization and provides several minor bug fixes regarding the
operators open_framegrabber, info_framegrabber, and set_framegrabber_param.
-
The new revision of the uEye
interface supports now the 12-bit RGB color format and provides also
the new parameter 'burst_size'. Furthermore, the new interface revision
allows the application to get notified via the two new callback types
'device_removed' and 'device_reconnected'.
-
The new revision of the USB3Vision
interface supports more host controllers for driver installation on
Windows and fixes a possible deadlock during initialization on Windows.
-
The new revision of the Video4Linux2
interface adds support for the 'RGGB' format, solves problems regarding debug messages and regarding error
handling and grab timeout, and includes several minor bug fixes.
-
Please refer to the corresponding documentation for information
about additional changes, especially whether a new revision of
the corresponding device driver is required.
Legacy Image Acquisition Interfaces
-
The following HALCON 12.0 image acquisition interfaces are now only
available in the
Legacy download area:
- 1394IIDC-2
- INSPECTA
- OpenNI
- p3i2
- PcEyeCL
-
The following HALCON image acquisition interfaces are no longer
supported for HALCON 12.0:
- dPict
- INSPECTA-5
- MatrixVision
- SonyXCI-2
- SVCam-GigE
- Leutron
Documentation
Installation Guide
The Installation Guide is available in a new edition. It has been
adapted to the changes in HALCON 12.0. Amongst others, it now includes a list of installed registry keys on Windows systems in the
appendix.
HDevelop User's Guide
The HDevelop User's Guide is now available in a new edition. It
has been adapted to the changes in HALCON 12.0. Amongst
others, it has been extended by documentation related to
Additionally, it has been adapted to
Quick Guide
The Quick Guide is available in a new
edition. It has been adapted to the changes in HALCON 12.0.
Amongst others,
Solution Guide I (Basics)
The Solution Guide I (Basics) is available in a new
edition. It has been adapted to the changes in HALCON 12.0.
Amongst
others, it has been extended by documentation related to
Solution Guide II+III (Advanced)
-
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
Programmer's Guide
The Programmer's Guide is available in a new edition. It has been
adapted to the changes in HALCON 12.0. Amongst others, it has been extended
by documentation related to
Additionally, information related to
Visual Studio 2002,
Visual Studio 2003, and Visual Basic 6, which are not supported
anymore, has been removed from the documentation.
Extension Package Programmer's
Manual
The Extension Package Programmer's Manual is available in a new
edition. It has been adapted to the changes in HALCON 12.0.
Amongst others, it has been extended to describe the new table
environment for the operator reference.
Reference Manual
-
The HALCON Operator Reference now supports the following new
features:
- figures (HTML and PDF),
- formulae, i.e., instead of simplified ASCII formulae, the
HTML version now includes formulae similar to the PDF
version, and
- tables (HTML and PDF).
-
The warnings concerning the usage of handles in multiple
threads were not consistent in the reference manual. In some
reference manual entries, those warnings were not clear enough
and in some other entries the warning was completely missing.
This problem has been fixed.
-
The error returned by the camera calibration was documented as
the average back projection error. Instead, it is the root mean
square error of the back projection. This problem has been
fixed.
-
The reference manual entry of create_planar_calib_deformable_model did not
mention the orientation in which the ReferencePose must be
specified. This problem has been fixed.
-
The reference manual entry of do_ocr_single_class_knn, do_ocr_multi_class_knn, and
do_ocr_word_knn now shortly
describes the meaning of the confidence values returned
by the classification.
-
The reference manual entries of
did not mention that the parameter AngleExtent must be
set to 0 if approximately rotationally objects are searched
for with 'max_deformation' set to a value greater than 0.
This problem has been fixed.
-
The reference manual entries of operators that use the
internal 3D point cloud pose refinement (ICP), namely
now state the maximal numerical accuracy of the
refinement.
-
The reference manual entry of fit_primitives_object_model_3d stated that
"If no primitive can be fitted to the set of 3D points, an
empty 3D object model is returned". This was not correct. The
content of the returned object model depends on the chosen
values for 'output_point_coord' and 'output_xyz_mapping'. This
problem has been fixed.
-
The reference manual entries of
stated that pointers are generic (long) and thus a cast
becomes necessary. This was misleading, as a cast from the
data type 'long' may have led to truncated pointers depending
on the used operator signature and programming environment.
In some cases, 'Hlong' must be used instead of 'long'.
This problem has been fixed.
-
The reference manual entry of gen_region_runs did not contain a warning
concerning the restriction that ColumnEnd must be greater or
equal to ColumnBegin. This problem has been fixed. Now, it
contains a warning, which mentions that this restriction is not
checked by gen_region_runs and that a
violation of this restriction may result in errors and
unexpected behavior of subsequent operations.
-
The reference manual entry of get_calib_data_observ_points did not contain
detailed information about the returned values for Row and
Column. The documentation now gives more information about the
values that are returned for the coordinates of the detected
points depending on the used operator for the calibration. This
problem has been fixed.
-
The reference manual entry of get_data_code_2d_results did not describe the
parameters 'quality_aimdpm_1_2006',
'quality_aimdpm_1_2006_labels', and
'quality_aimdpm_1_2006_values' for Aztec codes. This problem
has been fixed.
-
The reference manual entries of optimize_fft_speed and optimize_rft_speed were not clear enough.
There was no information if the optimized data may be
transferred and used on other computers. This problem has been
fixed. The documentation now contains the information that the
resulting data is not suited for the use on other computers
with different configurations.
-
The reference manual entry of read_object_model_3d has been improved. Now,
it is described what exactly happens when passing string values
to the parameter Scale, and that it is possible to pass numeric
values, as well.
-
The reference manual entry of reconstruct_surface_stereo did not describe
how point normals are determined. This problem has been fixed.
Now, it is described that the normal vector of a point is
calculated by fitting a plane
through its neighboring points and using the normal vector of
the plane as normal vector of the respective point.
-
The reference manual entry of
set_line_style has been extended
with the valid range for the parameter 'Style' (1-120).
-
In the reference manual entries of tuple_is_int, tuple_is_real, and tuple_is_string it is now mentioned more
explicitly, that those operators return the type of the
internal representation of a tuple, and that this type does not
necessarily correspond to the type of the tuple's
elements.
-
The reference manual entry of union_collinear_contours_xld has been
rewritten. Now, it has a clear structure and the parameters are
described with drawings.
-
The reference manual entry of write_object_model_3d stated that the STL
format supports triangles and triangle normals. This suggested
that normals that were contained in a 3D object model were
written to file. However, as triangle normals are not supported
by 3D object models and point normals are not supported by the
STL format, no normals were written to file. The documentation
was extended accordingly.
Supported Operating Systems
Windows
HALCON 12.0 has been compiled in the following Windows platform versions:
x86sse2-win32 platform version for Windows
Vista/2008/7/8/2012 on x86 processors with SSE2 extension, i.e.,
Intel Pentium 4 / AMD Athlon 64 or newer
x64-win64 platform version for Windows
Vista/2008/7/8/2012
x64 Edition on Intel 64 or AMD64 processors
-
Since Windows XP is now officially discontinued by Microsoft, HALCON no
longer supports Windows XP. The documentation has been adapted accordingly.
The setup process checks whether it is running on a 32-bit or 64-bit
system and provides a suitable list of platform versions that can be
installed.
On machines that support the AVX2 instruction set, HALCON automatically
exploits the AVX2 instruction set under Windows and Linux.
During the installation, the environment variable
HALCONARCH is set to x86sse2-win32 or
x64-win64 to indicate the installed architecture.
Please note that if you want to switch to another platform version,
you must first install it. Then, you must adapt the environment
variables HALCONARCH and PATH (see the
Installation Guide for more information).
Linux
HALCON 12.0 has been compiled in the following Linux platform versions:
x64-linux platform version for Linux x86_64, Kernel 2.6 or
higher with ABI 2, on Intel 64 or AMD64 processors. Note that the two
platform version x86sse2-linux2.4-gcc40 and
x64-linux2.4-gcc40 are not longer supported. Therefore, the
value of $HALCONARCH changes.
Please refer to the Installation Guide for detailed system
requirements corresponding to the different Application Binary
Interfaces.
The installation script checks whether it is running on a 32-bit or 64-bit
system and provides a suitable list of platfrom versions that can be installed.
OS X
HALCON 12.0 has been compiled for OS X in the following
platform version:
x64-macosx platform version for OS X 10.8, 10.9., and 10.10
Miscellaneous
General
Installation
-
The HALCON 11.0.3 installer missed to install the auxiliary DLLs
haspsrm_win32.dll (and haspsrm_win64.dll, respectively) if the dongle
driver installation was not selected within the setup procedure. This
problem has been fixed. Note that this problem has already been fixed in
HALCON 11.0.3.2.
-
The HALCON installer did not install the following binaries
in the directory %HALCONROOT%/bin/%HALCONARCH%, which are
necessary to run the HALCON USB3Vision interface:
- hAcqUSB3VisionElevate.exe
- libusb-1.0-usan.dll
- libwdi-usan.dll
This problem has been fixed. Note that
this problem has already been fixed in HALCON
11.0.3.2.
-
The following changes have been made on the Windows Installer
for HALCON:
- The entries in the Windows Start Menu have been
reduced. All links to examples or tutorials have been
removed. Now a link to the overview page of the
documentation is available.
- The Visual Studio 2010 Redistributable Package has been
added and will be installed, if it isn't already
installed.
- The HALCON GigE Vision Filter Driver comes now with a
separate installer, so it isn't necessary anymore to
install it manually. Please note that this installer has
also an own Uninstaller and will not automatically removed
with the de-installation of HALCON.
-
To use USB dongles unter Linux, it is necessary, to install the dongle daemon
manually as described in the Installation Guide.
-
If the support of USB dongles is selected during the installation on OS X,
the file hasp_darwin.dylib will be copied into the directory /usr/bin.
Licensing
-
HALCON now uses version 11.12.1.4 of the FLEXnet Publisher license
manager software.
Example Images
New Example Images
For several of the new HDevelop example
programs, new images are available:
-
The new example image
- barcode/mixed/barcodes_datacodes_mixed_01.png.
is used by the new HDevelop example program
- hdevelop/Control/par_start.hdev
that shows how to use the new HDevelop statements par_start and par_join to control the
parallel execution of operators and procedures in HDevelop.
-
The new example image
- datacode/ecc200/ecc200_print_quality_01.png
corresponds to the requirements of the ISO/IEC
15415 standard. The modules of the data code measure 10
pixels in width and height. It
is used by the new HDevelop example program
- hdevelop/Identification/Data-Code/ecc200_direct_mark_quality_semi_t10.hdev
that shows how to assess the direct part mark quality of an Data Matrix ECC
200 code, compliant with the SEMI
T10-0701 standard, and the extended HDevelop example program- hdevelop/Identification/Data-Code/ecc200_print_quality.hdev.
-
The new example images
- calib/calib_single_camera_[01-07].png.
are used by the new HDevelop example program
-
hdevelop/Calibration/Multi-View/calibrate_cameras_monocular.hdev
that demonstrates the calibration of a single camera with the
new calibration plate.
The new example images
- 3d_machine_vision/calib/calib_image_[01-07].png
and
- 3d_machine_vision/calib/ruler.png
are used by the HDevelop example program
-
solution_guide/3d_vision/camera_calibration_multi_image.hdev
that has been adapted to use the new calibration plate.
-
The new example images
- caliper/caliper_with_tilt.png,
- caliper/caliper_no_tilt.png,
- calib/calib_telecentric_tilt_[01-17].png, and
- caliper/caliper_measurement_plane.png.
are used by the new HDevelop example program-
hdevelop/Calibration/Multi-View/calibrate_cameras_telecentric_tilt.hdev
that shows how to calibrate a camera with a telecentric tilt
lens.
The new example images
- stereo/telecentric_tilt/cam_0_calib_plate_[01-08].png,
- stereo/telecentric_tilt/cam_1_calib_plate_[01-08].png,
- stereo/telecentric_tilt/cam_0_cartridge.png,
- stereo/telecentric_tilt/cam_1_cartridge.png,
- stereo/telecentric_tilt/cam_0_tissue.png, and
- stereo/telecentric_tilt/cam_1_tissue.png.
are used by the new HDevelop example program
-
hdevelop/Calibration/Multi-View/calibrate_cameras_telecentric_tilt_stereo.hdev
that shows how to calibrate a stereo camera setup
using the new camera model for
telecentric tilt lenses.
-
The new example images
-
3d_machine_vision/handeye/scara_moving_cam_setup_01_[01-10].png
and
-
3d_machine_vision/handeye/scara_stationary_cam_setup_01_[01-10].png.
are used by the new HDevelop example programs
-
hdevelop/Calibration/Hand-Eye/calibrate_hand_eye_scara_moving_cam.hdev
and
-
hdevelop/Calibration/Hand-Eye/calibrate_hand_eye_scara_stationary_cam.hdev
that show how to calibrate a SCARA hand-eye system.
The new example image
-
3d_machine_vision/handeye/scara_stationary_cam_setup_01_calib_approx_01.png.
is used by the new HDevelop example program
-
hdevelop/Calibration/Hand-Eye/calibrate_hand_eye_scara_stationary_cam_approx.hdev
that shows how to approximately calibrate a SCARA handy-eye
system without using a calibration plate.
The new example images
- 3d_machine_vision/handeye/scara_stationary_cam_setup_01_metal_parts_[01-06].png.
are used by the new HDevelop example program
-
hdevelop/Calibration/Hand-Eye/pick_and_place_scara_stationary_cam.hdev
that shows how to use the (exact or approximate) calibration
results provided by the HDevelop example programs
calibrate_hand_eye_scara_stationary_cam.hdev and
calibrate_hand_eye_scara_stationary_cam_approx.hdev for a
pick-and-place application.
-
The new example image
- sheet_of_light/calib_object_disparity.tif.
is used by the new HDevelop example program
-
hdevelop/3D-Reconstruction/Sheet-Of-Light/calibrate_sheet_of_light_3d_calib_object.hdev
that shows how to use the new operator calibrate_sheet_of_lightto calibrate a
sheet-of-light model with a 3D calibration object.
-
The new example images
- sheet_of_light/injection_mould_[01-06]_disparity.tif
are used by the HDevelop example program
-
hdevelop/Applications/Surface-Inspection/check_for_holes_sheet_of_light.hdev
that shows how to detect additional, missing, or incorrectly
placed holes as well as holes that have a wrong diameter in
3D objects.
-
The new example images
- plastic_parts/phone_camera_frame_01.png and
- plastic_parts/phone_camera_frame_02.png.
are used by the new HDevelop example programs
-
hdevelop/Applications/Measuring-2D/inspect_frame_width.hdev
and
-
hdevelop/Tools/Geometry/apply_distance_transform.hdev
that show how to use the new functionality to calculate the
pointwise distance between contours.
-
The new example image
- ocr/medication_package_02_right.png.
is used by the new HDevelop example program
- hdevelop/OCR/Segmentation/find_text.hdev
that shows how to use the new automatic text
reader.
The new images
- ocr/medication_package_[01-03]_front.png,
- ocr/medication_package_[01-03]_left.png,
- ocr/medication_package_[01-03]_back.png,
- ocr/medication_package_[01-03]_right.png,
- ocr/medication_package_[01-03]_bottom.png, and
- ocr/medication_package_[01-03]_top.png.
are used by the new HDevelop example program
-
hdevelop/OCR/Segmentation/find_expiration_date.hdev
that shows an application of the new automatic text reader.
-
The new example images
- barcode/ean13/ean13_meas_param_estimation_[01-10].png.
are used by the new HDevelop example program
- hdevelop/Identification/Bar-Code/barcode_param_meas_param_estimation.hdev
that
demonstrates the usage and use cases for the new bar code parameter
'meas_param_estimation'.
-
The new example image
- barcode/25interleaved/25interleaved_zeiss1.png.
is used by the new HDevelop example program
-
hdevelop/Identification/Bar-Code/barcode_param_contrast_min.hdev
that shows how to reject bar code candidate regions
depending on their contrast.
-
The new example image
- barcode/code32/code32_01.png.
is used by the new HDevelop example program
- hdevelop/Identification/Bar-Code/code32.hdev
that shows how to read a bar code of type 'Code 32' by using
the bar code reader for the code type 'Code 39' in
combination with the new external procedure-
general/convert_decoded_string_code39_to_code32.hdvp.
-
The new example image
is used by the new HDevelop example program
-
hdevelop/Identification/Bar-Code/barcode_param_majority_voting.hdev
that shows how to use the new parameter 'majority_voting' of
the bar code reader.
-
The new example images
- stereo/middlebury_cones/im2.png,
- stereo/middlebury_cones/im6.png,
- stereo/middlebury_cones/disp2.png, and
- stereo/middlebury_cones/occl.png.
are used by the new HDevelop example program
-
hdevelop/3D-Reconstruction/Binocular-Stereo/binocular_disparity_comparison.hdev
that compares the different approaches for stereo
reconstruction, amongst others the new
binocular stereo approach that solves the stereo correspondence using multi-scanline
optimization,
with regard to accuracy and runtime.
Changed Example Images
The following example images have been removed:
-
The example image woodcell.png in the directory %HALCONIMAGES%
was not used by any example program and, thus, has been removed
from the set of installed example images. Furthermore, the
example images calib_image_[01-07].png in the directory
%HALCONIMAGES%/3d_machine_vision/calib are not used by any
example program and, thus, have been removed from the set of
installed example images.
3D Object Models
New 3D Object Models
The following new 3D object models are available:
-
The new 3D object models
- silicone_baking_mold/silicone_baking_mold_3d_model.om3 and
- silicone_baking_mold/silicone_baking_mold_3d_scene_[01-07].om3.
are used by the new HDevelop example program
-
hdevelop/3D-Matching/Deformable-Surface-Based/find_deformable_surface_model.hdev
that shows how to use the deformable surface-based 3D
matching.