|
This document provides the release notes for MVTec HALCON 9.0, as released in
December 2008.
Overview
This document contains the following information:
-
Compatibility
-
Major New Features of HALCON 9.0
-
Detailed Description of Changes in HALCON
9.0 (relative to HALCON 8.0.2)
-
Licenses
All HALCON 8.0 licenses or licenses of earlier versions must be
replaced or upgraded. Please contact your local distributor.
-
Parallelization by Default
HALCON is now parallelized by default, i.e., the library that is used as
standard corresponds to the library that was previously used for
Parallel HALCON. If you previously used Parallel HALCON, you have to
replace the library files starting with 'par' by those that do not have
this prefix. If you previously used Standard HALCON, you can now benefit
from the parallelization without any further action. If you do not want
to use the parallelized version, you can switch off the parallelization
using the operator set_system. Please see
the Reference Manual entry for set_system or the
Programmer's Guide for further information.
-
HALCON Library
Compared to HALCON 8.0, many extensions have been introduced. Thus, the
HALCON 9.0 libraries are not binary compatible with HALCON 8.0.x or
earlier versions. However, HALCON 9.0 is mostly source-code compatible
to HALCON 8.0.x except for the changes listed below.
-
HALCON Applications
Please re-compile all C, C++, .NET or COM
programs developed with HALCON 8.0.x.
The incompatibility with HALCON 8.0.x or earlier versions mainly concerns
the binaries, with only few changes in the language interfaces. If you
encounter problems during recompiling your programs, please check the
detailed description of changes below.
Please note the following source-code incompatibilities:
-
Because fread_char no longer treats the line feed character in a special manner, programs that react
on the line feed character must be rewritten.
-
Because of changes for the gray-value morphology with
arbitrary structuring elements, besides a changed format for the
structuring elements, the signature of the operator gen_disc_se has changed und thus, the
operator is not source-code compatible anymore.
-
Because the default types of Knots and
Weights in gen_contour_nurbs_xld have been
changed from real to string, the operator API in the language interface has
changed.
-
Because of a revision of HALCON's hand-eye calibration,
the operator hand_eye_calibration is not
source-code compatible to previous HALCON versions. Applications that use
hand_eye_calibration must therefore be adapted to the changed
interface.
-
Because of a replacement of pointer
parameters in the operators new_extern_window
and set_window_dc, these operators are not
source-code compatible anymore.
-
Because of a changed error code, applications using the
constant H_ERR_WRRLN2 should be rebuilt.
-
The enum HBaseArrayMode as well as the corresponding constructors of
HBaseArray, HObjectArray, and HXldArray have been removed
from the HALCON/C++ interface.
-
Because the parameters and return values representing tool classes for the object-oriented API of HALCON/C++ now use the actual class type
instead of untyped handles, existing applications are not source-code
compatible anymore.
-
Because of changes for the signature of the object oriented variant of the
operator adjust_mosaic_images in HALCON/.NET and HALCON/COM,
this variant is not source-code compatible anymore.
-
If an operator is called using a single API variant in
HALCON/.NET or HALCON/COM and returns an empty tuple, now an error instead
of an adhoc value is returned. Thus, a different error handling might be
required.
-
Because the semantic type 'feature_set' is now represented by the new class HFeatureSet in HALCON/.NET,
HClassBox.LearnSampsetBox and HClassBox.TestSampsetBox are not source-code
compatible anymore.
-
The HALCON/COM interface has been revised. The source-code compatibility is
mostly preserved. The exceptions are listed here.
-
HDevEngine
The HDevEngine has been revised. The
old HDevEngine interface is still supported, but will be discarded
in the next version after HALCON 9.0. Therefore, all applications that
use the HDevEngine and that want to be prepared to upgrade to future
HALCON versions should be adapted to use the new HDevEngine.
-
Image Acquisition Interfaces
Because of the new version of the HALCON Acquisition Integration
Interface, acquisition interfaces developed with HALCON 8.0.x or lower
are not binary compatible, but mostly source-code compatible with
HALCON 9.0. See here for more information.
-
Extension Packages
Please re-generate your own extension packages developed with HALCON 8.0.x.
-
ActivVisionTools
-
If you have been using
ActivVisionTools 3.2, please contact your distributor
for further information on how to run this version together
with HALCON 9.0.
-
ActivVisionTools 1.0 to 3.1 cannot be
used with HALCON 9.0. If the setup program detects such an
ActivVisionTools version, it warns you that by continuing to
install HALCON 9.0 you will disable your ActivVisionTools
installation.
If you still want to use your ActivVisionTools installation
you must also keep your old HALCON installation and switch
back to it as described in the Installation Guide.
- General Features
- HDevelop
- Supported Operating Systems
and Platforms
- Documentation
-
HALCON XL:
- HALCON is now able to handle images that are larger than 32767
x 32767. For this, HALCON XL has been
introduced.
-
Parallelization:
-
HALCON Codelets:
- HALCON has been extended with a large amount of new source code
modules and classes (so-called HALCON
Codelets) that can be used outside the development
environment HDevelop.
-
3D Vision:
-
Matching:
-
Bar Code Reading:
-
Data Code Reading:
-
Mathematical Operations:
-
Further Enhancements:
-
Full Text Editor:
HDevelop has been extended with an
editor
for full text editing of HALCON scripts.
-
Calibration Assistant:
HDevelop has been extended by a Calibration Assistant.
-
Procedures:
-
General Usabilty:
The general usability of
HDevelop has been enhanced in many ways.
-
Legacy Versions for Linux Application
Binary Interfaces
For Linux, the *-gcc33 versions of the Application
Binary Interface are now only available in the Legacy download
area.
-
Please refer to the detailed list
of supported operating systems for more information.
-
Enhanced Access of Information:
Besides the full text search in HDevelop's online help browser,
information can now be better retrieved via an index. For this,
the tab "Keywords" in HDevelop has been
extended to link not only to the operator reference but also to
the (now indexed) Solution Guides. The operator keywords have been
revised to have consistent index terms.
-
HTML Versions of Programmer's Manuals:
The Programmer's Guide, the Extension Package Interface Programmer's
Manual, and the Image Acquisition
Interface Programmer's Manual are now also available as
HTML versions (in addition to PDF).
-
New Manual Structure for Printed Solution Guides
The Solution Guide II has been split up into two manuals, a
Solution Guide II and a Solution Guide III. Resulting
from the split-up, the indices of the
individual Solution Guides have changed.
-
New Solution Guide on Classification
The new Solution Guide II-D
(Classification) shows how to classify images or regions with
different types of classifiers. It uses the new examples in the
subdirectory examples/solution_guide/classification.
-
Extended Solution Guide on 3D Vision
The Solution Guide III-C (3D
Vision, previously 3D Machine Vision)
has been extended in many ways to cope with the extensions and
revisions for 3D Vision.
-
Extended Solution Guide on Shape-Based Matching
The Solution Guide II-B (Shape-Based Matching)
has been extended to describe the extensions for shape-based matching.
-
Extended Solution Guide on 2D Data Codes
The Solution Guide II-C (2D Data Codes)
has been extended by detailed information about the evaluation of the print quality for 2D data codes (ECC200
and QR Code) according to the AIM DPM-1-2006 standard.
-
Revisions
Almost all manuals are available in a new edition. Further details
can be found here.
Detailed release notes can be obtained for the following topics:
-
HDevelop
-
HALCON Library
-
HALCON
-
HALCON/C
-
HALCON/C++
-
HALCON/.NET
-
HALCON/COM
-
HDevEngine
-
Image Acquisition Interfaces
-
Manuals
-
Supported Operating Systems
-
Miscellaneous
- HDevelop Language
- Functionality
- Bug Fixes
- Examples
-
HDevelop Language:
-
The HDevelop Language was extended by statements for programming an exception
handling similar to C++ or C#. For this the following keywords were
introduced:
-
try, catch, and endtry are used to define one block where exceptions that
occur within this block including inside procedure calls are caught and a
second block where they are handled.
-
throw can be used to throw a user defined exception or to rethrow an
exception that was caught by the catch statement.
-
If an exception occurs, an exception tuple that carries error codes and
additional information about the error is passed to the catch statement.
For accessing this information the new operator dev_get_exception_data is
provided.
For a detailed description of these operators refer to the Reference Manuals.
The new example program examples/hdevelop/Control/try_catch.dev shows
how to use the exception handling.
HDevelop programs and procedures that contain
exception handling are correctly exported with the exception handling to
programming languages that support exception handling: C++, C#, and Visual
Basics .NET. The export of exception handling is not supported for C and
Visual Basic 6.0.
-
HDevelop expressions now support the function
regexp_replace, which offers the same functionality as the operator tuple_regexp_replace.
-
The basic iconic operators gen_empty_obj, select_obj, concat_obj,
and count_obj were treated in a special way
concerning their textual representation in the program listing, the text file
export, and selected program lines. Instead of using the common operator
function syntax 'operator(parameter list)', the operators were displayed using
the assign operation syntax:
-
ObjectSelected := Objects[Index]
-
ObjectsConcat := [Objects1,Objects2]
Thus, it was not obvious, if a program line resulted from assign or
from one of the iconic operators mentioned above. Now, the textual
representation of gen_empty_obj, select_obj,
concat_obj, and count_obj corresponds to the common HALCON
operator syntax.
-
Functionality:
-
HDevelop has been extended with an editor for full text
editing of HALCON scripts. The new full text editor provides
context-sensitive support and auto-completion for entering operator names as
well as parameter and variable suggestions while editing programs. Syntactical
and runtime errors are highlighted to ease the development. Additionally, the
functionality in the previous dialog based editor
also has been extended by error highlighting and can be used in parallel with
the full text editor.
-
HDevelop's Procedure Interface dialog is now extended to append documentation to local and external procedures. In the
Procedure Interface dialog, there are new buttons for editing general procedure
documentation like description, keywords, or suggestions, and for editing
parameter documentation like semantic type, default values, description etc.
These values influence, e.g., the value lists in the Operator Window or the
full text editor. With the next and back arrows, it is possible to navigate
through all pages/tab cards of the Procedure Interface dialog. The
documenation is editable in different languages and is integrated transparently
into the HDevelop Help Window. For further information please refer to the
HDevelop Users Guide.
-
HDevelop has been extended by a Camera Calibration
Assistant, which will assist you in taking good images of the
calibration plate, managing the calibration data, and generating code both for
calibrating the camera and using the calibration data.
-
When creating a new procedure by selecting a
number of program lines, HDevelop suggests which parameters of the selected
operators should become parameters of the new procedure. If the same parameter
should become an input and an output parameter, until now two parameters with
the same name were suggested, and the resulting conflicts had to be solved
manually by the user. Now HDevelop suggests different
names for the input and the output parameter. In addition, HDevelop
generates code into the procedure that guarantees that the generated procedure
behaves in such a case in the same way within the generation context as the
selected program lines did before.
-
The following external procedures are now
part of the HALCON installation:
-
dev_display_shape_matching_results,
-
dev_open_window_fit_image,
-
dev_open_window_fit_size,
- dev_resize_window_fit_image,
-
dev_resize_window_fit_size,
- dev_update_off,
- dev_update_on,
-
disp_3d_coordinate_system,
- disp_continue_message,
- disp_message,
-
gen_arrow_contour_xld,
- list_image_files,
- parse_filename,
-
scale_image_range,
- set_display_font,
- sort_pairs, and
-
tuple_gen_sequence
They are located in the directory %HALCONROOT%\procedures. This
directory is added to HDevelop's external procedure path list by
default.
-
The Open Example dialog now offers a possibility
to open the selected example program in a new HDevelop instance.
-
If the user is going to save a program or external
procedure file, now it is checked whether in the meantime the file was
modified outside HDevelop, e.g., by another user who edited the same file. If
the file was changed, a message box is displayed warning the user and offering
the opportunity to overwrite the external changes or going back to HDevelop for
saving the program or procedure under a different name.
-
As long as the user does not select a specific language in HDevelop's
Preferences dialog, HDevelop will now use the system
language for its GUI, if it is supported, instead of English. If the
system language is changed to another supported language by the user (under
Windows via the Regional Settings dialog and under Linux by setting the
environment variable LANG), HDevelop will start the next time using the new
language.
-
The export of HDevelop operators that use HDevelop
Graphics Windows has been improved. HALCON now provides a functionality that
emulates the behavior of HDevelop Graphics Windows for HALCON windows. This
HALCON window stack is accessible via class methods and functions in the HALCON
interfaces, and code exported from HDevelop now uses this functionality when
opening, closing, setting, or accessing the active window. The HALCON window
stack mechanism is thread-safe. Thus, in a multithreaded application every
thread has its own window stack. In order to avoid memory leaks or similar
problems, the application must take care to close all HALCON windows opened by
a thread before terminating the thread because this is not done automatically
by HALCON.
Furthermore, for the .NET and COM code exports it is now
optional whether to export HDevelop programs as code using the HDevelop export
example templates or as code using the previously described HALCON window stack
functionality when doing Graphics Windows output. Additionally, in the latter
case the exported code contains a main function and thus is usable as a
standalone application. The HDevelop Export dialog allows to select the
corresponding option.
-
In earlier versions, it was possible to interrupt the
execution of a draw_* operator in HDevelop by
-
stopping the program execution (F9) or
only on Windows platforms. This is now possible on all platforms.
-
It is now possible to copy and paste HDevelop code
between two or more instances of HDevelop.
If the copied code contains calls to local procedures, the procedures
are copied, too. If necessary, the copied procedures are renamed.
If the copied code contains calls to external procedures, the paths
to the procedures are copied, too. However, before an external
procedure path is added during a paste action, the user is
asked whether or not he wants to add that particular path to the
external procedure paths.
Note that the paste action will only insert the plain text into a full
text editor, but not the referenced procedures. To insert the referenced
procedures, too, you have to switch to the dialog-based editor before pasting.
-
HDevelop's Program Listing Window now provides an
opportunity to navigate between the opened listings, similar to a web browser.
A forward and a backward button to navigate between the already opened program
listings facilitate this kind of navigation. On the keyboard, Alt+Left Arrow
and Alt+Right Arrow can be used as shortcuts for this navigation.
-
Within the Program Listing Window, it is possible
to create a new procedure by selecting some program lines and calling the
action 'Create New Procedure' from the context menu. The Create Procedure
dialog that opens offers the check box 'Replace selected program lines', which
controls whether the selected program lines are replaced by a program line
calling the new procedure or not. If the current procedure is an external one
and the new procedure is local, this opened the opportunity to insert the call
of a local procedure into an external procedure, although, calling a local from
an external procedure is not possible and, consequentially, the inserted
procedure call was marked as invalid. Now, it is no longer possible to insert
invalid code by the Create Procedure dialog:
-
If a new procedure is
created by selecting code in an external procedure the default for the new
procedure is also external.
-
If the procedure is changed to
local, the check box 'Replace selected program lines' is now disabled and after
confirming the creation of a local procedure the selected program lines are not
replaced.
-
HDevelop's Program Window now provides the option
'show caller' to select and show all locations where the currently displayed
procedure is called. This option is part of the Program Window's context menu.
-
HDevelop's Operator Window now offers an easy way
to change temporarily the Return-key mode. In the Preferences dialog under
'General Options' the user can select whether by pressing Return in the
Operator Window the edited operator is only entered into the program or entered
and executed. Now, this mode temporarily can be toggled: pressing Ctrl-Return
performs the non-default behavior.
-
If an erroneous expression is entered in the Operator
Window, the error is now marked in the parameter field after trying to
enter the operator into the program.
-
When entering the acquisition operators open_framegrabber, set_framegrabber_param, or get_framegrabber_param in the Operator Window, you will now be presented with dynamic parameter suggestions that take the selected
device or interface into account.
-
In HDevelop, the Graphics Windows are now managed as a
stack. Until now the behavior was as follows: if a number of Graphics
Windows had been opened and a new window was opened and closed again, the
window that became active was the window that had been opened first, but not
the window that was active before opening and closing the other window. This
behavior has been changed so that the active window becomes active again if a
new window is opened and closed.
-
HDevelop now has an Inspection Window that
displays the values of matrix variables. Additionally, it is possible to change
matrix values in the Inspection Window.
-
HDevelop's Histogram dialogs now support multiple
output operations simultaneously. The dialogs offer a table where one line
represents a single output operation or feature (e.g., threshold and scale for
the gray value histogram or area, row, and column for the feature
histogram). For each line the table provides fields to activate or deactivate
the operation, select the operation's exact type, the input channel, and the
minimum and maximum values.
Furthermore, it is possible to add new output operations and delete existing
ones.
Operations that currently cannot be performed (e.g., because the
input object has an unsuitable type) are disabled automatically.
-
HDevelop's Histogram dialogs can now generate code
lines that calculate the same output as the histogram does. The code lines can
be inserted at the program's current insert position.
-
HDevelop's gray value histogram now displays a
value range instead of a single peak value for int4, int8, and real images. The
feature histogram always displays a value range
instead of a single peak value. That is, the range of input values is divided
into quantization steps to obtain a meaningful histogram, and, as a
consequence, the histogram's "peak value" may actually represent a whole range
of input values.
-
So far, HDevelop's help index ("Keyword" tab) only
contained links to the operator reference.
Now, there are also links to the Solution Guides (PDF), in particular to the Solution Guide I (Basics) and the Solution
Guides II and III (Advanced). The appearing keywords have been completely
revised and extended so that information can be found more easily.
-
The Contents tab card of HDevelop's Help Window so
far only presented the chapters and sections of the HALCON Reference Manual as
a hierarchical tree. The same now also applies to the HDevelop Reference Manual
and the Image Acquisition Devices overview. Furthermore, image acquisition
devices that do not appear in the Image Acquisition Devices overview are now
listed under 'Additional Interfaces'.
Besides, the (new) HTML versions of the Programmer's Manuals (Programmer's Guide, Extension Package
Interface Programmer's Manual, Image Acquisition
Interface Programmer's Manual) are now available in a corresponding
first-level element.
-
The navigation within the Help Window
of HDevelop was improved by providing more keyboard shortcuts.
In particular, the following keyboard shortcuts are now available:
-
Alt-Left - Back in history
-
Alt-Right - Forward in history
-
Alt-Home - Go to the index page of the HALCON Reference Manual
-
Ctrl-+ - Increase the font size
-
Ctrl-- - Decrease the font size
-
Ctrl-D - Add current page to bookmark
-
Ctrl-P - Print current page
-
Ctrl-F - Search text on the current page
-
Alt-Enter - Enter operator to Operator Window
-
Tab - Go to next link on page
-
Shift-Tab - Go to previous link on page
-
Enter - Follow the selected link.
In addition, it is now possible to select text on the Help page not
only by the mouse but also with the help of the keyboard.
-
The usability of the Image Acquisition Assistant
has been increased with various small improvements:
-
Filtering by
category and visibility as well as sorting is now also applied to read-only
parameters. This can be very helpful, in particular for the GigE Vision
interface.
-
The communication between assistant and
acquisition interface has been optimized, which should mean faster
connection and less low level errors in case something
goes wrong.
-
The measured acquisition time in live mode is
now more reliable, also, it is possible to disable displaying the image, show
the speed as frames/second, and measure the speed for volatile acquisition
without copying the image (by disabling image display or setting it to the new
mode "volatile").
-
For acquisition of individual images
(not live acquisition), the image acquisition now uses grab_image instead of grab_image_async.
-
The revision number of the interface is now visible on the connection
tab before connecting to the device.
-
Bug Fixes:
-
Some special characters in file names such as
apostrophes (') were not correctly handled when inserting code from HDevelop
Assistants or via the Read Image dialog, leading to errors. This problem has
been fixed.
-
HDevelop sometimes crashed in the Find/Replace
dialog, while creating or opening a new program. This problem has been
fixed.
-
If in the Find/Replace dialog the option 'Whole
Words' was unchecked, replacing variable names or parts of them did not work
correctly within expressions: only the occurrences of the search string in the
leftmost word of the expression were replaced. This problem has been fixed.
-
Parallel HDevelop hung if a draw_* operator was performed while a Zoom
Window was open.
This problem has been fixed.
-
HDevelop crashed when the set_system parameter 'empty_region_result'
was set to 'false' while an empty region was used as the domain of an
image. This problem has been fixed.
-
HDevelop crashed if an HDevelop program was dragged from a Windows
Explorer and dropped over a second Graphics Window.
This problem has been fixed.
-
If HDevelop was run in SDI mode, opening several
Zoom Windows or Variable Inspect Windows caused the Program Window to move to
the right and down. This problem has been fixed.
-
If a Graphics Window and a Zoom Window were open and displayed the same image,
closing the Graphics Window and then clicking into the Zoom Window caused
HDevelop to crash. This problem has been fixed.
-
If an image was displayed in the Graphics Window,
zooming into the image by using the Zoom In function (+) and then continuously
doubling the image size by selecting and clicking the Double entry on the Image
Size menu sometimes caused the error 5174 ("negative height of area (or
0)"). This problem has been fixed.
-
Standard HDevelop hung if a gray image was displayed, the Feature
Histogram dialog was opened, and one of the features
gray_fuzzy_entropy or gray_fuzzy_perimeter was selected. This
problem did not occur in Parallel HDevelop. This problem has been
fixed.
-
The Property dialog allows to copy the names of
the used modules to the clipboard. This did not always work correctly. Under
Windows, only in some rare cases the module names were not copied correctly to
the clipboard. In that cases the clipboard kept its old value. Under Linux, in
general, pressing the button 'Copy to Clipboard' worked only for the first
time. Additional copy calls resulted in numerous error messages on the console:
"QClipboard: Cannot transfer data, no data available" After that the clipboard
was empty. This problem has been fixed.
-
Copying values from the Variable Window to the
clipboard did not always work correctly. Under Windows the copying sometimes
worked and sometimes not, under Linux the copying worked only for the first
time. Additional copy calls resulted in numerous error messages on the
console: "QClipboard: Cannot transfer data, no data available". This problem
has been fixed.
-
After inserting a greater number of program lines from the clipboard or the
undo/redo stack, the left part of the program
listing that contains the line numbers, the PC, and the insert cursor,
and the right part containing the program lines were sometimes not synchronous.
The right part was scrolled in order to display as much of the inserted program
lines as possible while the left part remained unchanged. This problem has
been fixed.
-
If an existing comment operator was selected for
being edited in the Operator Window, and a string with newlines was entered as
the comment parameter (e.g., by pasting such a string from the clipboard), the
program became corrupted after re-entering the comment into the program. This
affected the program listing, either by printing
several program lines one upon the other or by setting the left and the right
part of the listing out of sync. In addition, if such a program (or procedure)
was saved, it could not be re-loaded owing to a format error. As long as the
program or procedure was loaded in HDevelop, the problem could be solved just
by removing the corrupt comment. The problem did not occur if a new
comment operator (with new lines in the comment string) was
entered into the program. In that case, as intended, several comments - one
for each text line - were entered into the program. This problem has been
fixed. Now it is safe to replace an existing comment operator by
several comments at once.
-
On an operating system with Asian locale settings,
some Asian characters became disrupted if they were used within a control
parameter while the HALCON 'filename_encoding' was set to 'locale' (which is
the default).
This concerned all characters for which the multi-byte word
that is used for encoding that character in the locale encoding table contains
the hexadecimal code 0x5c (e.g. the Katakana letter SO (ソ)
that is encoded in Shift-JIS by 0x83 0x5c). This problem has been fixed.
-
HDevelop crashed if within the full text search in the Help
Window it was searched for the characters '=' or '=~'. This problem has been fixed.
-
HDevelop might have crashed after removing an external procedure path
from the list of managed directories under the following condition:
-
one of the referred external procedures was modified, and
-
after removing the external procedure path an undo or redo action was performed on the removed procedure.
This problem has been fixed.
-
Setting a password to a procedure via the
External Procedures / Manage Passwords tab card on the Preferences
dialog sometimes failed. After selecting one or several procedures in the
Unprotected Procedures list, pressing the Move to the Right
button, and entering a password into the Password dialog that opens, the
selected procedures remained in the Unprotected Procedures list and
were no longer selected. This problem has been fixed.
-
HDevelop might have crashed during the creation of an external procedure, if a
password was set and immediately removed again before the Procedure Creation dialog was closed. This problem has
been fixed.
-
If the interface of a procedure was changed via the Edit
Procedure Interface dialog while the option Adapt Program was activated
(default), deactivated program lines that refer to that procedure were adapted
to the new signature, as requested, but, they were also activated. This
problem has been fixed.
-
The code export of string constants with special
characters like newline (\n), tab (\t), or double quotes (") to the different
Visual Basic dialects was erroneous. Special characters were quoted according
to the C/C++ standard and not as valid Visual Basic code. This problem has
been fixed.
-
C programs exported by HDevelop caused a memory
leak if a control variable was used multiple times as output parameter in the
same operator or procedure call. This problem has been fixed.
-
C programs exported by HDevelop crashed if the
variable '_' was used as output parameter in procedure calls. This problem has
been fixed. Furthermore, the variable '_' is no longer exported as '_' and
'_t' to C and C++, respectively. Instead, the exported code contains a new
control variable with a default name (similar to exported C# or Visual Basic
.NET code).
-
Code that contained for statements and that were exported from HDevelop to C did not work correctly if
the start and the end value of the statement were equal and the step value was
negative. This problem has been fixed.
-
HDevelop did not export external procedures that
were referenced only by unused local procedures. As all local procedures (used
and unused) are always exported, this meant that the exported code was
inconsistent if the program contained an unreferenced local procedure that
referenced an external procedure. This problem has been fixed.
-
HDevelop exported constant tuple expressions
containing exactly one integer or real value incorrectly to C. This problem
has been fixed.
-
The HDevelop code generated by the Matching
Assistant was erroneous if the corresponding values for row and column
scale were equal while the row and column scale steps differed.
Instead of the operators create_aniso_shape_model
and find_aniso_shape_model the generated code
contained the operators create_shape_model and
find_shape_model (if all scale factors were
equal) or create_scaled_shape_model and find_scaled_shape_model (if both min scale factors and
both max scale factors were pairwise equal). This problem has been fixed.
-
HDevelop might have crashed when attempting to load settings for the Image Acquisition Assistant from a *.das file. This
problem has been fixed.
-
Configuring the Image Acquisition Assistant for
volatile acquisition could have caused a crash
when accessing the displayed image after closing the device (e.g., by resizing
the Graphics Window). This problem has been fixed.
-
The creation of volatile image objects caused a memory leak in
HDevelop. Volatile image objects can be created by some image
acquisition devices or by calling gen_image* operators that expect a
pointer as one of the input parameters. This problem has been fixed.
The HDevEngine was not affected by this problem.
-
The 'Auto' check boxes for acquisition parameters in the Image Acquisition Assistants did not work in HALCON
8.0.2. This problem has been fixed. Note that HALCON 8.0 and 8.0.1 were not
affected.
-
Examples:
HALCON has been extended by more than 85 new HDevelop example programs:
- The new HDevelop example program examples/hdevelop/Regions/Features/area_holes.dev
shows how to compute the area of all holes of a
region.
- The new HDevelop example programs binocular_disparity_mg.dev and
binocular_distance_mg.dev from the subdirectory examples/hdevelop/Tools/Stereo
show how to apply the new operators for multigrid
stereo.
- The new HDevelop example program
examples/hdevelop/Tools/Calibration/change_radial_distortion_points.dev shows
how to change the radial distortion of image
points.
- The new HDevelop example program
examples/hdevelop/XLD/Transformation/clip_end_points_contours_xld.dev shows how
to clip the end points of a contour.
- The new HDevelop example program
examples/hdevelop/Filter/FFT/gen_mean_filter.dev shows how to use the new
operator for generating rectangular or elliptical
mean filters of arbitrary orientation in the frequency domain.
- The new HDevelop example program
examples/hdevelop/Image/Access/get_grayval_contour_xld.dev shows how to return gray values of an image at the positions of an XLD
contour.
- The new HDevelop example program
examples/hdevelop/Image/Access/get_grayval_interpolated.dev shows how to return gray values of an image at the positions given by
tuples of rows and columns.
-
The new HDevelop example program
examples/hdevelop/System/Information/get_operator_info.dev shows how to use the
operator get_operator_info and how to query the
automatic parallelization method for every HALCON operator.
-
The new HDevelop example program
examples/hdevelop/System/Information/get_param_info.dev shows how to use the
operator get_param_info and how to query the
supported input image types of any HALCON image processing operator.
- The new HDevelop example program
examples/hdevelop/Object/Manipulation/obj_diff.dev shows how to calculate the set-theoretic difference of two object tuples.
-
The new HDevelop example program
examples/hdevelop/Filter/Points/points_harris_binomial.dev shows how to use the
binomial approximation to the Harris point
operator.
- The new HDevelop example program
examples/hdevelop/Filter/Points/points_lepetit.dev shows how to use the Lepetit point operator.
- The new HDevelop example program
examples/hdevelop/Filter/Smoothing/rank_n.dev shows how to evaluate each pixel of a multichannel image and return a
single-channel image that contains the gray values of the specified rank.
- The new HDevelop example
examples/hdevelop/Graphics/Parameters/set_paint_3d_plot.dev shows how to apply
the new operators used for the new display mode
'3d_plot'.
- The new HDevelop example program
examples/hdevelop/Matrix/adjust_circle_matrix.dev shows how to apply several of
the new operators for linear algebra.
- The new HDevelop example programs print_quality_isoiec15416.dev and
composite_print_quality_isoiec15416.dev in the directory
examples/hdevelop/Tools/Barcode show how to evaluate the print quality for 1D bar codes according to the
international standard ISO/IEC 15416.
- The new HDevelop example programs calibration_aimdpm_1_2006.dev and
print_quality_aimdpm_1_2006.dev in the directory
examples/hdevelop/Tools/Datacode show how to evaluate the print quality for 2D data codes (ECC200 and QR Code)
according to the AIM DPM-1-2006 standard.
- The new HDevelop example program
examples/hdevelop/Tools/Datacode/ecc200_finder_pattern_tolerance.dev shows how
to read ECC200 symbols with a disturbed or missing
finder pattern. It uses the new images ecc200_damaged_finder_pattern_* from
the subdirectory images/datacode/ecc200.
- The new HDevelop example program
examples/hdevelop/Tools/Datacode/ecc200_small_modules_robustness.dev
shows how to read data code
symbols with very small module sizes more robustly.
- The new HDevelop example program
examples/hdevelop/Matching/Shape-Based/create_shape_model_xld.dev shows how to
apply the new operators for the creation of shape models
using XLD contours.
- The new HDevelop example program
examples/hdevelop/Matching/Shape-Based/set_shape_model_min_contrast.dev shows
how to overwrite the value of the parameter
'min_Contrast' that was originally set for a shape model.
- The new HDevelop example
examples/hdevelop/Matching/Shape-Based/set_shape_model_timeout.dev shows how to
use the timeout mechanism for shape-based matching.
- The new HDevelop example programs matching_defocused_pcb.dev and
matching_deformed_bulb.dev in the directory examples/hdevelop/Applications/FA
show how to use the increased tolerance mode for
shape-based matching.
- The new HDevelop example programs locate_car_door.dev and
locate_engine_parts.dev from the new subdirectory
examples/hdevelop/Applications/3D-Vision, and the HDevelop example program
detect_road_signs.dev from the subdirectory
/examples/hdevelop/Applications/Monitoring show how to apply the new perspective, deformable matching.
- The new HDevelop example programs locate_cookie_box.dev and
locate_cookie_box_multiple_models.dev from the new subdirectory
examples/hdevelop/Applications/Packaging, and detect_brochure_pages.dev from
the new subdirectory examples/hdevelop/Applications/Miscellaneous show how to
apply the new descriptor-based matching. They use the new
images cookie_box_* from the new subdirectory images/packaging and the images
brochure_* and brochure_page_* from the new subdirectory images/brochure.
- The new HDevelop example program
examples/hdevelop/Matching/Descriptor-Based/pose_from_point_correspondences.dev
shows how to compute a pose from 3D-2D point
correspondences and how to compute a pose from a 2D
projective transformation matrix (homography).
- The new HDevelop example programs calibrate_sheet_of_light.dev,
reconstruct_connection_rod_calib.dev, and
reconstruct_connection_rod_uncalib.dev from the subdirectory
examples/hdevelop/Applications/3D-Vision show how to measure 3D object surfaces
using the new operators for sheet of light.
- The new HDevelop example program
examples/hdevelop/Tools/2D-Transformations/mosaicking_pyramid.dev shows how to
implement an image-pyramid-based projective matching
algorithm.
- The new HDevelop example program
examples/hdevelop/Tools/Stereo/disparity_image_to_xyz.dev shows how to transform a disparity image to three images that contain
the x, y, and z coordinates for each pixel of the input disparity image.
- The new HDevelop example program
examples/hdevelop/Tools/Calibration/radial_distortion_comparison.dev compares
the results of the radial distortion
self-calibration and the camera calibration.
- The new HDevelop example
examples/hdevelop/Applications/Calibration/compare_calibration_models.dev
compares the calibration results using the camera
models 'division' and 'polynomial'.
- The new HDevelop example program
examples/hdevelop/Applications/FA/extract_clips_xl.dev shows how to use HALCON XL.
-
The new HDevelop example program
examples/solution_guide/basics/classify_wood.dev shows how to
classify different kinds of wood according to their surface texture.
It uses the new images from the subdirectory images/wood.
- The new HDevelop example program
examples/solution_guide/basics/novelty_detection_dyn_threshold.dev
shows how to use dyn_threshold to detect defects in the texture of a plastic mesh.
- The following new HDevelop example programs in the directory
examples/solution_guide/classification show how to apply different
classification tasks as described in the new Advanced
Solution Guide on Classification:
-
classify_metal_parts_ocr.dev
-
classify_characters_ocr.dev
-
classify_citrus_fruits.dev
-
segment_citrus_fruits.dev
-
classify_halogen_bulbs.dev
-
visualize_3d_feature_space.dev
The following images have been added in the directory images:
-
halogen_bulb/halogen_bulb_*
-
halogen_bulb/bad/halogen_bulb_bad_*
-
halogen_bulb/good/halogen_bulb_good_*
-
halogen_bulb/none/halogen_bulb_none_01
- The new HDevelop example programs eneo.dev, eneo_parameters.dev, and
eneo_simple.dev in the directory examples/hdevelop/Images/Acquisition show how
to use the eneo interface for remote grabbing.
- The new HDevelop example programs pixelink.dev, pixelink_simple.dev,
pixelink_parameters.dev, and pixelink_2cameras.dev in the directory
examples/hdevelop/Images/Acquisition show how to use the PixeLINK interface.
- The new HDevelop example programs sonyxci2.dev, sonyxci2_simple.dev, and
sonyxci2_parameters.dev in the directory examples/hdevelop/Images/Acquisition/
show how to use the SonyXCI-2 interface.
- The new HDevelop example program
examples/hdevelop/Images/Acquisition/gigevision_crop.dev shows how to apply the
GigEVision interface for software cropping.
- The new HDevelop example program
examples/hdevelop/Images/Acquisition/menable3_exposure.dev shows how to grab
images from a Silicon Software microEnable III board and how to set the exposure time in
a grabber-controlled mode.
- The new HDevelop example program
examples/hdevelop/Images/Acquisition/menable4_exposure.dev shows how to grab
images from a Silicon Software microEnable IV board and how to set the exposure time in
a grabber-controlled mode.
-
HALCON has been extended with several new application-specific HDevelop
example programs:
- The HDevelop example program
examples/hdevelop/Applications/3D-Vision/locate_cylinder_3d.dev combines a
stereo setup with 3D shape-based matching. It uses the new images closeup_*,
stereo_left_*, and stereo_right_* from the subdirectory
images/metal_cylinders.
- A set of HDevelop example programs in the new subdirectory
examples/hdevelop/Applications/Packaging shows application cases from the
packaging industries:
- The HDevelop example programs
check_blister.dev and check_blister_mixed.dev show a packaging task from the
pharmaceutical industry. The task is to check the content of blisters that are
filled automatically and manually, respectively. They use the images blister_*
and blister_mixed_* from the subdirectory images/blister.
- The HDevelop example program
check_soft_cheese.dev checks packages of soft cheese for their contents. The
occurence of three types of cheese flavors and their correct order within the
package are examined. It uses the images soft_cheese_* from the subdirectory
images/food.
- The HDevelop example program
inspect_shampoo_label.dev inspects shampoo bottles for the correct positioning
of their front labels. It uses the new images shampoo_* from the subdirectory
images/packaging.
- Two HDevelop example programs in the
subdirectory examples/hdevelop/Applications/FA deal with the processing steps
for returned empties: The example program inspect_bottle_mouth.dev checks
incoming empties for damages on the bottle mouth and uses the images
images/bottles/bottle_mouth_*. The example program check_bottle_crate.dev
counts the occurence of bottles in returned empties, recognizing foreign and
brocken objects.
- The HDevelop example program
examples/hdevelop/Applications/FA/inspect_harddisk_temperature.dev inspects an
infrared image of a hard disk for heat emission. It uses the image
images/infrared/harddisk_temperature.
- The HDevelop example program
examples/hdevelop/Applications/FA/check_hazelnut_wafers.dev applies a quality
inspection on hazelnut wavers. It uses the images
images/food/hazelnut_wafer_*.
- A set of HDevelop example programs in the
subdirectory examples/hdevelop/Applications/FA show applications from the flat
panel industry: The four examples measure_tft_cells.dev, measure_lcd_cells.dev,
detect_mura_defects_blur.dev, and detect_mura_defects_texture.dev show
different inspection tasks on LCD cells, like measuring the frame width between
cells, applied for TFTs and LCDs, respectively, as well as inspecting the LCD
surface for a certain class of damages known as mura defects. They use the
images tft_cells_*, lcd_cells_*, mura_defects_blur_*, and
mura_defects_texture_*, respectively, from the subdirectory
images/lcd.
- The HDevelop example program
examples/hdevelop/Applications/Sequences/rotation_from_optical_flow.dev shows
how to estimate the center of a rotation between two succeeding images with the
operator optical_flow_mg.
-
The HDevelop example program
examples/hdevelop/Applications/FA/determine_sharpness.dev shows how to measure
the sharpness of an image using four characteristic quantities, like Blurriness
(Auto-Correlation), the image difference of local neighborhoods (Difference),
the gradient, and the range of frequencies in an image (Band Pass).
- The HDevelop example program
examples/hdevelop/Matching/Correlation-Based/find_ncc_model_defocused_precision.dev
examines the deviation of the NCC matching results for a sequence of images
that were acquired with changing focus. The deviation from the reference model
is determined and finally plotted. The example uses the images
images/pcb_focus/pcb_focus_telecentric_*.
- The HDevelop example program
examples/hdevelop/Applications/Measure/correct_measure_direction.dev shows how
to automatically refine the orientation of a measure object used for 1D
measuring.
The following HDevelop example programs were modified to use new
functionalities:
- The HDevelop example program
examples/hdevelop/Applications/FA/3d_matching_clamps.dev has been rewritten to
use the new operators that deal with quaternions.
- The HDevelop example programs
examples/hdevelop/Applications/FA/circles.dev,
examples/hdevelop/Tools/Calibration/get_circle_pose.dev, and
examples/hdevelop/XLD/Features/fit_circle_contour_xld.dev have been adapted to
use the new operator for generating circular XLD contours.
- The HDevelop example programs
examples/hdevelop/Applications/Color/color_fuses_lut_trans.dev and
examples/hdevelop/Filter/Color/color_trans_lut.dev have been rewritten to use
the new operators for fast color space transformations using
look-up-tables.
For consistency reasons, several HDevelop example programs changed their names
and/or paths.
- For the following example programs the names have
changed:
- The HDevelop example programs moments_region_2d.dev and
moments_region_2d_invar.dev in the subdirectory
examples/hdevelop/Regions/Features were renamed into
moments_region_2nd.dev and moments_region_2d_invar.dev,
respectively, so that the names of the programs correspond to
the names of the demonstrated operators.
- For the following HDevelop example programs the names and the
directories have changed:
-
examples/hdevelop/Applications/Barcode/25Industry.dev is now examples/hdevelop/Tools/Barcode/25industrial.dev
-
examples/hdevelop/Applications/Barcode/25Interleaved.dev is now examples/hdevelop/Tools/Barcode/25interleaved.dev
-
examples/hdevelop/Applications/Barcode/Code28.dev is now examples/hdevelop/Tools/Barcode/code28.dev
-
examples/hdevelop/Applications/Barcode/Code39.dev is now examples/hdevelop/Tools/Barcode/code39.dev
-
examples/hdevelop/Applications/Barcode/EAN13.dev is now
examples/hdevelop/Tools/Barcode/ean13.dev
-
examples/hdevelop/Applications/Barcode/EAN13AddOn5.dev is now
examples/hdevelop/Tools/Barcode/ean13addon5.dev
-
examples/hdevelop/Applications/Barcode/EAN8.dev is now
examples/hdevelop/Tools/Barcode/ean8.dev
-
examples/hdevelop/Applications/Barcode/RSS14.dev is now
examples/hdevelop/Tools/Barcode/rss14.dev
-
examples/hdevelop/Applications/Barcode/RSS14Stacked.dev is now
examples/hdevelop/Tools/Barcode/rss14_stacked.dev
-
examples/hdevelop/Applications/Barcode/RSS14StackedOmnidir.dev is
now examples/hdevelop/Tools/Barcode/rss14_stacked_omnidir.dev
-
examples/hdevelop/Applications/Barcode/RSS14Truncated.dev is now
examples/hdevelop/Tools/Barcode/rsstruncated.dev
-
examples/hdevelop/Applications/Barcode/RSSComposite.dev is now
examples/hdevelop/Tools/Barcode/RSS_composite.dev
-
examples/hdevelop/Applications/Barcode/RSSExpanded.dev is now
examples/hdevelop/Tools/Barcode/rssexpanded.dev
-
examples/hdevelop/Applications/Barcode/RSSExpandedStacked.dev is
now examples/hdevelop/Tools/Barcode/rssexpanded_stacked.dev
-
examples/hdevelop/Applications/Barcode/RSSLimited.dev is now
examples/hdevelop/Tools/Barcode/rsslimited.dev
- The following HDevelop example programs have been moved from the
directory examples/hdevelop/Applications/Barcode to the directory
examples/hdevelop/Tools/Barcode:
-
barcode_param_element_height_min.dev
-
barcode_param_max_diff_orient.dev
-
barcode_param_orientation.dev
The following HDevelop example programs are not provided any longer,
because more convenient examples are available:
-
The handling of small modules for 2D data codes that was previously
demonstrated by the example program
examples/hdevelop/solution_guide/2d_data_codes/data_codes_2d_enlarge_modules.dev
is now shown in the example program
examples/hdevelop/Tools/Datacode/ecc200_small_modules_robustness.dev in a more
convenient way using the functionality described here.
-
The example program examples/hdevelop/Applications/FA/sharpness.dev has been
replaced by the example program examples/hdevelop/Applications/FA/determine_sharpness.dev
- New Operators
- Speed-Up and Enhancements
- Modified Operators
- Bug Fixes
-
New Operators:
-
HALCON has been extended with an operator abs_diff_image that calculates the absolute value of
the difference of two images.
-
HALCON has been extended with an operator area_holes that computes the area of all holes of a
region. The new HDevelop example program
examples/hdevelop/Regions/Features/area_holes.dev shows how to use
area_holes.
-
HALCON has been extended with a set of operators to deal with quaternions and
to use them for rotations in three dimensional space. Calculation of rotations
with quaternions is numerically more stable than similiar computations with
rotation matrices. In detail the following operators were added:
-
axis_angle_to_quat,
-
quat_compose,
-
quat_conjugate,
-
quat_interpolate,
-
quat_normalize,
-
quat_rotate_point_3d,
-
quat_to_hom_mat3d, and
-
quat_to_pose.
The example program examples/hdevelop/Applications/FA/3d_matching_clamps.dev
has been rewritten to use the new operators.
-
HALCON has been extended with two new operators for stereo reconstruction.
binocular_disparity_mg calculates the disparity
of a rectified stereo image pair, while binocular_distance_mg computes the distance. Both
operators use multigrid solvers that solve the stereo correspondence using a
variational approach.
The new HDevelop example programs
examples/hdevelop/Tools/Stereo/binocular_disparity_mg.dev and
examples/hdevelop/Tools/Stereo/binocular_distance_mg.dev show how to use the
two new operators.
-
HALCON has been extended with an operator change_radial_distortion_points that changes the radial
distortion of image points. The new HDevelop example program
examples/hdevelop/Tools/Calibration/change_radial_distortion_points.dev shows
how to use change_radial_distortion_points.
-
HALCON has been extended with a set of operators for perspective,
deformable matching. The matching provides the functionality to find
the 3D pose or a 2D projective homography of a 2D template in an
image.
The following operators provide the perspective, deformable matching
functionality:
-
clear_all_deformable_models,
-
clear_deformable_model,
-
create_planar_calib_deformable_model,
-
create_planar_uncalib_deformable_model,
-
determine_deformable_model_params,
-
find_planar_calib_deformable_model,
-
find_planar_uncalib_deformable_model,
-
get_deformable_model_contours,
-
get_deformable_model_origin,
-
get_deformable_model_params,
-
read_deformable_model,
-
set_deformable_model_origin,
-
set_deformable_model_param, and
-
write_deformable_model.
The new HDevelop example programs locate_car_door.dev and
locate_engine_parts.dev from the directory
examples/hdevelop/Applications/3D-Vision, and the new HDevelop example program
examples/hdevelop/Applications/Monitoring/detect_road_signs.dev demonstrate
the new functionality. They use the new images attention_road_sign.jpg,
dead_end_road_sign.jpg, and street_* from the new subdirectory
images/road_signs and the images car_door_* and engine_parts_* from the new
subdirectory images/automotive.
-
HALCON has been extended with an operator clip_end_points_contours_xld that clips the end points
of a contour. The amount of clipping at each end of the contour can be given by
Euclidean length or number of contour points.
The new HDevelop example program
examples/hdevelop/XLD/Transformation/clip_end_points_contours_xld.dev shows how
to use clip_end_points_contours_xld.
-
HALCON has been extended with a set of operators that use look-up tables for
color space transformations from and to the RGB color space. In many cases the
use of look-up tables is faster than similiar transformations with explicit
transformation calculations. In detail, the operators
-
create_color_trans_lut,
-
apply_color_trans_lut,
-
clear_color_trans_lut, and
-
clear_all_color_trans_luts
were added. The example programs
examples/hdevelop/Applications/Filter/Color/color_fuses_lut_trans.dev and
examples/hdevelop/Filter/Color/color_trans_lut.dev have been rewritten to use
the new operators.
-
HALCON has been extended with four new operators for creating shape models from
XLD contours:
-
create_shape_model_xld,
-
create_scaled_shape_model_xld, and
-
create_aniso_shape_model_xld
create shape models from XLD contours. The operator
determines the polarity of the model edges in a training image and sets the
match metric to 'use_polarity' or 'ignore_global_polarity'. The new
HDevelop example program
examples/hdevelop/Matching/Shape-Based/create_shape_model_xld.dev shows how to
use the new operators. It uses the new images brake_disk_part_* from the new
subdirectory images/brake_disk.
-
HALCON has been extended with a set of operators for the
sheet-of-light technique:
-
create_sheet_of_light_model,
-
clear_sheet_of_light_model,
-
clear_all_sheet_of_light_models,
-
set_sheet_of_light_param,
-
get_sheet_of_light_param,
-
query_sheet_of_light_params,
-
measure_profile_sheet_of_light,
-
apply_sheet_of_light_calibration, and
-
get_sheet_of_light_result.
The new HDevelop example programs calibrate_sheet_of_light.dev,
reconstruct_connection_rod_calib.dev, and
reconstruct_connection_rod_uncalib.dev in the directory
examples/hdevelop/Applications/3D-Vision show the new functionality. They use
the new images connection_rod_calib_*, caltab_at_position_*,
connection_rod_lightline_*, connection_rod_disparity.tif and connection_rod_*
from the new subdirectory images/sheet_of_light.
-
dev_set_paint and set_paint have a new mode '3d_plot' that is superior to
the existing '3D-plot' because it is accelerated by the graphics card. This
mode is well suited for the interactive display of a height field in 3D. For
this purpose the operators update_window_pose and
unproject_coordinates were added. The operator
update_window_pose provides means to manipulate the pose of the 3D
plot in an intuitive way. The operator unproject_coordinates
calculates the image coordinates for a point in a 3D plot window. The new
example examples/hdevelop/Graphics/Parameters/set_paint_3d_plot.dev shows how
to use the new operators. Furthermore, the existing modes '3D-plot',
'3D-plot_hidden', and '3D-plot_point' have been renamed into '3d_plot_lines',
'3d_plot_hidden_lines', and '3d_plot_point', respectively. For compatibility
reasons, the old modes are supported as well.
-
HALCON has been extended with an operator disparity_image_to_xyz that transforms a disparity
image to three images that contain the x, y, and z coordinates for each pixel
of the input disparity image. The new HDevelop example program
examples/hdevelop/Tools/Stereo/disparity_image_to_xyz.dev shows how to use
disparity_image_to_xyz.
- HALCON has been extended with an operator gen_circle_contour_xld that creates contours that
represent circles or circular arcs. The HDevelop example programs
examples/hdevelop/Applications/FA/circles.dev,
examples/hdevelop/Tools/Calibration/get_circle_pose.dev, and
examples/hdevelop/XLD/Features/fit_circle_contour_xld.dev have been adapted to
use gen_circle_contour_xld.
-
HALCON has been extended by an operator gen_image3_extern that creates an image object from
three pointers.
- HALCON has been extended with an operator gen_mean_filter that generates rectangular or
elliptical mean filters of arbitrary orientation in the frequency domain. The
new example program examples/hdevelop/Filter/FFT/gen_mean_filter.dev shows how
to use gen_mean_filter.
-
HALCON has been extended with operators for linear algebra in 7 categories.
-
Access:
-
get_diagonal_matrix,
-
get_full_matrix,
-
get_sub_matrix,
-
get_value_matrix,
-
set_diagonal_matrix,
-
set_full_matrix,
-
set_sub_matrix,
-
set_value_matrix.
-
Arithmetic:
-
abs_matrix,
-
abs_matrix_mod,
-
add_matrix,
-
add_matrix_mod,
-
div_element_matrix,
-
div_element_matrix_mod,
-
invert_matrix,
-
invert_matrix_mod,
-
mult_element_matrix,
-
mult_element_matrix_mod,
-
mult_matrix,
-
mult_matrix_mod,
-
pow_element_matrix,
-
pow_element_matrix_mod,
-
pow_matrix,
-
pow_matrix_mod,
-
pow_scalar_element_matrix,
-
pow_scalar_element_matrix_mod,
-
scale_matrix,
-
scale_matrix_mod,
-
solve_matrix,
-
sqrt_matrix,
-
sqrt_matrix_mod,
-
sub_matrix,
-
sub_matrix_mod,
-
transpose_matrix,
-
transpose_matrix_mod.
-
Creation:
-
clear_all_matrices,
-
clear_matrix,
-
copy_matrix,
-
create_matrix,
-
repeat_matrix.
-
Decomposition:
-
decompose_matrix,
-
orthogonal_decompose_matrix,
-
svd_matrix.
-
Eigenvalues:
-
eigenvalues_general_matrix,
-
eigenvalues_symmetric_matrix.
-
Features:
-
determinant_matrix,
-
get_size_matrix,
-
max_matrix,
-
mean_matrix,
-
min_matrix,
-
norm_matrix,
-
sum_matrix.
-
File:
-
read_matrix,
-
write_matrix.
The new HDevelop example program
examples/hdevelop/Matrix/adjust_circle_matrix.dev shows how to use several of
the operators.
Attention: For performance reasons, matrix handles are not
checked for validity in these matrix operators. Passing an invalid
matrix handle may crash the application (including HDevelop).
-
HALCON has been extended with an operator get_font_extents that returns the maximum extent
(ascent, descent, width, and height) of all characters of the font that is
currently set for a particular window.
-
HALCON has been extended with an operator get_grayval_contour_xld that returns gray values of an
image at the positions of an XLD contour. The new HDevelop example program
examples/hdevelop/Image/Access/get_grayval_contour_xld.dev shows how to use
get_grayval_contour_xld.
-
HALCON has been extended with an operator get_grayval_interpolated that returns gray values of an
image at the positions given by tuples of rows and columns. The new HDevelop example
program examples/hdevelop/Image/Access/get_grayval_interpolated.dev shows how
to use get_grayval_interpolated.
-
HALCON has been extended with the operators get_mposition_sub_pix and get_mbutton_sub_pix. These operators are
subpixel-accurate versions of the existing operators get_mbutton and get_mposition and can be used to acquire input
coordinates for the new operators unproject_coordinates and update_window_pose.
-
HALCON has been extended with an operator obj_diff that calculates the set-theoretic difference
of two object tuples, i.e., the resulting object tuple is the first input
object tuple with all objects from the second input object tuple removed.
The new HDevelop example program examples/hdevelop/Object/Manipulation/obj_diff.dev
shows how to use obj_diff.
-
HALCON has been extended with an operator points_harris_binomial,
which extracts interest points from an image using the binomial
approximation to the Harris operator. The new HDevelop example program
examples/hdevelop/Filter/Points/points_harris_binomial.dev
shows how to use points_harris_binomial.
-
HALCON has been extended with an operator points_lepetit, which extracts interest points from an
image using the Lepetit operator. The new HDevelop example program
examples/hdevelop/Filter/Points/points_lepetit.dev shows how to use
points_lepetit.
-
HALCON has been extended with an operator proj_hom_mat2d_to_pose that computes a pose from a
homography. The new HDevelop example program
examples/hdevelop/Matching/Descriptor-Based/pose_from_point_correspondences.dev
shows how to use proj_hom_mat2d_to_pose.
-
HALCON has been extended with an operator proj_match_points_ransac_guided that computes a
projective transformation matrix between two images by finding correspondences
between points based on a known approximation of the projective transformation
matrix. This can be used, for example, to speed up the matching of very large
images by implementing an image-pyramid-based projective matching algorithm.
The new HDevelop example
examples/hdevelop/Tools/2D-Transformations/mosaicking_pyramid.dev shows how to
implement such an image-pyramid-based approach. Additionally, the execution
time for different numbers of pyramid levels is shown.
-
HALCON has been extended with an operator radial_distortion_self_calibration that performs a
self-calibration of the radial distortion coefficient and center of radial
distortions using curved lines in an image that correspond to straight lines in
the world. The new HDevelop example examples/hdevelop/Tools/Calibration
/radial_distortion_self_calibration.dev shows how to use
radial_distortion_self_calibration. The new HDevelop example
examples/hdevelop/Tools/Calibration/radial_distortion_comparison.dev compares
the results of the radial distortion self-calibration and the camera
calibration.
-
HALCON has been extended with an operator rank_n
that evaluates each pixel of a multichannel image and returns a single-channel
image that contains the gray values of the specified rank. The new HDevelop example
program examples/hdevelop/Filter/Smoothing/rank_n.dev shows how to use
rank_n.
-
HALCON has been extended with a set of operators for descriptor-based
matching. The matching provides the functionality to find the 3D pose or a 2D
projective homography of a 2D template in an image.
The following
operators provide the descriptor-based matching functionality:
-
read_descriptor_model,
-
clear_descriptor_model,
-
clear_all_descriptor_models,
-
create_calib_descriptor_model,
-
create_uncalib_descriptor_model,
-
find_calib_descriptor_model,
-
find_uncalib_descriptor_model,
-
get_descriptor_model_origin,
-
get_descriptor_model_params,
-
get_descriptor_model_points,
-
set_descriptor_model_origin, and
-
write_descriptor_model.
The new HDevelop example
programs examples/hdevelop/Applications/Packaging/locate_cookie_box.dev,
examples/hdevelop/Applications/Packaging/locate_cookie_box_multiple_models.dev,
and examples/hdevelop/Applications/Miscellaneous/detect_brochure_pages.dev
demonstrate the new functionality. They use the new images cookie_box_* from
the new subdirectory images/packaging and the images brochure_* and
brochure_page_* from the new subdirectory images/brochure.
-
HALCON has been extended with two new operators to handle callbacks from a
specific image acquisition interface. The operator set_framegrabber_callback allows to register a
HALCON-specific callback function; the operator get_framegrabber_callback queries a callback function.
Note that not all image acquisition interfaces actually support the use of
these callbacks. See the documentation of the specific image acquisition
interface for details.
-
HALCON has been extended with an operator set_shape_model_param that allows to overwrite the
value of the parameter 'min_contrast' that was originally set for a shape
model. The new HDevelop example program
examples/hdevelop/Matching/Shape-Based/set_shape_model_min_contrast.dev shows
how to use set_shape_model_param.
-
HALCON has been extended with an operator set_window_param that can
be used to modify attributes of an already opened window. It is
possible to change the title and the background color of a window.
Furthermore, several parameters concerning the '3d_plot' paint mode
can be modified. To query the current values of these parameters the
operator get_window_param has been added.
-
HALCON has been extended with an operator vector_to_pose that computes a pose from 3D-2D point
correspondences. The new HDevelop example program
examples/hdevelop/Matching/Descriptor-Based/pose_from_point_correspondences.dev
shows how to use vector_to_pose.
-
Speed-Up and Enhancements:
-
affine_trans_image* and zoom_image* are now faster by a factor of up to 4 on
Windows and Linux systems for images of type real and for all other image types
if 'int_zooming' = 'false'.
-
binomial_filter is now faster by up to 20% on
byte images and by up to 30% on uint2 images on Windows and Linux systems that
support MMX or SSE2.
-
camera_calibration is now faster for area scan
cameras. The amount of speed-up depends on and increases with the number of
used images.
-
derivate_gauss is now faster by up to 180% on Intel compatible
processors that support SSE2 under Windows and Linux. Furthermore,
the speed-up obtained by automatic parallelization on domain level
has been improved.
-
threshold and fast_threshold are now faster for byte and uint2 images
on Windows and Linux systems that support SSE2. threshold is faster
by up to a factor of 2.0 on byte images and by up to a factor of 3.0 on uint2
images. fast_threshold is faster by up to a factor of 1.8 on byte
images and by up to a factor of 2.5 on uint2 images.
- The operators
-
gray_erosion,
-
gray_dilation,
-
gray_opening,
-
gray_closing,
-
gray_tophat, and
-
gray_bothat
for gray-value morphology with arbitrary structuring elements are now generally
faster by a factor of up to 10 on Intel compatible processors that support SSE2
on Windows and Linux. Using flat structuring elements, the operators are now
faster by a factor of up to 500. The new HDevelop example
\Morphology\Gray-Values\gray_opening.dev shows how to speed up the operators
used for gray-value morphology. It uses the new image pcb_layout.
- The operators
-
gray_erosion_shape,
-
gray_dilation_shape,
-
gray_opening_shape, and
-
gray_closing_shape
are now faster on Intel compatible
processors that support SSE2 on Windows and Linux, depending on image size and
mask dimensions (e.g., up to 170% with a 15x15 rectangular mask). Furthermore,
these operators are now significantly faster with uint2 images on Intel
compatible processors that support MMX or SSE2.
- The operators
-
gray_erosion_rect,
-
gray_dilation_rect,
-
gray_opening_rect, and
-
gray_closing_rect
are now faster on Intel compatible
processors that support MMX or SSE2 on Windows and Linux, because now they use
the same implementations as the operators
-
gray_erosion_shape,
-
gray_dilation_shape,
-
gray_opening_shape, and
-
gray_closing_shape.
-
gray_range_rect is now faster by an order of
magnitude for byte images on Intel compatible processors that support MMX or
SSE2 on Windows and Linux. Furthermore gray_range_rect now supports
uint2 images.
-
lines_gauss is now faster by up to 40% on Intel
compatible processors that support SSE2 under Windows and Linux.
-
mean_image with 3x3 masks on byte images is now
faster by up to 100% on Intel compatible processors that support MMX on Windows
and Linux.
-
median_image with byte images and rectangular
masks of width 3 is now faster by up to 30% on Intel compatible processors that
support SSE2 under Windows and Linux. In case of rectangular masks of width 5
median_image is now faster by up to 100%. Furthermore,
median_image with uint2 images and rectangular masks of width 3 and 5
is now significantly faster on Intel compatible processors that support MMX or
SSE2 under Windows and Linux.
-
minkowski_add1 is now significantly faster
depending on the input parameters and the operating system (up to 200% on 64
bit operating systems with a 4x4 rectangle used as structuring element).
-
partition_rectangle is now faster by up to 20%.
-
points_harris is now faster by up to 100% on
Intel compatible processors that support SSE2 under Windows and Linux. The same
applies to points_foerstner with
Smoothing='gauss'.
-
The tuple operators are now faster.
-
wiener_filter and wiener_filter_ni are now significantly faster. The
speed-up of wiener_filter on a 512x512 image is up to 25%, while the
speed-up of wiener_filter_ni on an image of these dimensions is up to
50%.
-
HALCON now supports reentrancy and automatic
parallelization by default. This implies that former Parallel HALCON
becomes the default and the overhead of Parallel HALCON has been reduced
significantly.
-
HALCON is now able to write and read all HALCON images as
TIFF files. All HALCON pixel types are supported. It is possible to
store the domain of the images either as a transparency mask or as an alpha
channel (for compatibility with other software programs that can read TIFF
files). When reading TIFF files, an alpha channel that contains only the gray
value 0 and exactly one other gray value is converted to a HALCON image domain.
It is possible to write and read images with channels of mixed pixel type (as
output, e.g., by gen_image_to_world_plane_map).
It is possible to write image object tuples as multipage TIFF files. Likewise,
multipage TIFF files are read as image object tuples. In addition to
uncompressed storage, it is now possible to write TIFF files with the following
compression schemes: PackBits, LZW, Adobe Deflate, and JPEG (new style JPEG
according to TIFF Technical Note #2). When reading TIFF files, it is now
possible to read tiled TIFF files of any pixel type.
Furthermore, it is
now possible to write and read HALCON regions and region object tuples as TIFF
files. Region object tuples are written as multipage TIFF files with one bit
per pixel.
The operators that were extended are
-
write_image,
-
read_image,
-
dump_window,
-
write_region, and
-
read_region.
Furthermore, the File image acquisition
interface has been extended. Here, however, it is not possible to read
multipage TIFF files since the interface of grab_image and grab_image_async only support a single image object.
If multipage TIFF files are read with grab_image or
grab_image_async, only the first page (i.e., the first image) is
returned.
- HALCON is now able to handle images that are larger
than 32767 x 32767. For this, HALCON XL has been
introduced.
The documentation has been adapted accordingly.
The new HDevelop example program
examples/hdevelop/Applications/FA/extract_clips_xl.dev
shows the processing of an image with a height larger than 32767.
-
HALCON now can handle an unlimited number of image
channels per image object.
-
HALCON now supports an unlimited number of iconic objects
per iconic object parameter for every relevant operator. Previous
HALCON versions limited the maximum number of iconic objects per parameter to
100000 in some operators.
-
HALCON now supports an unlimited number of contour and
polygon control points in all operators. Previous HALCON versions
limited the number of contour or polygon control points to 200000 and 10000,
respectively, in some operators.
-
HALCON now supports strings of unlimited length.
Previous HALCON versions limited the string length to 1024 characters in many
operators.
-
HALCON regions now cache features with double
precision, once they have been computed. Subsequent computations of
region features therefore now return the same results.
-
gray_erosion, gray_dilation, gray_opening, gray_closing, gray_tophat, and gray_bothat for gray-value morphology with arbitrary
structuring elements now support uint2 images. The structuring element now has
to be of the same pixel type as the input image.
-
hysteresis_threshold now supports real images.
-
read_region now supports PNG images with 1 bit
per pixel.
-
query_font now supports more than 2000 fonts.
-
edges_sub_pix and edges_color_sub_pix now use less memory with reduced
image domains.
-
lines_gauss, lines_color, and lines_facet now use less memory with reduced image
domains.
-
The following operators are now parallelized automatically:
-
affine_trans_image and
affine_trans_image_size
-
edges_image,
edges_color,
edges_sub_pix, and
edges_color_sub_pix
-
find_ncc_model
-
The shape-based matching operators find_shape_model(s), find_scaled_shape_model(s) and find_aniso_shape_model(s)
-
The 3D shape-based matching operators find_shape_model_3d and create_shape_model_3d
-
hysteresis_threshold
-
lines_gauss
-
map_image (if
the input map uses bilinear interpolation)
-
points_harris and points_foerstner
-
polar_trans_image_ext,
polar_trans_image_inv,
polar_trans_region, and
polar_trans_region_inv
-
projective_trans_image and
projective_trans_image_size.
-
rotate_image
(except for rotations by 90, 180, or 270 degrees)
-
The threshold operators
auto_threshold, bin_threshold, fast_threshold, char_threshold, and dual_threshold
-
zoom_image_size and zoom_image_factor (except
if an image is zoomed down to half its size or if 'none' is used as
Interpolation)
-
Modified Operators:
-
HALCON now provides a camera model for area scan cameras that models
higher order distortions, including tangential distortions.
Additionally, camera_calibration and binocular_calibration now return only one value
(instead of two values) in the output control parameter "Errors". In contrast
to earlier versions, this value now describes the average Euclidian distance
between image points and reprojected points and thus is larger by a factor of
1.414.
The new HDevelop example
examples/hdevelop/Applications/Calibration/compare_calibration_models.dev shows
the calibration results using the camera models 'division' and 'polynomial'.
It uses the new images images/calib/calib_distorted_*, which were acquired with
a lens with strong distortions. The calibration is applied with both models.
The calibration errors are then returned for each image individually to
emphasize the achieved improvement.
-
The parameters 'width', 'height', 'neighborhood', 'clip_region', 'init_new_image',
'current_runlength_number', 'store_empty_region', 'empty_region_result', and
'no_object_result' of set_system and get_system now also have a thread-specific variant
beginning with a 'tsp_' prefix. The thread-specific variant sets or queries
the parameter only for the current thread. Additionally, the operators
set_system and get_system are now reentrant to support
high-performance thread-specific parameter access.
-
So far, connect_grid_points might have returned
connecting lines between grid points that consisted of only two contour points.
Such connecting lines are virtually useless for the grid rectification and may
cause undesired results. Therefore, connect_grid_points now returns
only connecting lines with at least three contour points.
-
The data code reader has been extended to be able
to read ECC200 symbols with a disturbed or missing finder pattern. For this,
the new parameter 'finder_pattern_tolerance' has been introduced, which
provides the new functionality.
The new HDevelop example program
examples/hdevelop/Tools/Datacode/ecc200_finder_pattern_tolerance.dev
shows how to use the new functionality. It uses the new images
ecc200_damaged_finder_pattern_* from the subdirectory
images/datacode/ecc200.
-
The data code reader has been extended to be able
to read data code symbols with very small module sizes more robustly. For
this, the new parameter 'small_modules_robustness' has been introduced, which
provides the new functionality. Furthermore, the minimum allowed module size
and width (PDF417) has been reduced from 2 to 1.
The new HDevelop example program
examples/hdevelop/Tools/Datacode/ecc200_small_modules_robustness.dev
shows how to use the new functionality. The example program
examples/solution_guide/2d_data_code/2d_data_codes_enlarge_modules.dev,
which showed how to preprocess images containing data codes with small
modules, is obsolete now.
-
depth_from_focus now supports internal mean
filtering after applying the focus filter but before calculating the focus
level.
-
distance_pp, distance_pl, distance_ps,
distance_ss, distance_sl, distance_lr,
distance_sr, distance_pr, intersection_ll, angle_ll, angle_lx, and
projection_pl now allow empty input tuples. As a
result, the operators then return empty tuples.
-
The scalability of fft_image, fft_image_inv, and fft_generic on multi-core/multi-processor machines has
been improved.
-
HALCON's bar code reader is now interruptible. The user can now specify a
maximum period of time after which find_bar_code
is guaranteed to terminate. This timeout can be set using set_bar_code_param.
-
HALCON's data code reader is now interruptible. The user can now specify a
maximum period of time after which find_data_code_2d is guaranteed to terminate. This
timeout can be set using set_data_code_2d_param.
-
HALCON's correlation-based matching is now interruptible. The user can now
specify a maximum period of time after which the operator find_ncc_model is guaranteed to terminate. This timeout
can be set using the new operator set_ncc_model_param.
-
HALCON's shape-based matching is now interruptible. The user can now specify a
maximum period of time after which the operators find_shape_model(s), find_scaled_shape_model(s), and find_aniso_shape_model(s) are guaranteed to terminate.
This timeout can be set using the new operator set_shape_model_param. The new HDevelop example
examples/hdevelop/Matching/Shape-Based/set_shape_model_timeout.dev shows how to
use the timeout mechanism.
Additionally,
the six operators find_shape_model(s), find_scaled_shape_model(s), and find_aniso_shape_model(s)
now have an increased tolerance
mode. In this mode, the matches on the lowest pyramid level that still
provides matches are returned.
The new HDevelop example programs matching_defocused_pcb.dev and
matching_deformed_bulb.dev in the
subdirectory examples/hdevelop/Applications/FA show how to use the new
operators. They use the new images pcb_focus_telecentric_* from the new
subdirectory images/pcb_focus and halogen_bulb_*, halogen_bulb_good_*, and
halogen_bulb_bad_* from the new subdirectory images/halogen_bulb, respectively.
-
fread_char no longer treats the line feed
character in a special manner. Instead of returning the string 'nl',
fread_char now simply returns the line feed character '\n', i.e., the
character with the ASCII code 10. Existing programs that react on the line
feed character must be rewritten to check for the string '\n' instead of 'nl'.
-
The default types of Knots and Weights in gen_contour_nurbs_xld have been changed from real to
string to enable a simpler calling of the default case.
-
A new functionality for the assessment of the 1D bar code print quality
according to the international standard ISO/IEC 15416 is now available. It can
be performed by calling get_bar_code_results with
the parameter 'quality_isoiec15416' after a bar code symbol was successfully
detected by find_bar_code. The print quality can
be evaluated for standardized bar codes (i.e., all supported bar code types
except PharmaCode) as well as for composite codes.
The example program
examples/hdevelop/Tools/Barcode/print_quality_isoiec15416.dev shows the
functionality for simple 1D bar codes. It uses the new example image ean1315
from the subdirectory images/barcode/ean13. The example program
examples/hdevelop/Tools/Barcode/composite_print_quality_isoiec15416.dev shows
the functionality for composite bar codes. It uses the new example image
rsslimited_composite_02 from the subdirectory images/barcode/rss_composite.
-
The functionality for the 2D data code print quality
assessment has been extended to support the AIM DPM-1-2006 standard for
the ECC200 and QR Codes. It is accessible through the new parameter
'quality_aimdpm_1_2006' of get_data_code_2d_results.
The new HDevelop example programs calibration_aimdpm_1_2006.dev and
print_quality_aimdpm_1_2006.dev in the subdirectory
examples/hdevelop/Tools/Datacode show how to use the new functionality. They
use the new images rssexpanded_code_calibration_* from the subdirectory
barcode/rssexpanded and the new images ecc200_quality_aimdpm_* from the
subdirectory datacode/ecc200.
Additionally,
HALCON now provides labels for the print quality tuples returned by get_data_code_2d_results with the parameters
'quality_isoiec15415' and 'quality_aimdpm_1_2006'. The labels can be accessed
through get_data_code_2d_results using the parameters
'quality_isoiec15415_labels' and 'quality_aimdpm_1_2006_labels', respectively.
-
The transformation underlying the operators get_hsi and set_hsi is
now consistent with the transformation underlying the operators trans_from_rgb and trans_to_rgb. Furthermore, the 'hsi' LUT has been
adapted to be consistent with this transformation.
-
The default mode of the global memory cache is 'exclusive' now. It can be
queried and set by the 'global_memory_cache' parameter of the get_system and set_system
operators.
-
gray_erosion, gray_dilation, gray_opening, gray_closing, gray_tophat, gray_bothat,
read_gray_se, and gen_disc_se for gray-value morphology with arbitrary
structuring elements now use a new format for the structuring element. The
gray value 0 no longer has the special meaning of "not part of the region of
interest". The new format uses HALCON domains for modeling the region of the
structuring element. As a consequence, no offset of 1 is subtracted from the
gray values of the structuring element. read_gray_se uses a new file
format that supports the definition of the region of interest. The filters
filter/*.gse have been adapted accordingly. gen_disc_se now has a new
parameter Type that specifies the data type of the structuring element to
create ('byte', 'uint2' or 'real').
-
hand_eye_calibration no longer needs an initial
solution and the iterative optimization method has been improved. Furthermore,
the operator provides the following changed input parameters: 'Method' and
'QualityType' to chose the desired type of algorithm and to define the output
quality measure, respectively. The output parameter 'Quality' returns
different types of quality measures to assess the computed results.
Because of this change, the operator hand_eye_calibration is not
source-code compatible to previous HALCON versions. Applications that use
hand_eye_calibration must therefore be adapted to the changed
interface.
-
The parameter value 'main' for Mode in mirror_image has been renamed to 'diagonal'.
-
mirror_region now has a mode 'diagonal' and the
parameter RowColumn has been renamed to Mode.
-
moments_region_3rd now returns more accurate
values for M12 and M30 with larger regions.
-
The pointer parameters in new_extern_window and
set_window_dc have been replaced. The first and
second parameters of operator new_extern_window were of type HWND*
(INT*) and HDC* (INT*), respectively. The types were replaced by HWND (INT)
and HDC (INT). This eases the usage, not only under .NET and VB, but also under
C and C++. Further,the parameter WINHDC was removed from
new_extern_window. Note that this change causes a source-code
incompatibility to previous HALCON versions.
-
paint_gray and overpaint_gray now behave identically to comparable
HALCON operators (e.g., sub_image) if multiobject
or multichannel objects are passed as input parameters. Thus, a loop over all
input objects and channels is now performed in this case. Furthermore, an
error is now returned if two input images have a different number of channels.
-
Now, the database for HALCON objects is switched off by default. This includes
that reset_obj_db does not delete all existing
objects and count_relations does not return the
number of existing objects anymore. To get the former behavior of
reset_obj_db and count_relations, the state of the database
can be switched/queried by the parameter value 'database' of the set_system and get_system
operators.
-
select_shape now can be called with an additional
feature 'area_holes' that computes the area of
the holes of the regions (see also the description of the new operator area_holes).
-
The parameters of set_check now set the context
of the current thread only by default. An exception is the 'memory' parameter,
which can only be set system-wide. The system-wide settings that were
supported so far should be enabled by a 'ref_' prefix of the name of the
corresponding parameter. This will set the context of the current thread as
well as a reference parameter that initializes newly started threads. get_check returns the thread-specific settings as well
as the reference settings.
-
The error code of H_ERR_WRRLN2 has been changed from 3513 ("Internal error:
number of chords too big for num_max") to 3501 ("Number of chords too
big. Increase 'current_runlength_number' using set_system!"), because the error code 3513 is already
used for the error code of H_ERR_WRRLN3. Applications using the constant
H_ERR_WRRLN2 should be rebuilt.
-
The shape-based matching now finds the perfect
match in the model image independent of the selected range of rotations and
scales. For this, create_*shape_model* adapts the given range of rotations and
scales slightly. Note that this may lead to slight changes of the matching
results with respect to earlier versions.
-
smooth_funct_1d_mean now increments the value of
SmoothSize if an even value is provided. This way the center of the filter mask
is always explicitly determined.
-
stationary_camera_self_calibration now supports
the determination of the radial distortion coefficient Kappa for varying camera
parameters.
-
trans_from_rgb now uses the formula given in
ITU-R BT.470-6 (Conventional Television Systems) for the 'yiq' transformation.
Thus, the transformation matrix is now:
|Y| | | |0.299 0.587 0.114| | | |R| |
|I| | = | |0.599 -0.276 -0.324| | * | |G| |
|Q| | | |0.214 -0.522 0.309| | | |B| |
Consequently, trans_to_rgb now uses
the appropriate reverse transformation with the following transformation
matrix:
|R| | | |1.0 0.947 0.624| | | |Y| |
|G| | = | |1.0 -0.267 -0.650| | * | |I| |
|B| | | |1.0 -1.109 1.709| | | |Q| |
-
The HALCON operator tuple_pow now always returns
real values, even if both input values are integer.
-
The HALCON operator tuple_select_range now
returns an empty tuple if (right_index = left_index-1) and at least one index
is valid.
-
Bug Fixes:
-
The automatic parallelization of operators on
channel or domain level had a memory leak if the operator returns with an
error. This problem has been fixed.
-
Several operators had memory leaks in very rare cases if they returned an
error. The relevant operators are:
-
anisotrope_diff,
-
sqrt_image,
-
abs_image,
-
abs_diff_image,
-
add_image,
-
div_image,
-
invert_image,
-
max_image,
-
min_image,
-
mult_image,
-
scale_image,
-
scale_image_max,
-
sub_image,
-
binomial_filter,
-
bit_and,
-
bit_lshift,
-
bit_mask,
-
bit_not,
-
bit_or,
-
bit_rshift,
-
bit_slice,
-
bit_xor,
-
cfa_to_rgb,
-
crop_domain,
-
crop_rectangle1,
-
crop_part,
-
change_format,
-
channels_to_image,
-
laplace_of_gauss,
-
derivate_gauss,
-
convol_image,
-
dual_rank,
-
median_image,
-
median_separate,
-
midrange_image,
-
rank_image,
-
trimmed_mean,
-
gray_skeleton,
-
histo_2dim,
-
equ_histo_image,
-
region_to_label,
-
region_to_bin,
-
gen_image_proto,
-
paint_gray,
-
paint_region,
-
paint_xld,
-
region_to_mean,
-
texture_laws,
-
exhaustive_match,
-
exhaustive_match_mg,
-
image_to_world_plane,
-
map_image,
-
highpass_image,
-
illuminate,
-
emphasize,
-
mean_image,
-
sigma_image,
-
fill_interlace,
-
mean_n,
-
eliminate_sp,
-
mean_sp,
-
gray_dilation_rect,
-
gray_erosion_rect,
-
gray_opening_rect,
-
gray_closing_rect,
-
gray_range_rect,
-
lut_trans,
-
monotony,
-
bandpass_image,
-
add_noise_distribution,
-
add_noise_white,
-
anisotropic_diffusion,
-
isotropic_diffusion,
-
coherence_enhancing_diff,
-
mean_curvature_flow,
-
shock_filter,
-
optical_flow_mg,
-
vector_field_length,
-
unwarp_image_vector_field,
-
polar_trans_image,
-
polar_trans_image_ext,
-
polar_trans_image_inv,
-
principal_comp,
-
linear_trans_color,
-
projective_trans_image,
-
projective_trans_image_size,
-
gen_projective_mosaic,
-
gen_gauss_pyramid,
-
change_radial_distortion_image,
-
rank_n,
-
laplace,
-
harmonic_interpolation,
-
inpainting_aniso,
-
inpainting_ced,
-
inpainting_mcf,
-
complex_to_real,
-
real_to_complex,
-
vector_field_to_real,
-
depth_from_focus,
-
select_grayvalues_from_channels,
-
diff_of_gauss,
-
prewitt_dir,
-
frei_dir,
-
kirsch_dir,
-
robinson_dir,
-
prewitt_amp,
-
frei_amp,
-
kirsch_amp,
-
robinson_amp,
-
expand_domain_gray,
-
energy_gabor,
-
power_byte,
-
power_real,
-
power_ln,
-
phase_rad,
-
phase_deg,
-
fft_generic,
-
fft_image,
-
fft_image_inv,
-
rft_generic,
-
convol_gabor,
-
convol_fft,
-
gauss_image,
-
gray_opening_shape,
-
gray_closing_shape,
-
gen_cooc_matrix,
-
gray_erosion,
-
gray_dilation,
-
gray_open,
-
gray_close,
-
gray_tophat,
-
gray_bothat,
-
copy_image,
-
affine_trans_image,
-
affine_trans_image_size,
-
symmetry.
This problem has been fixed.
-
area_center_gray, select_gray, and elliptic_axis_gray crashed with regions exceeding the
dimensions of the input image. This problem has been fixed.
-
boundary crashed in rare cases with BoundaryType
='inner_filled'. This problem has been fixed.
-
change_radial_distortion_image clipped the input
region to the currently largest image dimensions. Furthermore, this operator
was not thread-safe and may have caused crashes if executed in parallel. These
problems have been fixed.
-
check_difference crashed in rare cases. This
problem has been fixed.
-
check_par_hw_potential crashed in rare cases or
wrote corrupt parallelization information. The same problem applied to the
program hcheck_parallel. This problem has been fixed.
-
class_ndim_norm crashed in rare cases. This
problem has been fixed.
-
The parameter Num of classify_class_svm and classify_class_mlp was erroneously declared as real.
Its type has been changed to integer.
-
clip_contours_xld sometimes returned the error
3254 ("maximum number of contours exceeded") when the input contours were
divided into too many pieces. This problem has been fixed.
-
cooc_feature_matrix and cooc_feature_image were not parallelized correctly on
tuple level. These operators returned the results of the first thread only.
This problem has been fixed.
-
create_component_model crashed in very
rare cases. This might have
happened if at least one region that was passed in ComponentRegions
contained only very noisy image edges. This problem has been fixed.
-
create_lexicon crashed if a parameter of invalid
type was passed as a word list. This problem has been fixed.
-
create_shape_model_3d crashed in rare cases. The
crash occurred only for some combinations of object models, camera parameters,
and pose ranges. This problem has been fixed.
-
crop_domain sometimes crashed. This happened
especially for large images. This problem has been fixed.
-
deviation_image crashed in rare cases if the mask
dimensions exceeded the image dimensions. This problem has been fixed.
-
disp_circle crashed if the input radius value was
negative. This problem has been fixed.
-
The parameter Num of do_ocr_single_class_svm and
do_ocr_single_class_mlp was erroneously declared
as real. Its type has been changed to integer.
-
drag_region1, drag_region2, and drag_region3 ignored the system variable 'clip_region',
i.e., the preview displayed while dragging was clipped independent of the value
of 'clip_region'. This problem has been fixed.
-
draw_nurbs and draw_nurbs_mod returned a Weights vector for closed
curves that could not be used with gen_contour_nurbs_xld. This problem has been fixed.
-
draw_region and draw_polygon terminated as soon as the right mouse
button was pressed. All other draw operaters (e.g., draw_rectangle1) did not terminate until the right mouse
button has been released. This problem has been fixed.
-
edges_color_sub_pix set the 'edge_direction'
attribute of the returned edge XLDs incorrectly. This problem has been fixed.
-
edges_sub_pix does not support processing of
image tuples and therefore cannot be parallelized on tuple level anymore.
-
eliminate_min_max sometimes returned wrong
results, especially at the border of a reduced domain. When parallelized on
domain level, erroneous pixels could have also occured in the middle of the
domain. This problem has been fixed.
-
fill_interlace did not parallelize correctly for
Mode = 'rmodd' or Mode = 'rmeven'. In this case, the domain of the output image
was too large. This problem has been fixed.
-
find_1d_bar_code_scanline and get_1d_bar_code_scanline sometimes returned the
unexpected error 7002 ("Wrong type: output control parameter"). This problem
has been fixed.
-
find_bar_code sometimes hung while reading a
'RSS Expanded' symbol if the scanning was failing to fetch the elements of the
last data character. This problem has been fixed.
-
find_bar_code crashed if any of the image
dimensions was smaller than 2 times 'element_size_max'. This problem has been
fixed.
-
find_bar_code sometimes crashed while reading
RSS-14 Stacked code symbols positioned close to the image border. This problem
has been fixed.
-
find_bar_code sometimes returned the error 3513
("Internal error: number of chords too big for num_max") with very small
images. This problem has been fixed.
-
find_data_code_2d in rare cases returned the
error 6041 ("System parameter for memory-allocation inconsistent") for PDF417
codes that were not completely inside the image. This problem has been fixed.
-
The ECC200 Datacode reader in rare cases returned
different results if called multiple times. This problem has been fixed.
-
The ECC200 Datacode reader in rare cases could not
decode the symbol although the symbol candidate was correctly found in the
image and the modules within the symbol were correctly classified. In such
cases, the candidate status that can be queried with get_data_code_2d_results in most cases returned
'decoding failed: inconsistent data'. This problem has been fixed.
-
HALCON sometimes crashed when assessing the print quality of a
'Model 1' QR Code. This problem has been fixed.
-
Owing to some errors in the description table that stored the data and error
block sizes, the QR Code reader failed to decode
symbols of the following versions:
-
version 33 (size: 149x149), error correction level: L
-
version 33 (size: 149x149), error correction level: Q
-
version 34 (size: 153x153), error correction level: M
-
version 36 (size: 161x161), error correction level: M
Even with a perfect classification the reader returned the status
message "error correction failed" for these symbols. This problem
has been fixed.
-
find_marks_and_pose returned the error 6041 ("No
memory block allocated at last") in very rare cases. This problem has been
fixed.
-
find_shape_model returned imprecise results if
the model was generated with Optimization set to 'pregeneration' and the search
was performed with SubPixel set to 'none'. This problem has been fixed.
-
find_shape_model, all variants thereof,
find_component_model, and find_ncc_model
returned the error 6002 ("Memory partition on heap has been overwritten") for
input images with a very small width or height.
In particular, this was the case if the width or the height of the
input image was less than 2 on the highest pyramid level. This
problem has been fixed.
-
find_shape_model_3d sometimes returned poses that
were shifted in the image with respect to the true pose. This happened if the
radial distortion kappa that is passed to create_shape_model_3d in the parameter CamParam was
exactly 0.0 and additionally the scale factors sx and sy that are also passed
in the parameter CamParam significantly differed from each other. This problem
has been fixed.
-
fit_surface_first_order and fit_surface_second_order were not parallelized
correctly on tuple level. These operators returned the results of the first
thread only. This problem has been fixed.
-
gauss_image sometimes returned erroneous results
or even crashed. This happened if the width or height of the input images was
smaller than half the size of the filter mask. Now, if the image is too small
for the chosen filter size, the error 3035 ("Filter is too big") is returned.
-
gen_caltab and create_caltab created PostScript files that could not
be read correctly by some PostScript viewers. In such cases, the error "DSC
Error %%Pages: doesn't match number of %%Page:" might appear. This problem has
been fixed.
-
gen_cooc_matrix crashed if the input region
exceeded the domain of the input image. This problem has been fixed.
-
gen_cooc_matrix did not parallelize correctly on
tuple level. Single image matrices of the tuple result might have been
overwritten. This problem has been fixed.
-
gen_ellipse_contour_xld hung for very large input
angle values (Phi, StartPhi, and EndPhi). This problem has been fixed.
-
gen_gauss_filter created filters that were rotated
by 90 degrees with respect to the angle specified in Phi. This effect could
only be noticed if Sigma1 != Sigma2. This problem has been fixed.
-
gen_parallels_xld returned the parallels in
arbitray order. If the two operators gen_polygons_xld and gen_parallels_xld were
called alternately, the order of the resulting parallels varied. This problem
has been fixed.
-
gen_random_regions returned wrong results for
region type rectangle1. If WidthMax was set to WidthMin and/or HeightMax was
set to HeightMin, the resulting regions were one pixel too wide/high.
Furthermore, the values for width and height were interchanged. These problems
have been fixed.
-
get_bar_code_object with argument 'scanlines_all'
or 'scanlines_valid' could have crashed, if the bar code image on which the
last find_bar_code was executed was no longer
available. A new bar code model parameter 'persistence' was introduced to
resolve this problem. Now, to obtain scanlines, 'persistence' must be set to 1
before calling find_bar_code. This can be done while creating the
model with create_bar_code_model or later with
set_bar_code_param.
-
The HALCON operator get_param_num crashed, if the
passed operator name string was longer than 80 characters. In the case of
HALCON version 7.1 this problem could also lead to a crash of HDevelop, when
entering a string of more than 80 characters into the comboboxes of the Find
Operator or Operator/Procedure dialogs. These problems have been fixed.
-
Passing an open XLD contour as an input object to get_rectangle_pose sometimes caused a crash. This
problem has been fixed.
-
get_region_thickness returned different results
for shifted regions. This problem has been fixed.
-
The parameter FileName in gnuplot_open_file
is now of the correct type filename.write instead of type filename.read.
-
gnuplot_plot_ctrl, gnuplot_plot_funct_1d, and gnuplot_plot_image crashed if they wrote to a file that
has already been closed. Now, the HALCON error 5241 ("Not a valid gnuplot
output stream") is returned in these cases.
-
gray_erosion_rect, gray_dilation_rect, gray_opening_rect, and gray_closing_rect handled even mask dimensions
incorrectly. Instead of the next larger value, the next smaller value was
used. This problem has been fixed.
-
gray_erosion_shape, gray_dilation_shape, gray_opening_shape, and gray_closing_shape led to memory access violation in
rare cases. This was only the case if the width of the input image was smaller
than 8 pixels and if MMX processing was enabled (which is the default). This
problem has been fixed.
-
gray_erosion_shape, gray_dilation_shape, gray_opening_shape, and gray_closing_shape returned the error 9020 ("Internal
Error: Unknown value") with uint2 images in rare cases. This was only the case
if at least one of the Parameters MaskHeight and MaskWidth was not an integer
and if MMX processing was enabled with set_system('mmx_enable','true') (which is the default). This
problem has been fixed.
-
gray_erosion_shape, gray_dilation_shape, gray_opening_shape, and gray_closing_shape in rare cases returned wrong results
if parallelized on domain level. This problem has been fixed.
-
gray_erosion_shape, gray_dilation_shape, gray_opening_shape, and gray_closing_shape did not parallelize correctly for
mask sizes of type float. This problem has been fixed.
-
gray_inside hung in rare
cases. This problem has been fixed.
-
illuminate returned wrong results when
parallelized on domain level for all image types except of 'byte'. Now, it is
automatically parallelized on internal data level instead of domain level.
-
'info_framegrabber(...,'generic',...)' always
returned the error 1302 ("Wrong value of control parameter: 2") instead of
calling the corresponding query in the specific image acquisition interface.
This problem has been fixed.
-
inner_rectangle1 returned wrong results for
certain regions. Regions with at least two runs and a largest inner rectangle
of area 1 were affected. This problem has been fixed.
-
inpainting_ct returned incorrect results for
uint2 images. This problem has been fixed.
-
list_files returned the error 6041 ("No memory
block allocated at last") if the option 'recursive' was set and if a
subdirectory of the search directory was not readable.
-
local_min and local_max crashed with images of width or height 1 in
rare cases. This problem has been fixed.
-
mean_image crashed with 'real' images if border
treatment had to be applied to the whole image domain. This problem has been
fixed.
-
mean_image returned wrong results for byte images
and mask sizes greater than 16 MPixels. This problem has been fixed.
-
median_image returned wrong results at the image
border if parallelized on domain level in rare cases. This only applied to the
rectangular filter of size 1 and 2 and if MMX was enabled (which is the
default). This problem has been fixed.
-
mirror_image did not mirror the region for Mode =
'main'. This problem has been fixed.
-
read_fft_optimization_data returned the error
3652 ("Optimization data was created with a different HALCON version (Standard
HALCON / Parallel HALCON)") in Parallel HALCON if an optimization file written
by Parallel HALCON was read. This problem has been fixed.
-
read_image did not read some XWD files correctly. This problem has
been fixed.
-
read_string crashed with some fonts set by set_font on Unix systems. Now, the error 5177 ("Font
not allowed for this operation") is returned in these cases.
-
rectangle1_domain crashed if the input parameter
Row1 was larger than the image height and/or the input parameter Column1 was
larger than the image width. This problem has been fixed.
-
regiongrowing in very rare cases returned the
error 3513 ("Internal error: number of chords too big for num_max") if the
domain of the input image was reduced. This problem has been fixed.
-
regiongrowing_mean returned incorrect
results for uint2 images.
In rare cases, regiongrowing_mean even crashed.
This problem has been fixed.
-
reset_obj_db had a memory leak of 200 bytes per
call. This problem has been fixed.
-
set_color was very slow if used remote on recent
X servers. The HDevelop operator dev_set_color
was affected as well. This problem has been fixed.
Additionally,
the colors associated to the names used in set_color were inconsistent with the colors X11
associates to these names. The shades of most colors were slightly
different. This problem has been fixed.
-
set_font overwrote the paint mode of the window if the font string
was longer than 30 characters. This problem has been fixed.
-
If the parameter Mode of set_insert is set to a
value different from 'copy', a call of clear_window now behaves as expected and clears the
window.
-
set_paint and dev_set_paint returned no error if Mode had an invalid
value. This problem has been fixed.
Additionally,
the operators set_paint and dev_set_paint returned no or a wrong error message if
Mode had an invalid value. This problem has been fixed by changing the error
message.
-
set_tshape returned an incorrect error
description. This problem has been fixed by changing the error description for
the operators set_tshape and set_mshape.
-
set_window_attr now returns an error if invalid colors are passed as
'background_color' or 'border_color'.
-
sobel_amp, sobel_dir, and power_byte
sometimes returned incorrect results in their first call in Parallel HALCON.
sobel_amp and sobel_dir were only affected if 'sum_sqrt' was
used as FilterType. This problem has been fixed.
-
sobel_amp returned incorrect results for pixels
at the border of a reduced domain for the filter types 'thin_sum_abs' and
'thin_max_abs'. When parallelized on domain level, erroneous pixels could have
also occured in the middle of the domain. This problem has been fixed.
-
stationary_camera_self_calibration may have not
terminated if an element of NumCorrespondences was larger than 32767. This
problem has been fixed.
-
store_par_knowledge and load_par_knowledge in rare cases returned the
errors 1201 or 1401 ("wrong type/number of control parameter 1"),
although the parameter was passed correctly. This problem has been
fixed.
-
test_self_intersection_xld sometimes returned the error 6041 ("No memory
block allocated at last"). This problem has been fixed.
-
text_line_orientation sometimes crashed. This
problem has been fixed.
-
thickening_seq returned the error 6041 ('No
memory block allocated at last') in very rare cases. This problem has been
fixed.
-
train_model_components and create_component_model returned the error 6002 ("Memory
partition on heap has been overwritten") if one of the input regions passed in
InitialComponents or ComponentRegions, respectively, was lying completely
outside the ModelImage or if one of the input regions was an empty region.
This problem has been fixed.
-
tuple_remove had a memory leak if all elements of
a tuple were removed and thus an empty tuple was returned. This problem has
been fixed.
-
Calling tuple_str_last_n with
an invalid index in rare cases led to a crash. This problem has been fixed.
-
tuple_string crashed if
the second input control parameter contained an empty tuple. Furthermore,
tuple_string did not return an error if the parameter contained a
tuple with more than one element, which is incorrect. These problems have been
fixed.
Additionally,
tuple_string crashed in rare cases if it was
called with invalid patterns. The same applied to the C++ methods
HTuple::ToString(const char*) and HTuple::ToString(const Halcon::HTuple&). This
problem has been fixed. As a consequence tuple_string now only allows
patterns that are conform with the documentation of tuple_string.
-
tuple_strrstr crashed on 64 bit systems if the
string length of tuple T1 was smaller than the string length of tuple T2. This
problem has been fixed.
-
union_straight_contours_xld erroneously returned
the error 3257 ("Regression parameters of contours not yet entered!") even if
regress_contours_xld was called before. This
happened if one of the contours consisted of only one point with the
coordinates (0,0) or if there were multiple identical contours that consisted
of only one point. This problem has been fixed.
-
unwarp_image_vector_field did not parallelize
correctly on domain level. This problem has been fixed.
-
write_data_code_2d_model did not write the
contrast training state of PDF417 symbologies. Consequently, the training of
the contrast was wrongly reinitialized after reading the 2d data code from
disk. This problem has been fixed.
-
write_image ignored the value of the parameter
FillColor if Format was set to 'ima'. This problem has been fixed.
-
write_image crashed if images with more than 8192
lines were written in JPEG2000 format. This problem has been fixed.
-
write_variation_model wrote corrupt data for
files larger than 64 MB (Windows 32-bit) and for files larger than 32 MB (Windows
64-bit). This problem has been fixed.
-
Functionality:
-
HALCON has been extended with a large amount of new source code
modules and classes (so-called HALCON Codelets) that can be used
outside the development environment HDevelop. Many of these modules
as well as corresponding example applications can be used as templates
for new applications or directly called within newly developed code.
In particular, HALCON Codelets help you to integrate the basic
features of window handling into your application using HALCON.
-
Bug Fixes:
-
The HALCON/C include file HProto.h now contains
the actual parameter names of the operators instead of non-descriptive names
like InpObj1 and OutpCtrl2.
-
If an operator was called using a single API
variant in C or C++ and returned an empty tuple for single parameters,
the application crashed. This problem has been fixed (the operator will now
return with an error).
-
Bug Fixes:
-
Some member functions of HALCON/C++ tool classes
were not marked as const although they did not modify the object state. This
problem has been fixed.
-
The HALCON/C++ include file HCPPGlobal.h now
contains the actual parameter names of the operators instead of only their
type.
-
HALCON/C++ applications compiled with Visual Studio 2003
or higher caused the warning C4100 when using warning level 4. This
problem has been fixed.
Compatibility note: The enum HBaseArrayMode
as well as the corresponding constructors of HBaseArray, HObjectArray and
HXldArray have been removed from the HALCON/C++ interface.
-
The object-oriented API of HALCON/C++
has been improved:
Parameters and return values representing tool classes now use the
actual class type instead of untyped handles. For example, the model
parameter of HImage::FindShapeModel is no longer of type HTuple, but
of type HShapeModel. This change breaks source-code compatibility
for existing applications.
Furthermore, the tool classes now use reference counting to manage the
underlying handle, which means that it is possible now to copy tool
classes and use them as return values.
Finally, the capitalization of the following header files has been
changed to match the name of the actual class: HOCRMlp.h, HOCRSvm.h,
HClassSvm.h, HClassMlp.h, HClassGmm.h. Because these header files are
usually included indirectly via HalconCpp.h by applications, this
change should be transparent even on Unix systems.
-
Explicitly closing a window via
HWindow::CloseWindow caused an error when the instance was finally destroyed.
This problem has been fixed.
-
It was possible for HALCON/C++ to crash under low memory
conditions when the memory error occured within a class member function
and not within an actual operator call. The result was an access violation
under Windows and an unhandled std::bad_alloc under Unix. This problem has
been fixed. In such cases, HALCON/C++ will now raise an HException.
-
When a NULL pointer was passed to an output control parameter of an operator
via HALCON/C++, any errors which occured during the execution of the operator
were ignored. In particular, this case occured when exporting C++ code from HDevelop
for operators using the built-in variable "_" for output. This problem
has been fixed.
-
The HALCON/C++ member function HTuple::Split()
returned erroneous results in most cases if the HTuple instance contained more
than one string element. This problem has been fixed.
-
If an operator was called using a single API
variant in C or C++ and returned an empty tuple for single parameters,
the application crashed. This problem has been fixed. The operator now will
return with an error.
-
Examples:
-
There are new VS 2005 projects for HALCON's C++ examples. In
order to provide the new project files along with the old ones,
the following modifications were performed:
In both /examples/cpp and /examples/hdevengine/cpp directories:
-
The 'win' sub-directory was renamed to 'vs6'.
-
New VS 2005 project files are provided in a new 'vs2005' sub-directory.
In each of the directories /examples/mfc/FGMultiThreading,
/examples/mfc/Matching, /examples/mfc/MatchingCOM,
/examples/mfc/MatchingExtWin, and /examples/mfc/MultiThreading:
-
All source, header, and resource files were moved to a new
'source' sub-directory.
-
All VS 6.0 project files were moved to a new 'vs6' sub-directory.
-
New VS 2005 project files are provided in a new 'vs2005' sub-directory.
-
Bug Fixes:
-
The semantic type feature_set is now represented
by the new class HFeatureSet in HALCON/.NET. This change breaks source-code
compatibility for HClassBox.LearnSampsetBox and HClassBox.TestSampsetBox.
-
Resizing HWindowControl caused flickering output
even with "flush_graphic" disabled under Windows. This problem has been fixed.
-
For some tool classes, the resources allocated for
the first instance of that type were never released. The memory leak was
non-growing and therefore uncritical. However, freeing other resources such as
for HSerial and HSocket was only possible via HOperatorSet. This problem has
been fixed.
-
Accessing mixed tuples with inexact but castable
types (such as t[1].L when the element at index 1 actually contained an
int) caused an InvalidCastException. This problem has been fixed.
-
If an operator was called using a single API
variant in COM or .NET and returned an empty tuple for single
parameters, an adhoc value was returned. Now, an error will be returned
instead. The new behavior is consistent across all language interfaces.
-
GetCirclePose did not work properly via
HALCON/.NET. This problem has been fixed.
-
The object oriented variant of adjust_mosaic_images in HALCON/.NET and HALCON/COM now
supports the full functionality of the operator.
Attention: Since
this change affects the signature of this operator in HALCON/COM and
HALCON/.NET, it is not source-code compatible to previous HALCON versions if
the object-oriented variant is used.
-
Bug Fixes:
-
The HALCON/COM interface has been
thoroughly revised. Most notably,
HALCON/COM now supports extension packages and the size of the
halconx.dll has been reduced by a factor of three. Source-code
compatibility is mostly preserved with the following exceptions:
-
The class HHistogramX has been removed
-
HFramegrabberX and HWindowX no longer have special properties
-
The new class HXLDX is used as output parameter for some generic XLD operators
that formerly returned HUntypedObjectX even in the object-oriented API, such as
SelectShapeXld, ShapeTransXld, and ReceiveXld.
- The class names HFunction1DX, HHomMat2DX and HHomMat3DX now use a
capital "D" for consistency with other class names, which requires adaption in
case-sensitive languages like C#. The same holds for the changed capitalization
of HNCCModelX, HOCVX, HOCRBoxX, HOCRMlpX and HOCRSvmX.
Furthermore, the behavior of the "Cast" method of iconic objects has
been changed: The operation now creates a new object reference in the
HALCON data base and the input object is no longer destroyed, but
remains valid.
-
The class members GetDataCode2DObjects and
GetBarCode2DObjects of HDataCode2DX and HBarCode2DX had output parameters
with broken signatures. This problem has been fixed.
-
If an operator was called using a single API
variant in COM or .NET and returned an empty tuple for single
parameters, an adhoc value was returned. Now, an error will be returned
instead. The new behavior is consistent across all language interfaces.
-
The object oriented variant of adjust_mosaic_images in HALCON/.NET and HALCON/COM now
supports the full functionality of the operator.
Attention: Since
this change affects the signature of this operator in HALCON/COM and
HALCON/.NET, it is not source code compatible to previous HALCON versions if
the object-oriented variant is used.
-
Speed-Up and Enhancements:
-
The HDevEngine classes have been redesigned in
order to better match the different aspects and tasks of the HDevEngine. The
new HDevEngine interface consists of the following classes with their specific
tasks:
-
HDevEngine - interface to global settings: external procedure paths and dev_*
operator implementation.
-
HDevProgram - loading a program and providing access
to the static structure of the program (variable names).
-
HDevProgramCall -
allows the execution of a program and afterwards access to the variable values:
it is possible to create several HDevProgramCalls for one program at the same
time and execute them in parallel.
-
HDevProcedure - loading a local or external
procedure and providing access to the static structure of the procedure
(parameter numbers and names, short description).
-
HDevProcedureCall - allows to set the input parameters of a
procedure, to execute it, and afterwards to access the output
parameters: it is possible to create several HDevProcedureCalls
for one procedure at the same time and to execute them in parallel.
-
HDevEngineException - exception data object that is thrown if an
error or exception occurs.
-
HDevOperatorImplCpp - Base class for implementing a user defined
implementation of the dev_* operators.
The key benefits of the new HDevEngine are:
-
The provided interface classes offer a better match for the
different aspects of the HDevEngine: one class is responsible for
one particular task.
-
They support to use the HDevEngine in a multithreaded application
by separating the loading of a program or procedure from its
execution as well as by supporting execution of several programs
and procedures in parallel.
-
The HDevEngine class allows to reset the external procedure paths
(until now it was only possible to extend the list of external
procedure paths).
-
HDevEngine/C++ uses the HALCON/C++ interface instead of the HALCON/C interface.
For compatibility reasons, the old HDevEngine interface is still
supported, but it will be legacy in the next version after
HALCON 9.0. Therefore, all applications that use the HDevEngine and
that want to be prepared to upgrade to future HALCON versions should
be adapted to use the new HDevEngine.
There are some changes in the file set that come along with the
redesign of the HDevEngine:
-
Header file that must be included for HDevEngine/C++:
-
8.0: $HALCONROOT/include/hdevengine/HDevEngine.h
-
9.0: new interface: $HALCONROOT/include/hdevengine/HDevEngineCpp.h
old interface: $HALCONROOT/include/hdevengine/HDevEngine8.h
-
HDevEngine/C++ libraries (Windows):
-
8.0: hdevengine.lib, hdevengine.dll
-
9.0: new interface: hdevenginecpp.lib, hdevenginecpp.dll
old interface: hdevengine8.lib, hdevengine8.dll
-
HDevEngine/C++ libraries (Unix):
-
8.0: libhdevengine.so
-
9.0: new interface: libhdevenginecpp.so
old interface: libhdevengine8.so
-
HDevEngine/.COM libraries (Windows only):
-
8.0: hdevenginex.lib, hdevenginex.dll
-
9.0: new interface: hdevenginex.lib, hdevenginex.dll
old interface: hdevengine8x.lib, hdevengine8x.dll
-
HDevEngine/.NET libraries (Windows and Unix):
-
8.0: hdevenginedotnet.dll
-
9.0: new interface: hdevenginedotnet.dll
old interface: hdevengine8dotnet.dll
The existing examples that demonstrate how to use the HDevEngine have been
adapted to the new interface. In addition, new examples have been added to
demonstrate how to use HDevEngine/C++ in a multithreaded
application. examples/hdevengine/cpp/source/exec_programs_mt.cpp uses the
interface in a console application and
examples/hdevengine/mfc/exec_procedures_mt_mfc is an MFC application.
Detailed information about the HDevEngine can be found in the
Programmer's Guide.
-
Bug Fixes:
-
HDevEngine failed to load a procedure and threw an exception if the procedure
contained invalid or unresolved program lines, no
matter whether the program lines were activated or not. If an activated
program line is invalid, this behavior is intended in order to signal that the
procedure will not work properly. However, if the program line is deactivated,
the procedure should be loaded and executed normally. This problem has been
fixed.
-
The method GetVariableXld of HDevEngine/.NET did
not work. This problem has been fixed.
-
The latest information about new extensions and newly supported
image acquisition devices can be found on MVTec's web
server.
-
New Version of the HALCON
Acquisition Integration Interface:
The HALCON Acquisition Integration Interface has been
upgraded to version 4.0 (INTERFACE_VERSION = 4). It
is not binary compatible to HALCON 8.0.x or lower. All
acquisition interfaces that are compatible with HALCON 9.0 have
a revision number 4.x, with x starting with
0.
Existing interfaces are mostly source-code compatible (see
the Image Acquisition Interface Programmer's Manual for
more information). Applications based on existing interfaces
are also mostly source-code compatible, in particular HDevelop
applications.
HALCON has been extended with the two new operators:
get_framegrabber_callback allows to
register a HALCON-specific callback function for an image acquisition
device. get_framegrabber_callback
queries a callback function. Note that not all image acquisition
interfaces currently support the use of these callbacks.
Please refer to the documentation of your acquisition
interface for more information, especially whether a new
revision of the corresponding device driver is required.
-
New Image Acquisition Interfaces:
-
HALCON now also includes the eneo
interface for remote grabbing from the eneo SC camera series
from Videor Technical under Windows x86.
The new HDevelop example
programs eneo.dev, eneo_parameters.dev, and eneo_simple.dev in the
directory examples/hdevelop/Images/Acquisition show how to use
this interface.
- HALCON now also includes the PixeLINK
interface, which supports the IEEE 1394 (FireWire), USB, and
GigE cameras from PixeLINK.
The new HDevelop example programs
pixelink.dev, pixelink_simple.dev, pixelink_parameters.dev, and
pixelink_2cameras.dev in the directory
examples/hdevelop/Images/Acquisition show how to use this
interface.
-
HALCON now also includes the SonyXCI-2
interface, which supports the new Sony XCI-SX100/C and
XCI-V100/C smart cameras. Thus, in combination with the standard
HALCON installation for Windows x86, HALCON now completely runs on
the Sony XCI-SX100/C and XCI-V100/C smart cameras, see also here.
The new
HDevelop example programs sonyxci2.dev, sonyxci2_simple.dev, and
sonyxci2_parameters.dev in the directory
examples/hdevelop/Images/Acquisition show how to use the new
interface.
-
Modified Image Acquisition Interfaces:
-
Legacy Image Acquisition Interfaces:
-
The following HALCON image acquisition interfaces are now only
available in the Legacy download area:
-
dPict
-
DT315x
-
DT3162
-
FlashBusMV
-
iPORT
The following HALCON image acquisition interfaces are still
available in the Legacy download area:
- BARRACUDA
- DFG-BW
- Ginga
- MatrixVision
-
Installation Guide:
The Installation Guide is available in a new edition. It
has been adapted to the changes in HALCON 9.0.
-
Quick Guide:
The Quick Guide is available in a new edition. It has been
adapted to the changes in HALCON 9.0. In particular, new examples
for the industries 'Packaging' and 'Automobile Parts and
Manufacturers' and for the application area 'Traffic' were added.
-
HDevelop User's Guide:
The HDevelop User's Guide is now available in a new
edition. It has been adapted to the changes in HALCON
9.0, in particular the editor
for full text editing, the Calibration Assistant, and the
documentation of local and external
procedures. Furthermore, a reference documentation for the
Image Acquisition Assistant was added.
-
Solution Guide I (Basics):
The Solution Guide I (Basics) is available in a new
edition.
Additionally, the Solution Guide I now has an index, which
can be accessed also via the tab "Keywords" in
HDevelop.
-
Solution Guide II+III (Advanced):
Because of the increasing size of the Solution Guide II,
it has been split up into two manuals, a Solution Guide II
and a Solution Guide III. It now has the following
structure:
-
Solution Guide II-A on Image Acquisition
-
Solution Guide II-B on Shape-based Matching
-
Solution Guide II-C on 2D Data Codes
-
Solution Guide II-D on Classification
-
Solution Guide III-A on 1D Measuring
-
Solution Guide III-B on 2D Measuring
-
Solution Guide III-C on 3D Vision
The individual Solution Guides are now available in a
new edition. They have been adapted to the changes in HALCON
9.0.
Additionally, all Solution Guides now have an index, which
can be accessed also via the tab
"Keywords" in HDevelop.
-
Solution Guide II-B on Shape-Based Matching:
The Solution Guide II-B on Shape-Based Matching has been
adapted to the extensions for the shape-based matching, in particular,
Additionally, the Solution Guide II-B on Shape-based Matching
has been extended by information about using shape-based
matching in multithreaded applications.
-
Solution Guide II-C on 2D Data Codes:
The Solution Guide II-C on 2D Data Codes has been extended
by detailed information about the evaluation of the print quality for 2D data codes (ECC200
and QR Code) according to the AIM DPM-1-2006 standard.
-
Solution Guide II-D on Classification:
The new Solution Guide II-D on Classification shows how to
classify images or regions with different types of classifiers.
The following new HDevelop example programs have been added in the
directory examples/solution_guide/classification and illustrate
the descriptions:
-
classify_metal_parts.dev
-
classify_metal_parts_ocr.dev
-
train_characters_ocr.dev
-
classify_characters_ocr.dev
-
classify_citrus_fruits.dev
-
segment_citrus_fruits.dev
-
classify_halogen_bulbs.dev
-
visualize_3d_feature_space.dev
The following images have been added in the directory images:
-
color/citrus_fruits_*
-
rings/mixed_*
-
rings/nuts_*
-
rings/retainers_*
-
rings/washers_*
-
halogen_bulb/halogen_bulb_*
-
halogen_bulb/bad/halogen_bulb_bad_*
-
halogen_bulb/good/halogen_bulb_good_*
-
halogen_bulb/none/halogen_bulb_none_01
-
ocr/chars_*
-
ocr/chars_training_*
-
Solution Guide III-C on 3D Vision:
The Solution Guide III-C on 3D Vision (previously 3D Machine
Vision) has been
extended in many ways:
-
Programmer's Guide:
The Programmer's Guide is available in a new edition. It
has been adapted to the changes in HALCON 9.0, in particular the
the introduction of HALCON XL and the revised HDevEngine. Besides the
PDF version, now an HTML version is available.
-
Extension Package Interface Programmer's Manual:
The Extension Package Interface Programmer's Manual is available in a new edition. It
has been adapted to the changes in HALCON 9.0, in particular
the introduction of HALCON XL. Besides
the PDF version, now an HTML version is available.
-
Image Acquisition Interface Programmer's Manual:
The Image Acquisition Interface Programmer's Manual is available in a new edition. It
has been adapted to the changes in HALCON 9.0. Besides the PDF version, now an HTML version is available.
-
Reference Manual:
-
The Reference Manual entry of check_difference
described the case of identity incorrectly. This problem has been fixed.
-
The Reference Manual entries of create_shape_model_3d and
find_shape_model_3d have been extended. They now emphasize more
explicitly that the pose resulting from find_shape_model_3d refers to
the original 3D object model coordinate system that is used in the
DXF file but not to the reference coordinate system that is
introduced in find_shape_model_3d.
-
The Reference Manual entries of do_ocr_single_class_svm, do_ocr_multi_class_svm, and get_features_ocr_class_svm falsely stated that only
byte images were accepted. In fact, these operators also work with uint2
images. The Reference Manual entries have been adapted accordingly.
-
The Reference Manual entry on find_ncc_model has been extended. It
now explains why instances of the model that lie close to the image
border cannot be found in some cases. It also describes a way how
to deal with this matter.
-
get_data_code_2d_param returns 0 for QR Code models that
can handle models of type 1 and 2 and not 'any' as it was described in
the Reference Manual. The Reference Manual entry was adapted
accordingly.
-
The Reference Manual entry on prepare_direct_variation_model erroneously stated that
multiple images can be passed in RefImage, although actually only a single
image can be passed. The Reference Manual entry has been adapted accordingly.
-
The Reference Manual entry on segment_contours_xld has been extended. It now
explains why contours with less than 6 contour points are not segmented.
-
The Reference Manual entry of connect_grid_points now explicitly
mentions the fact that high values of the input parameter MaxDist
may lead to the loss of connecting
lines.
-
The Reference Manual entry of smooth_funct_1d_mean has been extended to
describe the new behavior when incrementing the value of SmoothSize.
Additionally, the keywords under which the operators can be found in HDevelop's tab "Keywords" and in the PDF version of the
reference manuals have been completely revised.
-
Windows:
HALCON 9.0 has been compiled in three Windows versions:
-
x86-win32 version for Windows NT/2000/XP/2003/Vista on
Intel Pentium or compatible processors without SSE2 instructions
-
x86sse2-win32 version for Windows NT/2000/XP/2003/Vista on
x86 processors with SSE2 extension, e.g.,
Intel Pentium 4 / AMD Athlon64 or newer
-
x64-win64 version for Windows XP/2003/Vista x64 Edition
on Intel EM64T or AMD64
The setup process checks whether it is running on a 32 or 64
bit system and whether SSE2 instructions are available and
provides a suitable list of versions that can be installed.
During the installation, the environment variable
HALCONARCH is set to x86-win32,
x86sse2-win32, or x64-win64 to indicate the
installed version.
Please note that if you want to switch to another version,
you must first install it, e.g., by re-inserting the DVD. Then,
you must adapt the environment variable HALCONARCH
(see the Installation Guide for more information).
-
Linux:
HALCON 9.0 has been compiled in six Linux versions:
-
x86-linux2.4-gcc33 version for Linux, Kernel 2.4 or higher
with Application Binary Interface (ABI) 1 on Intel Pentium or
compatible processors without SSE2 instructions. Note that this
version is only available in the Legacy download area.
-
x86-linux2.4-gcc40 version for Linux, Kernel 2.4 or higher
with ABI 2 on Intel Pentium or compatible processors without
SSE2 instructions
-
x86sse2-linux2.4-gcc33 version for Linux, Kernel 2.4 or
higher with ABI 1 on x86 processors with SSE2 extension, e.g.,
Intel Pentium 4 / AMD Athlon64 or newer. Note that this
version is only available in the Legacy download area.
-
x86sse2-linux2.4-gcc40 version for Linux, Kernel 2.4 or
higher with ABI 2 on x86 processors with SSE2 extension, e.g.,
Intel Pentium 4 / AMD Athlon64 or newer
-
x64-linux2.4-gcc33 version for Linux x86_64, Kernel 2.4 or
higher with ABI 1, on Intel EM64T or AMD64. Note that this
version is only available in the Legacy download area.
-
x64-linux2.4-gcc40 version for Linux x86_64, Kernel 2.4 or
higher with ABI 2, on Intel EM64T or AMD64
Please refer to the Installation Guide for detailed
system requirements corresponding to the different Application
Binary Interfaces.
The installation script checks whether it is running on a
32 or 64 bit system and whether SSE2 instructions are available
and provides a suitable list of versions that can be
installed.
After the installation, please set the environment
variable HALCONARCH to the version name
(x86-linux2.4-gcc33, x86-linux2.4-gcc40,
x86sse2-linux2.4-gcc33, x86sse2-linux2.4-gcc40,
x64-linux2.4-gcc33, x64-linux2.4-gcc40) and
use it to extend the environment variables PATH and
LD_LIBRARY_PATH (see the Installation Guide for more
information).
-
Solaris:
HALCON 9.0 has been compiled for Solaris 9 or higher on
UltraSPARC workstations.
After the installation, please set the environment variable
HALCONARCH to sparc-sun-solaris9 and use it to
extend the environment variables PATH and LD_LIBRARY_PATH (see
the Installation Guide for more information).
-
Installation:
-
The installer was previously based on an outdated version
of InstallShield, because newer versions no longer supported
Windows NT. It has now been completely rewritten based on the
Nullsoft Install System (NSIS). The general behavior of the
installer should be similar to the old installer. However,
the installer now checks online for the availability of
newer maintenance releases and has a more modern and
user-friendly interface.
Additionally, the installer now checks the available disk space.
-
Under Windows, new versions of the dongle drivers are
included: HASP 4.110 and Sentinel 7.5.0.
-
For using the HALCON GigEVision acquisition interface, the installer
automatically installs GenApi version 1.1 in the directory
%HALCONROOT%\genicam and sets the corresponding environment
variable %GENICAM_ROOT_V1_1% appropriately. Furthermore,
the Visual Studio C++ 2005 SP1 Redistributable Runtime Package
for Windows x86 and Windows x64 is included in the installation.
-
The DVD contains the version 2v30 of the FirePackage driver in the
3rdparty, which is necessary to use the IIDC1394
acquisition interface under Windows and Windows x64.
-
Licensing:
HALCON now uses version 11.6 of the FLEXnet Publisher license
manager software.
-
Example Images:
For several of the new HDevelop example
programs, new images are available:
-
The new example images brake_disk_part_* from the new
subdirectory images/brake_disk are used in the example that shows how to apply
the new operators for the creation of shape models using XLD
contours.
-
The new example images images/calib/calib_distorted_* are used in the
example that compares the calibration results using the camera models 'division' and 'polynomial'.
-
The new example images closeup_*, stereo_left_*, and stereo_right_* from the
subdirectory images/metal_cylinders are used in the example that shows a 3D application that combines a stereo setup with 3D
shape-based matching.
-
The new example images blister_* and blister_mixed_* from the subdirectory
images/blister are used in the examples that check
the content of blisters that are filled automatically and manually.
-
The new example images soft_cheese_* from the subdirectory images/food are
used in the example that checks the content of soft
cheese packages.
-
The new example images shampoo_* in the subdirectory images/packaging are used
in the example that inspects shampoo bottles for the correct
positioning of their front labels.
-
The new example images images/bottles/bottle_mouth_* are used in the examples
that deal with the processing steps for returned
empties/crates.
-
The new example image images/infrared/harddisk_temperature.dev is used in the
example that inspects an infrared image of a hard disk for
heat emission.
-
The new example images images/food/hazelnut_wafer_* are used in the example
that applies a quality inspection on hazelnut wavers.
-
The new example images tft_cells_*, lcd_cells_*, mura_defects_blur_*, and
mura_defects_texture_* from the subdirectory images/lcd are used in the
examples that inspect flat panels.
-
The new example images images/pcb_focus/pcb_focus_telecentric_* are used in the
example that examines the deviation of the NCC
matching results for a sequence of images that were acquired with changing
focus.
-
The new example images attention_road_sign.jpg, dead_end_road_sign.jpg, and
street_* from the new subdirectory images/road_signs and the new example images
car_door_* and engine_parts_* in the new subdirectory images/automotive are
used in the examples that show how to apply perspective, deformable matching.
-
The new example images connection_rod_calib_*, caltab_at_position_*,
connection_rod_lightline_*, connection_rod_disparity.tif and connection_rod_*
from the new subdirectory images/sheet_of_light are used in the examples that
show how to measure 3D object surfaces using the new operators for sheet of light.
-
The new example images cookie_box_* from the new subdirectory images/packaging
and the images brochure_* and brochure_page_* in the new subdirectory
images/brochure are used in the examples that show how to apply descriptor-based matching.
-
The new example image pcb_layout is used in the example that shows how to speed-up the operators used for gray-value
morphology.
-
The new example images ecc200_damaged_finder_pattern_* from the subdirectory
images/datacode/ecc200 are used in the example that shows how to read ECC200 symbols with a disturbed or missing
finder pattern.
-
The new example image ean1315 in the subdirectory images/barcode/ean13 and
the new example image rsslimited_composite_02 in the subdirectory
images/barcode/rss_composite are used in the examples that show how to evaluate
the print quality for 1D bar codes according to the
international standard ISO/IEC 15416.
-
The new example images pcb_focus_telecentric_*
from the new subdirectory images/pcb_focus and halogen_bulb_*, halogen_bulb_good_*, and
halogen_bulb_bad_* from the new subdirectory
images/halogen_bulb are used in the examples that show how to apply the increased tolerance mode for shape-based matching.
-
The new example images rssexpanded_code_calibration_* in the subdirectory
barcode/rssexpanded and the new images ecc200_quality_aimdpm_* in the
subdirectory datacode/ecc200 are used in the examples that show how to evaluate the print quality for 2D data codes (ECC200 and
QR Code) according to the AIM DPM-1-2006 standard.
- The new example images in the subdirectory images/wood are used in one of the new
examples for texture analysis.
- The following images have been added to the directory images for the
examples that show how to apply different classification tasks as described in
the new Advanced Solution Guide on Classification:
-
halogen_bulb/halogen_bulb_*
-
halogen_bulb/bad/halogen_bulb_bad_*
-
halogen_bulb/good/halogen_bulb_good_*
-
halogen_bulb/none/halogen_bulb_none_01
|
|