| |
This document provides the release notes for MVTec HALCON 8.0.2, as released in
April 2008. HALCON 8.0.2 is primarily a maintenance release that fixes
all known bugs in HALCON 8.0.1; besides, it provides added functionality
and speed-ups.
Overview
This document contains the following information:
-
Errata Release Notes of HALCON 8.0.2
-
Compatibility
-
Major New Features of HALCON 8.0.2
-
Detailed Description of Changes in HALCON
8.0.2
-
Major New Features of
HALCON 8.0.1
-
Detailed Description
of Changes in HALCON 8.0.1
-
Major New Features of HALCON 8.0
-
Detailed Description of
Changes in HALCON 8.0 (relative to HALCON 7.1.2)
-
Major New Features of
HALCON 7.1
-
Detailed Description of Changes
in HALCON 7.1.2
-
Detailed Description of Changes
in HALCON 7.1.1
-
Detailed Description
of Changes in HALCON 7.1
Accidentally, the
originally released version of HALCON 8.0.2 was not fully binary
compatible with HALCON 8.0 and HALCON 8.0.1 regarding the type of one
parameter in the operators get_bar_code_param, set_bar_code_param, and create_bar_code_model. To solve this problem,
the original version HALCON 8.0.2 was substituted by an updated version
HALCON 8.0.2.1 that is binary compatible with HALCON 8.0 and HALCON
8.0.1 and will also be binary compatible with succeeding maintenance
releases of HALCON 8.0.
Additionally, in the originally released version of HALCON
8.0.2, the error code of H_ERR_WRRLN2 had been changed from
3513 ("Number of chords too big for num_max") to 3501 ("Number
of chords too big"). Furthermore, some operators wrongly
returned the error 3513. These problems have also been solved
in the updated version HALCON 8.0.2.1.
HALCON 8.0.2.1 also fixes the memory
leak in the operator segment_characters
.
If you have already installed HALCON 8.0.2, we
recommend to download the update and install it over the existing
installation. For this purpose, the Windows installer has been adapted
to replace the changed files automatically.
To check which version is currently installed please
open the dialog "Help->About" in HDevelop: The correct
date of version 8.0.2.1 is "08.05.2008". Under Windows, you can also
check the file properties of the files halcon.dll or parhalcon.dll:
The file version has been adapted to 8.0.2.1 instead of 8.0.2.0.
-
Licenses
HALCON 8.0 licenses are also valid for HALCON 8.0.1 and HALCON
8.0.2. In contrast, all HALCON 7.1 licenses must be replaced or
upgraded. Please contact your local distributor.
-
HALCON Library
HALCON 8.0.2 is fully compatible with HALCON 8.0. Compared to HALCON
7.1, many extensions have been introduced. Thus, the HALCON 8.0.2
libraries are not compatible with HALCON 7.1 or earlier versions.
-
HALCON Applications
Applications (i.e., executables) developed with HALCON 8.0 or HALCON
8.0.1 can be used with HALCON 8.0.2, i.e., HALCON 8.0.2 is binary
compatible with HALCON 8.0 and HALCON 8.0.1 (please, see also the errata release notes for further
information).
The incompatibility with HALCON 7.1 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 and for HALCON 8.0 and HALCON 8.0.1, respectively.
Please note that applications using HALCON/.NET (and HDevEngine/.NET)
have local copies of the corresponding assemblies
(halcondotnet.dll etc.). After installing HALCON 8.0.2, these
applications would therefore still use the old HALCON versions. You
must either replace the assemblies manually or re-compile the projects.
-
Image Acquisition Interfaces
If you have developed your own acquisition interfaces with HALCON 8.0
or HALCON 8.0.1, you can use them with HALCON 8.0.2 without further
action. Because of the new version of the
HALCON Acquisition Integration Interface in HALCON 8.0,
acquisition interfaces developed with HALCON 7.1.x or lower are not
binary compatible, but mostly source-code compatible with 8.0.
-
Extension Packages
Extension packages developed with HALCON 8.0 or HALCON 8.0.1 can be
used with HALCON 8.0.1 without further action. Extension packages
developed with HALCON 7.1.x must be re-generated.
-
ActivVisionTools
Only ActivVisionTools 3.2 can be used directly with HALCON 8.0.2
because it is based on HALCON 8.0.2. All
older ActivVisionTools versions are based on HALCON 7.1.1 or
below; by installing HALCON 8.0.2, you would thus disable such an
ActivVisionTools installation. Therefore, the setup program of
HALCON 8.0.2 checks whether there is an ActivVisionTools
installation on your computer.
-
If it detects ActivVisionTools 3.2, no further action is
required, as this version is compatible to HALCON 8.0.2.
-
If it detects ActivVisionTools 3.1 or
ActivVisionTools 3.1.1, please contact your distributor
for further information on how to run this version together
with HALCON 8.0.2.
-
In contrast, ActivVisionTools 1.0 to 3.0 cannot be
used with HALCON 8.0.2. If the setup program detects such an
ActivVisionTools version, it warns you that by continuing to
install HALCON 8.0.2 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
-
Bar code reader:
-
Image Acquisition Interfaces:
HALCON now also includes an universal interface to access all GigE Vision compliant
cameras.
HDevelop
-
Image Acquisition Assistant:
The parameter GUI of the HDevelop
Image Acquisition Assistant has been significantly improved.
-
Supported Languages:
Italian has been added to the list of supported HDevelop GUI languages.
-
Open Example dialog:
The HDevelop Open Example dialog now provides a revised selection of examples in the category
Operator.
-
General Usabilty:
The general usability of
HDevelop has been enhanced in many ways.
Detailed release notes can be obtained for the following topics:
-
HDevelop
-
HALCON Library
-
HALCON/C
-
HALCON/C++
-
HALCON/.NET
-
HDevEngine
-
Extension Package Interface
-
Image Acquisition Interfaces
-
Miscellaneous
-
Speed-Up and Enhancements:
-
The HDevelop Open
Example dialog now shows HDevelop examples for each
operator as long as at least one suitable example is
available. For operators that are used in a large amount of
examples, a selection of relevant examples is displayed.
-
The HDevelop Help now supplies the
possibility to print the shown help file or a part of it.
-
Within the Graphics Window, it is
now possible to display the current pixel position as well as the
gray value(s) as a tool tip directly next to the mouse cursor.
This mode is activated by holding the Ctrl key pressed and left
by releasing the key. This mode is not available if the Graphics
Window is in the Zoom mode.
-
The parameter GUI of the Image Acquisition
Assistant has been significantly improved. For most
acquisition interfaces, more sliders, value lists and parameter
tooltips are available. Parameters can be sorted alphabetically,
and filtered by logical category or level of expertise when such
information is provided by the acquisition interface. Alternating
background colors improve the readability.
-
Functionality:
-
When exporting the operator read_image to C and C++,
HDevelop no longer automatically exports a special error handling
mechanism.
-
HDevelop's External Procedures tab
of the Preferences dialog now
provides the opportunity to display the listing of a procedure by
a double click.
-
HDevelop's Find/Replace dialog now
allows the selection of more than one result. While the dialog
has the focus (if in MDI mode) the
Cut/Copy/Delete/Activate/Deactivate tool buttons of the main
window now work on the selection in the Find/Replace dialog's
result view. These actions can also be triggered with a new
context menu on the result view. The context menu is also
supported in SDI mode.
-
The list of operators that is displayed in the combo box labeled
'Enter Operator or Procedure' in the Operator Window now starts with the
operators or procedures that begin with the given string,
followed by the operators that contain the string. Both lists are
arranged in alphabetical order.
-
A program line can be selected for being edited in the Operator Window by clicking on that line
in the Program Listing. If the user clicked into the listing
before the operator was re-entered into the program, until now,
the connection between the program line and the Operator Window
was lost and pressing OK or Enter in the Operator Window entered
a new program line with the selected operator into the program at
the current insert position. This behavior was counterintuitive
and sometimes confusing, because new operators could be added to
the listing unintentionally. Therefore the behavior has been
changed in the following way:
-
As long as the program line that was selected for editing exists
(i.e., as long as neither the program line nor the containing
procedure has been deleted), it will be replaced when 'OK' or
'Replace' is pressed within the Operator Window.
-
Which of the two different modes of the Operator Window - editing
and replacing an existing program line or creating and inserting
a new line - is currently active, can easily be recognized both
by the title bar of the Operator Window and by the labels of the
Enter/Replace button: If an existing program line is
edited, the title bar of the Operator Window shows: Edit:
'<operator name>' in procedure '<procedure name>'
line <num> and the 'Enter' button is renamed into
'Replace'. Otherwise the title bar shows: Insert:
'<operator name>' and the Enter button keeps the label
'Enter'.
-
In addition, the program line that is being edited in the
Operator Window is marked in the listing by using a different
font emphasis.
Attention: Pressing the 'Replace' button will replace the
original program line even if a different procedure is displayed
in the Program Listing.
-
If the block begin and end statements of a
loop or conditional block were disabled, e.g., by
selecting them and pressing F4, the indentation of all statements
within this block in relation to the block begin and end
statements were removed. Especially in cases where several
blocks are nested and the outer block as a whole is disabled, the
structure of the code was lost by this behavior because all
operator indentations were reset to the outer block. For keeping
the block structure, the behavior was changed so that the
indentation of all operators is now preserved no matter whether
validly connected block statements are enabled or disabled.
Block statements that are not connected and therefore invalid,
have, as before, no influence on the indentation.
-
The status bar now collects a
history of the latest execution messages and displays them as the
tool tip of the status bar's message area. This is particularly
helpful in the following cases:
-
If the execution of several operators is stopped by a 'stop'
statement, the status bar displays the message: "Automatic
program stop; press Run (F5) to continue". This message hides
another message that displays the number of executed operators,
the execution time, and the name of the operator that was called
most recently.
-
For measuring the execution time of a specific operator, the
operator can be executed for several times, just by placing the
program counter on it and pressing F6 again and again. Afterwards
the status bar history tool tip displays a collection of the
latest execution times of this operator.
-
For comparing the execution time of several operators (e.g.,
for comparing the time consumption of alternative approaches) the
operators can easily be executed one after the other with F6.
Afterwards the status bar history allows to compare the execution
times at a glance.
The history can be copied to the clipboard by an appropriate
entry in the context menu of the status bar.
-
The HDevelop Help window contains on
the left-hand side a tab card that was named 'Index'. On this tab
card, all HALCON operators are listed in alphabetical
order. Because the list is not a general index, this tab card was
renamed into 'Operators'.
-
HDevelop now has new Help menu
entries as shortcuts to the help pages for the HDevelop Language,
the HDevelop Reference and the HALCON Reference.
-
HDevelop now offers a context menu entry 'Sort by Name' and 'Sort
by Occurrence' in the Variable
Window.
-
The Variable Window of HDevelop has
a new tab card 'User' to define your own view of iconic and
control variables. The default view of the user tab card is
empty. Which variables are displayed can be selected via the
context menu of the Variable Window.
-
Within the Variable View, the
context menu of the control variable table offers a new entry for
copying the selected variable values to the global clipboard. If
the Variable View has the keyboard focus, Ctrl-C can be used as
an alternative. Tuples with zero or more than one values are
returned in tuple notation: [.., ..]. If several variables are
selected, the tuples of the different variables are separated by
a new line.
-
The Variable Inspection dialog shows
in the lower part some statistics and meta information about the
values displayed in the upper part of the table. The kind of
information that is displayed can be selected via the context
menu. So far, this context menu could be opened only by clicking
on the left part of the table. This was changed so that now the
context menu can be opened by clicking anywhere in the statistics
table.
-
HDevelop now always opens one Graphics
Window on startup and will not reopen the Help Window even if it was open at the end
of the last HDevelop session.
-
If an image with gray values 128 was displayed in the Graphics
Window and an HALCON draw operator was executed, the cursor was no
longer invisible. The cross cursor has been replaced by a
cursor that is always visible.
-
When loading all images from a directory using the Image Acquisition Assistant, the new
option "recursive" can now be used to load images from
subdirectories as well.
-
Italian has been added to the list of supported HDevelop GUI languages.
-
Bug Fixes:
-
Sometimes the text in the HDevelop popup
window had too many word wraps. This problem has been
fixed. Now, the text in the HDevelop Demo popup window is
correctly displayed.
-
HDevelop crashed if New Program was
selected from the menu or tool bar and at the same time no
Operator Window was open. This problem has been fixed.
-
HDevelop crashed if an error variable that was created by
dev_error_var was removed from the procedure by Cleanup and afterwards any operator was
executed. This problem has been fixed.
-
HDevelop exported for loop
statements incorrectly to C++ if the loop variable was an
output control parameter (of the procedure containing the for
loop statement) and the increment value for the loop variable
(step) was not a constant. This problem has been fixed.
-
The Visualization menu that can be
opened via the main menu or as the context menu of the Graphics
window has a submenu for setting the paint mode that is used for
displaying images in the Graphics window. In contrast to the
Visualization Parameters dialog, using this submenu for setting
the paint mode, e.g., to '3D-plot', did not work. This problem
has been fixed.
-
HDevelop crashed if after inserting a program at the end of the
current HDevelop program by 'File - Insert
Program - Insert All' and removing it with 'Undo'
(Ctrl-Z), again a program was inserted into the program. This
problem has been fixed.
-
The Preferences dialog contains
a spin box 'Indent' under 'User Interface/Program Listing' for
changing the indentation of loop bodies in the program listing.
However, changing the value had no effect on the procedures that
had already been displayed until the program was reloaded or
HDevelop was closed and started again. This problem has been
fixed.
-
HDevelop deleted all parameters from the Procedure Interface dialog if the Reset
button was clicked twice. This problem has been fixed.
-
Using HDevelop's Procedure Interface
dialog may have lead to unusable procedures if text
containing newlines was pasted into the Short Description or the
Chapter of the procedure interface. This problem has been fixed.
-
HDevelop crashed if the appropriate procedure path was removed from the list
of managed external procedure paths after making a local
procedure external. This problem has been fixed.
-
HDevelop did not propagate changes in the chapter entries of procedures to the menu
hierarchy and allowed more than one sub-chapter hierarchy. These
problems have been fixed.
-
If an external procedure file with a
corrupt interface description was referenced by the external
procedure path, HDevelop crashed when HDevelop tried to load the
procedure. This problem has been fixed.
-
HDevelop's Histogram dialogs ignored
the new lower display limit when zooming with the mouse. This
problem has been fixed.
-
HDevelop's Feature Histogram was
empty on reopening. This problem has been fixed.
-
When a feature was selected that is not supported (e.g.,
gray_anisotropy when the input image is of type int2)
the Feature Histogram displayed an
incorrect histogram, and error messages were displayed when low
level errors are enabled. These problems have been fixed. Now,
the Histogram dialog displays a well-defined (i.e., empty)
histogram, and the low level error messages are
blocked. Furthermore, an appropriate error message is displayed
in the histogram's plot area.
-
HDevelop's Gray Histogram sometimes
displayed int2 images incorrectly. This problem has been fixed.
-
If in the Operator Window an
operator is selected for entering it into the program, the combo
boxes of the parameter edit fields display a list of appropriate
variables. Here the following error occurred: If the semantic
type of a parameter was not 'any', e.g., 'numeric' or 'string',
variables with a semantic type of 'attribute' or 'pose' were not
suggested in that variable/value list. The problem has been
fixed. This error did not occur if under 'Preferences->General
Options->Experienced User' the option 'Ignore semantic type' was
checked.
-
HDevelop froze if in the Operator
Window a HALCON operator was selected, parameterized, and
then - by keeping the Enter key pressed - continuously entered
into the program and executed. This problem has been fixed.
-
If an operator was executed by clicking the Apply button in
the Operator Window, the information
that was displayed in the status bar was often wrong:
-
Instead of the name of the applied operator the name of the
operator that was executed before via a normal execution action
was displayed.
-
Messages like 'No more lines to execute...', 'Executed n program
lines in...', or 'Automatic program stop...' remained
visible.
-
In some rare cases the execution time was wrong.
These problems have been fixed.
-
The output control parameters of procedures were not suggested in
the Operator Window as input
parameters of subsequent operators. This error occurred only if
the experienced user preference 'Ignore semantic type' was
unchecked (default). This problem has been fixed.
-
In old HDevelop programs (8.0 and earlier), reserved identifiers (like 'continue')
could be used as variable names. If such a program was loaded
into HDevelop 8.0.1, these variables were renamed by adding
_AUTO_RENAME_ as a prefix. However, for input control variables
the renaming did not work properly: Although the variable names
were replaced in the listing, a variable with the old, reserved
name was still referenced by some operators. This produced an
error during program execution. This problem has been fixed.
-
The list of suggested values for the parameter 'Mode' of the
internal HDevelop operator dev_set_paint contained wrong value names
and 'Mode' was erroneously labled as 'string'. These problems
have been fixed. Now, 'plot' is replaced by '3D-plot',
'plot_hidden" is replaced by '3D-plot_hidden', and the parameter
is correctly labeled as 'Mode'.
-
Some HDevelop tuple comparison
functions sometimes returned erroneous results if at least
one tuple contained more than one element. This problem has been
fixed.
-
Running an HDevelop program via the 'Run
Until Here' entry of the Program Window's context menu did
not work when
-
either the mouse cursor was below the last line of the main
procedure
- or over the return statement of a procedure.
Instead of the program execution, no action at all took
place. This problem has been fixed.
-
Setting a breakpoint, the insert cursor, or the program counter
on the final 'return' statement of a procedure via the context menu of the Program Window did not
work. In addition, while setting breakpoints on the selected
program lines via the 'Execute' menu, the 'return' statement was
ignored. These problems have been fixed.
-
The HDevelop Help browser sometimes
showed a wrongly rendered window title. This problem has been
fixed.
-
The links in the pages that are displayed in the HDevelop Help as well as the links to the
corresponding parameter descriptions did not work correctly in
some cases. This problem has been fixed. The links to the
parameter description work correctly for all languages except
Japanese.
-
Several calls of the Variable Inspection
Window with identical variables did always open a new
window instead of simply showing or reopening the respective
window. This problem has been fixed.
-
While drawing an ROI within the Matching
Assistant, it was possible to execute the program. This
could have led to inconsistent states and thus could have caused
HDevelop to crash. This problem has been fixed. Now, the program
execution is disabled as long as an ROI is drawn. Furthermore,
the stop button is enabled and can be used to cancel the ROI
creation.
-
If within the Matching Assistant the
drawing of an ROI was immediately aborted by clicking the right
mouse button without drawing anything before with the left mouse
button, an error message was returned. In addition, sometimes
this message was not clickable and the application was frozen in
the draw-a-region-mode, i.e., most of the actions were disabled
until one clicked somewhere with the right mouse button again.
This problem has been fixed.
-
The Matching Assistant has a check
box on the Model Creation tab card under Advanced Model
Parameters that controls whether the shape model has to be
pregenerated completely at creation time (in
create_*_shape_model) or not. This setting was not considered
for the code that was generated by the assistant, i.e., the
generated call of create_*_shape_model did not set the second
value of the Optimization parameter to 'pregeneration' or
'no_pregeneration'. This might result in a different behavior of
the generated program in contrast to the Matching Assistant,
i.e., shape models that were found within the Matching Assistant
might not be found by the generated code. This problem has been
fixed.
-
In the Matching Assistant for good
reasons the buttons for drawing an ROI are disabled as long as no
model image is loaded. However, via the Create Model / Create ROI
menu it was possible to perform these drawing actions without an
image. This resulted in an error message and might even have
crashed HDevelop. This problem has been fixed. As long as no
model image is loaded, the appropriate menu entries are disabled,
too.
-
If in the Matching Assistant a test
image was removed from the Model Use / Test Images table after
'Detect All' was executed, the table was not correctly updated.
The entries in the columns Visible and Detected for test images
that followed after the removed images were not moved one row up
together with the filename entry. This problem has been fixed.
-
If within the Matching Assistant an
arbitrary (free-hand) model region was drawn as the model ROI and
afterwards the assistant settings were saved into a .das file,
the ROI was not correctly restored by reloading the assistant
settings (.das) file into another Matching Assistant. This
problem has been fixed.
-
Buttons of some message boxes in
HDevelop did not adapt their text when a different language was
selected, i.e., they still contained the default text. This
problem has been fixed. Note that for the adaptation of the text
of the message box buttons HDevelop has to be restarted.
-
The syntax switch in the HDevelop
Help browser is no longer ignored if the language is set
to Japanese. Now, the appropriate help files are shown.
-
The Solution Guide I is no longer incorrectly listed as 'Quick
Guide to HALCON' in results obtained from HDevelop's built-in
search engine.
-
Examples:
-
Manuals:
-
The HDevelop User's Guide is now available in a new
edition. It has been adapted to the changes in HALCON
8.0.2. Furthermore, the layout has been enhanced for the
description of the 'Edit->Preferences->General Options' dialog.
-
With the release of HALCON 8.0, the behavior of the 'return'
statement changed when it is executed in the 'main' procedure:
the operator is no longer ignored but the program counter jumps
to the program end, i.e., the program is finished.
Nevertheless, the documentation was still describing the old
behavior. The documentation was updated according to the new
behavior.
-
Speed-Up and Enhancements:
-
The HALCON bar code reader has been
enhanced in many ways:
-
find_bar_code is now faster and uses
less memory. The average speed-up is roughly a factor of five
and the used memory is about three times less. These values
just indicate the magnitude of the improvements and can
largely vary depending on the specific image content.
-
find_bar_code now takes the bar code
symbol RSS-14 Truncated as a separate code type. To read
RSS-14 Truncated, choose the parameter CodeType equal to
'RSS-14 Truncated' instead of 'RSS-14'. The separation leads
to a faster reading of the normal RSS-14 symbol. The example
program
examples/hdevelop/Applications/Barcode/RSS14Truncated.dev has
been adapted accordingly.
-
get_bar_code_object now provides
parameters to visualize the scanlines used to decode a bar
code candidate. This can be used to inspect the reader's
behavior. The example program
examples/hdevelop/Applications/Barcode/inspect_scanlines.dev
demonstrates this functionality. It uses the new example
images 'ean1313.png' and 'ean1314.png' in the directory
images/barcode/ean13/.
-
get_bar_code_result has got a new
parameter 'orientation' with which the bar code reader returns
the orientation of an indentified bar code. Furthermore, the
bar code reader provides a mechanism to constrain the
searching of bar codes to a restricted orientation range by
setting the parameters 'orientation' and 'orientation_tol' in
set_bar_code_param. The new
example programs
examples/hdevelop/Applications/Barcode/barcode_param_orientation.dev
and
examples/hdevelop/Applications/Barcode/barcode_orientation.dev
demonstrate this functionality. The first one uses the new
example image
images/barcode/25interleaved/barcode/25interleaved/25interleaved16.png.
-
The HALCON bar code
reader now has a new parameter for the
minimal bar code height, called
'element_height_min'. The default value of this parameter is
-1, meaning that the bar code reader automatically chooses the
right height. The height of the bar code should be set by the
user only in case of very flat or very high symbols. The
example program
examples/hdevelop/Applications/Barcode/barcode_param_element_height_min.dev
demonstrates this functionality.
-
The HALCON bar code reader
now is able to read Composite codes
attached to RSS bar code symbols. The decoding of
Composite codes is switched on and off by calling set_bar_code_param(...,'composite_code','CC-A/B')
and set_bar_code_param(...,'composite_code','none'),
respectively, before find_bar_code is executed. The example
program
examples/hdevelop/Applications/Barcode/RSSComposite.dev
demonstrates this functionality. It uses the new example
images 'rss14_stacked_composite_01.png',
'rsslimited_composite_01.png', and
'rssexpanded_composite_01.png' in the directory
images/barcode/rss_composite.
-
The linkage flag stored internally in all RSS bar codes is now returned as the
first of the reference values accessible through get_bar_code_result(...,'decoded_reference',...). The
reference value is 1 if the linkage flag was set, which means
that there is a Composite code attached to the RSS symbol. The
value is 0 if the linkage flag is not set.
-
The HALCON bar code reader now is able to read EAN symbols with add-ons even if the
add-on region is not part of the main candidate region. Now,
the user should adjust the 'element_size_max' parameter just
to the widths of the bars and spaces of the principal symbol
part and no longer as large as the gap between main and add-on
part.
-
auto_threshold, eliminate_min_max, mean_sp and eliminate_sp now support uint2 images.
select_gray now supports uint2
images for the features 'moments_row', 'moments_column', 'alpha',
and 'beta'. And histo_to_thresh now
supports histograms derived from uint2 images, i.e., histograms
with more than 256 entries.
-
union2 is now faster by up to 30%.
-
HALCON is now able to read RGB BMP files with 10 bits per pixel.
-
Modified Operators:
-
distance_pl, in addition to the
calculation of the distances between n points and n lines, now
supports the calculation of the distances between a tuple of
points and one line and the calculation of the distances between
a tuple of lines and one point..
-
distance_pp, distance_pl, distance_ps, distance_ss, distance_sl, distance_pr, distance_lr, distance_sr, intersection_ll, angle_ll, angle_lx, and projection_pl now allow tuples with more
than 10000 elements.
-
find_bar_code now decodes only
bar codes that have start and stop patterns. Previously, this was
not required and sometimes was resulting in identification of
arbitrary texture patterns as valid codes. In particular, the
affected code types were '2/5 Industrial', '2/5 Interleaved',
'Code 39', and 'Code 93'.
-
get_grayval now supports tuples
with more than 100000 elements.
-
min_max_gray with Percent > 0 now
supports the same image types as min_max_gray with
Percent = 0 (i.e., byte, direction, cyclic, int1, int2, uint2,
int4, and real).
-
select_characters no longer removes
small regions in 'step2_partition_characters'. Thus, the minimum
value of CharHeight and CharWidth must no longer be set to very
small values for dot prints.
-
set_spy now supports the display of
XLD contours. This can be achieved via
set_spy('input_xld_window', window_handle).
-
The HALCON 2D data
code readers support the ECI protocol that can be used to
switch between different coding tables. If these ECI codes are
used by the symbols, the different symbology specifications
require that normal backslashes (characters with ASCII code 92)
must be doubled for the output. On the other hand, if the ECI
protocol is not used within an application, doubling of data
backslashes is not what users expect and should be omitted. This
was not implemented consistently by the HALCON data code readers:
while the ECC200 reader always doubled all backslashes, the QR
code and the PDF417 readers did never double any backslashes. In
addition, this behavior was not sufficiently documented. Now, the
behavior has been changed in the following way: For all symbologies
applies that the data code readers will double data backslashes
if the symbol contains at least one ECI code, otherwise
backslashes are not doubled. The information whether the symbol
has ECI codes or not can be obtained (as before) from the
symbology identifier that can be queried by
get_data_code_2d_result. For more information see the
references of the operators create_data_code_2d_model and get_data_code_2d_result.
-
Bug Fixes:
-
add_image sometimes returned
incorrect results for uint2 and int2 images that are close to
their respective saturation limit if the processor does not
support MMX or MMX has been disabled via set_system.
Additionally, add_image sometimes returned erroneous
results for uint2 images on Linux systems when using MMX. These
problems have been fixed.
-
add_image, sub_image, mult_image, and div_image did not clip their results in
the case of int4 images. This caused incorrect results due to
integer overflows if the precision of the int4 data type is not
sufficient for the result. This problem has been fixed.
-
area_center_xld returned results
that were slightly inaccurate on SSE2 and 64 bit
architectures. The relative error was up to 0.01 % compared to
the results achieved on non-SSE2 architectures. This problem has
been fixed.
-
camera_calibration returned
slightly inaccurate results on SSE2 and 64 bit Intel
architectures. This problem has been fixed.
-
close_contours_xld sometimes
crashed when the affected contours had attributes. This problem
has been fixed.
-
connect_grid_points had a memory
leak. This problem has been fixed.
-
create_cam_pose_look_at_point did not
handle input tuples of different lengths correctly. For example,
if in CamPosX, CamPosY, and CamPosZ more than one value was
passed while in LookAtX, LookAtY, and LookAtZ only one value was
passed, the error message 1204 ("Wrong type of control parameter:
4") was returned. This problem has been fixed. Now, the maximum
number of parameter values over all input control parameters is
computed that defines the number of output camera poses. If a
parameter does not contain either 1 or the maximum number of
values, an appropriate error message is returned. If the
parameter contains 1 value, this value is used to compute all
camera poses. If the parameter contains the maximum number of
values, for each pose the value with the corresponding index is
used. The documentation of create_cam_pose_look_at_point
has been adapted accordingly.
-
create_shape_model, create_scaled_shape_model, and create_aniso_shape_model sometimes
retured the error 3513 ("Internal error: number of chords to big
for num_max") or the error 6041 ("No memory block allocated at
last"). This happened if the width of the bounding box of the
input image domain was large in comparison to its
height.
Additionally, create_shape_model,
create_scaled_shape_model, and
create_aniso_shape_model sometimes returned the error
6041 ("No memory block allocated at last") if the parameter
Contrast was set to either 'auto', 'auto_contrast', or
'auto_contrast_hyst' and additionally MinContrast was set to
'auto'. This for example happened if an artificial model image
was passed and the minimum contrast was estimated too high such
that not enough model points could be found that exceeded the
minimum contrast. These problems have been fixed. For the latter
problem, now, in these cases the more appropriate error 8510
("Number of shape model points too small") is returned
instead.
-
crop_rectangle1 returned the error
1303 ("Wrong value of control parameter: 3") or 1304 ("Wrong
value of control parameter: 4") if 0 was passed as parameter Row2
or Column2, respectively. This problem has been fixed.
-
dev_close_inspect_ctrl had no
effect on variable inspection windows that were opened for image
acquisition device handles. This problem has been fixed.
-
disp_obj and disp_region returned the error 3510
("Exceeding the maximum number of run lengths while automatical
expansion") in very rare cases if the region to be displayed had
to be scaled down to fit the window. The same applied to disp_image with images with reduced
domains. This problem has been fixed.
-
distance_transform did not work
correctly if Metric was set to 'euclidean', Foreground was set to
'false', and the input region contained parts of the first line
of the output image. In this case the resulting transformation
was erroneous. This problem has been fixed.
-
dist_ellipse_contour_points_xld
crashed if radius2 was equal to zero and if at least one end
point was clipped. This problem has been fixed.
Additionally, the following changes have been made. If the
ellipse is degenerated to a line
dist_ellipse_contour_points_xld and dist_ellipse_contour_xld('geometric') are
now based on a measure that is the shortest distance to the line
segment instead of the orthogonal distance to the line.
-
draw_nurbs and draw_nurbs_mod caused an abnormal program
termination if they were terminated by a click of the right mouse
button or the HDevelop stop button while no control point has
been drawn. This problem has been fixed.
-
edges_image and edges_sub_pix in some cases returned
wrong results for the filters 'shen' and 'mshen'. This problem
has been fixed.
-
erosion1, erosion2, minkowski_sub1, and minkowski_sub2 returned an empty region
in the case of an empty structuring element in very rare
cases. The correct result is a region containing the full image
domain. The same problem applied to the operator closing_golay in the case of the golay
element 'h' and Rotation=0, the operator opening_golay in the case of the golay
element 'h' and Rotation=1, and the operator erosion_golay in the case of the golay
element 'h' and Rotation=1. This problem has been fixed.
-
evaluate_class_gmm did not work
correctly for GMM classifiers with reduced feature dimensions
(i.e., classifiers created with 'principal_components' or
'canonical_variates' in the parameter Preprocessing and
NumComponents < NumDim). This problem has been fixed.
-
expand_gray and expand_gray_ref sometimes returned the
error 6041 ("No memory block allocated at last") if the input
regions did not lie completely within the extents of the input
image. This problem has been fixed.
-
find_data_code_2d failed to decode
big QR codes (version 10 and bigger) that contained data blocks
in pure numeric mode (status message: "decoding failed:
inconsistent data"). This problem has been fixed.
Additionally, find_data_code_2d in some rare cases had a
small memory leak when called on an ECC200 DataMatrix model. The
memory leak could occur in conjunction with symbols that cannot
be read owing to decoding errors, i.e., for symbols where the
error correction works correctly but there are inconsistencies in
the data. This problem has been fixed.
-
find_marks_and_pose crashed in rare
cases when using unoriented calibration plates. This problem
has been fixed. It now returns error number 8417 ("fitting of
calibration target failed") in these cases.
-
find_shape_model, all variants
thereof, and find_shape_model_3d in
rare cases returned the error 3513 ("number of chords too big for
num_max") if an input image with a reduced domain was passed. In
particular, this error occurred if the width of the input image was
small in comparison to its height. This problem has been
fixed.
-
find_shape_model_3d did not work
correctly if the range of allowed camera-object distances was
specified by passing 'dist_min' or 'dist_max' for the generic
parameter GenParamNames and passing appropriate values for the
generic parameter GenParamValues. If the specified distance range
would lead to a restriction of the distance range that was
specified during the creation of the 3D shape model
(create_shape_model_3d), find_shape_model_3d
always returned without a result. This problem has been fixed.
-
fit_circle_contour_xld and fit_ellipse_contour_xld crashed if more
than 50000 contours were used as input. This problem has been fixed.
-
fit_ellipse_contour_xld had a
memory leak if Algorithm was set to 'focpoints' and the error
9101 ("No (unique) solution for the linear equation") was
returned.
Additionally, fit_ellipse_contour_xld did not
check the correctness of the parameter VossTabSize if Algorithm
was set to 'voss'. In the special case that VossTabSize was set
to 0, HALCON crashed. These problems have been fixed. For the
latter, now an appropriate error message is returned.
-
fit_surface_first_order and fit_surface_second_order crashed with
empty input regions if the system variable 'empty_region_result'
was set to something else but 'true' using the operator
set_system. This problem has been fixed.
-
get_contour_angle_xld returned
incorrect results if the input contour was closed. This problem
has been fixed.
-
get_data_code_2d_results(...,'quality_isoiec15415',...)
had a memory leak if used for print quality assessment of
PDF417 symbols. This problem has been fixed.
-
If the contour of a full ellipse (i.e., the absolute value of the
difference between StartPhi and EndPhi corresponds to 2*PI) was
computed using gen_ellipse_contour_xld, this contour was
not closed in very rare cases. This problem has been fixed.
-
gen_radial_distortion_map returned
the error 3513 ("number of chords too big for num_max") if the
width of the resulting map exceeded approximately twice its
height, where the width and height of the resulting map is defined
in CamParOut. This problem has been fixed.
-
golay_elements did not set the
reference point correctly. The column coordinate of the reference
point was always set to the passed row coordinate. This problem
has been fixed.
-
gray_dilation_shape, gray_erosion_shape, gray_closing_shape, and gray_opening_shape returned striped
results for uint2 images if parallelized on domain level. This
problem has been fixed.
-
harmonic_interpolation sometimes
returned images that contained edges in areas that should have
been interpolated smoothly. This problem has been fixed.
-
histo_to_thresh returned slightly
wrong results in rare cases. Especially for large values of
sigma, the histogram minima for large gray values might have been
erroneous. This problem has been fixed.
-
hough_lines, hough_lines_dir, and hough_line_trans_dir crashed in rare
cases. This problem has been fixed. Please note that the fix
causes the height of the resulting HoughImage in
hough_line_trans_dir to increase by up to 2 pixels.
Additionally, hough_lines and
hough_lines_dir sometimes returned
a wrong line. This happened if no line in the input region
existed that is supported by at least Threshold pixels. In this
case, the line that is represented by Angle = -PI/2 and Dist =
0.0 was returned. This problem has been fixed. Now, an empty
tuple is returned for Angle and Dist instead.
Furthermore, hough_lines wrongly
allowed Threshold values below 2. However, in this case no
meaningful lines were returned because at least two points are
necessary to define a line. This problem has been fixed. Now,
hough_lines returns an appropriate error message if
Threshold is set to a value below 2.
-
junctions_skeleton in rare cases
returned the error 6002 ("Memory partition on heap has been
overwritten"). This problem occurred only if the input region
contained lines which were more than one pixel wide. This problem
has been fixed.
-
inner_rectangle1 sometimes returned
rectangles that were too large. This problem has been fixed.
-
inspect_shape_model crashed under
very rare circumstances if multichannel images were used and
'trace_memory' was set to 'false' (which is the case if the
option in Edit -> Preferences... -> General Options ->
Experienced User -> Show memory usage is not checked). This
problem has been fixed.
-
lines_gauss in rare cases returned
the error 6002 ("Memory partition on heap has been
overwritten"). This problem has been fixed.
-
mean_image crashed if the input
image was only one pixel high and the parameter MaskWidth was set
to 1. The same problem applied to images of one pixel width if
the parameter MaskHeight was set to 1. This problem has been
fixed.
-
median_weighted caused a memory or
heap error in rare cases when running with mask type 'gauss'.
This problem has been fixed.
-
paint_gray, overpaint_gray, and expand_domain_gray sometimes returned the
error 3146 ("Target image has wrong height (not big enough)") if
the domain of the input image was empty. This problem has been
fixed.
-
paint_xld returned slightly
inaccurate results on SSE2 and 64 bit architectures. The error
was relative in the size of the input contour's coordinates. This
problem has been fixed.
-
projective_trans_image and projective_trans_image_size sometimes
returned an incomplete result image. This might have happened if
the transformation of the complete input image crossed the line
at infinity. In this case, the domain of the transformed image
might have been incomplete. This problem has been fixed.
-
query_param_info crashed. This
problem has been fixed.
-
read_class_gmm sometimes
crashed. This problem has been fixed.
-
read_class_gmm had a small memory
leak. This problem has been fixed.
-
read_image, when called with a
filename containing a file extension, removed the extension from
the input string. This problem has been fixed.
-
read_image did not read binary PBM
files with a width that is not a multiple of 8 correctly. This
problem has been fixed.
-
read_ocr did not read
classificators correctly that contained the feature
'gradient_8dir' as the only gray value based feature. Subsequent
calls using this classificator resulted in a crash. This problem
has been fixed.
-
read_region returned erroneous
regions when BMP images were read. This problem has been fixed.
-
read_tuple sometimes read strings
with blanks incorrectly. This problem has been fixed. Now, it
reads blanks at the beginning of a string and strings containing
only blanks correctly.
-
receive_region did not receive
arrays of regions on socket connections. This problem has been
fixed.
-
region_to_bin, when called with a
region array, has written only the last region of the array to
the output image. This problem has been fixed. Furthermore, the
operator returned wrong results when being parallelized on tuple
level. Now, the operator cannot be parallelized on tuple level
automatically anymore.
-
region_to_label and region_to_mean returned wrong results
when being parallelized on tuple level. Now, the operators cannot
be parallelized on tuple level automatically anymore.
-
scale_image returned wrong results
for byte and int4 images if the gray values were very large and
if the scale was very close to 1. For byte images, this occurred
only if MMX was disabled.
Additionally, scale_image with int4 images
produced incorrect results if scale factor and offset were chosen
in such a way that the resulting image was close to the
saturation limit of the int4 data type (+/-2147483647). These
problems have been fixed.
-
segment_characters did not work
if the region set by the parameter Region was not the whole domain
of the image. This problem has been fixed.
Furthermore, segment_characters
caused a memory leak if no characters were found.
This problem has been fixed.
-
select_characters sometimes
returned the HALCON error 6000 ("Access to undefined memory
area"). This problem has been fixed.
-
select_lines_longest returned the
error 6002 ("Memory partition on heap has been overwritten") on
all 64 bit architectures in most cases. If no error was reported,
the results of the operator may have been erroneous (on 64 bit
architectures). This problem has been fixed.
-
select_gray crashed if the string
'max' was passed as parameter Max. This problem has been fixed.
-
With set_spy set to the mode
'input_gray_window' or 'input_region_window', the associated
window was not correctly refreshed. This problem has been fixed.
-
test_equal_obj sometimes returned the
error 4052 ("Image data management: wrong object-ID"). This always
happened when an XLD contour was compared with a non-equal object.
This problem has been fixed.
-
text_line_orientation and text_line_slant did not concatenate the
result tuples when using Parallel HALCON. This problem has been
fixed.
-
text_line_slant returned the error
3513 ("number of chords too big for num_max") in rare cases. This
problem has been fixed.
-
train_class_svm crashed in rare cases on
64 bit architectures if the kernel type 'rbf' was selected with
create_class_svm. This problem has been fixed.
-
trainf_ocr_class_svm and train_class_svm returned the error
message "Nu was chosen too big" if the training data did not
contain samples for all classes. Now the error 3392 ("Train data
does not contain all classes") is returned in this case.
-
tuple_pow always returned an output
parameter of type real, even if both input parameters were of
type integer. This problem has been fixed. Now, if both input
parameters are of type integer, the output parameter is also of
type integer.
-
tuple_strrchr crashed on 64 bit
systems if the string length of tuple T1 was 0. This problem has
been fixed.
-
Some HALCON tuple comparison operators sometimes returned
erroneous results if at least one tuple contained more than one
element. This problem has been fixed.
-
var_threshold crashed if the size
of the filter mask exceeded the image size. Now, an appropriate
error message is returned.
-
write_image only wrote the first
channel of a multichannel image correctly to a JPEG2000 file if
the format of the input channels was int1, int2, uint2, or int4.
All subsequent channels were written with a constant gray value
of 0. This problem has been fixed.
-
write_string did not use the
default font set by the operator set_system('default_font',
font_name) under Windows. This problem has been fixed.
-
The version information in the HALCON DLLs and EXEs now show the
correct internal and original file names. Previously, for DLLs
and EXEs that belong to Parallel HALCON, e.g., parhalcon.dll, the
internal and original file names did not have the "par" prefix.
-
Manuals:
-
The Solution Guide I (Basics) is available in a new edition. It
was adapted to the enhanced HALCON bar code
reader.
-
The Solution Guide II-C on 2D Data Codes is available in a
new edition. The section about print quality now is a separate
chapter.
-
The Programmer's Guide is available in a new edition. It
now clarifies that I/O operations including visualization can
only be performed in the same thread, but not necessarily in the
main thread. Besides, it now describes the output of the
HALCON/C++ method HCtrlVal.ValType in more detail.
-
The Installation Guide is available in a new edition. The
Windows installer in rare cases failed to detect SSE2
capabilities. Now, the Installation Guide describes how to avoid
this problem using a command line switch.
-
The reference manual entry of create_cam_pose_look_at_point was adapted
to the changed handling of
input tuples of different lenghts.
-
The reference manual entry of get_data_code_2d_results and the Solution
Guide II-C on 2D Data Codes stated that the persistence has to be
set to one before calling the operator for print quality
inspection of ECC200 and QR-Code data codes. This statement is
obsolete and has been removed.
-
For create_data_code_2d_model and
get_data_code_2d_result, the
reference manual entries were adapted to the modified behavior concerning ECI
codes.
-
The reference manual entry of set_font
has been extended by a description of the font string on
UNIX systems.
-
The reference manual entry of fit_surface_first_order and fit_surface_second_order did not
document the computation of the center coordinates r_center and
c_center correctly. This has been corrected.
-
Bug Fixes:
-
In single value API variants, output data type mismatch between
integers and doubles is now resolved by casting the value instead
of raising an exception. The most obvious effect is the usability
of "double HImage.GetGrayval(int,int)" for non-float images.
-
Bug Fixes:
-
HALCON crashed in rare cases when using the C++ language
interface with Parallel HALCON. Standard HALCON was only
concerned when using draw operators and message pipes with events
starting procedures containing HALCON operators. This problem has
been fixed.
-
The Hobject constructors of iconic classes caused a crash when
the ID in question was obtained from an object without explicit
initialization, which is usually treated as an empty region in
HALCON/C++. This problem has been fixed.
-
The HALCON/C++ member function HTuple::Xor() returned erroneous
results if the function arguments were not 0 or 1. This problem
has been fixed.
-
The last tuple element of the result of the HALCON/C++ member
function HTuple::Split() always contained an empty string. This
problem has been fixed.
-
The HALCON/C++ member function HTuple::StrBitSelect() returned a
tuple with only one element (containing the result for the first
element of the calling HTuple object), instead of returning a
tuple of the same size as the calling HTuple object. Furthermore,
HTuple::StrBitSelect() sometimes returned an erroneous result for
input parameters of type integer. These problems have been
fixed.
-
Some HALCON/C++ tuple comparison member functions in class HTuple
sometimes returned erroneous results if at least one tuple
contained more than one element. This problem has been fixed.
-
Bug Fixes:
-
In some cases, no exception was raised if an error occurred during an
operator call. This problem has been fixed. The problem was restricted to
special error codes with values less than 1000, such as
H_MSG_FAIL. Known affected operators include GetMposition and
SocketAcceptConnect.
-
The HObject constructors of iconic objects, such as HImage(HObject
obj), only copied the first element if the input was an object tuple.
This problem has been fixed.
-
HALCON/.NET applications raised the wrong exception when encountering
a license error in HALCON 8.0.1. Furthermore, that exception was of
a type which could only be caught when using Visual Studio 2005. This
problem has been fixed.
-
Bug Fixes:
-
There was a potential memory leak when using HDevEngine/.NET to run
programs or procedures using dev_display and rerouting output
by custom HDevOperator implementations or convenience implementations
such as HDevOpFixedWindowImpl. This problem has been fixed.
Attention: When providing a custom implementation for DevDisplay,
please note that the input object is now only valid inside the body of
the DevDisplay handler. HDevEngine/.NET will clear the input object
after the call has returned.
-
With HDevEngine/.NET, it was not possible to pass tuples with mixed
content as input parameters of procedures. This problem has been
fixed.
-
Examples:
-
The implementation of the operator user_area in the sample
extension package halconuser used a large static array, causing a
stack overflow when calling HHalconuser.UserArea from a .NET
application. 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 Image Acquisition Interfaces:
- HALCON now also includes the HALCON ABS interface to
support ABS UK1000/3000 cameras. The new
example programs abs.dev, abs_crop.dev, abs_do_parameter.dev,
abs_parameters.dev, and abs_simple.dev in the directory
examples/hdevelop/Image/Acquisition show how to use this interface.
- HALCON now also includes an
universal HALCON
GigEVision interface to support all GigE Vision compliant
cameras. Note that this new interface is based on an user-space
implementation of the GigE Vision protocol and is available for
Windows x86 and Linux. The interface is based on GenICam 1.1, which
is installed automatically during the installation. The new example programs
gigevision.dev, gigevision_frame_rate.dev,
gigevision_parameters.dev, and gigevision_simple.dev in the
directory examples/hdevelop/Image/Acquisition show how to use this
interface.
- HALCON now also includes the HALCON LinX interface to
support LinX GINGA digital-CL1e/CL2e/CL4e and GINGA++M1e/M4e
boards. The new example programs linx.dev, linx_2boards.dev,
linx_2ports.dev, linx_2simultaneous.dev, linx_cont.dev, and
linx_simple.dev in the directory
examples/hdevelop/Image/Acquisition show how to use this interface.
- HALCON now also
includes the HALCON
mEnableVisualApplets interface to support Silicon Software
microEnable boards via VisualApplets. The new example programs
menablevisualapplets.dev, menablevisualapplets_continuous.dev,
menablevisualapplets_parameters.dev, and
menablevisualapplets_simple.dev in the directory
examples/hdevelop/Image/Acquisition show how to use this interface.
- HALCON now also includes the HALCON VRmUsbCam
interface to support VRmagic USB cameras. The new example
programs vrmusbcam.dev, vrmusbcam_2cameras.dev, vrmusbcam_crop.dev,
vrmusbcam_parameters.dev, vrmusbcam_simple.dev, and
vrmusbcam_trigger.dev in the directory
examples/hdevelop/Image/Acquisition show how to use this interface.
-
Modified Image Acquisition Interfaces:
-
Manuals:
-
The Solution Guide II-A on Image Acquisition is available in a
new edition. It now warns that volatile grabbing is not volatile
within HDevelop.
-
Installation:
-
Since the new HALCON GigEVision interface is based on GenICam 1.1,
the HALCON installation now includes the official GenApi 1.1 runtime
environment. The necessary files are installed in the new directory
%HALCONROOT%/genicam.
-
Licensing:
-
HALCON now uses version 11.5 of the FLEXnet Publisher license
manager software.
-
Example Images:
|
|