MVTec Software GmbH
  Building Vision For Business


Release Notes for HALCON 7.0.4

This document provides the release notes for MVTec HALCON 7.0.4, as released in October 2006. HALCON 7.0.4 is primarily a maintenance release that fixes all known bugs in HALCON 7.0.3; besides, it provides added functionality and speed-ups.



Overview

This document contains the following information:

Compatibility
Detailed Description of Changes in HALCON 7.0.4
Major New Features of HALCON 7.0
Detailed Description of Changes in HALCON 7.0.3
Detailed Description of Changes in HALCON 7.0.2
Detailed Description of Changes in HALCON 7.0.1
Detailed Description of Changes in HALCON 7.0
Major New Features of HALCON 6.1
Detailed Description of Changes in HALCON 6.1.2
Detailed Description of Changes in HALCON 6.1.1
Detailed Description of Changes in HALCON 6.1


Compatibility

o Licenses
    HALCON 7.0 licenses are also valid for HALCON 7.0.4. In contrast, all HALCON 6.1 licenses must be replaced or upgraded. Please contact your local distributor.

o HALCON Library
    HALCON 7.0.4 is fully compatible with HALCON 7.0. Compared to HALCON 6.1.x, many extensions have been introduced. Thus, the HALCON 7.0.4 libraries are not compatible with HALCON 6.1.x or earlier versions.

o HALCON Applications
    Applications (i.e., executables) developed with HALCON 7.0.1, 7.0.2, or 7.0.3 can be used with HALCON 7.0.4, i.e., HALCON 7.0.4 is binary compatible with HALCON 7.0.1, 7.0.2, and 7.0.3. In contrast, C++ programs developed with HALCON 7.0 that use methods of the class HMeasure must be re-compiled and linked, because of a bug fix in the operators set_fuzzy_measure and set_fuzzy_measure_norm_pair. This means that HALCON 7.0.4 is not completely binary compatible with HALCON 7.0.
    C or C++ programs developed with HALCON 6.1.x must be re-compiled. The incompatibility with HALCON 6.1 or earlier versions mainly concerns the binaries, with only few changes in the operators' signatures. If you encounter problems during recompiling your programs, please check the detailed description of changes below and look up the signatures of the concerned operators in the reference manual.

o Frame Grabber Interfaces
    If you developed your own frame grabber interfaces with HALCON 7.0, 7.0.1, 7.0.2, or 7.0.3, you can use them with HALCON 7.0.4 without further action. Frame grabber interfaces developed with HALCON 6.1.x are binary compatible with HALCON 7.0.4, interfaces developed with older versions must be re-generated.
    Please make sure that you no longer use the old PicPort, PicPortPro or PicProdigy interfaces that are part of older Leutron LV-SDS releases since these interfaces are not fully compatible with HALCON 7.0.4. Please use the new Leutron interface instead.

o Extension Packages
    Extension packages developed with HALCON 7.0, 7.0.1, 7.0.2, or 7.0.3 can be used with HALCON 7.0.4 without further action. Extension packages developed with HALCON 6.1.x must be re-generated.

o ActivVisionTools
    Only ActivVisionTools 3.0 can be used directly with HALCON 7.0.4 because it is based on HALCON 7.0.1.1., which is a prerelease of HALCON 7.0.2. All older ActivVisionTools versions are based on HALCON 6.1.1 or below, while ActivVisionTools 3.1 is based on (a modified version of) HALCON 7.1. By installing HALCON 7.0.4, you would thus disable such an ActivVisionTools installation. Therefore, the setup program of HALCON 7.0.4 checks whether there is an ActivVisionTools installation on your computer.
    • If it detects ActivVisionTools 3.0, no further action is required, as this version is compatible to HALCON 7.0.4.
    • If it detects ActivVisionTools 2.2, it offers to replace the corresponding OCX with a new one that is compatible to HALCON 7.0.4.
    • In contrast, ActivVisionTools 3.1 and ActivVisionTools 1.0 to 2.1 cannot be used with HALCON 7.0.4. If the setup program detects such an ActivVisionTools version, it warns you that by continuing to install HALCON 7.0.4 you will disable your ActivVisionTools installation.

      If you still want to use your ActivVisionTools installation you must also keep your old HALCON installation and switch back to it as described in the "Installation Guide".


Detailed Description of Changes in HALCON 7.0.4

Detailed release notes can be obtained for the following topics:

HDevelop
HALCON Library
HALCON/C++
Frame Grabber Interfaces
HMatchIt

HDevelop

o Functionality
  • HDevelop's functionality for removing unused variables (File->Cleanup) now applies to all procedures, not only to the currently displayed procedure.
  • HDevelop now automatically removes unused variables (File->Cleanup) from the program before exporting code.

o Bug Fixes
  • HDevelop showed erroneous behavior when trying to save the current program after previously failing to load a HDevelop program file. In that case, instead of prompting for a file name, HDevelop saved the current program to the file '.dev' in the current directory. This problem has been fixed.
  • HDevelop remained in an inconsistent state after modifying a deactivated loop statement. This problem has been fixed.
  • Displaying objects in HDevelop graphics windows caused a memory leak in case the displayed object was a tuple of images and the tuple elements shared the same image matrix but had different domains. This problem has been fixed.
  • In rare cases, after pasting previously copied local procedures containing procedure call lines, HDevelop remained in an inconsistent state. This problem has been fixed.
  • HDevelop did not check the consistency of variable names when pasting previously copied program lines into the current procedure body, which could lead to programs containing control and iconic variables with the same name. This problem has been fixed.
  • HDevelop did not check for a correct variable name when loading an image via menu item 'File->Read Image', which could leave HDevelop in an inconsistent state. This problem has been fixed.
  • HDevelop exported non-constant negation expressions incorrectly to Visual Basic 6.0. This problem has been fixed.
  • Iconic objects were sometimes not displayed correctly in HDevelop graphics windows if a window had been resized after new graphics settings had been applied to it. In this case, displaying an iconic object (e.g., via dev_display) would use the settings that had been valid while resizing the window. This problem has been fixed.
  • HDevelop sometimes crashed when trying to display XLD contours with very large coordinates. This problem has been fixed.

o Examples
  • The new example examples/hdevelop/Image/Framegrabber/menable3_shaftencoder.dev shows how to use the new parameters for line scan cameras and shaft encoders in combination with the mEnable3 interface.

HALCON Library

o Speed-up and Enhancements
  • The operators affine_trans_image and affine_trans_image_size are now faster by up to 200% if both scale factors are >= 1 in the affine transformation. Consequently, rotate_image is also faster by up to 200%. Likewise, zoom_image_factor and zoom_image_size will be faster by up to 200% if they enlarge the input image.
  • The operator dyn_threshold is now faster by up to 30% for LightDark = 'light' and LightDark = 'dark' on Linux systems.
  • The operator gray_histo_abs is now significantly faster for quantization factors different from 1.

o Modified Operators
  • HALCON no longer limits the tuple length to 1000000 elements. It is now possible to create and process tuples of arbitrary length.
  • The operator check_par_hw_potential (and also the binary hcheck_parallel) update the hardware knowledge about CPUs, e.g., number of CPUs, at every call. So far the knowledge about CPUs has been determined at the first call only.
  • The operator create_ocv_proj now allows to create an unlimited number of OCV handles.
  • The operator disp_arc now supports negative angles.
  • When calling the operator find_data_code_2d repeatedly over different images, the memory consumption of the data code reader sometimes increased significantly, depending on the number of results and result candidates. Therefore, in order to use less memory, the data code reader was changed in a way that less memory space is cached in the model.
  • The operator get_system now supports a query 'hostids' that returns the hostids that can be used for licensing HALCON.
  • The operators polar_trans_image_ext and polar_trans_image_inv now support centers with negative coordinates.
  • The operator read_image now supports 16 bit PGM and PPM images.
  • The operator regiongrowing_mean now allows tuples of more than 10000 elements in StartRows and StartColumns.
  • The operators rgb1_to_gray and rgb3_to_gray now support images ot type uint2.
  • The operator select_contours_xld now automatically calls regress_contours_xld internally if necessary, i.e., if Feature = 'direction' or Feature = 'curvature' and the contours do not have valid regression parameters. The behavior is as if regress_contours_xld had been called with Mode = 'no' and Iterations = 1.
  • Until now, the operator union_collinear_contours_xld did not unify contours if they overlapped, even if the overlap is very small. In some cases, apparently collinear lines (because they were derived from one object edge) were not connected, due to small inaccuracies during the segmentation of the contours and the evaluation of the reference line that was used to detemine the overlap. This behavior was counterintuitive. Therefore, a small overlap tolerance of 0.5 pixels was implemented.
  • The operators write_tuple and read_tuple are now able to handle tuples with undefined values.

o Bug Fixes
  • The operator append_ocr_trainf crashed if the existing trainfile was not writable. Now, the error message "Error while opening the file" will be returned in these cases.
  • The operator binocular_calibration returned wrong results for RelPose and NFinalPose2 when using values for parameter EstimParam specifying the relative pose, like 'pose_rel', '~pose_rel', 'alpha_rel', 'transz_rel'. This problem has been fixed.
  • The operator cooc_feature_image returned undefined values for empty input regions. Now, the output control parameters are set to zero in this case.
  • The operator create_component_model in rare cases got stuck within an infinite loop on most machines or crashed on Tru64 UNIX machines. This happened if the reference points of two components had a distance in the model image of exactly VariationRow and VariationColumn in row and column direction, respectively. This problem has been fixed.
  • The operators create_template and create_template_rot created inconsistent templates if the smallest enclosing axis-aligned rectangle of the input domain was only 1 pixel wide in at least one direction. As a consequence of this inconsistency, create_template(_rot) directly or any operator that used the template (e.g., fast_match* or best_match*) was likely to crash. This problem has been fixed.
  • The operator crop_part crashed in rare cases. This problem has been fixed.
  • The operator disp_channel sometimes returned the error 3513: "Internal error: number of chords too big for num_max". This problem has been fixed.
  • The operator expand_domain_gray did not work correctly if the domain of the input image corresponded to the full domain but with some rows (other than the first and the last row) completely missing. In this case, expand_domain_gray returned the input image without filling up the missing rows. This problem has been fixed.
  • In some rare cases the operator find_data_code_2d had a problem with some square ECC200 symbols: The operator could decode the symbol if the model was set to 'enhanced_recognition', but if the model was adjusted to the correct symbol size, it was not possible to decode the symbol. This problem has been fixed.
  • The operator find_shape_model and all variants thereof in rare cases returned wrong results for reduced domains. Here, wrong means that if the reduced domain contained the match that would be found if find_shape_model were applied to the entire image, find_shape_model returned a different match on the reduced domain. This problem has been fixed. Note that in rare cases existing applications using find_shape_model or variants therefore now might miss the correct match when dealing with a reduced domain. These applications should be adapted in the following way: It must be ensured that the domain on the highest pyramid level is at least of size 3x3. Thus, the input domain on the lowest pyramid level must be chosen to be at least of size 3*pow(2,n-1) in both dimensions, where n denotes the number of pyramid levels.
  • The operator fit_ellipse_contour_xld did not work properly for contours that are straight lines. Calling it with Algorithm set to 'fitzgibbon', 'fhuber', or 'ftukey' threw an error. Now, fit_ellipse_contour_xld detects the degeneracy and returns an ellipse with Radius1 equal to half the length of the line and Radius2 equal to zero.
  • The operators fit_ellipse_contour_xld and fit_line_contour_xld crashed if ClippingEndPoints was larger than the number of contour points. Now, the operators fit_circle_contour_xld, fit_ellipse_contour_xld, and fit_line_contour_xld check if sufficient contour points are available for fitting the respective model, and if not they all throw the same error indicating that problem.
  • The operator fit_line_contour_xld sometimes wrongly returned the error 3264 ("All points classified as outliers (ClippingFactor too small)"). In particular, this happened if all points of the input contour almost perfectly or exactly lay on a straight line. This problem has been fixed.
  • The operator gen_checker_region sometimes returned the error 3503 ("Runlength row >= image height") or the error 3505 ("Runlength column >= image width"). The errors occurred if clip_region was set to 'true' using set_system and one of the parameters WidthRegion or HeightRegion exceeded the global maximum image width or height, respectively. This problem has been fixed.
  • The operator gen_circle sometimes rounded the center coordinates of the circle incorrectly. This problem has been fixed.
  • The operator gen_region_contour_xld did not observe the value of 'store_empty_region' that has been set with set_system. It always acted as if 'store_empty_region' were set to true. This problem has been fixed.
  • The operator get_contour_angle_xld returned incorrect results for AngleMode = 'abs'. This problem has been fixed.
  • The operator get_window_extents returned wrong results for buffer windows. This problem has been fixed.
  • The operator gray_dilation_rect returned wrong results for real images that contain negative values. This problem has been fixed.
  • The operator image_points_to_world_plane did not work correctly if tuples of values were passed in Rows and Cols and the values had different types, i.e., some of the values were of type integer and some of them were of type real. In these cases, the resulting X and Y coordinates were not meaningful. This problem has been fixed.
  • The operator image_to_world_plane crashed if the output image contained pixels that cannot be mapped because their correction caused by the radial distortion is undefined. This problem has been fixed.
  • The operator load_par_knowledge no longer causes a memory leak.
  • The operator read_image erroneously returned int4 images for 16 bit TIFF images. Now, it returns uint2 images.

    Furthermore, it did not read plain PPM images, i.e., images in which the color values are stored in ASCII as numbers, correctly. This problem has been fixed.

  • The operator read_template sometimes returned the error 8503 ("Inconsistent match file: coordinates out of range") or crashed when trying to read a template file that was previously written to a file by using write_template. This happened if at least one rotation of the template at any pyramid level contained no template points during the creation of the template with create_template_rot or create_template. This problem has been fixed. In order to avoid the creation of such inconsistent templates, the number of pyramid levels now is automatically reduced until all rotations on all levels contain a minimum number of template points. If a rotation at the lowest pyramid level does not contain enough template points an appropriate error message is returned by create_template(_rot) and no model is created.
  • The operator segment_contours_xld sometimes crashed when passing contours with global attributes. Instead of crashing, sometimes the error message 6001 ("Not enough memory available") or 6002 ("Memory partition on heap has been overwritten") was returned. This problem has been fixed.
  • The operator sobel_amp with FilterType = 'sum_abs' sometimes produced wrong results. The edge amplitude was sometimes much smaller than the maximum edge amplitude. This problem has been fixed.
  • The operator vector_to_rigid was not thread-safe and might have returned wrong results or an error #6041 when running concurrently in multiple threads. This problem has been fixed.
  • There was a problem with writing some Data Code ECC200 models into a file with write_data_code_2d_model and re-reading them with read_data_code_2d_model. The problem occurred for models that were created in enhanced mode and saved without modifying the slant_max value. These models could not be read because of a rounding error while writing. The problem has been fixed.
  • The operator zero_crossings_funct_1d returned the error 6002 ("Memory partition on heap has been overwritten") if the function had exactly one control point whose y value is 0. This problem has been fixed.
  • The operator zoom_image_factor did not work correctly for uint2 images with Interpolation = 'none' and large zoom factors. This problem has been fixed.

o Manual
  • The documentation of expand_region now describes the limiting borders of the expansion when setting Mode to 'image'.
  • The documentation of change_domain has been extended. It now notes more clearly that the input region must not exceed the matrix of the input image and that using such corrupt iconic objects during subsequent operations will likely lead to program crashes.
  • The documentation of orientation_region and orientation_xld stated a wrong interval for the resulting orientation. In the documentation an interval of [-pi/2;3/2pi] was specified. However, the correct interval is [-pi; pi]. The documentation has been corrected accordingly.

HALCON/C++

o Bug Fixes
  • Due to a compiler bug in Microsoft Visual C++ 6.0, the method HCtrlVal::ClearCtrlVal() sometimes crashed under Windows if the HCtrlVal object contained a string. This problem has been fixed.
  • The class implementation of HALCON/C++ returned error #7200 when passing empty objects. It returns an empty object now.

Frame Grabber Interfaces

The latest information about new extensions and newly supported boards can be found on the image acquisition web page.

o Modified Frame Grabber Interfaces

HMatchIt

o Bug Fixes
  • Test images were not displayed correctly if their size differed from that of the model image. This problem has been fixed.
  • HMatchIt sometimes crashed after returning the error 8510 ("Number of shape model points too small"). This happened if the chosen model ROI did not contain a sufficient number of pixels that exceeded the specified contrast values. This problem has been fixed.


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






Webmaster Last modified: Fri October 06 14:33:48 CEST 2006