 |
|
|
Release Notes for HALCON 7.1
|
 |
This document provides the release notes for MVTec HALCON 7.1, as released
in August 2005. HALCON 7.1 is a major new release.
Overview
This document contains the following information:
-
Compatibility
-
Major New Features of HALCON 7.1
-
Detailed Description of Changes in HALCON
7.1 (relative to HALCON 7.0.2)
-
Major New Features of
HALCON 7.0
-
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
Licenses
All HALCON 7.0 licenses must be replaced or upgraded. Please
contact your local distributor.
HALCON Library
Compared to HALCON 7.0, many extensions have been introduced. Thus,
the HALCON 7.1 libraries are not compatible with HALCON 7.0 or
earlier versions.
HALCON Applications
Please re-compile all C, C++, or COM programs developed with HALCON
7.0.x.
The incompatibility with HALCON 7.0 or earlier versions mainly
concerns the binaries, with only few changes in the language
interfaces. If you encounter problems during recompiling your
programs, please check the detailed description of changes below.
Please note the following incompatibilities:
Frame Grabber Interfaces
Frame grabber interfaces developed with HALCON 7.0.x or
HALCON 6.1.x are binary compatible with HALCON 7.1, interfaces
developed with older versions must be re-generated.
Extension Packages
Please re-generate your own extension packages developed with
HALCON 7.0.x.
ActivVisionTools
Since all ActivVisionTools versions are based on HALCON 7.0.1 or
below, none of them can be used directly with HALCON 7.1. By
installing HALCON 7.1, you would thus disable such an
ActivVisionTools installation. Therefore, the setup program of HALCON
7.1 checks whether there is an ActivVisionTools installation on your
computer and warns you that by continuing to install HALCON 7.1 you
will disable your ActivVisionTools installation.
-
If you have been using ActivVisionTools 3.0, please
contact your distributor for further information on how to run
this version together with HALCON 7.1.
-
In contrast, ActivVisionTools 1.0 to 2.2 cannot be used
together with HALCON 7.1.
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". Note that if
you only want to evaluate HALCON 7.1, you can minimize the
switching effort by installing only the demo version.
General Features
Extended Functionality
-
HALCON's data code reader can now also read PDF417 data codes. The reader is robust to
occlusions and to poor print quality, invariant to image contrast
and to rotation, and allows simultaneous detection of multiple
instances. All features of PDF417 are supported.
-
HALCON now provides pre-trained OCR
classifiers that are based on a large amount of training data
stemming from various application areas. These fonts allow you to
read text on forms, on pharmaceutical or industrial products, dot
prints, and even handwritten numbers. Furthermore, HALCON
includes pre-trained fonts for OCR-A, OCR-B, and MICR.
-
So far, HALCON offered the 3D camera calibration for area scan
cameras. With HALCON 7.1 you can now also calibrate line scan cameras.
-
HALCON now provides radiometric
self-calibration (gray value calibration). This preprocessing
step increases the accuracy of all high-accuracy machine vision
methods like shape-based matching, point finders, measurements,
or subpixel line and edge extraction. The calibration process
needs no special calibration target and no optimized
illumination.
-
With HALCON 7.1, most parameters of the shape-based matching
can be determined automatically.
-
HALCOn now provides operators for uncalibrated binocular stereo. For
this, no special calibration target is needed.
-
HALCON now provides operators for the self-calibration of a camera rotated around its
optical center and for spherical mosaicking (360°
mosaicking). For this calibration process, no special
calibration target is needed.
-
HALCON now provides operators for inpainting. These operators can be used,
e.g., to reconstruct destroyed image data or to remove unwanted
image parts.
-
More filtering operators have been sped up by providing an MMX implementation.
Supported Operating Systems
HALCON now also runs natively on 64 bit systems. It is
available for Windows XP x64 and
Linux on Intel EM64T or AMD64
processors.
HDevelop
Export to C# and Visual Basic .NET
External Procedures
HDevelop procedures can now also be stored
externally. Thus, multiple programs can use the same
procedures.
Documentation
New Application Note: 1D Metrology
This Application Note introduces you to
HALCON's measure and fuzzy measure tool. With these tools you can
easily create applications that measure the dimensions of objects
quickly and with high accuracy.
Quick Guide Describes Color Processing
The "Quick Guide" now also shows you how to use HALCON's operators
for color processing, e.g., to
differentiate between object types based on their color.
Extended Application Note on 3D Machine Vision
HDevelop Tutorials
Detailed release notes can be obtained for the following topics:
-
HDevelop
-
HALCON Library
-
HALCON/C
-
HALCON/C++
-
HALCON/COM
-
Frame Grabber Interfaces
-
Extension Package Interface
-
HMatchIt
-
Supported Operating Systems
-
Miscellaneous
Please note that these release notes are relative to HALCON 7.0.2. If
you are upgrading from earlier versions, you should also consult the
release notes for earlier HALCON versions.
Speed-Up and Enhancements:
-
HDevelop is now able to export programs to C# and Visual Basic
.NET. The exported program file is meant to be integrated into
template projects that can be found in the directories
%HALCONROOT%\examples\c#\HDevelopTemplate and
%HALCONROOT%\examples\vb.net\HDevelopTemplate, respectively.
-
HDevelop now provides a mechanism to store and use external
procedures. External procedures are procedures that are stored
in separate files in a directory specified by the user. All
external procedures from the specified directories are loaded
when HDevelop is started and hence are available for use in all
programs.
-
HALCON now provides means to execute HDevelop programs and
procedures in user applications. This HDevelop execution engine
is provided as a DLL hdevengine.dll under Windows and as a shared
library libhdevengine.so under Linux/UNIX. The C++ include file
HDevEngine.h containing the relevant HDevelop execution engine
classes is provided in the HALCON include directory under the
subdirectory hdevengine. An example on how to use the engine can
be found under examples/hdevengine.
Functionality:
-
HDevelop's language provides the following new tuple functions:
-
cumul calculates the cumulative sums of a tuple.
-
remove removes a set of elements from a tuple.
-
median calculates the median of a tuple.
-
select_rank returns the element at rank n of a tuple.
-
HDevelop's C++ code export has been improved regarding
readability and runtime efficiency of the exported code.
-
Each HDevelop graphics window now has its own display parameters.
Thus, changing HDevelop's visualization parameters now only
applies to the active graphics window.
-
The precedence of the bit operators in HDevelop has been made
identical to C and C++. In previous HDevelop versions, and and
band were in the same precedence group and were evaluated from
left to right. The operator band now has higher precedence than and.
Likewise, or, bor, xor, and bxor were in the same precedence
group and were evaluated from left to right. The precedence now
is bxor -> bor -> xor -> or. In total, the precedences now are
band -> bxor -> bor -> and -> xor -> or (highest to lowest).
-
HDevelop now supports different browsers under UNIX, i.e., it is
able to display its help pages in the browser that is currently
installed on the system. Which browser is currently installed is
decided by checking whether any of the following browsers is
available in the path (in this order): firefox, mozilla,
netscape, opera, konqueror, galeon.
Examples:
-
The new example program examples/hdevelop/explore_halcon.dev
demonstrates a multitude of machine vision solutions from
many different industries and application areas.
-
The new example programs pdf417_simple.dev and
pdf417_optimized.dev in examples/hdevelop/Applications/Datacode
and pdf417_default_settings.dev and pdf417_optimized_settings.dev
in examples/hdevelop/Tools/Datacode show how to read PDF417 data codes.
-
The new example programs
examples/hdevelop/Tools/Calibration/line_scan_calibration.dev and
examples/hdevelop/Applications/Calibration/world_coordinates_line_scan.dev
show how to calibrate line scan
cameras.
-
The new example program
examples/hdevelop/Tools/Calibration/radiometric_self_calibration.dev
shows how to use the new operator
radiometric_self_calibration.
-
The new example programs
examples/hdevelop/Tools/Calibration/get_circle_pose.dev and
examples/hdevelop/Applications/Calibration/3d_position_of_circles.dev
show to use the new operator
get_circle_pose.
-
The new example program
examples/hdevelop/Tools/Calibration/stationary_camera_self_calibration.dev
shows how to use the new operator
stationary_camera_self_calibration.
-
The new example program
examples/application_guide/3d_machine_vision/hdevelop/bundle_adjusted_mosaicking.dev
shows how to use the new operators for bundle-adjusted
mosaicking.
-
The example program
examples/hdevelop/Tools/2D-Transformations/gen_projective_mosaic.dev
has been rewritten to use the new operators for
bundle-adjusted mosaicking.
-
The new example programs
examples/hdevelop/Tools/Stereo/uncalib_stereo_boxes.dev and
examples/hdevelop/Applications/Stereo/board_segmentation_uncalib.dev
show how to use the new operators for uncalibrated binocular stereo.
-
The new example programs handeye_create_robot_poses.dev,
handeye_stationarycam_calibration.dev,
handeye_movingcam_calibration.dev, and
handeye_stationarycam_grasp_nut.dev in
examples/application_guide3d_machine_vision/hdevelop show how to
use HALCON's hand-eye calibration for robot vision. They are
described in detail in the "Application
Note on 3D Machine Vision".
-
The new example program
examples/hdevelop/Segmentation/Topography/watersheds_threshold.dev
shows how to use the new operator
watersheds_threshold.
-
The new example program examples/hdevelop/XLD/Features/fit_ellipse_tooth_rim_xld.dev
shows how to use geometric
distances with the operators fit_ellipse_contour_xld,
dist_ellipse_contour_xld, and dist_ellipse_contour_points_xld.
-
The new example programs in examples/hdevelop/Filter/Inpainting
show how to use the new operators for
inpainting.
-
The following new example programs show how to use the new operators for smoothing and enhancing
images: isotropic_diffusion.dev and anisotropic_diffusion.dev
in examples/hdevelop/Filter/Smoothing/,
coherence_enhancing_diff.dev, mean_curvature_flow.dev, and
shock_filter.dev in examples/hdevelop/Filter/Enhancement/.
-
The new example programs in
examples/application_guide/1d_metrology/hdevelop show how to use
HALCON's measure and fuzzy measure tool. They belong to the new Application Note on 1D Metrology.
-
The new example programs color_fuses.dev, color_pieces.dev,
color_pieces_euclid.dev, and color_simple.dev in the directory
examples/quick_guide/hdevelop show how to perform color
processing in HALCON. They are described in detail in the "Quick Guide to HALCON".
-
The new example program
examples/hdevelop/Segmentation/Threshold/var_threshold.dev shows
how to use the new operator
var_threshold.
-
The new example program
examples/hdevelop/XLD/Transformation/union_cocircular_contours_xld.dev
shows how to use the new operator
union_cocircular_contours_xld.
-
In the example program
examples/hdevelop/XLD/Transformation/union_contours_xld.dev the
old operator union_straight_contours_xld was replaced by the new operator union_adjacent_contours_xld.
-
The examples for OCR have been rewritten to use one of the new pre-trained OCR classifiers.
-
The new example program
examples/hdevelop/Regions/Features/rectangularity.dev shows how
to use the new operator rectangularity.
-
The new example program
examples/hdevelop/Image/Features/estimate_noise.dev shows how to
use the new operator estimate_noise.
-
The new example program
examples/hdevelop/XLD/Transformation/crop_contours_xld.dev shows
how to use the new operator
crop_contours_xld.
-
The new example program
examples/hdevelop/XLD/Features/test_self_intersection_xld.dev
shows how to use the new operator
test_self_intersection_xld.
-
The following new example programs in hdevelop/Image/Framegrabber
show how to use the new frame grabber
interfaces:
- menable3.dev, menable3_continuous.dev, menable3_crop.dev,
menable3_parameters.dev, menable_simple.dev
- directfile.dev
- tag.dev, tag_crop.dev, tag_parameters.dev,
tag_simple.dev
-
The new example program
examples/hdevelop/Image/Creation/gen_image_interleaved.dev shows
how to use the new operator
gen_image_interleaved.
-
The new example program
examples/hdevelop/Graphics/Output/dump_window_data.dev shows how
to use the new operator dump_window_image.
-
The new example programs gray_closing_shape.dev,
gray_dilation_shape.dev, gray_erosion_shape.dev, and
gray_opening_shape.dev in
examples/hdevelop/Morphology/Gray-Values/ show how to use the
corresponding operators.
-
The new example programs gray_opening_rect.dev and
gray_closing_rect.dev in examples/hdevelop/Morphology/Gray-Values
show how to use the new operators
gray_opening_rect and gray_closing_rect.
-
The new example programs invert_funct_1d.dev and
compose_funct_1d.dev in examples/hdevelop/Tools/Function/ show
how to use the new operators for 1D functions
.
-
The new example program
examples/hdevelop/File/Text/fread_line.dev shows how to use the
new operator fread_line.
Bug Fixes:
-
HDevelop's gray histogram displayed an incorrect peak value for
int1 images. This problem has been fixed.
-
HDevelop erroneously allowed indexing into an empty tuple. This
problem has been fixed.
Manual:
-
Two tutorials introduce you to HDevelop, HALCON's interactive
development tool: The tutorial Getting Started With
HDevelop shows you how to load and run HDevelop programs.
How to create your own application in HDevelop is explained
in the tutorial Creating an HDevelop Application.
-
The HDevelop User's Manual is now available in a new edition. It
has been updated and extended following the changes in HALCON
7.1. Especially, it now describes how to work with
external HDevelop procedures.
New Operators:
-
HALCON has been extended with an operator
radiometric_self_calibration that performs a radiometric self
calibration from multiple images with different exposures.
The new example program
examples/hdevelop/Tools/Calibration/radiometric_self_calibration.dev
shows how to use the new functionality. It uses the new example
images in the directory images/radiometry.
-
HALCON has been extended with the operator get_circle_pose, which
determines the position and orientation of a circle in 3D from
its perspective 2D projection.
The new example programs
examples/hdevelop/Tools/Calibration/get_circle_pose.dev and
examples/hdevelop/Applications/Calibration/3d_position_of_circles.dev
show how to use the new functionality.
-
HALCON now has an operator stationary_camera_self_calibration for
the self-calibration of stationary cameras. Stationary means
that the camera can only rotate around its optical center and can
zoom.
Furthermore, there are two new operators
cam_mat_to_cam_par and cam_par_to_cam_mat that convert the output
of stationary_camera_self_calibration to the format for the
camera parameters used by camera_calibration.
Finally, since the
output of stationary_camera_self_calibration can be used to
create spherical mosaic images, HALCON now has an operator
gen_spherical_mosaic to create such images.
The new example program
examples/hdevelop/Tools/Calibration/stationary_camera_self_calibration.dev
shows how stationary_camera_self_calibration can be used to
determine the interior camera parameters of a camera. It uses
the new example images in the directory images/self_calib.
-
HALCON has been extended with two operators for bundle-adjusted
mosaicking: The operator bundle_adjust_mosaic performs a bundle
adjustment of a planar mosaic image. The operator
gen_bundle_adjusted_mosaic creates a mosaic image
based on the output of bundle_adjust_mosaic.
The new example program
examples/application_guide/3d_machine_vision/hdevelop/bundle_adjusted_mosaicking.dev
shows how to use the new functionality. The example program
examples/hdevelop/Tools/2D-Transformations/gen_projective_mosaic.dev
has been rewritten to use these new operators.
In the "Application Note on 3D Machine Vision", the section on
Uncalibrated Mosaicking has been extended to also describe the
bundle-adjusted mosaicking.
-
HALCON now comprises the following operators for uncalibrated
binocular stereo: match_fundamental_matrix_ransac,
match_essential_matrix_ransac, match_rel_pose_ransac,
vector_to_fundamental_matrix, vector_to_essential_matrix,
vector_to_rel_pose, essential_to_fundamental_matrix,
rel_pose_to_fundamental_matrix,
reconst3d_from_fundamental_matrix, and
gen_binocular_proj_rectification.
A new example program for stereo with known cameras is
examples/hdevelop/Tools/Stereo/uncalib_stereo_boxes.dev. The
functionality of projective rectification is demonstrated by the
new example
examples/hdevelop/Applications/Stereo/board_segmentation_uncalib.dev.
New images for both examples are located under
stereo/uncalib.
-
HALCON has been extended with the operator watersheds_threshold
that computes the watersheds of an image and returns the
corresponding basins. In order to get reasonable results it is
possible to specify the minimum height of the watersheds by
passing a threshold parameter.
The new example program
examples/hdevelop/Segmentation/Topography/watersheds_threshold.dev
shows how to use the new functionality. It uses the new example
images images/pills and images/mvtec_logo.
-
HALCON has been extended with the following operators for
inpainting:
- harmonic_interpolation performs an image inpainting
operation using harmonic interpolation.
- inpainting_aniso performs an image inpainting operation
using anisotropic diffusion.
- inpainting_ced performs an image inpainting operation using
coherence-enhancing diffusion.
- inpainting_mcf performs an image inpainting operation using
a mean curvature flow.
- inpainting_texture performs an image inpainting operation
using a texture propagation approach.
The following new example programs in
examples/hdevelop/Filter/Inpainting/ show how to use the new
functionality: harmonic_interpolation.dev, inpainting_aniso.dev,
inpainting_ced.dev, and inpainting_mcf.dev show how the
corresponding operators can be used to fill up unreconstructed
areas in a distance image created by stereo reconstruction;
inpainting_texture.dev shows how to use inpainting_texture to
remove unwanted objects from a photograph.
-
HALCON has been extended with operators for smoothing and
enhancing images:
- isotropic_diffusion performs an isotropic diffusion on an
image. This corresponds to a Gaussian filtering. However, in
isotropic_diffusion the filtering is performed by solving the
underlying Laplace partial differential equation with von
Neumann boundary conditions at the borders of the image domain.
This causes only the gray values inside the domain to be used
for the filtering and helps to avoid border artifacts in most
cases.
- anisotropic_diffusion performs an anisotropic
diffusion on an image. anisotropic_diffusion provides three
different anisotropic diffusion functions and hence is more
comprehensive than anisotrope_diff, which it obsoletes.
anisotrope_diff is still supported for backwards compatibility,
however.
- coherence_enhancing_diff performs a coherence enhancing
diffusion on an image.
- mean_curvature_flow performs a mean curvature flow on an
image. The mean curvature flow smoothes along the edge
direction, but performs no smoothing across edges.
- shock_filter performs a shock filter on an image. The
shock filter sharpens edges.
The following new example programs show how to use the new
operators: isotropic_diffusion.dev and anisotropic_diffusion.dev
in examples/hdevelop/Filter/Smoothing/,
coherence_enhancing_diff.dev, mean_curvature_flow.dev, and
shock_filter.dev in examples/hdevelop/Filter/Enhancement/.
-
HALCON has been extended with an operator var_threshold that
performs thresholding based on local mean and standard deviation.
The new example program
examples/hdevelop/Segmentation/Threshold/var_threshold.dev shows
how to use var_threshold to segment characters in an image.
-
There are two new operators to merge XLD contours:
- union_adjacent_contours_xld merges contours whose endpoints
are close together. This operator (together with the operator
union_collinear_contours_xld) replaces the operator
union_straight_contours_xld, which is now obsolete and remains
in the HALCON library for compatibility reasons only.
- union_cocircular_contours_xld merges
contours within an XLD contour array which are on the same
circle.
In the example program
examples/hdevelop/XLD/Transformation/union_contours_xld.dev the
old operator union_straight_contours_xld was replaced by the new
operator union_adjacent_contours_xld. The new example program
examples/hdevelop/XLD/Transformation/union_cocircular_contours_xld.dev
shows how to merge contours belonging to similar circles.
-
HALCON has been extended with the operator rectangularity, which
determines the rectangularity of a region. Accordingly, the
operator select_shape now offers a new feature 'rectangularity'.
The new example program
examples/hdevelop/Regions/Features/rectangularity.dev shows how
to use the new functionality.
-
HALCON has been extended with an operator estimate_noise that
estimates the standard deviation of the noise within an
image. The estimation process is solely based on a single input
image. Different methods that are able to estimate the
noise from a single image are available.
The new example program
examples/hdevelop/Image/Features/estimate_noise.dev shows how to
use estimate_noise.
-
HALCON now has an operator crop_contours_xld that crops an XLD
contour against a given rectangle. crop_contours_xld clips each
contour segment against the clipping rectangle, i.e., in contrast
to clip_contours_xld it creates a shorter segment for each
segment that partially lies inside the clipping rectangle.
Furthermore, crop_contours_xld has an option to create closed
output contours from closed input contours.
The new example program
examples/hdevelop/XLD/Transformation/crop_contours_xld.dev shows
how to use this operator.
-
HALCON now has an operator test_self_intersection_xld that tests
an XLD contour whether it intersects itself. If the contour is
open, a parameter specifies whether the contour is closed before
applying the test. test_self_intersection_xld returns a tuple
that contains the result of the test for each input contour.
Each element of the tuple holds either 1 or 0, depending on
whether the corresponding contour self-intersects.
The new example program
examples/hdevelop/XLD/Features/test_self_intersection_xld.dev
shows how to use this operator.
-
HALCON offers the new operator dist_ellipse_contour_points_xld,
which computes the distances of all contour points to an ellipse.
The usage is shown in the new example program
examples/hdevelop/XLD/Features/fit_ellipse_tooth_rim_xld.dev
which uses the new image tooth_rim.
-
HALCON now has an operator gen_image_interleaved that creates a
three-channel HALCON image from a matrix of interleaved pixels.
gen_image_interleaved works in a similar manner as gen_image1.
Furthermore, gen_image_interleaved supports cropping and, in case
of 16 bits per channel and pixel, shifting of the pixel values to
the right.
The new example program
examples/hdevelop/Image/Creation/gen_image_interleaved.dev shows
how to use this operator.
-
HALCON has been extended with the operator dump_window_image that
dumps the contents of a graphics window into a HALCON image
object.
The new example program
examples/hdevelop/Graphics/Output/dump_window_data.dev shows how
to use the new functionality.
-
HALCON has the two new operators gray_opening_rect and
gray_closing_rect, complementing gray_erosion_rect and
gray_dilation_rect.
The new example programs
examples/hdevelop/Morphology/Gray-Values/gray_opening_rect.dev
and
examples/hdevelop/Morphology/Gray-Values/gray_closing_rect.dev
show how to use the new functionality.
-
HALCON now has 2 new operators for handling 2D homogeneous
matrices:
- hom_mat2d_transpose computes the transpose of a homogeneous
3x3 transformation matrix.
- hom_mat2d_determinant computes the determinant of a
homogeneous 3x3 transformation matrix.
-
HALCON now provides the following new tuple operators:
-
tuple_cumul calculates the cumulative sums of a tuple.
-
tuple_remove removes a set of elements from a tuple.
-
tuple_median calculates the median of a tuple.
-
tuple_select_rank returns the element at rank n of a tuple.
-
HALCON has been extended with an operator fread_line that is able
to read an entire line from a file.
The new example program
examples/hdevelop/File/Text/fread_line.dev shows how to use
fread_line.
-
The HALCON operator set for 1D functions has been extended with the
following operators:
- get_y_value_funct_1d returns the y-value of a 1D
function at an arbitrary x-value.
- invert_funct_1d that inverts monotonic 1D functions.
- compose_funct_1d composes two 1D functions.
The new example programs invert_funct_1d.dev and
compose_funct_1d.dev in examples/hdevelop/Tools/Function/ show
how to use the new operators.
Speed-Up and Enhancements:
-
HALCON now supports the detection and the decoding of the 2D data
code symbology PDF417. Both the conventional PDF417 as well as
the Compact PDF417 are supported. The new functionality is
provided by extending the existing operators
create_data_code_2d_model, clear_data_code_2d_model,
clear_all_data_code_2d_models, find_data_code_2d,
query_data_code_2d_params, set_data_code_2d_param,
get_data_code_2d_param, get_data_code_2d_results,
get_data_code_2d_objects, write_data_code_2d_model, and
read_data_code_2d_model accordingly.
The new example programs pdf417_simple.dev and
pdf417_optimized.dev in examples/hdevelop/Applications/Datacode
and pdf417_default_settings.dev and pdf417_optimized_settings.dev
in examples/hdevelop/Tools/Datacode demonstrate how to use the
new functionality. The example programs use the new example
images in the directory images/datacode/pdf417.
-
The QR Code reader that is used by the operator find_data_code_2d
was changed in a way that it is now able to read QR Codes even if
only two of the three position detection patterns are visible.
This works for QR Code symbols that have no or only very low
distortions.
-
HALCON provides the functionality to calibrate line scan pinhole
cameras. It is also possible to rectify the images of these
cameras and to project points and contours extracted from these
images into the world plane. All relevant HALCON operators have
been adapted accordingly.
The new example programs
examples/hdevelop/Tools/Calibration/line_scan_calibration.dev and
examples/hdevelop/Applications/Calibration/world_coordinates_line_scan.dev
show how to use the new functionality. They use the new example
images images/calib/calib_line_scan_[01-17] and
images/caliper/caliper_line_scan.
-
HALCON now provides pre-trained OCR classifiers for the most
commonly used fonts. The directory "ocr" contains the following
OCR classifiers:
- Document.fnt, Document_0-9.fnt, Document_0-9A-Z.fnt
- DotPrint.fnt, DotPrint_0-9.fnt, DotPrint_0-9+.fnt,
DotPrint_0-9A-Z.fnt
- HandWritten_0-9.fnt
- Industrial.fnt, Industrial_0-9.fnt, Industrial_0-9+.fnt,
Industrial_0-9A-Z.fnt
- MICR.fnt
- OCRA.fnt, OCRA_0-9.fnt, OCRA_0-9A-Z.fnt
- OCRB.fnt, OCRB_0-9.fnt, OCRB_0-9A-Z.fnt
- Pharma.fnt, Pharma_0-9.fnt, Pharma_0-9+.fnt,
Pharma_0-9A-Z.fnt
The total number of character samples used to train these
fonts is greater than 2,000,000. The samples were selected from
hundreds of real-world applications.
The names of the fonts are chosen such that they indicate the
characters that are contained in the font. Hence, OCRB_0-9.fnt
means that the font contains the characters 0-9. A '+' in the
name means that certain special characters are contained in the
font. A name with no character indication means that the most
comprehensive set of characters is contained in the font. Since
the general character set and the special character set are
font-specific, it is useful to query the characters contained in
the font using get_params_ocr_class_mlp.
The fonts Document*.fnt can be used to read symbols printed
with fonts similar to Arial, Courier, or Times New Roman. These
are typical fonts for documents, magazines, books, newspapers, or
letters. For machine vision applications, they typically can be
used to read forms.
The fonts DotPrint*.fnt can be used to read characters printed
with dot printers. Typical industries are: Food (best before
date), retail, transportation (product id, number, manufacturer),
automobile, health care, machinery, metal (lot number), and
pharmaceutical (lot number, best before date).
The font HandWritten_0-9.fnt can be used to read handwritten
digits. Typical applications are: Reading of forms, reading of
ZIP codes (e.g., letters, parcels, forms), reading of dates
(e.g., checks, forms), reading of amounts (e.g., checks,
forms).
The fonts Industrial *.fnt can be used to read characters
printed in fonts similar to Arial, OCR-B, or other sans serif
fonts. Typical applications are: Identification on chips and
electronic components, serial numbers, lot numbers, product
identifications.
The font MICR.fnt can be used to read characters printed in
the font MICR, which is mainly used on checks.
The fonts OCRA*.fnt can be used to read characters printed in
the font OCR-A, which is a typical industrial font because it can
be read very robustly.
The fonts OCRB*.fnt can be used to read characters printed in
the font OCR-B, which is also a very common industrial font that
can be read robustly.
The fonts Pharma*.fnt can be used to read characters printed
in fonts similar to Arial, OCR-B, and other fonts. The font
samples were especially selected for the use in pharmaceutical
applications: Lot numbers on blisters, bottles and packages, as
well as best before dates on blisters, bottles and packages.
Please note that these classifiers have been trained with
black-on-white characters. Therefore, if the application must
read white-on-black characters the image must be inverted before
calling do_ocr_single_class_mlp or do_ocr_multi_class_mlp.
All relevant HALCON OCR example programs have been rewritten
to use one of the above classifiers as the default OCR
classifier.
-
The operators create_shape_model and create_scaled_shape_model
now offer the possibility to automatically determine the
parameters Optimization, Contrast, and MinContrast. Furthermore,
now it is possible to automatically determine the values of the
hysteresis thresholds and of the minimum size of the model
components, which can be passed within the parameter
Contrast. Additionally, the operator determine_shape_model_params
as well as the respective operators of the component-based
matching have been extended accordingly.
-
The operators add_image, mean_image, scale_image, and sub_image
are now faster on Windows and Linux machines with Intel Pentium
compatible processors. This was done by providing an MMX
implementation.
Furthermore, the performance of mean_image without MMX was
also increased slightly.
The operator scale_image now also provides an
integer-arithmetic implementation. You can select whether this
faster integer or (slightly more accurate) floating point
algorithm is used via the system parameter 'int_zooming'.
-
The standard calibration plate now has an asymmetric pattern
given by a triangular mark in the upper left corner of its black
frame. This allows detecting the plate's orientation uniquely and
affects the following operators:
- The new operator gen_caltab creates a descripton of an
asymmetric calibration plate.
- find_marks_and_pose now detects the orientation of an
asymmetric plate if defined in its description file.
- disp_caltab displays the orientation of an asymmetric plate
if defined in its description file.
- sim_caltab now also incudes a triangular orientation mark
to the calibration plate if defined in its description
file.
The predefined standard description files in the directory
calib now define the orientation mark. The description files of
the old, symmetric calibration plates have been renamed to
caltab_200mm_old.descr, caltab_100mm_old.descr,
caltab_30mm_old.descr, caltab_10mm_old.descr,
caltab_6mm_old.descr, caltab_2500um_old.descr, and
caltab_650um_old.descr.
The Application Note on 3D Machine Vision has been adapted
accordingly. Especially, the description of a consistency check
between the estimated poses of a stereo image pair is no longer
needed and has been removed. This also affects the old example
program
examples/application_guide/3d_machine_vision/hdevelop/stereo_calibration_with_consistency_check.dev,
which has been adapted accordingly and renamed into
examples/application_guide/3d_machine_vision/hdevelop/stereo_calibration.dev.
A new appendix explains the new asymmetric pattern of the
calibration plate.
-
The operators fit_circle_contour_xld and fit_ellipse_contour_xld
now incorporate a method for fitting circles or ellipses based on
geometric distances. Similarly, the operator
dist_ellipse_contour_xld now provides a geometric distance
measure.
In the directory examples/hdevelop/XLD/Features/, the
example program fit_circle_contour_xld.dev has been extended
correspondingly. Furthermore, the new example program
fit_ellipse_tooth_rim_xld.dev has been added, which shows the
usage of geometric distances with the operators
fit_ellipse_contour_xld and dist_ellipse_contour_xld. It uses the
new image tooth_rim.
-
The operators gray_closing_shape, gray_dilation_shape,
gray_erosion_shape, and gray_opening_shape now support mask sizes
of type float. When a mask size of type float is passed, the
result is interpolated from the results of the operator with the
next lower and higher odd integer mask size.
The new example
programs gray_closing_shape.dev, gray_dilation_shape.dev,
gray_erosion_shape.dev, and gray_opening_shape.dev in
examples/hdevelop/Morphology/Gray-Values/ show how to use these
operators.
Modified Operators:
-
The default of the system parameter 'pregenerate_shape_models'
has been set to 'false'. This enables a much faster shape model
generation by default. Applications that want to use
pregenerated shape models should insert the following call at the
beginning of the program:
set_system('pregenerate_shape_models','true').
-
The operator watersheds now also supports uint2 and real images.
-
The HALCON data code reader was changed in a way that speeds up
the search of light symbols for models there the polarity is set
to 'any'. Now, searching light symbols of a specific size will
take nearly the same time as searching dark symbols of the same
size.
-
Now, the operator find_data_code_2d no longer doubles the
backslash character '\' in the output string while reading QR
codes. This was included to distinguish the character '\' from
an ECI escape sequence (see QR Code standard ISO18004, section
15.2). However, this was confusing for the user, who rarely uses
ECI and expects to get exactly the same data that was encoded in
the symbol.
-
The operators hom_mat3d_rotate and hom_mat3d_rotate_local now
support rotations about an arbitrary axis. To do this, the
parameter Axis also accepts a vector with three numbers (in
addition to the strings 'x', 'y', and 'z').
-
Gray value profiles of measure objects are not cropped anymore
when exceeding image borders. Protruding profile parts are filled
with zeros. This affects the operators measure_projection and
fuzzy_measure_pos, fuzzy_measure_pairs, fuzzy_measure_pairing
when using a fuzzy position set.
-
HALCON's OCR now improves the maximum scaling of gray values for
extremely thin characters.
-
The operators do_ocr_single, do_ocr_multi, ocr_get_features,
testd_ocr_class_box, traind_ocr_class_box,
do_ocr_single_class_mlp, do_ocr_multi_class_mlp, and
get_features_ocr_class_mlp now support images of type uint2.
Furthermore, the operators write_ocr_trainf,
write_ocr_trainf_image, append_ocr_trainf, and concat_ocr_trainf
now support writing an OCR training file in binary file format
with different image sizes. The 'ocr_trainf_version' parameter
of the operators set_system and get_system determines which
format is used for writing a training file. The operators
read_ocr_trainf, read_ocr_trainf_select, read_ocr_trainf_names,
trainf_ocr_class_box, and trainf_ocr_class_mlp read all file
formats.
-
The operator points_foerstner now also supports uint2 and real
images.
-
The operator select_obj now also accepts empty tuples as Index.
The documentation has been adapted accordingly.
-
The operators sobel_amp and sobel_dir now return the correct edge
amplitude for ideal step edges if no smoothing is performed,
i.e., if Size = 3. Since the output of the Sobel filter is not
isotropic, this behavior only occurs for horizontal and vertical
edges. This change also prevents saturated pixels in the edge
image.
If smoothing is performed, i.e., if Size >= 5, the amplitudes
are now scaled by a factor of 2 compared to the case with no
smoothing because the smoothing reduces the edge amplitudes, and
consequently some information would be lost if no scaling were
performed.
Applications that use sobel_amp or sobel_dir must be
adapted to reflect this change. Depending on the mode
selected with FilterType and the smoothing selected with Size,
this means that the thresholds used to segment the edge image
must be divided by 2 or 4.
-
HALCON no longer limits the tuple length to 1000000 elements. It
is now possible to create and process tuples of arbitrary length.
-
The sequence in which write_cam_par writes the interior camera
parameters to the file is now identical to the sequence in which
the parameters appear in the tuple CamParam, i.e., the sequence
is: [Focus, Kappa, Sx, Sy, Cx, Cy, ImageWidth, ImageHeight]. The
operator read_cam_par reads both file types (existing files
stemming from previous HALCON releases and new files) correctly,
independently of the sequence in which the parameters appear in
these files.
-
The operator write_image now stores the dpi resolution of an
image. To enable this, set_system has been extended with a new
parameter 'image_dpi' that defines the resolution to be stored in
the image file with write_image.
Bug Fixes:
-
The operator best_match_rot_mg crashed if a matching template was
created, deleted, and then read_template was called with a
non-existing template file. This problem has been fixed.
-
The operator closing_rectangle1 raised the error 3510 (exceeding
the maximum number of run lengths while automatic expansion) in
rare cases. This problem has been fixed.
-
The operators create_component_model and train_model_components
returned the HALCON error 6005 (Tmp-memory management: Null
pointer while freeing) if a very large template was given. Now,
the error 6001 (Not enough memory available) is returned.
-
The operator disp_obj crashed when displaying int4 images that
contained INT4_MAX, INT4_MIN, and 0 as gray values. Besides, in
rare cases it ignored the LUT set with set_lut under Windows.
These problems have been fixed
-
In some cases draw_xld_mod returned erroneous contours if the
Shift button was pressed. This problem has been fixed.
-
The operator edges_sub_pix now sets the correct edge amplitude
for Filter = 'sobel' for ideal step edges. Since the output of
the Sobel filter is not isotropic, this behavior only occurs for
horizontal and vertical edges. Since the edge amplitude is used
to perform the hysteresis thresholding, this change implies that
the hysteresis thresholds have to be divided by 2 in applications
that use edges_sub_pix with Filter = 'sobel'.
-
The operator find_component_model in rare cases returned the
error 3503 (run length row >= image height) or 3513 (number of
chords too big for num_max) or got stuck within an infinite
loop. This might have happened if 'least_squares', 'least_squares_high',
or 'least_squares_very_high' was selected for the parameter
MinScoreComp. This problem has been fixed.
-
The operator find_shape_model in rare cases returned different
results if called multiple times and if the parameter SubPix was
set to 'least_squares_high' or 'least_squares_very_high'. This
problem has been fixed.
-
The operator find_data_code_2d sometimes returned the HALCON
error 9201 (Singular value decomposition did not converge).
Furthermore, on very small ROIs, find_data_code_2d returned the
error 8109 ("convol: no filter object has got empty region"). These
problems have been fixed.
-
The operator find_data_code_2d, when called in training mode,
adapted in some cases the model even if the symbol could not be
read. This happened especially in cases where the symbol could
be read in enhanced mode but not be trained. This problem has
been fixed: If the symbol can be read in enhanced mode, the model
will be trained accordingly. If the model cannot be trained, it
will not be adapted.
-
The operator fuzzy_measure_pairs sometimes returned different
edge pairs to measure_pairs if no fuzzy function hade been
set. This problem has been fixed.
-
The operator gen_image1 did not work correctly for int2 and uint2
images. It did not set the number of significant bits for the
image correctly. This caused the images to be displayed
incorrectly. This problem has been fixed.
-
The operator gen_parallels_xld grouped some polygons into
parallels even if their distance was larger than specified with
the parameter Dist. This problem has been fixed.
-
The operator gen_projective_mosaic no longer crashes for uint2
and real images.
-
The operator gen_region_polygon_filled returned an empty region
if only 1 point was passed as input. This problem has been fixed.
-
The operator info_parallels_xld returned different results on
different architectures. This problem has been fixed.
-
The operator optical_flow_match erroneously created a
multi-channel output image for multi-channel input images. This
problem has been fixed. optical_flow_match now always returns a
single-channel output image that contains only the displacement
vector field.
-
The operators paint_region and overpaint_region did not return
correct results for int4 images if very large positive or
negative gray values were used as the fill value. This problem
has been fixed.
-
Multi-threaded programs using Parallel HALCON might have thrown a
runlength error in rare cases. This problem has been fixed.
-
The operator partition_dynamic used the input control parameter
Percent wrongly and sometimes partitioned regions at wrong
positions. This problem has been fixed.
-
The resulting region of the example program
Segmentation/Topography/plateaus_center.dev differed heavily
between ia64-linux2.4 and the remaining architectures. This
problem has been fixed.
-
The operator projective_trans_image sometimes returned incorrect
results for uint2 images. This problem has been fixed.
-
The operator receive_image caused a crash if an image with
identical image matrices was transmitted. This was the case,
e.g., if an image object tuple was transmitted that contained the
same image matrix more than once or a multi-channel image was
transmitted where different channels referred to the same image
matrix. This problem has been fixed.
-
The operator shape_trans_xld sometimes returned wrong results on
64 bit systems if the control parameter Type was set to
'convex'. This problem has been fixed.
-
The operator sobel_dir performed incorrect border treatment.
This problem has been fixed.
-
The operator train_model_components crashed in very rare
cases. This problem has been fixed.
-
The operator traind_ocv_proj now returns an error if Mode is set
to an unsupported value.
-
The operators threshold, dyn_threshold, and
compare_variation_model might have caused erroneous
behavior when running on multi-processor platforms in automatic
parallelization mode combined with setting 'store_empty_region'
to 'false' by set_system before. This problem has been fixed.
Manual:
-
The new "Application Note on 1D Metrology" shows you how to use
HALCON's measure and fuzzy measure tool to detect edges and to
measure their position and distance along lines and arcs. It can
be found via the Windows Start Menu or in the subdirectory
doc/pdf/application_guide.
It uses the following new examples in the subdirectory
examples/application_guide/1d_metrology/hdevelop:
fuzzy_measure_switch.dev, measure_caliper.dev,
measure_ic_leads.dev, measure_ring.dev, and
measure_switch.dev.
-
The "Quick Guide to HALCON" is available in a new edition. Its
main new feature is a section explaining how to perform color
processing with HALCON. Besides, it has been adapted to the
changes in HALCON 7.1. On Windows systems, you can now click on
the example programs to open them in HDevelop.
The section on color processing uses the new example programs
color_fuses.dev, color_pieces.dev, color_pieces_euclid.dev, and
color_simple.dev in the directory examples/quick_guide/hdevelop,
which in turn use the new images in the new subdirectory
images/color.
-
The "Installation Guide" is available in a new edition. It has
been adapted to the changes in HALCON 7.1.
-
The "Programmer's Guide" is available in a new edition. It has
been adapted to the changes in HALCON 7.1.
-
The "Application Note on 3D Machine Vision" is available in a new
edition. It has been extended by a chapter that shows how to use
HALCON's hand-eye calibration for robot vision applications,
based on the new example programs handeye_create_robot_poses.dev,
handeye_stationarycam_calibration.dev,
handeye_movingcam_calibration.dev, and
handeye_stationarycam_grasp_nut.dev in
examples/application_guide3d_machine_vision/hdevelop. The
examples use the new example images in the directory
images/3d_machine_vision/handeye.
Furthermore, the Application Note has been updated and
extended following the changes in HALCON 7.1. Thus, it now
describes the calibration of line-scan
cameras, the new asymmetric calibration
plate, self-calibration and spherical
mosaicking, and uncalibrated
stereo.
-
The "Application Note on Shape-Based Matching is available in a
new edition. It has been adapted to the changes in HALCON 7.1,
especially the automatic determination of
parameters.
-
The example of cluster_model_components in the reference manual
contained an error. The first input object parameter of
cluster_model_components was ModelComponents instead of
TrainingImages. This problem has been fixed.
Programming:
-
In HALCON/C, the input parameters of operators are now declared
const.
Programming:
-
All HALCON/C++ functions and classes now use the namespace
"Halcon" to prevent potential name conflicts with other C++
libraries.
This means that HALCON/C++ programs are no longer source code
compatible to previous versions. However, old programs can
be converted by including the statement "using namespace Halcon;"
after "HalconCpp.h" has been included. Furthermore, if the
global HALCON operators are used with the prefix "::" (e.g.,
::read_image(&Image,"file");), the prefix "::" will have to be
removed or replaced with "Halcon::". The first solution is
preferable since it creates backwards-compatible source code
(apart from the "using namespace Halcon;" line mentioned above).
Note that in order to keep the reference manual readable, the
namespace is not mentioned in the operator descriptions in the
reference manual.
All example programs that use HALCON/C++ have been converted
to use the namespace functionality. Furthermore, HDevelop
exports HALCON/C++ code with the namespace.
-
The HALCON/C++ class HTuple has the following new members:
-
Cumul calculates the cumulative sums of a tuple.
-
Remove removes a set of elements from a tuple.
-
Median calculates the median of a tuple.
-
SelectRank returns the element at rank n of a tuple.
Furthermore, the class HTuple has been extended by adding
various overloaded operators allowing expressions including long
integers, e.g., HTuple(2) + (long)2. Additionally, corresponding
to the already existing overloaded operators in class HTuple,
overloaded operators allowing expressions in which simple types
are combined with HTuple expressions, e.g., (long)2 + HTuple(3),
have been added.
Finally, the operators HTuple HTuple::operator () have been
augmented with a const class qualifier. The signature is now:
HTuple HTuple::operator () (int min, int max) const HTuple
HTuple::operator () (const HTuple &min, const HTuple &max)
const.
-
HALCON/C++ no longer provides iostream operators by default
because this created problems for applications that want to use
the older iostream interface (i.e., that want to use
<iostream.h> instead of <iostream>). Consequently,
the HALCON/C++ library now does not provide operators for either
interface.
To enable backwards compatibility, the iostream
operators for the class HTuple are now provided as inline
functions in a new header file "HIOStream.h", which can
optionally be included. HIOStream.h uses the newer interface
<iostream> by default, but uses the older interface
<iostream.h> if USE_IOSTREAM_H is defined before
"HIOStream.h" is included.
This means that HALCON/C++ programs are not fully source
code compatible with older HALCON versions. However, old
programs can simply be converted to HALCON 7.1 by including the
following statement after having included "HalconCpp.h": #include
"HIOStream.h" Furthermore, it may be necessary to include the
statement using namespace std;
Examples:
-
The HALCON Qt example program examples/qt/Matching has been
adapted to support Qt version 3.1 and later as well as Qt version
4.0.
Programming:
-
HALCON/COM now provides default values only for parameters for
which this is explicitly allowed in the IDL specification.
Previously, HALCON/COM provided default values for parameters
that were sometimes not permitted by the IDL specification.
While this caused no harm, and was in fact supported by
Microsoft's tools, there may be a slight chance that this may
cause problems with some programming environments. An example
of such an operator is HXLDContX::FitEllipseContourXld. Here,
according to the strict interpretation of the IDL specification,
no input control parameter may have a default value because
there are several output control parameters after the input
control parameters. Default values may only be used if all the
parameters with default values come at the end of the parameter
list.
As a consequence, HALCON/COM is no longer source code
compatible with previous HALCON versions if the feature of
using default values that are not at the end of the parameter
list was used. This probably could only have been done in Visual
Basic 6.0, so this change should affect very few programs.
-
All HALCON/COM classes that encapsulate a handle now have a
method to read out the handle. This method is provided via a
read-only property Handle that returns a variant with the
encapsulated handle.
Bug Fixes:
-
The two functions BinocularDisparity and GenRadialDistortionMap
were contained erroneously in the class HPoseX and consequently
have been removed from this class.
- The latest information about new extensions and newly supported
boards can be found on MVTec's web
server.
New Frame Grabber Interfaces:
-
HALCON now also includes an interface to the microEnable III
frame grabber boards from Silicon Software GmbH. The new example
programs menable3.dev, menable3_continuous.dev,
menable3_crop.dev, menable3_parameters.dev, and
menable_simple.dev in the directory hdevelop\Image\Framegrabber
show how to use this interface.
-
HALCON now also includes an interface to Microsoft's DirectShow file
reader application programming interface. The new example
program examples/hdevelop/Image/Framegrabber/directfile.dev shows
how to use this interface. The example pogram uses the new
example video file images/xing/xing.avi.
-
HALCON now also includes an interface to the GingaDG frame
grabber boards from LinX.
-
HALCON now also includes an interface to the TAG camera family
boards from Tattile. The new example programs tag.dev,
tag_crop.dev, tag_parameters.dev, and tag_simple.dev in the
directory hdevelop/Image/Framegrabber show how to use this
interface.
Modified Frame Grabber Interfaces:
Manual:
Functionality:
Windows:
HALCON 7.1 has been compiled for Windows NT/2000/XP on 32 bit
systems (Intel Pentium or compatible processors) and for Windows XP
x64 on 64 bit systems (Intel EM64T or AMD64). The setup process
checks whether it is runing on a 64 bit system and in this case lets
you choose to install the 32 bit or 64 bit version of HALCON.
Please note that if you want to switch to the other version, you
must first install it, e.g., by re-inserting the CD. Then, you must
modify the environment variable %PATH% as described in the
"Installation Guide".
Note that the native HALCON version for Windows XP x64 does not
include the auxiliary tool HMatchIt. Furthermore, due to the lack
of available 64 bit drivers HALCON does not support the use
of dongles and includes currently no interfaces to actual image
acquisition devices.
Linux:
HALCON 7.1 has been compiled for 32 bit systems (Linux 2.2/2.4,
gcc 3.3, glibc-2.2.x, optimized for Intel Pentium or compatible
processors) and for 64 bit systems (Linux 2.4, gcc 3.3,
glibc-2.3.4, Intel EM64T or AMD64). To use these versions, please set
the environment variable ARCHITECTURE to i586-linux2.2-gcc33 or
x64-linux2.4-gcc33, respectively, and update the environment
variables PATH and LD_LIBRARY_PATH accordingly.
Solaris:
HALCON 7.1 has been compiled for Solaris 7 or higher on UltraSPARC
workstations. To use these versions, please set the environment
variable ARCHITECTURE to sparc-sun-solaris7 and update the
environment variables PATH and LD_LIBRARY_PATH accordingly.
Licensing:
Example Images:
|