MVTec Software GmbH
  Building Vision For Business


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



Compatibility

o Licenses
    All HALCON 7.0 licenses must be replaced or upgraded. Please contact your local distributor.

o 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.

o 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.

o 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.

o Extension Packages
    Please re-generate your own extension packages developed with HALCON 7.0.x.

o 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.



Major New Features of HALCON 7.1

General Features

o 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.

o 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

o Export to C# and Visual Basic .NET

o External Procedures
    HDevelop procedures can now also be stored externally. Thus, multiple programs can use the same procedures.

Documentation

o 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.

o 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.

o Extended Application Note on 3D Machine Vision
o HDevelop Tutorials


Detailed Description of Changes in HALCON 7.1

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.


HDevelop

o 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.

o 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.

o 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.

o 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.

o 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.


HALCON Library

o 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.


o 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.


o 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.

o 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.

o 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.

HALCON/C

o Programming:
  • In HALCON/C, the input parameters of operators are now declared const.

HALCON/C++

o 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;


o 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.

HALCON/COM

o 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.

o Bug Fixes:
  • The two functions BinocularDisparity and GenRadialDistortionMap were contained erroneously in the class HPoseX and consequently have been removed from this class.

Frame Grabber Interfaces

The latest information about new extensions and newly supported boards can be found on MVTec's web server.

o 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.

o Modified Frame Grabber Interfaces:

Extension Package Interface

o Manual:

HMatchIt

o Functionality:
  • HMatchIt now is able to determine the contrast, minimum component size, and optimization automatically, corresponding to the extended functionality in determine_shape_model_params.

    The online documentation has been extended accordingly.

  • HMatchIt now allows to specify up to 100 visible models in the "View Test Images" dialog and up to 100 models in the "Edit Standard Run Parameters" dialog.

Supported Operating Systems

o 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.

o 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.

o 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.

Miscellaneous

o Licensing:
  • HALCON now checks all files license*.dat in HALCONROOT/license as well as a file license.dat in the current directory of the application for a valid license. The order in which the licenses are checked is:
    • license.dat in the current directory of the application
    • HALCONROOT/license/license.dat
    • all the remaining files license*.dat in HALCONROOT/license

    If none of the above license files contain a valid license, HALCON returns an error that corresponds to the last license file in the above list.

  • HALCON now uses version 10.8 of the FLEXlm license manager software.

o Example Images:

© Copyright 2008, MVTec Software GmbH, corporate/legal/privacy information






Webmaster Last modified: Fri September 02 13:45:01 CEST 2005