Release Notes for HALCON 8.0.1  
 

 

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




Overview

This document contains the following information:

Compatibility
Major New Features of HALCON 8.0.1
Detailed Description of Changes in HALCON 8.0.1
Errata Release Notes of HALCON 8.0
Major New Features of HALCON 8.0
Detailed Description of Changes in HALCON 8.0 (relative to HALCON 7.1.2)




Compatibility

o Licenses

HALCON 8.0 licenses are also valid for HALCON 8.0.1. In contrast, all HALCON 7.1 licenses must be replaced or upgraded. Please contact your local distributor.



o HALCON Library

HALCON 8.0.1 is fully compatible with HALCON 8.0. Compared to HALCON 7.1, many extensions have been introduced. Thus, the HALCON 8.0.1 libraries are not compatible with HALCON 7.1 or earlier versions.



o HALCON Applications

Applications (i.e., executables) developed with HALCON 8.0 can be used with HALCON 8.0.1, i.e., HALCON 8.0.1 is binary compatible with HALCON 8.0.

The incompatibility with HALCON 7.1 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 and for HALCON 8.0, respectively.

Please note that applications using HALCON/.NET (and HDevEngine/.NET) have local copies of the corresponding assemblies (halcondotnet.dll etc.). After installing HALCON 8.0.1, these applications would therefore still use the HALCON 8.0 versions. You must either replace the assemblies manually or re-compile the projects.

For compatibility reasons to earlier HALCON versions it is now possible to save HDevelop programs and external procedures optionally with the locale encoding table instead of UTF-8. This option can be chosen in the Preferences dialog on the General Options tab card: The encoding for saving HDevelop programs and external procedures can be set to 'UTF-8' or 'Native'.



o Image Acquisition Interfaces

If you have developed your own acquisition interfaces with HALCON 8.0, you can use them with HALCON 8.0.1 without further action. Because of the new version of the HALCON Acquisition Integration Interface, acquisition interfaces developed with HALCON 7.1.x or lower are not binary compatible, but mostly source-code compatible with 8.0.



o Extension Packages

Extension packages developed with HALCON 8.0 can be used with HALCON 8.0.1 without further action. Extension packages developed with HALCON 7.1.x must be re-generated.



o ActivVisionTools

Since all ActivVisionTools versions are based on HALCON 7.1.1 or lower, none of them can be used directly with HALCON 8.0.1. By installing HALCON 8.0.1, you would thus disable such an ActivVisionTools installation. Therefore, the setup program of HALCON 8.0.1 checks whether there is an ActivVisionTools installation on your computer and warns you that by continuing to install HALCON 8.0.1 you will disable your ActivVisionTools installation.

  • If you have been using ActivVisionTools 3.1 or 3.1.1, please contact your distributor for further information on how to run this version together with HALCON 8.0.1.
  • In contrast, ActivVisionTools 1.0 to 3.0 cannot be used together with HALCON 8.0.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 8.0.1, you can minimize the switching effort by installing only the demo version.




Errata Release Notes of HALCON 8.0




Major New Features of HALCON 8.0.1

Installation

o USB Dongles

HALCON now supports USB dongles under Windows x64 Editions.



Extended Functionality

o Bar Code Reader

The bar code reader has been extended for the RSS-14 bar code (Reduced Space Symbology). After RSS-14, RSS-14 Truncated, RSS Limited, and RSS Expanded, now also the symbols ot type RSS-14 Stacked, RSS-14 Stacked Omnidirectional, and RSS Expanded Stacked can be read.



HDevEngine

o Parallel HDevEngine

The HDevEngine is now reentrant. Thus it is possible to execute multiple HDevelop programs and/or procedures in parallel taking advantage of a multi-processor system.



HDevelop

o External Procedures

HDevelop provides a new dialog for password administration for multiple procedures simultaneously



o Histograms

The usability of the histograms in HDevelop has been enhanced. Additionally, a larger number of supported features for the Feature Histogram is provided.



o General Usabilty

The general usability of HDevelop has been enhanced in many ways.



Documentation

o Solution Guide Basics

The "Solution Guide Basics" now also shows how to use HALCON's operators for classification, e.g., in order to segment images into regions of similar color or texture. Further, the chapter '3D Matching' has been extended to show how to restrict the pose range for the model creation.



o Solution Guide II-F on 3D Machine Vision

The chapter 'Robot Vision' in the Solution Guide II-F on 3D Machine Vision now contains more information about using the calibration data, in particular for grasping objects with a moving camera system.



o Programmer's Guide

For the "Programmer's Guide" the part about HDevEngine has been extended, amongst other to show how to use Parallel HDevEngine to speed up applications by executing procedures in parallel by multiple threads.






Detailed Description of Changes in HALCON 8.0.1

Detailed release notes can be obtained for the following topics:

HDevelop
HALCON Library
HALCON/.NET
HDevEngine
Image Acquisition Interfaces
Miscellaneous



HDevelop

Speed-Up and Enhancements
Functionality
Bug Fixes
Examples
Manuals
o Speed-Up and Enhancements:
  • HDevelop's Feature Inspection dialog now is faster for large images.
  • The input and result strings of string operations (environment, convert, chrt, sum) are not longer limited in size. Furthermore, string constants that are entered manually into the Operator Window are no longer limited to 1024 characters.
  • Accessing control variables within expressions is now faster in HDevelop and the HDevEngine.


o Functionality:
  • HDevelop's Preferences dialog was extended by the following options:

    • User Interface: there is a new tab card 'Layout'
      • for defining the default positions of the main windows that are used if 'Organize Windows' is called and
      • with a check box for choosing whether in the title bar the program name is displayed with its full path name or not
    • General Options:
      • Now it is possible to select the number of programs that are displayed in the sub menu File->Recent Programs
      • It can be chosen whether under File->Recent Programs all recently used programs are listed or only the currently available ones
  • The General Options tab card on the Preferences dialog now enables the user to specify the precision that is used for displaying real numbers in the Variable Window and Inspection dialogs.
  • HDevelop now supports a keyboard shortcut CTRL-F for 'Find' in the Help Window. A consecutive CTRL-F now finds the next occurrence and the search wraps around at the end of the displayed text.
  • HDevelop now offers the variable clean up functionality also in the context menus of the Variable Window.
  • The tool tip for an image with a reduced domain now also displays the data of the domain. This distinguishes this kind of images from images with a full domain, where no information about the domain is displayed.
  • The display of string values in the Variable Window and Variable Inspect Window now uses escaped representations like '\\' or '\n' for unprintable characters, which also makes it easier to edit these strings. Furthermore, it is now possible to enter arbitrary characters in a string using the C-like escapes '\xhh' (an 'x' followed by one or two hexadecimal digits) and '\ooo' (one, two, or three octal digits that follow directly after the backslash) for hexadecimal and octal notation, respectively.
  • So far, the vertical line to be moved in a Histogram was chosen according to the minimum and maximum value, and the histogram's x value that is represented by the mouse position. This made the handling of the lines sometimes difficult, especially when the minimum and maximum value are identical. Instead, the line to be moved is now chosen according to the screen positions of the mouse and the lines.

    Furthermore, for minimum and maximum values that lie outside of the actually displayed range dashed lines are displayed at the left or right border of the histogram display, and these lines are selectable as if they were inside.

  • HDevelop no longer changes the selected feature in the Feature Histogram dialog when the input object changes. As a consequence the Feature Histogram dialog now always displays the full list of features, regardless of the input object's type.
  • HDevelop's Histograms now have different display modes, i.e., different ways the actual and the possible display range may react to new input objects. These modes can be selected for the vertical and the horizontal direction seperately. Roughly spoken, these modes are:

    • 'adaptive': The possible display range is restricted to the histogram's range (0..255 for byte images, -128..127 for int1 images). The display is reset to the maximum possible range.
    • 'increasing': The possible display range is unrestricted. If the new input object's value range exceeds the previous one, the display range is extended to the new value range.
    • 'fixed': The possible display range is unrestricted. The display stays unaltered.
  • HDevelop's Feature Inspection dialog now supports all *_points_xld features.
  • HDevelop's Variable Inspect dialog for acquisition handles now can handle more than one online image at the same time.
  • HDevelop opened new Zoom Windows when the user clicked onto the tool bar icon and placed them at a free area somewhere on the workspace. This was sometimes confusing, because the opening position could be outside the visible scroll area and a new Zoom Window was always opened, even if the user wanted to bring a hidden Zoom Window to the front. Therefore, the behavior was changed: Now HDevelop opens existing Zoom Windows by a click on the tool bar icon. Only if none exists, a new one is opened. For opening multiple Zoom Windows, a new entry "New Zoom Window" was added to the Visualization Menu.
  • With the help of the internal operator dev_inspect_ctrl it is now possible to open a Variable Inspection table that lists an arbitrary number of variables. The operator dev_close_inspect_ctrl removes the passed variables from the Variable Inspection table. If all variables from one table are removed, the table is closed. The variables are passed as a tuple: dev_inspect_ctrl ([A,B,C])
  • For improving the usability, the following changes have been made to the Operator Window:

    • If a new operator is selected for being edited in the Operator Window, its short description is now displayed in the status bar.
    • The name of the selected operator is now displayed in the title bar of the Operator Window. This is especially useful if a new name was inserted into the combo box but the editing of that entry is not yet finished. In this case, the operator name that is displayed in the operator combo box may differ from the operator that is currently selected for editing.
    • As long as no operator is selected, the parameter section of the Operator Window is completely hidden so that you can distinguish between the state where no operator is selected from cases where an operator without parameters was entered in a more convenient way.
  • The Operator Window is now cleared if the selected procedure is deleted or the program changes.
  • The suggestions made in the Operator Window for control parameters were improved:

    • If the experienced user option 'Ignore semantic type' is not switched on (default), for parameters that expect a handle only the variables that store such a handle are listed.
    • For parameters with a more complex semantic type than number or string (like point or rectangle), now available variables with the requested or a similar type are suggested instead of the default values.
  • The cursors that are used in the left part of the program listing for setting breakpoints, the program counter, and the insert position have been changed. The problem with the old cursors was that there was an ambiguity concerning the hot spots of these cursors. For example, it was ambiguous whether the program counter would be set at the arrowhead or at the position of the decoration (which was an arrow too). The hot spot of the new cursors is always in the center.
  • Invalid program lines (like unresolved procedure calls and unconnected block statements) that have been deactivated are now displayed in the program listing with the deactivation color instead of the color for invalid lines.
  • The activation/deactivation behavior of connected block statements was changed in the following way:

    • If a block begin (e.g., 'for', 'if', ...) or block end statement (e.g., 'endfor', 'endif', ...) is activated or deactivated, always the whole block (including 'elseif' or 'else' statements) is automatically activated or deactivated, respectively. In contrast, the intermediate block statements 'elseif' and 'else' are (de)activated without influence on the rest of the block.
    • If a deactivated operator is edited in the Operator Window and re-entered into the program, this program line is activated. If this operator is a connected block statement, now the same activation method concerning the other block statements is used as with the normal activation and described above, i.e., the other block operators are also activated.
    • Undoing any previously performed activation or deactivation action of connected block statements now restores exactly the state from before the action.
  • When using the file selection box in the Operator Window for the file name of write_image, the default filter is now set to "All Files (*)" to prevent the unexpected adding of the file extension ".ima" when typing a name with no or unknown extension.
  • In case of an execution error, HDevelop now sets the focus onto the erroneous parameter instead of the first parameter in the Operator Window.
  • If the execution of an operator is aborted with an error message, the output parameters are no longer reset but keep their old values (as in HALCON version 7.1 and earlier).
  • If an error occurs in HDevelop, a message box pops up that shows, besides a text which describes the error, an error code. If the error occurred during the execution of an HALCON operator, additionally the HALCON error code and text are displayed. To avoid confusing the user by different error codes (from the same range), the following changes were made:

    • If an HALCON error occurs, the HDevelop error code is suppressed.
    • The HDevelop error codes were redefined (>10000) so that they do not overlap the range of the HALCON error codes.
  • In case of an abnormal program termination (e.g., crash, segmentation fault, or unhandled exception) HDevelop now tries to save the program (if it was modified) as well as all modified external procedures. The program and procedure files are written to the user's temporary directory. The file name is composed from the program or procedure name followed by '_xxx', where xxx is a unique number. Older backup files are not overwritten. For every saved file, a message with the file name is shown in a message box as well as on the console.
  • HDevelop no longer accepts reserved identifiers, e.g., 'if', 'min', 'H_MSG_TRUE', etc., as variable names or as procedure parameters or procedure names. Because older HDevelop versions didn't have such a restriction, in existing programs or procedures these identifier names may still be used for variables and procedure parameters. If such a program or procedure is loaded, the identifiers are prefixed by '_AUTO_RENAMED_', i.e., a variable 'min' is renamed to '_AUTO_RENAMED_min'. Although even in older HDevelop versions most of these identifiers could not be used within a control parameter expression, such invalid expressions may pop up if new reserved identifiers are added to future HDevelop versions. In such a case, the whole expression is inserted as a quoted string parameter.
  • For improving the usability of HDevelop some changes concerning the saving of programs and procedures were made:

    • The main 'Save' action (Ctrl-S) works now on the procedure that is currently listed in the Program Window. If this is a local procedure or 'main', the program will be saved. Hence, the 'Save' button is disabled if the visible procedure (or the program) is not modified. The icon in the Save button indicates whether Save works on an external procedure or on the program.
    • For easier access, the action 'Save All' now has the short cut Ctrl-Alt-S. In addition, a corresponding icon was added to the tool bar.
    • For improving the feedback to the user, (a) the cursor changes to a wait cursor as long as the Save action is performed and (b) after finishing the Save action, the status bar informs the user about success or failure of the action.
  • HDevelop's Find/Replace dialog is extended with the following features:
    • After selecting a program line in the listing the search continues at this position.
    • If displayed, the result list reflects all changes in the program listing.
    • The Replace/Replace All buttons are now disabled if no replace text was entered. The Replace action with an empty text was ignored anyway.
    • If the Operator mode is selected, when applying a Replace action, the option Whole Words is selected and locked, because replacing only works if a distinct operator pair is selected.
  • If an external procedure is created (by changing the interface of an existing procedure, creating a new procedure, or making all local procedures external) in a directory that is not in the list of external procedure paths, the new directory is automatically added to the list of registered directories. This was also performed, when as a new directory a subdirectory of one of the registered paths was passed, although in that case the new procedure was already reachable. This behavior was changed, so that in cases where the procedure is reachable without modifications of the external procedure path settings the directory list will not be extended.

    In addition, in cases where the chosen directory is not reachable, the user now has the opportunity to abort the automatic extension of the directory list.

  • The Edit Procedure Interface dialog has a combo box 'Directory' for showing or selecting the path of external procedures. In cases where an external procedure is selected, its behavior was changed in the following way:

    • Instead of showing the directory from where the search started, it now displays the real location of the procedure file (this may be the search directory itself or any subdirectory of the search directory).
    • Owing to the fact that an external procedure cannot be moved in the file system via the Edit Procedure Interface dialog, it is no longer possible to enter a new directory for an existing external procedure. This is possible only for local procedures that are going to be made external.
  • HDevelop now switches the displayed interface in an open Edit Procedure Interface dialog if a new procedure is selected in the program listing window and Edit Interface is clicked.
  • HDevelop now has an extended dialog for managing password protection for external procedures. This dialog enables the user to lock and unlock protected external procedures, as well as to set the password for unprotected external procedures and to remove or change password protection for unlocked protected external procedures. It is possible to apply the above actions to a selection of external procedures belonging to the corresponding category (unprotected, unlocked protected, and locked protected) at the same time.
  • HDevelop now disables the Ok button in the Password dialog as long as no password is entered. This prevents entering of empty passwords which was treated as canceling the dialog anyway.
  • It is now possible to export HDevelop programs containing invalid program lines. The corresponding program lines are exported as comments in the selected export language.
  • Floating point values are now always displayed with a decimal point even if the fractional part is zero, to avoid confusion and prevent some rare problems when exporting code from the Image Acquisition Assistant for floating point parameters.
  • For compatibility reasons to earlier HALCON versions it is now possible to save HDevelop programs and external procedures optionally with the locale encoding table instead of UTF-8. This option can be chosen in the Preferences dialog on the General Options tab card: The encoding for saving HDevelop programs and external procedures can be set to 'UTF-8' or 'Native'.
  • If an HDevelop program with non-ASCII characters was exported to a file format different than text, the exported code used different encodings for comments (UTF8) and string constants (native or UTF-8, depending whether at least one character of the string could be encoded in the native character set). Now, the user can select the encoding in the Export dialog:

    • Native for the native or locale character encoding table or
    • UTF8.


o Bug Fixes:
  • The integrated help browser did not show help files for operators defined in an user extension. This problem has been fixed.
  • HDevelop omitted some entries of long context menus if there was not enough screen height. Long menus are now split into multiple columns if needed.
  • HDevelop's context menus did not work as expected if invoked on the line numbers of a program listing. This problem has been fixed.
  • According to the documentation, it should be possible to load an HDevelop program or an image by drag 'n' drop from applications like Windows Explorer or Konqueror to a running HDevelop instance. This did not work under Linux/UNIX systems. This problem has been fixed.
  • HDevelop crashed if an HDevelop program was dragged from another application (like Windows Explorer) and dropped into the running HDevelop window while an interactive operator (like draw_rectangle1 or get_mbutton) was running. This problem has been fixed.
  • There was a problem in the Graphics Window when the user clicked on the background image (the first image on the history stack) if the Graphics Window stack contained another image with a reduced ROI. In this case the background image came to the front hiding all other objects in the Graphics Window. This problem has been fixed.
  • If the Visualization Parameters dialog was opened while no Graphics Window was open, the GUI elements of the Visualization Parameters dialog were not initialized. Furthermore, by pressing the buttons 'Use settings for new windows' HDevelop crashed. These problems have been fixed.
  • If the part of the Graphics Window was set with dev_set_part, the part of the Graphics Window has to be reset if a new program is loaded or created. This reset was not performed. This problem has been fixed.
  • HDevelop sometimes crashed when a variable selected in the Variable Window was removed by a cleanup. This problem has been fixed.
  • HDevelop's auto mode in the Variable Window did not work correctly when single-stepping through a program and the variable update was switched off. This problem has been fixed.
  • HDevelop did not save the state of the settings in the Variable Window. This problem has been fixed.
  • The behavior for displaying information in the status bar about the variable selected in the Variable Window was erroneous:

    • The information was not displayed for the selected control variable but for the one that was selected the last time the mouse was moved over the table with the left button pressed.
    • The status bar was not updated and kept the variable information even if a program line was executed.

    These problems have been fixed. In addition, the status bar now shows information about the iconic variables, too.

  • By calling dev_update_var('off') (or unchecking the appropriate check box on the Preferences->Runtime Settings tab card) updates of the Control Variable table in the Variable Window are suppressed during the program execution. If the program is not running, the Update Variables setting should have no effect. However, if a control variable was modified manually via the Variable Inspect Window, the value of the modified variable was not updated in the Variable Window. This problem has been fixed.
  • HDevelop's Gray Histogram had several problems with monochrome images concerning the histogram display and statistics. These problems have been fixed.
  • HDevelop's Gray Histogram threw an error for complex images. HDevelop's Feature Histogram threw an error for gray features when the topmost image in the active Graphics Window was of type complex. Instead, HDevelop now simply displays an empty histogram and empty statistical values.
  • HDevelop's Feature Histogram did not always reset all statistics values correctly, i.e., when a feature couldn't be calculated (e.g., any gray_* feature on a complex image), value, number, and percentage of the peak value were not reset. This problem has been fixed.
  • The Feature Histogram dialog displayed a wrong value for the relative frequency of the peak value when the option smoothing was chosen. This problem has been fixed.
  • HDevelop's Feature Histogram displayed a wrong range in the statistics for single objects. Additionally, the minimum and maximum marks in the histogram display were placed incorrectly. These problems have been fixed.
  • Zooming histograms with the mouse did not work correctly. In particular, the upper and lower display borders were calculated too small, and it was possible to zoom beyond the possible range. This problem has been fixed.
  • HDevelop's histogram dialogs did not always display histograms correctly. This problem has been fixed.
  • In the following cases there was a potential problem with the consistency of a Variable Inspection table that was opened with multiple variables:

    • If the first column (i.e., variable) was hidden via the context menu of the horizontal table header an empty column could remain on the left hand side of the table.
    • If an arbitrary column was removed from the table via the operator dev_close_inspect_ctrl the statistics part of the column was not removed.

    These problems have been fixed.

  • HDevelop sometimes suggested variables with a wrong semantic type in the Operator dialog. This problem has been fixed.
  • The suggestions for the parameter 'LutName' of dev_set_lut could have caused an error. This problem has been fixed.
  • HDevelop did not print the character '<' correctly. This problem has been fixed.
  • If the font size for the program listing was changed via the Preferences dialog, the size of the program lines was not adapted. Furthermore, if a new operator was inserted, the line numbers and the program lines themselves sometimes became inconsistent, i.e., got a different height. This problem has been fixed.
  • Executing Run to Insert Cursor (Shift-F5) caused a crash if the insert cursor was at the end of the program and the last line of the program was a comment or deactivated. This problem has been fixed.
  • After inserting the body of a program, name conflicts between iconic and control parameters could have caused errors or even a crash. This problem has been fixed. Furthermore, HDevelop will now display an error message when entering an expression containing an iconic variable.
  • If block statements (loops or conditions) are entered to the program, the suitable block begin and block end statements are connected, if possible, making this statement valid. This validation was not performed when the block statements were entered via an Undo or Redo action. This problem has been fixed.
  • There was a problem if a 'break' or 'continue' statement followed a loop begin statement like 'for' or 'while' that was invalid or disabled. In such a case the 'continue' or 'break' statement was connected to the disabled or invalid loop. This led to some strange and erroneous behavior:

    • 'continue' within a disabled loop caused an infinite loop.
    • 'break' within a disabled loop caused a jump after the (disabled) loop end statement.
    • if 'break' or 'continue' followed after an invalid (because incomplete) loop begin statement, they became also invalid, even if there was a valid outer loop.

    These problems have been fixed. For clarifying which loops are executable and which not, and which statements (like 'break' and 'continue') work, loops that are disabled are no longer indented.

  • If a block, like 'for' or 'if', is partly selected, the other, unselected side of the block is now marked by a different background color that is similar to the selection color. This is due to the fact that there are some actions possible (e.g., Delete or (De)activate) that work on the block on the whole. Other actions, like Cut or Copy work only on the selected program line.
  • If a new operator was inserted into the program with OK at the end of a loop (for, while), the operator was executed and the PC jumped directly to the beginning of the loop instead of staying at the end statement (endfor, endwhile). As a consequence, the next cycle of the loop was always completely executed when a further operator was entered with OK. This problem has been fixed.
  • Starting an interactive draw operation by clicking the Apply button in the Operator Window now correctly sets the tool bar buttons. All running buttons are now disabled and only the Stop button is enabled. Furthermore, the Operator Window is disabled until the draw operation is finished or stopped.
  • HDevelop remained in an inconsistent state after calling the operators dev_set_colored, dev_set_color, dev_set_line_width, dev_set_draw, dev_set_shape, dev_set_lut, or dev_set_paint with erroneous parameter values. This problem has been fixed.
  • There was a problem with calling the HDevelop operator dev_clear_window if the Graphics Window was smaller than the displayed image. In some cases, after calling dev_clear_window the image part was reset to the window size even if the part was set in the Graphics Window by displaying an image or setting it explicitly with dev_set_part. A similar problem occurred if certain user actions like selecting a region or changing the color or line width were performed in the Graphics Window. These problems have been fixed.
  • HDevelop had a memory leak if the operators select_obj or copy_obj were called on a single XLD selecting this one and only object as output object and assigning the result directly to the same variable. This problem has been fixed.
  • It was not possible to evaluate the value of an error variable that was defined with dev_error_var and stored in the state of the last operator execution within an if-statement: before the evaluation was performed, the error variable was reset to 2. This problem has been fixed.
  • In the Find/Replace dialog, the operator substitution failed if a local procedure was entered as the 'Replace' operator. This problem has been fixed.
  • If in the Find/Replace dialog a disabled operator was replaced by another operator, the substituted operator was enabled. This problem has been fixed: now, the replaced operator keeps its enabled/disabled state after the substitution.
  • HDevelop's Find/Replace dialog sometimes also replaced texts in constant strings when variable names should be replaced. This problem has been fixed.
  • HDevelop crashed if an outdated result in the Find/Replace dialog was selected. This problem has been fixed.
  • There were several problems if the user tried to use the Change Procedure Interface dialog for making a local procedure external:

    • If there was already an external procedure with the same name in the selected directory, this procedure was overwritten without confirmation. This problem has been fixed. If the external procedure file already exists, now, a message box is opened where the user can choose between overwriting the file or going back to the dialog for selecting a different procedure name or directory.
    • Although the procedure was correctly written to disk, the Program Window listed the contents of the old (and now overwritten) procedure (or an empty procedure, if there did not exist an external procedure with that name before). This problem has been fixed.
    • The deletion of the local procedure was not added to the undo stack, so it was not possible to recreate the local procedure with 'Undo'. Although the procedure was correctly written to disk, the Program Window listed the contents of the old (and now overwritten) procedure (or an empty procedure, if there did not exist an external procedure with that name before). This problem has been fixed. The local procedure can be recreated now by calling Undo and removed again with Redo. Creating an external procedure is because of consistency problems intentionally not added to the undo stack.
    • The program was not marked as modified, although the local procedure was removed. This problem has been fixed.
    • If the external procedure could not be written (e.g., because the already existing procedure or the directory was write-protected), an error message was shown AFTER the local procedure had been removed from the program. This problem has been fixed. The selected directory is now checked before any other action is performed, so that a message box can inform the user about possible problems when writing the external procedure file and asking him to enter a different directory. If, nonetheless, an unexpected error occurs during writing, the local procedure is kept in the program. However, all other changes of the interface (concerning, e.g., name, short description, chapters, or parameters) have been performed.
  • If the name of a procedure was changed via the Change Procedure Interface dialog, the program lines referring to that procedure were not adapted even if the check-box 'Adapt program' was checked. This problem has been fixed.
  • There were some cases where the execution of a procedure that is going to be removed (or replaced) was not aborted. This led to an inconsistent call stack, where the execution was in an 'invisible' procedure. This happened in the following cases:
    • 'Delete Current' is called on a local procedure that has the program counter.
    • 'Make All External' is called while a local procedure has the program counter
    • 'Insert Used/All As Local' is called while the program counter is within an external procedure.

    The problem occurred also, if these actions were performed via the undo stack. In addition, with calling Undo or Redo the problem occurred also if the procedure was made local or external over the Change Interface dialog.

    This problem has been fixed in all cases mentioned above.

  • If a new procedure is created from selected program lines, the variables that are used in these program lines are suggested as parameters of the created procedure. If these parameter names are changed, two problems occurred:

    • If the selected program lines were replaced by the call of the newly created procedure, the variables used in that procedure call were replaced by the new names, although the new names are not valid in the name space of the calling procedure (the new names belong only to the name space of the new procedure).
    • If the selected program lines contain some complex expressions, the variables were not replaced correctly, especially if the expression contained the same function call more than once or if the variable name was part of a string.

    These problems have been fixed.

  • Making an external procedure from the program listing local led to an inconsistency in the program listing: while the combo box showed 'main' the listing still displayed the body of the previously external procedure. This problem has been fixed.
  • The External Procedure section on the Preferences dialog contains a Procedure Use tab card. This tab card offers - among others - the opportunity to list all procedures that are not used by the current program. On this list, the first external procedure was missing. This problem has been fixed.
  • HDevelop sometimes crashed when an external procedure path was deleted from the list of external directories in the External Procedure Settings dialog. This happened when the list contained at least two directories, a procedure from the second directory referred to a procedure from the first one, and the first directory was deleted. This problem has been fixed.
  • The behavior how references from external procedures to local procedures were resolved was not consistent. Depending on the order how certain actions (loading a program that defines local procedures and setting the external procedure path) were performed, an external procedure could refer to a local procedure or not.

    This behavior has been clarified now: it is no longer possible that local procedures are called from external procedures. This is due to consistency problems that occur especially in cases where within one application an external procedure is used from different HDevelop programs at the same time (e.g., in conjunction with the HDevEngine), and that procedure calls another procedure that is in one program locally redefined.

  • If via the External Procedure Settings dialog a directory entry was removed from the list of managed external procedure paths, all external procedures from that directory were removed from HDevelop without checking whether they were changed or not. Hence, all unsaved changes within these procedures were lost.

    This problem has been fixed. For every directory that is selected for being removed, the modification states of the procedures are checked, and, if required, a dialog is opened for confirming or canceling the removal.

  • HDevelop did not scroll to newly inserted parameters in the Procedure Interface dialog. This made it hard to create long parameter lists. This problem has been fixed.
  • HDevelop could not handle external procedure paths that contained non-ASCII characters. Although the path was correctly displayed in the directories table of the External Procedure Settings dialog, the procedures from such a path were not recognized and thus not be loaded. This problem has been fixed.
  • HDevelop did not check, whether the file name of an external procedure is a valid procedure name. However, this is important because if a procedure is renamed in the file system, the new filename becomes the name of the procedure. By this, it is possible that the new name is not a valid identifier, e.g., it might start with a number or contain non-ASCII characters. This problem has been fixed: procedure files with an invalid name are now listed in the External Procedures table but marked as not loadable.
  • The program listing in HDevelop could become corrupted if an external procedure file that was reachable over the external procedure paths could not be loaded. In such a case the procedures that followed after the corrupted file(s) in the listing might not be displayed: the listing kept empty or showed another procedure's body. This problem has been fixed.
  • If an HDevelop procedure that is saved with 'Save Procedure As...' overwrites another procedure on the file system that was already loaded, the listing of the overwritten procedure was not updated and kept showing the old body. This problem has been fixed.
  • HDevelop's Export dialog did not always display the export file name correctly. This problem has been fixed.
  • HDevelop now exports the short description and chapter information of procedures as comments.
  • After setting the system parameter 'filename_encoding' to 'utf8', HALCON is able to open images even if the filename consists of characters that cannot be encoded in the current locale (e.g. japanese characters on a german or english system). However, HDevelop's Read Image dialog (File/Read Image) did not show a preview of these images. This problem has been fixed.

  • After enabling HALCON's 'utf8' with set_system('filename_encoding', 'utf8'), the handling of strings with Unicode characters that do not belong to the native encoding set (e.g., japanese characters on a german or english system) was wrong:

    The variables were not correctly displayed and string operations on input strings with different encodings resulted in a string with the different encodings mixed (e.g., the result of a string concatenation on special native characters and not-native characters used native and utf8 encoding in one string). This problem has been fixed.

  • When using the japanese or simplified chinese GUI, deleting a program line using the "Del" key did not work. This problem has been fixed.
  • The Save Window action from the Graphics Window's context menu did not work if the selected file name contained Unicode characters and 'filename_encoding' was set to 'locale' (default). The following errors occured:

    • If the path was ASCII but the file name contained native characters, the image was stored with a cryptic name (the same happens with arbitrary Unicode characters, but in that case this is the expected behavior).
    • If the path contained any Unicode characters, HDevelop was aborted with an abnormal program termination.

    These problems have been fixed. Now the filename for Save Window can contain arbitrary Unicode characters.

  • There are some GUI elements in HDevelop where on a german system a comma was used as decimal separator instead of a point. In detail, the histogram windows and the Matching Assistant were concerned. Whether a comma appeared or not depended on the Language settings (locale) of the operating systems, not on the language that was selected in HDevelop. This problem has been fixed: now always a point is used as the decimal separator.
  • The japanese operator reference files are now correctly displayed in the HDevelop Help Window.
  • The assistants could not handle filenames with non-ASCII characters, if the hlib's 'filename_encoding' was set to 'locale' (default):

    In the Image Acquisition Assistant the following problems occured:

    • Selecting a file with the 'Select File(s)...' button: images with non-ASCII filenames could not be loaded even if they are supported on the local system.
    • Selecting a directory with the 'Select Directory...' button: if the directory name has non-ASCII characters no image file was loaded

    In the Matching Assistant the following problems occured with non-ASCII filenames:

    • loading of model images failed
    • loading of test images failed
    • loading of shape-based models failed
    • writing of shape-based models failed.

    All these problems have been fixed.

  • If the Image Acquisition Assistant was opened after setting the 'filename_encoding' to 'utf8' HDevelop crashed under Windows. This problem has been fixed.
  • HDevelop crashed when closing an image acquisition device that was used in volatile mode if there was still an iconic variable that was referring to an image that was grabbed in volatile mode. This problem has been fixed: In HDevelop volatile images will automatically be copied. This will not apply for the HDevEngine.
  • It was not possible to reconnect to a FireWire camera in the Image Acquisition Assistant using the 1394IIDC interface with FirePackage2v19 driver or higher. A workaround for this driver problem has been implemented in HDevelop.
  • HDevelop did not raise existing Assistant dialogs when selecting the corresponding named entry in the Assistant menu. This problem has been fixed.
  • The assistants of HDevelop went into an inconsistent state if the program was reset or a new program was opened. This regarded all HALCON handles that were opened by the assistants, in particular,

    • the image acquisition handles of a connected Image Acquisition Assistant and
    • the shape model handle of the Matching Assistant.

    As a consequence, after resetting the program (F2) or opening a new program, error messages were returned by some actions of the assistants:

    • the Image Acquisition Assistant failed to grab images, if it was connected to the device before the reset
    • calling 'Optimize Recognition Speed' or 'Inspect Recognition Rate' in the Matching Assistant produced lots of error messages if the model was searched in a test image before the reset.

    These problems have been fixed.

  • When running HDevelop in SDI mode, there was a problem on some UNIX systems with remembering the correct position of the Graphics and the Operator Window. If HDevelop was closed and restarted again, these two windows were moved to the right and down by the window frame size. Whether the problem occurred or not could also depend on the window manager and the X-server. This problem has been fixed.


o Examples:
  • The new example program examples/hdevelop/Filter/Enhancement/adjust_mosaic_images.dev shows how images can be adjusted radiometrically to create a mosaic image from images with different exposure and white balance settings.
  • The new example program RSS14Stacked.dev in examples/hdevelop/Applications/Barcode/ shows how to use the bar code reader with bar codes of type RSS-14 Stacked.
  • The new example program RSS14StackedOmnidir.dev in examples/hdevelop/Applications/Barcode/ shows how to use the bar code reader with bar codes of type RSS-14 Stacked Omnidirectional.
  • The new example program RSSExpandedStacked.dev in examples/hdevelop/Applications/Barcode/ shows how to use the bar code reader with bar codes of type RSS Expanded Stacked.
  • The new example program barcode_param_max_diff_orient.dev in examples/hdevelop/Applications/Barcode/ shows how to use the new parameter 'max_diff_orient' of the bar code reader.
  • The following new image acquisition examples in hdevelop/Image/Acquisition show how to perform image acquisition with the newly supported image acquisition interfaces RangerC, RangerE, and mEnableIV:
    • rangerc_components.dev, rangerc_parameters.dev, and rangerc_simple.dev,
    • rangere_components.dev, rangere_parameters.dev, and rangere_simple.dev,
    • menable4.dev, menable4_continuous.dev, menable4_crop.dev, menable4_parameters.dev, menable4_shaftencoder.dev, and menable4_simple.dev.
  • The new example program tag_2cameras.dev in examples/hdevelop/Image/Acquisition shows how to grab images from two Tattile TAG cameras.


o Manuals:
  • The HDevelop User's Guide is available in a new edition. It has been adapted to the changes in HALCON 8.0.1.
  • For the HDevelop operators dev_set_preferences and dev_get_preferences that were introduced in HALCON 8.0 the missing documentation in the reference manual was added.


HALCON Library

Speed-Up and Enhancements
Modified Operators
Bug Fixes
Manuals
o Speed-Up and Enhancements:
  • HALCON now supports USB dongles under Windows x64 Editions.
  • The DLLs of extension packages can now be found under Windows even if the environment variable HALCONEXTENSIONS contains quotation marks.
  • rotate_image is now faster for Phi = 90 and Phi = 270. The speedup depends on the processor and on the image size. It is faster for larger images. For example, for images of size 640x480, rotate_image is faster by up to a factor of 2. For 4096x3072 images, rotate_image is faster by up to a factor of 16.5.
  • adjust_mosaic_images now supports disabling the internal caching in order to reduce memory consumption. Internal caching can be disabled by adding the new optional parameter 'no_cache' to EstimateParam.

    Additionally, adjust_mosaic_images now allows to use subsampling in order to reduce memory consumption. Subsampling can be selected by adding the new optional parameter 'subsampling_N', with N an integer larger than 1, to EstimateParam.

    The new example program examples/hdevelop/Filter/Enhancement/adjust_mosaic_images.dev shows how images can be adjusted radiometrically to create a mosaic image from images with different exposure and white balance settings. It uses the new example images images/panorama/sankt_martin_automatic_*.jp2.

  • send_tuple and receive_tuple now allow tuples with more than 100000 elements. Furthermore, send_tuple and receive_tuple now are able to handle strings of more than 1024 characters.


o Modified Operators:
  • The HALCON bar code reader now is able to read RSS-14 Stacked, RSS-14 Stacked Omnidirectional and RSS Expanded Stacked bar code symbols. The find_bar_code operator can be called with the code types 'RSS-14 Stacked', 'RSS-14 Stacked Omnidir', or 'RSS Expanded Stacked'.

    Under examples/hdevelop/Applications/Barcode, there are example programs for each of the three new bar code symbologies. These example programs use new example images in the directories images/barcode/rss14_stacked, images/barcode/rss14_stacked_omnidir, and images/barcode/rssexpanded_stacked.

    Additionally, the bar code reader now allows to adjust the maximal deviation in orientation of adjacent pixels in a candidate region (i.e., a region with similar edge orientation) by using the parameter 'max_diff_orient'. As with all parameters 'max_diff_orient' can be set in create_bar_code_model or set_bar_code_param. The parameter can be used to control the size of the candidate region and therewith the result of the find_bar_code operator.

    The new example program barcode_param_max_diff_orient.dev in examples/hdevelop/Applications/Barcode/ shows how to use the new functionality. It uses the new image code128_max_diff_orient.png out of the directory images/barcode/code128.

  • open_window now also works on systems with multiple screens. The column parameter can be greater than the horizontal resolution of the virtual display and the row parameter can be greater than the vertical resolution of the virtual display, so it is no longer limited to the resolution of the primary display monitor.
  • polar_trans_region_inv and polar_trans_contour_xld_inv were not able to transform input data covering an angle extent of more than 360 degrees. They have been extended to facilitate this kind of transformation.


o Bug Fixes:
  • add_noise_distribution did not add pepper noise if noise with a salt-and-pepper distribution with less than 0.2 percent of pepper should be added. In addition, images of type int2 were clipped to the range [0,255]. These problems have been fixed. In addition, the documentation of the operator has been extended. It now describes the meaning of the values in the tuple that defines the distribution.

    Additionally, add_noise_distribution added noise defined by a Gaussian distribution incorrectly: The gray value of some pixels was increased too much. In particular, in HALCON 8.0 these pixels were set to 255. This problem has been fixed.

  • If the operator affine_trans_object_model_3d was used to scale an object model, the projection of this scaled object model with project_object_model_3d contained wrong contours. This problem has been fixed.
  • The operator best_match_pre_mg was parallelized on tuple level. This caused erroneous behavior in Parallel HALCON. This problem has been fixed.
  • connect_grid_points sometimes returned erroneous results, e.g., for no apparent reasons there were meshes missing (and as a consequence, the generated map image contained holes). This problem has been fixed.
  • create_cam_pose_look_at_point returned the error 1307 ("Wrong value of control parameter: 7") if RefPlaneNormal was set to 'z'. This problem has been fixed.
  • create_shape_model and create_shape_model_3d had a memory leak of 48 bytes when using Parallel HALCON. This problem has been fixed.
  • create_shape_model_3d in some cases crashed if the model that is projected into the image plane was too large. A projected model that is too large may result because of three reasons: First, the value for DistMin is chosen too small. Second, the image size in CamParam is chosen too small. Third, the parameter Scale in read_object_model_3d_dxf is chosen too small. This problem has been fixed. Now, in these cases, the error 8910 ("The projected model is too large") is returned instead.

    Additionally, create_shape_model_3d created the model in the wrong pose range if CamRollMax-CamRollMin exceeded the full circle, i.e. rad(360). In this case the model was created only from CamRollMin to CamRollMax-rad(360). The same problem occured for LongitudeMin and LongitudeMax. This problem has been fixed. Now, in this case the model is created for the full circle.

    Furthermore, create_shape_model_3d in rare cases added cluttered contours to the model that were not part of the 3D object. In general, these extra contours were very small in comparison to the correct model contours.

    Additionally, create_shape_model_3d in some cases returned the error 8940 ("Pose is not well-defined"). This could only happen if the parameter LatitudeMin was set to a value that is close to -rad(90) or LatitudeMax was set to a value that is close to rad(90). The meaning of 'close' in this context strongly depends on the used object. However, for some objects even -rad(80) or rad(80), respectively, might already have caused the error.

    Finally, create_shape_model_3d sometimes created incomplete models with parts of the projected 3D object model missing. If the missing part was too large the error 8510 ("Number of shape model points too small") was returned. This only occured if the system parameter 'clip_region' was set to 'true'.

    These problems have been fixed.

  • deviation_image sometimes returned erroneous results for images with reduced domains. This problem has been fixed.
  • do_ocr_word_mlp and do_ocr_word_svm did not apply any corrections to the raw classification result if the value of NumCorrections was equal to the number of input regions or greater. This problem has been fixed.
  • disp_distribution did not work correctly under Windows. No output was performed in the Graphics Window after executing the operator. The distribution became only visible after causing a manual flush by, e.g., minimizing and subsequently maximizing the Graphics Window. This problem has been fixed.
  • distance_transform did not work if for the output image Width was set to 1 and Metric was set to one of the following values: 'chessboard', 'octagonal', 'chamfer-3-4', 'chamfer-3-4-unnormalized', or 'euclidean'. In some cases, the operator returned wrong results, in other cases, distance_transform returned the error 6002 ("Memory partition on heap has been overwritten"). This problem has been fixed.
  • expand_line performed wrong tests on the input control parameter Coordinate for the 'row' mode. This might have caused an unexpected error 1301 ("Wrong value of control parameter 1").

    Additionally, expand_line returned wrong results in the 'column' mode. The returned regions might have missed a pixel at the border.

    These problems have been fixed.

  • find_1d_bar_code now ignores failed scanlines and proceeds with the processing of the remaining scanlines instead of returning an error.
  • find_bar_code caused a memory leak. This problem has been fixed.
  • find_shape_model_3d sometimes returned the error 6002 ("memory partition on heap has been overwritten") when restricting the search to a pose range that was smaller than the pose range of the model. This was the case if the pose range that was specified by the generic parameters 'latitude_min', 'latitude_max', 'longitude_min', and 'longitude_max' in find_shape_model_3d was smaller than the pose range that was specified when calling create_shape_model_3d. This problem has been fixed. Please note that this problem also often caused matches to be found significantly outside the specified pose range.

    Additionally, find_shape_model_3d crashed if the size of the input image differed from the image size that was specified in the camera parameters that were used during the model generation with create_shape_model_3d. This problem has been fixed. Now, instead the appropriate error message 2106 ("Wrong image width") or 2107 ("Wrong image height"), respectively, is returned.

  • gen_random_region in rare cases raised the error 3513 ("number of chords too big for num_max") if the width was an odd number. This problem has been fixed.
  • gen_region_polygon_filled returned a slightly too small region. This occurred only in rare cases and if the input polygon was not closed. This problem has been fixed.
  • gen_spherical_mosaic with StackingOrder = 'blend' and gen_cube_map_mosaic with any StackingOrder sometimes created incomplete mosaics.

    Additionally, gen_spherical_mosaic did not work correctly with three images if StackingOrder was set to 'voronoi' or 'blend'.

    Furthermore, gen_spherical_mosaic sometimes created images with an one pixel wide gap when using StackingOrder = 'blend'.

    These problems have been fixed

  • get_data_code_2d_results did not work correctly for the data code print quality assessment with 'polarity' set to 'light_on_dark'.

    Additionally, get_data_code_2d_results with (...,'quality_isoiec15415',...) returned the error 6041 ("No memory block allocated at last") if used for QR-code or PDF417 reading. This error occurred if the HDevelop option "Preferences->General Options->Experienced User->Show memory usage" was chosen.

    These problems have been fixed.

  • gray_inside did not converge in rare cases if the input image contained at least one pixel with a gray value of 255. This problem has been fixed.
  • hysteresis_threshold, edges_image, and edges_color in some cases returned error 6041 ("no memory allocated at last") for big output regions. This problem has been fixed.
  • inpainting_ct in rare cases returned erroneous results. This problem has been fixed.
  • list_files crashed when the system variable 'filename_encoding' was set to 'utf8'. This problem has been fixed.
  • measure_pairs had a memory leak of 16 bytes if no pairs of edges were found. This problem has been fixed.
  • open_window now also works on systems with multiple screens. The column parameter can be greater than the horizontal resolution of the virtual display and the row parameter can be greater than the vertical resolution of the virtual display, so it is no longer limited to the resolution of the primary display monitor.
  • partition_dynamic did not use the full specified search range for the determination of the position at which the region is partitioned. This problem has been fixed.
  • partition_rectangle returned regions that are one pixel too wide and one pixel too high. This problem has been fixed.
  • polar_trans_region_inv did not transform the complete input region if the transformation contained a large amount of zooming. This problem has been fixed.
  • project_object_model_3d did not return all projected edges if MinFaceAngle was set to zero.

    Additionally, project_object_model_3d sometimes returned wrong contours. This occured if HiddenSurfaceRemoval was set to 'true' and 'clip_region' was set to 'true'.

    Furthermore, project_object_model_3d sometimes returned wrong contours. This could occur if the DXF file that has been read by the operator read_object_model_3d contained polyface meshes with successive identical points.

    These problems have been fixed.

  • read_contour_xld_dxf did not close the DXF entity LWPOLYLINE if the value of the group 70 was 1. This problem has been fixed.
  • read_image returned the error 6001 ("Not enough memory available") if a very large PNG file with a region was read. This problem has been fixed.
  • read_object_model_3d crashed if the DXF file contained an entity of type BLOCK that contained only entities of type BLOCK. This problem has been fixed.
  • regiongrowing_mean in rare cases returned the error 6002 ("Memory partition on heap has been overwritten"). This problem has been fixed.
  • rgb1_to_gray and rgb3_to_gray now use the luminance formula given in ITU-R BT.470-6 (Conventional Television Systems). The formula is G = 0.299*R + 0.587*G + 0.114*B. The factor of 0.144 for B used in previous HALCON versions was erroneous.
  • rotate_image with 90, 180, and 270 degrees now returns results that are consistent with other angles. In particular, the full image is now transformed for these angles instead of the reduced domain only.
  • segment_contours_xld crashed if the number of output contours exceeded 50000. This problem has been fixed.
  • select_characters: The partitioning of neighboring characters did not work correctly. If more than one neighboring characters were connected, only one of them was partitioned. This problem has been fixed. Now, all regions are partitioned when using the operator with the parameter 'step2_partition_characters'. For example: AB BCD E F GHI J are partitioned, whereas previously only AB or BCD or GHI were partitioned.

    Furthermore, select_charactes caused a memory leak. This problem has been fixed.

  • set_socket_timeout could set the parameter value 'infinite' only once per socket. This problem has been fixed.
  • If the operator set_spy was used with the parameter 'input_gray_window' to trace gray images, HALCON sometimes crashed. This problem has been fixed.
  • set_window_extents could have crashed under Linux/UNIX for very large window sizes. This problem has been fixed.
  • The operators smooth_funct_1d_gauss, smooth_funct_1d_mean, negate_funct_1d, abs_funct_1d, and scale_y_funct_1d overwrote the input function. The operator get_pair_funct_1d overwrote its parameter Index. This problem did not affect programs executed in HDevelop, but programs using a language interface. This problem has been fixed.
  • split_skeleton_lines returned an error 6002 ("Memory partition on heap has been overwritten") in case of large, branched regions. This problem has been fixed.
  • There was an inconsistency with the tuple_select_range operator and the appropriate tuple operation in HDevelop [i:j]: In contrast to the documentation, both versions of tuple selection allow to pass as the right index a value that is by 1 smaller than the left index ([i:i-1]). The result of this operation is an empty tuple:
    tuple_select_range([1,2,3],1,2) -> [2,3]
    tuple_select_range([1,2,3],1,1) -> [2]
    tuple_select_range([1,2,3],1,0) -> []
    However, it was not possible to pass [0:-1] as a range. Consequently, this range is now also allowed:
    tuple_select_range([1,2,3],0,1) -> [1,2]
    tuple_select_range([1,2,3],0,0) -> [1]
    tuple_select_range([1,2,3],0,-1) -> []
    The documentation of the tuple_select_range operator was adapted accordingly.

    Furthermore, the HALCON operator tuple_select_range allowed to pass as a range arbitrary value pairs [i:i-1] with i > 0, even if it was not a valid index:
    tuple_select_range([1,2,3],100,99) -> []
    In this case an error will be returned now.

  • wiener_filter crashed if the width of the input image was greater than the height of the input image. This problem has been fixed.
  • zoom_image_factor and zoom_image_size returned wrong results for int2 and uint2 images if Interpolation was set to 'none'. This happened if the image was scaled in the vertical direction with a scaling factor exceeding 1.0. In this case, the resulting scaled image contained wrong gray values in the right half of the image. This problem has been fixed.
  • If a Qt application using OpenGL was executed before HDevelop was started, HDevelop freezed on Linux/UNIX systems while it tried to open a Graphics Window. Only applications linked to specific 3.x versions of Qt caused this behavior. This problem has been fixed.
  • HALCON no longer includes winsock.h by default because this created the problem that applications that wanted to use winsock2.h had to include winsock2.h before the HALCON header files.
  • HALCON windows of window type 'pixmap' sometimes displayed images incompletely, i.e., the rightmost column of the image was not displayed at all. As a consequence, in HDevelop version 8.0 color images were also displayed incompletely in the Variable View. This problem has been fixed.
  • When running Standard HALCON in multiple threads in parallel, a thread might have hung up in very rare cases. This problem has been fixed.
  • Parallel HALCON returned an error ("wrong number of control parameters") when using automatic and manual parallelization concurrently. This problem has been fixed.


o Manuals:
  • The Solution Guide I (Basics) is available in a new edition. The new chapter 'Classification' shows how to use HALCON's classification operators for different classification tasks. Furthermore, the chapter '3D Matching' has been extended to facilitate setting the reference pose.
  • The Solution Guide II-F on 3D Machine Vision is available in a new edition. The chapter 'Robot Vision' now contains more information about using the calibration data, in particular for grasping objects with a moving camera system.
  • The Installation Guide is available in a new edition. In particular, it describes how to upgrade floating licenses for 8.0.1. Additionally, the part about troubleshooting has been extended, e.g., for license errors that can occur with floating dongle licenses.
  • The Programmer's Guide is available in a new edition. The part on HDevEngine has been extended. In particular, it now describes how to use Parallel HDevEngine to speed up applications by executing procedures in parallel by multiple threads. Besides, it now explains how to access program variables and how to execute local procedures. Furthermore, it describes the basic way of developing applications with HDevEngine, e.g., when to execute programs and when to execute (local or external) procedures.

    In the part on HALCON/C++, code examples have been adapted to use the new bar code reader of HALCON 8.0.
  • The reference manual entry on add_noise_distribution has been extended. It now describes the meaning of the values in the tuple that defines the distribution.
  • The reference manual entry on adjust_mosaic_images has been extended. It now contains more details on the algorithms used and provides some recommendations for applications.
  • The reference manual entry on partition_dynamic has been rewritten. It now describes the determination of the positions where the input region is partitioned in more detail.
  • The reference manual entry on read_object_model_3d_dxf has been extended. It now describes a way to create a suitable DXF file.
  • The reference manual entries on set_spy and get_spy listed two control modes for the parameter Class that were not supported: 'output_gray_window' and 'output_region_window'. These entries have been removed from the documentation.
  • The reference manual entries of sfs_mod_lr, sfs_orig_lr, sfs_pentland, and phot_stereo stated the obsolete restriction that the input images must be square and that their dimensions must be powers of two. These entries were corrected.
  • The reference manual entry on tuple_select_range has been adapted to the changes of the operator.


HALCON/.NET

o Bug Fixes:
  • The operators ChangeRadialDistortionCamPar, SmoothFunct1DMean, SmoothFunct1DGauss, SampleFunct1D, GetRectanglePose, VectorToRelPose, MatchRelPoseRansac, TupleMin, TupleMax, and ReceiveTuple did not work properly via HALCON/.NET. This problem has been fixed.
  • A few operators can return empty tuples even when a single value API variant is used. This case was not handled correctly and could have caused a crash. This problem has been fixed.
  • Single value API style class members for HALCON operators with output parameters of ambiguous type returned corrupt values when used in situations returning an inappropriate type. Now, an exception is raised instead.


HDevEngine

o Speed-Up and Enhancements:
  • The HDevEngine is now reentrant. Thus it is possible to execute multiple HDevelop programs and/or procedures in parallel taking advantage of a multi-processor system. The new C# example programs MultiThreading and MultiThreadingTwoWindows in the directory examples/hdevengine/c# show how to speed up applications by letting two threads execute the same procedure or different procedures, respectively, in parallel.

    The Programmer's Guide contains additional information, in particular for HDevEngine/C++.

  • Accessing control variables within expressions became faster in HDevelop and the HDevEngine.


o Bug Fixes:
  • If a program was loaded into HDevEngine, this program was not unloaded if a new program was loaded with LoadProgram or if the HDevEngine instance was destroyed. The consequences were that the memory used by the first program was not freed and that the local procedures of the first program hid procedures with the same names in the second program. This problem has been fixed.
  • Executing dev_open_window via HDevEngine/.NET could have caused a crash or unpredictable behavior. This problem has been fixed.
  • Using string parameters via HDevEngine/.NET caused a memory leak. This problem has been fixed.


o Examples:
  • The new examples cpp/source/exec_procedures.cpp, c#/ExecProcedures, and vb.net/ExecProcedures in examples/hdevengine show how to execute multiple local and external procedures.
  • The examples cpp/source/exec_program.cpp, c#/ExecProgram, and vb.net/ExecProgram in examples/hdevengine now also show how to access the final state of program variables.
  • The C++ example implementation of HDevelop's internal display operators has been moved from examples/hdevengine/cpp/source/exec_program.cpp to a separate file (my_hdevoperatorimpl.cpp) so that it can be included more easily by multiple applications.
  • The examples cpp/source/exec_program.cpp, c#/ExecExtProc, and vb.net/ExecExtProc in examples/hdevengine contained memory leaks. These problems have been fixed.


Image Acquisition Interfaces

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


o Modified Image Acquisition Interfaces:

o Examples:
  • The following examples in solution_guide/images_acquisition replace examples that worked similar but used different image acquisition interfaces:
    • error_handling_timeout_leutron.dev (replaces error_handling_timeout_picport.dev)
    • first_example_acquisition_falcon.dev (replaces first_example_acquisition_ids.dev)
    • info_framegrabber_falcon.dev (replaces info_framegrabber_ids.dev)
    • real_time_grabbing_falcon.dev (replaces real_time_grabbing_ids.dev)
    • volatile_grabbing_falcon.dev (replaces volatile_grabbing_ids.dev)
  • The following examples in hdevelop/Image/Acquisition show how to perform image acquisition with the newly supported image acquisition interfaces RangerC, RangerE, and mEnableIV:
    • rangerc_components.dev, rangerc_parameters.dev, and rangerc_simple.dev,
    • rangere_components.dev, rangere_parameters.dev, and rangere_simple.dev,
    • menable4.dev, menable4_continuous.dev, menable4_crop.dev, menable4_parameters.dev, menable4_shaftencoder.dev, and menable4_simple.dev.
  • The new example hdevelop/Image/Acquisition/tag_2cameras.dev shows how to grab images from two Tattile TAG cameras.
  • In the procedure FGInfo of the example code examples/ia_integration/hAcqTemplate.c for developing a new image acquisition interface, the output parameter info was not initialized to a valid string for the query FG_QUERY_FIELD. This problem has been fixed.


Miscellaneous

o Licensing:
  • HALCON now uses version 11.4.1 of the FLEXnet Publisher license manager software.


o Installation:

o Example Images:
  • The new example images images/panorama/sankt_martin_automatic_*.jp2 are used in the example that shows how images can be adjusted radiometrically to create a mosaic image from images with different exposure and white balance settings.
  • The new example images images/barcode/rss14_stacked/rss14_stacked_01 and images/barcode/rss14_stacked/rss14_stacked_02 are used in the example for the bar code reader with the bar code type RSS-14 Stacked.
  • The new example images images/barcode/rss14_stacked_omnidir/rss14_stacked_omnidir_01 and images/barcode/rss14_stacked_omnidir/rss14_stacked_omnidir_02 are used in the example for the bar code reader with the bar code type RSS-14 Stacked Omnidirectional.
  • The new example images images/barcode/rssexpanded_stacked/rssexpanded_stacked_01 and images/barcode/rssexpanded_stacked/rssexpanded_stacked_02 are used in the example for the bar code reader with the bar code type RSS Expanded Stacked .
  • The new example image images/barcode/code128/code128_max_diff_orient is used in the example illustrating the new parameter 'max_diff_orient' for the bar code reader.


 
 
 © Copyright 2007 MVTec Software GmbH - All rights reserved.