 |
|
|
Release Notes for HALCON 7.0.4
|
 |
This document provides the release notes for MVTec HALCON 7.0.4, as released
in October 2006. HALCON 7.0.4 is primarily a maintenance release that
fixes all known bugs in HALCON 7.0.3; besides, it provides added
functionality and speed-ups.
Overview
This document contains the following information:
- Compatibility
- Detailed Description of Changes in
HALCON 7.0.4
- Major
New Features of HALCON 7.0
- Detailed
Description of Changes in HALCON 7.0.3
- 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
- Major
New Features of HALCON 6.1
- Detailed
Description of Changes in HALCON 6.1.2
- Detailed
Description of Changes in HALCON 6.1.1
- Detailed
Description of Changes in HALCON 6.1
Compatibility
Licenses
HALCON 7.0 licenses are also valid for HALCON 7.0.4. In contrast,
all HALCON 6.1 licenses must be replaced or upgraded. Please
contact your local distributor.
HALCON Library
HALCON 7.0.4 is fully compatible with HALCON 7.0. Compared to
HALCON 6.1.x, many extensions have been introduced. Thus, the
HALCON 7.0.4 libraries are not compatible with HALCON 6.1.x or
earlier versions.
HALCON Applications
Applications (i.e., executables) developed with HALCON 7.0.1,
7.0.2, or 7.0.3 can be used with HALCON 7.0.4, i.e., HALCON
7.0.4 is binary compatible with HALCON 7.0.1, 7.0.2, and 7.0.3.
In contrast, C++ programs developed with HALCON 7.0 that use
methods of the class HMeasure must be re-compiled and linked,
because of a bug fix in the
operators set_fuzzy_measure and set_fuzzy_measure_norm_pair.
This means that HALCON 7.0.4 is not completely binary compatible
with HALCON 7.0.
C or C++ programs developed with HALCON 6.1.x must be
re-compiled. The incompatibility with HALCON 6.1 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.0, 7.0.1, 7.0.2, or 7.0.3, you can use them with HALCON 7.0.4
without further action. Frame grabber interfaces developed with
HALCON 6.1.x are binary compatible with HALCON 7.0.4, interfaces
developed with older versions must be re-generated.
Please make sure that you no longer use the old PicPort,
PicPortPro or PicProdigy interfaces that are part of older
Leutron LV-SDS releases since these interfaces are not fully
compatible with HALCON 7.0.4. Please use the new Leutron
interface instead.
Extension Packages
Extension packages developed with HALCON 7.0, 7.0.1, 7.0.2, or
7.0.3 can be used with HALCON 7.0.4 without further action.
Extension packages developed with HALCON 6.1.x must be
re-generated.
ActivVisionTools
Only ActivVisionTools 3.0 can be used directly with HALCON 7.0.4
because it is based on HALCON 7.0.1.1., which is a prerelease of
HALCON 7.0.2. All older ActivVisionTools versions are based on
HALCON 6.1.1 or below, while ActivVisionTools 3.1 is based on (a
modified version of) HALCON 7.1. By installing HALCON 7.0.4, you
would thus disable such an ActivVisionTools installation.
Therefore, the setup program of HALCON 7.0.4 checks whether there
is an ActivVisionTools installation on your computer.
-
If it detects ActivVisionTools 3.0, no further action is
required, as this version is compatible to HALCON 7.0.4.
-
If it detects ActivVisionTools 2.2, it offers to replace
the corresponding OCX with a new one that is compatible to
HALCON 7.0.4.
-
In contrast, ActivVisionTools 3.1 and ActivVisionTools 1.0
to 2.1 cannot be used with HALCON 7.0.4. If the setup
program detects such an ActivVisionTools version, it warns
you that by continuing to install HALCON 7.0.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.0.4
Detailed release notes can be obtained for the following topics:
- HDevelop
- HALCON Library
- HALCON/C++
- Frame Grabber
Interfaces
- HMatchIt
Functionality
-
HDevelop's functionality for removing unused variables
(File->Cleanup) now applies to all procedures, not only to
the currently displayed procedure.
-
HDevelop now automatically removes unused variables
(File->Cleanup) from the program before exporting code.
Bug Fixes
-
HDevelop showed erroneous behavior when trying to
save the current program after previously failing to
load a HDevelop program file. In that case, instead
of prompting for a file name, HDevelop saved the
current program to the file '.dev' in the current
directory. This problem has been fixed.
-
HDevelop remained in an inconsistent state after
modifying a deactivated loop statement. This
problem has been fixed.
-
Displaying objects in HDevelop graphics windows
caused a memory leak in case the displayed object
was a tuple of images and the tuple elements shared
the same image matrix but had different domains.
This problem has been fixed.
-
In rare cases, after pasting previously copied local
procedures containing procedure call lines, HDevelop
remained in an inconsistent state. This problem has
been fixed.
-
HDevelop did not check the consistency of variable
names when pasting previously copied program lines
into the current procedure body, which could lead to
programs containing control and iconic variables with
the same name. This problem has been fixed.
-
HDevelop did not check for a correct variable name
when loading an image via menu item 'File->Read
Image', which could leave HDevelop in an
inconsistent state. This problem has been fixed.
-
HDevelop exported non-constant negation expressions
incorrectly to Visual Basic 6.0. This problem has
been fixed.
-
Iconic objects were sometimes not displayed
correctly in HDevelop graphics windows if a window
had been resized after new graphics settings had
been applied to it. In this case, displaying an
iconic object (e.g., via dev_display) would use
the settings that had been valid while resizing the
window. This problem has been fixed.
-
HDevelop sometimes crashed when trying to display XLD
contours with very large coordinates. This problem has been
fixed.
Examples
-
The new example
examples/hdevelop/Image/Framegrabber/menable3_shaftencoder.dev
shows how to use the new parameters for line scan cameras and
shaft encoders in combination with the mEnable3 interface.
Speed-up and Enhancements
-
The operators affine_trans_image and
affine_trans_image_size are now faster by up to 200%
if both scale factors are >= 1 in the affine
transformation. Consequently, rotate_image is also
faster by up to 200%. Likewise, zoom_image_factor
and zoom_image_size will be faster by up to 200% if
they enlarge the input image.
-
The operator dyn_threshold is now faster by up to
30% for LightDark = 'light' and LightDark = 'dark'
on Linux systems.
-
The operator gray_histo_abs is now significantly
faster for quantization factors different from 1.
Modified Operators
-
HALCON no longer limits the tuple length to 1000000
elements. It is now possible to create and process
tuples of arbitrary length.
-
The operator check_par_hw_potential (and also the binary
hcheck_parallel) update the hardware knowledge about
CPUs, e.g., number of CPUs, at every call. So far
the knowledge about CPUs has been determined at the
first call only.
-
The operator create_ocv_proj now allows to create an
unlimited number of OCV handles.
-
The operator disp_arc now supports negative angles.
-
When calling the operator find_data_code_2d repeatedly
over different images, the memory consumption of the
data code reader sometimes increased significantly,
depending on the number of results and result
candidates. Therefore, in order to use less memory,
the data code reader was changed in a way that less
memory space is cached in the model.
-
The operator get_system now supports a query
'hostids' that returns the hostids that can be used
for licensing HALCON.
-
The operators polar_trans_image_ext and polar_trans_image_inv
now support centers with negative coordinates.
-
The operator read_image now supports 16 bit PGM and
PPM images.
-
The operator regiongrowing_mean now allows tuples of
more than 10000 elements in StartRows and
StartColumns.
-
The operators rgb1_to_gray and rgb3_to_gray now
support images ot type uint2.
-
The operator select_contours_xld now automatically
calls regress_contours_xld internally if necessary,
i.e., if Feature = 'direction' or Feature =
'curvature' and the contours do not have valid
regression parameters. The behavior is as if
regress_contours_xld had been called with Mode =
'no' and Iterations = 1.
-
Until now, the operator union_collinear_contours_xld
did not unify contours if they overlapped, even if the
overlap is very small. In some cases, apparently
collinear lines (because they were derived from one
object edge) were not connected, due to small
inaccuracies during the segmentation of the contours
and the evaluation of the reference line that was
used to detemine the overlap. This behavior was
counterintuitive. Therefore, a small overlap
tolerance of 0.5 pixels was implemented.
-
The operators write_tuple and read_tuple are now
able to handle tuples with undefined values.
Bug Fixes
-
The operator append_ocr_trainf crashed if the
existing trainfile was not writable. Now, the error
message "Error while opening the file" will be
returned in these cases.
-
The operator binocular_calibration returned wrong
results for RelPose and NFinalPose2 when using
values for parameter EstimParam specifying the
relative pose, like 'pose_rel', '~pose_rel',
'alpha_rel', 'transz_rel'. This problem has been
fixed.
-
The operator cooc_feature_image returned undefined
values for empty input regions. Now, the output
control parameters are set to zero in this case.
-
The operator create_component_model in rare cases
got stuck within an infinite loop on most machines
or crashed on Tru64 UNIX machines. This happened if
the reference points of two components had a
distance in the model image of exactly VariationRow
and VariationColumn in row and column direction,
respectively. This problem has been fixed.
-
The operators create_template and
create_template_rot created inconsistent templates
if the smallest enclosing axis-aligned rectangle of
the input domain was only 1 pixel wide in at least
one direction. As a consequence of this
inconsistency, create_template(_rot) directly or any
operator that used the template (e.g., fast_match*
or best_match*) was likely to crash. This problem
has been fixed.
-
The operator crop_part crashed in rare cases. This
problem has been fixed.
-
The operator disp_channel sometimes returned the
error 3513: "Internal error: number of chords too
big for num_max". This problem has been fixed.
-
The operator expand_domain_gray did not work
correctly if the domain of the input image
corresponded to the full domain but with some rows
(other than the first and the last row) completely
missing. In this case, expand_domain_gray returned
the input image without filling up the missing rows.
This problem has been fixed.
-
In some rare cases the operator find_data_code_2d
had a problem with some square ECC200 symbols: The
operator could decode the symbol if the model was
set to 'enhanced_recognition', but if the model was
adjusted to the correct symbol size, it was not
possible to decode the symbol. This problem has
been fixed.
-
The operator find_shape_model and all variants
thereof in rare cases returned wrong results for
reduced domains. Here, wrong means that if the
reduced domain contained the match that would be
found if find_shape_model were applied to the entire
image, find_shape_model returned a different match
on the reduced domain. This problem has been fixed.
Note that in rare cases existing applications using
find_shape_model or variants therefore now might
miss the correct match when dealing with a reduced
domain. These applications should be adapted in the
following way: It must be ensured that the domain on
the highest pyramid level is at least of size
3x3. Thus, the input domain on the lowest pyramid
level must be chosen to be at least of size
3*pow(2,n-1) in both dimensions, where n denotes the
number of pyramid levels.
-
The operator fit_ellipse_contour_xld did not work
properly for contours that are straight
lines. Calling it with Algorithm set to
'fitzgibbon', 'fhuber', or 'ftukey' threw an
error. Now, fit_ellipse_contour_xld detects the
degeneracy and returns an ellipse with Radius1 equal
to half the length of the line and Radius2 equal to
zero.
-
The operators fit_ellipse_contour_xld and
fit_line_contour_xld crashed if ClippingEndPoints
was larger than the number of contour points. Now,
the operators fit_circle_contour_xld,
fit_ellipse_contour_xld, and fit_line_contour_xld
check if sufficient contour points are available for
fitting the respective model, and if not they all
throw the same error indicating that problem.
-
The operator fit_line_contour_xld sometimes wrongly
returned the error 3264 ("All points classified as
outliers (ClippingFactor too small)"). In
particular, this happened if all points of the input
contour almost perfectly or exactly lay on a
straight line. This problem has been fixed.
-
The operator gen_checker_region sometimes returned
the error 3503 ("Runlength row >= image height") or
the error 3505 ("Runlength column >= image
width"). The errors occurred if clip_region was set
to 'true' using set_system and one of the parameters
WidthRegion or HeightRegion exceeded the global
maximum image width or height, respectively. This
problem has been fixed.
-
The operator gen_circle sometimes rounded the center
coordinates of the circle incorrectly. This problem
has been fixed.
-
The operator gen_region_contour_xld did not observe
the value of 'store_empty_region' that has been set
with set_system. It always acted as if
'store_empty_region' were set to true. This problem
has been fixed.
-
The operator get_contour_angle_xld returned
incorrect results for AngleMode = 'abs'. This
problem has been fixed.
-
The operator get_window_extents returned wrong
results for buffer windows. This problem has been
fixed.
-
The operator gray_dilation_rect returned wrong results for
real images that contain negative values. This problem has
been fixed.
-
The operator image_points_to_world_plane did not
work correctly if tuples of values were passed in
Rows and Cols and the values had different types,
i.e., some of the values were of type integer and
some of them were of type real. In these cases, the
resulting X and Y coordinates were not
meaningful. This problem has been fixed.
-
The operator image_to_world_plane crashed if the
output image contained pixels that cannot be mapped
because their correction caused by the radial
distortion is undefined. This problem has been
fixed.
-
The operator load_par_knowledge no longer causes a
memory leak.
-
The operator read_image erroneously returned int4
images for 16 bit TIFF images. Now, it returns
uint2 images.
Furthermore, it did not read plain PPM
images, i.e., images in which the color values are
stored in ASCII as numbers, correctly. This problem
has been fixed.
-
The operator read_template sometimes returned the
error 8503 ("Inconsistent match file: coordinates out
of range") or crashed when trying to read a template
file that was previously written to a file by using
write_template. This happened if at least one
rotation of the template at any pyramid level
contained no template points during the creation of
the template with create_template_rot or
create_template. This problem has been fixed. In
order to avoid the creation of such inconsistent
templates, the number of pyramid levels now is
automatically reduced until all rotations on all
levels contain a minimum number of template
points. If a rotation at the lowest pyramid level
does not contain enough template points an
appropriate error message is returned by
create_template(_rot) and no model is created.
-
The operator segment_contours_xld sometimes crashed
when passing contours with global
attributes. Instead of crashing, sometimes the error
message 6001 ("Not enough memory available") or 6002
("Memory partition on heap has been overwritten") was
returned. This problem has been fixed.
-
The operator sobel_amp with FilterType = 'sum_abs'
sometimes produced wrong results. The edge
amplitude was sometimes much smaller than the
maximum edge amplitude. This problem has been
fixed.
-
The operator vector_to_rigid was not thread-safe and
might have returned wrong results or an error #6041
when running concurrently in multiple threads. This
problem has been fixed.
-
There was a problem with writing some Data Code
ECC200 models into a file with
write_data_code_2d_model and re-reading them with
read_data_code_2d_model. The problem occurred for
models that were created in enhanced mode and saved
without modifying the slant_max value. These models
could not be read because of a rounding error while
writing. The problem has been fixed.
-
The operator zero_crossings_funct_1d returned the
error 6002 ("Memory partition on heap has been
overwritten") if the function had exactly one
control point whose y value is 0. This problem has
been fixed.
-
The operator zoom_image_factor did not work
correctly for uint2 images with Interpolation =
'none' and large zoom factors. This problem has
been fixed.
Manual
-
The documentation of expand_region now describes the
limiting borders of the expansion when setting Mode
to 'image'.
-
The documentation of change_domain has been
extended. It now notes more clearly that the input
region must not exceed the matrix of the input image
and that using such corrupt iconic objects during
subsequent operations will likely lead to program
crashes.
-
The documentation of orientation_region and
orientation_xld stated a wrong interval for the
resulting orientation. In the documentation an
interval of [-pi/2;3/2pi] was specified. However,
the correct interval is [-pi; pi]. The documentation
has been corrected accordingly.
Bug Fixes
-
Due to a compiler bug in Microsoft Visual C++ 6.0,
the method HCtrlVal::ClearCtrlVal() sometimes
crashed under Windows if the HCtrlVal object
contained a string. This problem has been fixed.
-
The class implementation of HALCON/C++ returned
error #7200 when passing empty objects. It returns
an empty object now.
-
The latest information about new extensions and newly supported boards can be found on the image acquisition web page.
Modified Frame Grabber Interfaces
Bug Fixes
-
Test images were not displayed correctly if their
size differed from that of the model image. This
problem has been fixed.
-
HMatchIt sometimes crashed after returning the error
8510 ("Number of shape model points too
small"). This happened if the chosen model ROI did
not contain a sufficient number of pixels that
exceeded the specified contrast values. This problem
has been fixed.
|