 |
|
|
Release Notes for HALCON 7.1.4
|
 |
This document provides the release notes for MVTec HALCON 7.1.4, as released
in July 2008. HALCON 7.1.4 is primarily a maintenance release that
fixes all known bugs in HALCON 7.1.3; besides, it provides added
functionality and speed-ups.
Overview
This document contains the following information:
- Compatibility
- Detailed Description of Changes in
HALCON 7.1.4
- Major
New Features of HALCON 7.1
- Detailed
Description of Changes in HALCON 7.1.3
- 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
- Detailed
Description of Changes in HALCON 7.0.2
- Detailed
Description of Changes in HALCON 7.0.1
- Detailed
Description of Changes in HALCON 7.0
Compatibility
Licenses
HALCON 7.1 licenses are also valid for HALCON 7.1.4. In contrast,
all HALCON 7.0 licenses must be replaced or upgraded. Please
contact your local distributor.
HALCON Library
HALCON 7.1.4 is fully compatible with HALCON 7.1, 7.1.1,
7.1.2, and 7.1.3. Compared to HALCON 7.0.x, many extensions have
been introduced. Thus, the HALCON 7.1.4 libraries are
not compatible with HALCON 7.0 or earlier versions.
HDevEngine
HALCON Applications
Applications (i.e., executables) developed with HALCON
7.1, 7.1.1, 7.1.2, or 7.1.3 can be used with HALCON 7.1.4, i.e.,
HALCON 7.1.4 is binary compatible with HALCON 7.1, 7.1.1,
7.1.2, and 7.1.3.
C or C++ programs developed with HALCON 7.0.x must be
re-compiled. The incompatibility with HALCON 7.0 or earlier
versions mainly concerns the binaries, with only few changes in
the operators' signatures. If you encounter problems during
recompiling your programs, please check the detailed description
of changes below and look up the signatures of the concerned
operators in the reference manual.
Frame Grabber Interfaces
If you developed your own frame grabber interfaces with
HALCON 7.1, 7.1.1, 7.1.2, or 7.1.3, you can use them with
HALCON 7.1.4 without further action. Frame grabber interfaces
developed with HALCON 7.0.x and 6.1.x are binary compatible with
HALCON 7.1.4, interfaces developed with older versions must be
re-generated.
Extension Packages
Extension packages developed with HALCON 7.1, 7.1.1, 7.1.2, or
7.1.3 can be used with HALCON 7.1.4 without further action.
Extension packages developed with HALCON 7.0.x must
be re-generated.
ActivVisionTools
Only ActivVisionTools 3.1 and 3.1.1 can be used directly
with HALCON 7.1.4 because they are based on (a modified
version of) HALCON 7.1 or 7.1.1, respectively. All older
ActivVisionTools versions are based on HALCON 7.0.1 or
below; by installing HALCON 7.1.4, you would thus
disable such an ActivVisionTools installation.
Therefore, the setup program of HALCON 7.1.4 checks
whether there is an ActivVisionTools installation on
your computer.
-
If it detects ActivVisionTools 3.2, which is based on
HALCON 8.0.2 and thus cannot be used with HALCON 7.1.4, it
warns you that by continuing to install HALCON 7.1.4 you will
disable your ActivVisionTools installation.
If you still want to use your ActivVisionTools installation
you must also keep the HALCON 8.0.2 installation and switch
back to it as described in the "Installation Guide".
-
If it detects ActivVisionTools 3.1 or 3.1.1, no
further action is required, as this version is
compatible to HALCON 7.1.4.
-
If it detects ActivVisionTools 3.0, please
contact your distributor for further information on how to run
this version together with HALCON 7.1.4.
-
ActivVisionTools 1.0
to 2.2 cannot be used with HALCON 7.1.4. If the setup
program detects such an ActivVisionTools version, it warns
you that by continuing to install HALCON 7.1.4 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".
Detailed Description of Changes in HALCON
7.1.4
Detailed release notes can be obtained for the following topics:
- HDevelop
- HALCON Library
- HALCON/C++
- HDevEngine
- Frame Grabber
Interfaces
Bug Fixes
-
Loading HDevelop programs or external procedures containing
elseif statements left HDevelop
in an inconsistent state, which could lead to crashes at
various points. 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.
-
When exporting the current local
procedure to Visual Basic .NET (via menu
'Procedures->Save Current As...'), HDevelop did not export
'End Module' at the end of the file. This problem has been
fixed.
-
After being started from the command
line with option '-run', HDevelop remained in an
inconsistent state, i.e., the current working directory, the
program name, and the file history were not set
correctly. These problems have been fixed.
Examples
Speed-up and Enhancements
-
HALCON is now able to read RGB BMP
files with 10 bits per pixel.
-
union2 is now faster by up to
30%.
-
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).
-
auto_threshold, mean_sp, eliminate_sp, and eliminate_min_max now support uint2
images.
-
histo_to_thresh now supports
histograms derived from uint2 images, i.e., histograms with
more than 256 entries.
-
select_gray now supports uint2
images for the features 'moments_row', 'moments_column',
'alpha', and 'beta'.
Modified Operators
-
The DLLs of extension packages can
now be found under Windows even if the environment variable
HALCONEXTENSIONS contains quotation marks.
-
In addition to the calculation of the distances between n
points and n lines, distance_pl
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.
-
set_spy now supports the display
of XLD contours. This can be achieved via
set_spy('input_xld_window', WindowHandle).
-
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. The documentation has been extended
accordingly.
-
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. The
behavior was 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, where the
documentation was extended accordingly.
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
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.
-
best_match_pre_mg was
parallelized on tuple level which caused erroneous behavior in
Parallel HALCON. This problem has been fixed.
-
class_ndim_norm crashes in rare
cases. 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_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_shape_model , create_scaled_shape_model, and create_aniso_shape_model sometimes
returned 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. This problem has been fixed.
-
create_shape_model had a memory
leak of 48 bytes when using Parallel HALCON. This problem has
been fixed.
-
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.
-
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_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
if for the output image Width was set to 1 and Metric was set
to one of the following values: 'chessboard', 'octagonal',
'chamfer-3-4', 'chamfer-3-4-unnormalized', or 'euclidean'. In
some cases, the operator returned wrong results, in other
cases, distance_transform returned the error 6002
("Memory partition on heap has been overwritten"). Additionally,
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. These problems have been fixed.
-
dist_ellipse_contour_points_xld
crashed if radius2 is equal to zero and if at least one end
point is 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.
-
erosion1 , erosion2, minkowski_sub1, and minkowski_sub2 returned an empty region
in 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 case of the golay
element 'h' and Rotation=0, the operator opening_golay in case of the golay
element 'h' and Rotation=1, and the operator erosion_golay in case of the golay
element 'h' and Rotation=1. These problems have 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_1d_bar_code_scanline and
get_1d_bar_code_scanline
sometimes returned the unexpected error message 7002
("Wrong type: output control parameter"). 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"). 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. These
problems have 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 for these
symbols the status message "error correction failed". This
problem has been fixed.
-
find_marks_and_pose crashed in
rare cases when using unorientated calibration plates. This
problem has been fixed. It now returns error number 8417
("fitting of calibration target failed") in these cases.
-
find_shape_model and all variants
of it 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 occured if the width of
the input image was small in comparison to its
height. Additionally, 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'. Furthermore, find_shape_model,
all variants thereof, and find_component_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. These problems
have been fixed.
-
fit_circle_contour_xld and fit_ellipse_contour_xld crashed if more
than 50000 contours were used as input. Additionally,
fit_ellipse_contours_xld had a memory leak if
Algorithm was set to 'focpoints' and the error 9101 ("No
(unique) solution for the linear equation") was
returned. Furthermore, 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 someting else but 'true' using
the operator set_system. This problem has been fixed.
-
gauss_image sometimes returned
erroneous results or even crashed. This happened when the
input images width or height was smaller than half the filter
masks size. Now, when the image is too small for the chosen
filter size, the HALCON error 3035 ("Filter is too big") is
returned.
-
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 the operator gen_ellipse_contour_xld, this contour
was not closed in very rare cases. 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_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.
-
gen_random_region in rare cases
raised the error 3513 ("number of chords too big for num_max")
if the width was an odd number. 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_contour_angle_xld returned
incorrect results if the input contour was closed. This problem
has been fixed.
-
get_param_num crashed if the
passed operator name string was longer than 80 characters. 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.
-
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.
-
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_erosion_shape , gray_dilation_shape, gray_opening_shape, and gray_closing_shape led to
memory access violations 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). Additionally, the operators in
rare cases returned
wrong results if parallelized on domain level. These problems
have 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 be increased 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.
-
hysteresis_threshold, edges_image, and edges_color returned error 6041 ("no
memory allocated at last") for big output regions in some
cases. This problem has been fixed.
-
junctions_skeleton in rare cases
returned the error 6002 ("Memory partition on heap has been
overwritten"). This problem occured only if the input region
contained lines which were more than one pixel wide. 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.
-
local_min and local_max crashed with images of width
or height 1 in rare cases. 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. Additionally,
mean_image crashed with 'real' images if border
treatment had to be applied to the whole image domain. These
problems have 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.
-
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.
-
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.
-
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_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.
-
regiongrowing in very rare cases
returned the error 3513 ("Number of chords too big for
num_max") if the domain of the input image was reduced. 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.
-
reset_obj_db had a memory leak of
200 bytes per call. This problem has been fixed.
-
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). Additionally, 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 occured only if MMX was disabled. These problems
have been fixed.
-
select_gray crashed if the string
'max' was passed as parameter Max. This problem has been
fixed.
-
select_lines_longest did not work
properly on all 64 bit architectures. In most cases, the
operator returned the error 6002 ("Memory partition on heap has
been overwritten"). Even when no error was returned, the
returned results might have been erroneous. This problem has
been fixed.
-
set_socket_timeout could set the
parameter value 'infinite' only once per socket. This problem
has been fixed.
-
set_spy sometimes caused HALCON
to crash if it was used with the parameter 'input_gray_window'
to trace gray images. Additionally, with set_spy set
to the mode 'input_gray_window' or 'input_region_window', the
associated window was not correctly refreshed. These problems
have been fixed.
-
smooth_funct_1d_gauss, smooth_funct_1d_mean, negate_funct_1d, abs_funct_1d and scale_y_funct_1d overwrote the input
function. The operator get_pair_funct_1d overwrote its
parameter Index. This problem did not affect programs executed
in HDevelop, but programs using a language interface. This
problem has been fixed.
-
split_skeleton_lines returned an
error 6002 ("Memory partition on heap has been overwritten") in
case of large, branched regions. 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.
-
tuple_strrstr crashed on 64 bit
systems if the string length of tuple T1 was smaller than the
string length of tuple T2 or if the string length of tuple T1
was 0. These problems have been fixed.
-
var_threshold crashed if the size
of the filter mask exceeded the image size. Now, an appropriate
error message is returned.
-
wiener_filter crashed if the
width of the input image was greater than the height of the
input image. 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_string did not use the
default font, set by the operator
set_system('default_font', <font_name>), under
Windows. This problem has been fixed.
Manual
-
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.
-
The reference manual entry of partition_dynamic has been rewritten.
It now describes the determination of the positions where the
input region is partitioned in more detail.
-
The reference manual entry of set_font
has been extended by a description of the font string
on UNIX systems.
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.
Bug Fixes
-
Calling the method HDevEngine::SetProcedurePath caused a
memory leak. 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 Frame Grabber Interfaces
-
HALCON now also provides the new eneo interface
which allows the remote grabbing of images from an eneo SC
smart camera. The new examples eneo.dev,
eneo_parameters.dev, and eneo_simple.dev in the directory
examples/hdevelop/Image/Framegrabber show how to grab images from an
eneo remote interface.
-
The existing SaperaLT
interface now supports also Windows x64.
Modified Frame Grabber Interfaces
|