The changes in HALCON 12.0.1 are described with respect to HALCON 12.0.
HDevelop
New Functionality
Assistants
- In the Matching Assistant, the edit control under Model Source, which is viewed when Model/Load is selected within the Creation Tab, can now be edited and not only be filled via file selection.
- The code generated by the Matching Assistant has been improved by
- a clearer arrangement of the code lines
- improved display operations of the matching results
- inserted stop() – statements for visualization purposes (display operations)
- inserted test images, if available
- improved generated variable names
GUI
- Organize Windows now preserves (or restores) the aspect ratio when resizing Graphics Windows. If two Graphics Windows are open, arranging them side by side will take preference over an enlarged Program Window. Also, additional tool windows are now arranged such that they fit into the workspace.
- Since HALCON 12, variables are continuously validated in HDevelop and it is no longer necessary to remove unused variables manually from the Variable View. Therefore, the respective Cleanup menu entries in the File menu and in the context menus of the Variable View have been eliminated.
- The documentation section of the procedure interface dialog offers an input field that was misleadingly named ‘Library’. This area allows to assign a label to procedures in order to sort them within the procedure reference documentation into one top level division, above chapter and section. It is in no way concerned with the procedure library file that can be used to store several procedures in one file. Therefore, the label of that documentation field was renamed into ‘Group’. In addition, within the procedure reference documentation procedures with an empty ‘Library’ field were grouped under the top level divisions ‘Unclassified local procedure’ or ‘Unclassified external procedure’. Analogous to empty chapter fields, these division names have also been renamed into ‘No group assigned (local procedures)’ and ‘No group assigned (external procedures)’.
- The procedure interface dialog now shows the signature of the procedures in the procedure selection box.
- In the documentation section of the procedure interface dialog, the chapter and subchapter combo boxes now show all operator chapters and their subchapters in addition to the used procedure chapters and subchapters.
- To increase the naming consistency of HDevelop windows, the Variable View and the Program Listing / Program Editor have been renamed to Variable Window and Program Window, respectively. To avoid confusion with the Program Window, the Program Line View has been renamed to Quick Navigation. Also, for reasons of clarity, the Find All tab in the Quick Navigation has been renamed to Find Results. Apart from GUI and documentation, these changes also affect the parameter values of dev_open_tool and dev_close_tool.Note that this change affects the compatibility.
IDE
- When the complete table of HDevelop’s Runtime Statistics is selected and copied to the clipboard, now also the header of the table is copied.
- HDevelop’s profiler has been enhanced in the following ways:
- It is possible to select lines in the profiler pane. The sum of the selected values of these lines is displayed in a field in the status bar.
- It is possible to activate and deactivate lines from being displayed in the profiler pane to achieve a meaningful visualization of the runtimes via the displayed bars. Because the lengths of the displayed bars are adapted to the maximum of the displayed values, one operator with a significantly longer runtime would otherwise lead to virtually indistinguishable bars for the faster operators. Use the respective entries in the context menu of the profiler pane or under Execute->Profiler Display to activate and deactivate lines in the profiler.
- It can be selected to hide or show all deactivated program lines.
- Activation and deactivation of program lines can also be done via the context menu or the tool bar in the Runtime Statistic window.
- It is possible to switch from showing all program lines of the current program to showing only the program lines from the procedure currently shown in the Program Window.
Procedures
- The setting of an external procedure path to a directory with many (>500) procedures via the Directories tab card of the Manage Procedures dialog has been substantially accelerated.
- The loading of large and complex procedure libraries has been accelerated for HDevelop and HDevEngine.
Code Export
- The HDevelop version information in exported file headers has been extended to also include the revision number for maintenance releases.
Bug Fixes
Assistants
- The simulated reference image in the Calibration Assistant did not correctly consider the polarity of the used calibration plate when using light marks on a dark background. This problem has been fixed.
- The quality assessment in the Calibration Assistant failed for very high resolution images of calibration plates (mark diameters of 50 pixels or higher). Also, the quality assessment was susceptible to noise. These problems have been fixed. Furthermore, for RGB images, the Calibration Assistant processed only the red channel. Now, the image is internally converted to grayscale before processing for a more balanced contribution of all pixels and channels.
- The Image Acquisition Assistant did not support the local character sets. On German systems, the use of umlauts was not always supported for file names or directory names of camera files. For example, choosing the DirectFile interface and a Mediafile that contains umlauts led to an error message. The only interface that supported the local character sets was the File interface. This problem has been fixed.
- The model of the Matching Assistant was lost when an error occurred during the acquisition of test images. Also, it was possible for a grab error to be triggered due to an internal HALCON error in rare cases, so even when grabbing from file, the model would have been lost after some time of live acquisition. This problem has been fixed.
- In very rare cases, the OCR Training File Browser of the OCR Assistant displayed black bars next or under the sample icons. This only occurred when HDevelop was running on a remote computer. This problem has been fixed.
- The undo/redo mechanism of the OCR Training File Browser did not behave as expected. The names of added symbols were not removed. Renaming symbols more than once as well as restoring empty symbols that had been deleted did not work properly. These problems have been fixed.
GUI
- The zoom rectangle in the Graphics Window was not always visible when dragging. In addition, under Windows it could have happened that the rectangle was not transparent and hid the part of the window to zoom into. These problems have been fixed.
- In the Select dialog for iconic variables, so far only tuple elements could be inspected, but no vector elements. This problem has been fixed.
- Under OS X, the file dialogs that are opened from within HDevelop could have had a broken label for the file type filter, when the GUI language was set to German or French. This problem has been fixed.
- If an external procedure that is unavailable via a procedure path is explicitly loaded for editing, HDevelop opens a new tab in the Program Editor to display this procedure. When the procedure is closed (via the file menus ‘Close Procedure’ or ‘Close All Procedures’) while it is still displayed, HDevelop removes the tab and displays another procedure. In this case, the procedure selection box showed a different procedure than the one that was actually displayed (typically the last one in the list). This problem has been fixed.
- The Variable View allows to insert a dev_display operator into the program for a specific iconic variable via the icons context menu or by Ctrl+<Double click> into the icon. This functionality was broken for uninitialized iconic variables. This problem has been fixed.
- The program listing in the Program Editor flickered when F2 was permanently pressed. This problem has been fixed.
- The icons in the Variable Window did not correctly display iconic object arrays of mixing image, region, and XLD types. This problem has been fixed. In addition, iconic object arrays are now displayed using colored elements. Furthermore, the icons for iconic vector variables did not correctly distinguish between empty vectors and vectors containing empty regions or empty objects. Also, vector icons were based on the first element only. These problems have been fixed.
- It was impossible to copy program lines from the dialog-based editor to another application if they had been inserted using the Operator Window. This problem has been fixed.
- If very large images were moved or zoomed in the Graphics Window, they might have disappeared. This problem has been fixed.
- In the Variable View, global variables were not updated when a procedure that uses global variables and had already been displayed before was hidden by the time the value of a global variable was changed. If the procedure was later displayed again, the Variable View still displayed the old value of the global variable. This problem has been fixed.
- The following HDevelop shortcuts did not work correctly:
- c to clear the Graphics Window (note that Capslock+C worked, but Shift+C and just pressing the key C did not work)
- The english version to fit the window (Crtl+Shift+G, home) did not work (note that Crtl+Shift+G, Pos1, which is suggested in the German version, worked)
- Ctrl+Shift+G, Q to close the Graphics Window and Ctrl+Shift+G, Del to clear the Graphics Window did not work if the Graphics Window was selected.These problems have been fixed.
- The Graphics Window sometimes could not be cleared with the Del-key. Pressing the Del-key had no effect if an iconic object had been displayed and then, the Graphics Window was activated by a click on its title bar. This problem has been fixed. Now the Del-key works if the Graphics Window was activated by a click on its title bar. Note that the Del-key worked as expected if the Graphics Window was activated by a click into the display area.
- The Visualize Object Model 3D dialog allows to insert code for displaying the model with the current dialog settings. For that, variable names are selected automatically by HDevelop. To avoid that the name of an already existing parameter is selected, HDevelop checked the names of all already existing control variables and, in case of an already existing variable with the same name, extended the variable name accordingly. However, it did not check the names of the already existing iconic variables. Thus, if an iconic variable with the same name existed, the name was re-used by the code insertion and therefore, the inserted code was invalid. This problem has been fixed. Now, the names of the already existing control variables as well as those of the iconic variables are checked before the selection of suitable variable names for the code insertion.
- The features ‘inner_width’ and ‘inner_height’ of the Feature Histogram tool did not work correctly. This problem has been fixed.
- The ‘Record Interactions’ functionality of the Graphics Window inserted invalid code when
- displaying a vector from the Variable Window or the ‘Display’ entry of the Graphics Window menu,
- displaying a vector element via the ‘Display Contents’ entry of the context menu of the Variable Window,
- displaying a channel of a multi-channel image while the current procedure has a control variable named ‘Image’, or
- displaying an element of an object tuple while the procedure has a control variable named ‘ObjectSelected’.This problem has been fixed.
- The procedure interface dialog did not display the minimum value for integer control parameters correctly. This problem has been fixed.
- Global vector variables were not displayed correctly on the Variable View’s global tab card. This problem has been fixed.
- When a program or procedure was loaded from a file in the old .dev/.dvp format, it could have happened that in a valid program line that calls a procedure, the name of the procedure was underlined by a dotted line. The underlining is normally used to mark an error in a program line. This problem has been fixed.
- The font size of the online help window did not relate to the font size specified in the preferences of HDevelop. This problem has been fixed.
- dev_set_paint did not influence newly opened Graphics Windows when Mode was set to ‘histogram’ or ‘3d_plot’. This problem has been fixed.
- The Gray Histogram and the Feature Histogram crashed when reopening them after additional lines had been added to the range or feature selection tables, respectively. This problem has been fixed.
- When opening a program or procedure in legacy file format (*.dev / *.dvp), tooltips for indented lines were sometimes displayed incorrectly in the full text editor. This problem has been fixed.
- Inserting or removing line breaks within a single program statement could have temporarily caused the profiler display to appear shifted with respect to the program lines. This problem has been fixed.
- If an OpenGL error occurred, displaying a 3D object model could have led to a crash. This problem has been fixed.
- Within the Operators menu, the list of operator names is displayed erroneously if more than one column is needed because of the large number of operators. This problem has been fixed.
- HDevelop could have crashed after renaming a library procedure via the procedure interface dialog. This problem has been fixed
- When changing the order of the procedure parameters in the procedure interface dialog, the Parameter Documentation tabs were only reordered accordingly if the changes were applied first. This problem has been fixed.
- If a new procedure was created via the procedure interface dialog and if that procedure was inserted into a program or a procedure library, the new procedure was not marked with an asterisk (*) as being modified. This was confusing because it was not obvious for the user that the new procedure has not been written to file and therefore, was not visible to other HDevelop instances. Furthermore, when closing HDevelop, it was not obvious for the user why HDevelop raised a warning dialog that asks to save or discard the unsaved changes at the program or library. This problem has been fixed.
- When in the procedure interface dialog a new procedure library is created for inserting the current procedure into it, and if the library is not reachable via the external procedure path, a dialog is opened. This dialog asks the user how to continue. One option offered by the dialog was ‘Continue’ without keeping the library open. This option was confusing because the library was created but could not be used. This problem has been fixed. Now, that option is not available anymore.
Furthermore, when an existing (unreachable) procedure library was selected as the target via the file selection dialog, the library was explicitly opened without asking. This was inconsistent to HDevelop’s regular behavior and has been changed, too. The same behavior applies now also to an external procedure path that is selected via ‘Browse to an external dir …’ button. - Under certain circumstances, HDevelop crashed when closing the procedure interface dialog. This happened when either
- a new procedure was created in a library that was not available through a procedure path (hence, the procedure was kept explicitly opened),
- the procedure interface dialog was kept open after creating the new procedure (i.e., the procedure was created with ‘Apply’),
- all open procedures were closed, e.g., via the File menu ‘Close all Procedures’, and
- the procedure interface dialog was closed,or
- a new procedure was created in a library that was available through a procedure path,
- the procedure interface dialog was kept open after creating the new procedure (i.e., the procedure was created with ‘Apply’),
- the procedure path to the library was removed, and
- ‘Save’ or ‘Discard’ was chosen in the upcoming dialog, which asks what should be done with the unsaved changes in the library.This problem has been fixed.
- The procedure interface dialog allows to rename the selected procedure. When the name was changed for a local or library procedure, a check box is displayed on the General Settings tab card, that offers the option to duplicate the procedure, i.e., to keep a copy of the procedure with the old name together with one with the new name. This option didn’t work for library procedures if the changed procedure had to remain in the same library as the origin. This problem has been fixed.
- The Save image dialog that is offered in the Variable Window via the icons of iconic variables did not offer the option to save uint2 images as .png files although the operator write_image supports that. This problem has been fixed.
- When accessing the OCR Training File Browser via the OCR Assistant, the menu ‘Save Training File As’ from the File menu was grayed out. Furthermore, the OCR Assistant was not linked correctly to the training. It did not react upon adding or removing samples or saving the training file via the OCR Training File Browser. These problems have been fixed.
- When the gray value histogram was displayed for floating point (i.e., real) images that contained extreme values (e.g., 1e38), sometimes low level errors occurred. This problem has been fixed.
- dev_inspect_ctrl did not open a Variable Inspect if no Variable Window was open. This problem has been fixed.
- So far, HDevelop’s Variable Inspect windows were able to handle vector variables only for generic values. The specific inspection windows for acquisition handles, functions, matrices, 3d objects, and poses worked only with tuple variables.
This problem has been fixed. The inspection windows’ behavior for vector variables has been matched as far as possible to the behavior for tuple variables. However, the following restrictions still apply to vector variables:- it is not possible to edit the values of poses and homogeneous matrices,
- for 1d functions, only the first vector element will be plotted.
- When resizing the display area of the profiler in a Program Window, the display areas of the profilers of all open Program Windows were resized. This problem has been fixed. Now, only the display area of the profiler in the current Program Window is resized.
- If a call to an HDevelop procedure was invalid because of an incorrect number of parameters, and the procedure interface was modified to match the call, variables used in the procedure call might have stayed undefined. As a consequence, program lines that used these variables might have stayed invalid. This problem has been fixed.
- The Start Dialog of HDevelop displayed an unspecific error message in the status bar if the news could not be retrieved from the internet. This problem has been fixed. Now, a more specific error message is displayed directly in the Start Dialog and a link to the MVTec News & Press page has been added.
- Some HALCON operators, e.g., train_class_mlp, display a progress bar during their execution in HDevelop. This progress bar sometimes did not disappear when the operator execution was interrupted, e.g., by an editing action. Typically, this happened when the program counter was moved as a result of the editing action. This problem has been fixed.
- Some of the texts of the graphical user interface (GUI) needed a revision related to grammar, spelling, and consistency. This problem has been fixed.
- HDevelop’s Pose Inspect did not update the parameters of a pose when it was originally opened with an uninitialized pose. It didn’t display question marks for parameters that were not yet instantiated and didn’t update these parameters when values were assigned to them. This problem has been fixed.
- When the Zoom Window was open and the mouse was moved to very large (image) coordinates, HDevelop sometimes displayed an error message that the coordinates were too big. It was very likely that HDevelop crashed soon afterwards. This problem has been fixed. Note that this problem did not affect HALCON XL.
- HDevelop crashed when trying to reset the visualization settings to the factory default in the Preferences dialog. This problem has been fixed.
IDE
- dev_open_tool threw an error when ToolType was set to ‘preferences’ and no tab card value was specified in GenParamValues. This problem has been fixed.
- HDevelop’s full text editor had the following problems concerning the auto completion:
- After selecting an entry from the suggestion list and pressing TAB for completing the parameter and going to the next parameter, the variable name could be extended if it was the prefix of a longer variable name at the first position of the suggestion list.
- Variables that were used as input for other operators have not been suggested as output parameters, even if the variables were undefined and needed to be set somewhere, e.g., by the new operator.
- There was no suggestion if the text cursor was placed immediately to the right of the open parenthesis of a vector method.
- Applying an operator in HDevelop with the Apply-Button or with Ctrl-Return did not use the thread specific system parameter set of the current thread context. The results of operators using thread specific system parameters (see set_system) might have differed when setting these parameters different to their default value and pressing the Apply-button of the Operator Window or Ctrl-Return in the free text editor. This problem has been fixed.
- After displaying an iconic vector in the Graphics Window via the Variable View, the ‘Insert Code’ action from the context menu of the Graphics Window or from the Visualization menu inserted an invalid call of the operator dev_display into the program. This problem has been fixed.
- When typing “global def” into the Program Editor and then pressing TAB, HDevelop at first seemed to hang and then crashed after a while. This problem has been fixed.
- HDevelop offers an option to reset the current procedure call via the Execute menu or by pressing Shift+F2. This option was broken. Instead of resetting the current procedure and setting the PC back to its first line, the procedure was left. This problem has been fixed.
- When browsing through the history of previously displayed procedures in the Program Window, the scroll position was not set to the position at which the individual procedures have been displayed lastly. This means that if you had scrolled down in a certain procedure, this position was not restored when browsing through the previously displayed procedures. This problem has been fixed.
- If a global variable had been declared with different types in different procedures, this type conflict led to invalid program lines. However, this conflict was not handled consistently. Although both declarations were marked as invalid and hence the variable should not exist, the Variable View displayed the invalid variable as a global control or iconic variable. Furthermore it was possible to assign a value to that variable by executing an appropriate operator. This problem has been fixed. If a global variable is declared with different types, no variable with that name is created.
- In the full text editor, the auto completion did not work properly for the import statement. After entering the default parameter value “import .”, the auto completion suggested vector operations like .at or .insert. This problem has been fixed. In addition, the suggestion list offers now entries to open dialogs for browsing to a directory or to a file.
- HDevelop could have crashed when an index assignment operation (HDevelop operator assign_at) was called with an empty index tuple:Index := [] Tuple[Index] := [] This problem has been fixed.
- After loading a program that was stored in the (legacy) .dev file format into the full text editor or creating it with the help of the Operator Window, it could have happened that pressing the TAB key to change the indentation of a program line corrupted the text of the program line. This problem has been fixed.
- HDevelop could have crashed when low level errors occurred in several threads that were executed in parallel. In addition, the Output Console sometimes displayed the same low level error several times ignoring others. These problems have been fixed.
- When a code line was split into several text lines by entering the continuation character ‘\’ and new lines, the automatic indentation of the next text line was not intuitive in some cases. This problem has been fixed. Now,
- if ‘\’ is used within a list of values, expressions, or parameters after a comma, i.e., at the beginning of the next item, the following line is indented to the first position after the opening bracket of the list and
- if ‘\’ is used within an expression, the following line is indented to the beginning of that expression.
- There was a memory leak in the parser of HDevelop. After parsing a regular operator call that consists of the operator name and parameters within parentheses, the string that stores the name of the operator was not freed. This problem has been fixed.
- HDevelop programs that contain program lines where the first text line ends with a backslash \ and this line is followed by an empty line have not been loaded correctly. After saving and reloading such a program, the empty line was not displayed in the text area although in the line number area an empty line with no line number was inserted. Therefore, the text lines and the line numbers did no longer match. This problem has been fixed.
- For constant expressions, it was possible to use vector expressions in a tuple context (e.g., [{42}]), which led to unexpected results. This problem has been fixed.
- If an (e.g., uninitialized) iconic input parameter caused a runtime error, HDevelop sometimes highlighted the wrong argument. This problem has been fixed.
- HDevelop had a problem when renaming procedure parameters that were used in vector expressions. If, e.g., an HDevelop procedure had a parameter ‘a’, contained a line ‘c := b.at(a)’, and ‘a’ was renamed to ‘aa’, the aforementioned line became ‘c := b.aat(a)’ instead of ‘c := b.at(aa)’.
HDevelop also sometimes had problems renaming variables when the new name was longer than the original name and contained the original name. E.g., the line ‘m := min2 ( a , a )’ became something like ‘m := min2 ( aaaaaaa , a )’ instead of ‘m := min2 ( aaaaa , aaaaa )’ when renaming ‘a’ into ‘aaaaa’. These problems have been fixed. - After changing the file location of an imported HDevelop procedure with the Edit Interface dialog, it was not possible to step into this procedure. This problem has been fixed.
HDevelop Language
- In the full text editor, assign and assign_at can be written in two different notations: with the help of the assign operator := or by using the keywords assign or assign_at and by passing the parameters in parentheses. The latter notation, i.e., writing assign and assign_at and passing the parameters in parentheses was broken. This problem has been fixed.
- insert and assign_at sometimes failed to properly modify a tuple if floating point values were passed as indices and multiple indices were passed to the operators. This problem has been fixed. Note that assign_at is internally called in some cases when writing an assignment.
- HDevelop was not able to determine the type of the variable in certain cascaded expressions, e.g., Vec.at(Vec.length()) := ControlVariable. This problem has been fixed.
Procedures
- It was possible to create HDevelop procedures that are named par_start or par_join although such procedures always cause a syntax error in HALCON versions 12 or higher. This problem has been fixed.
- The execution of JIT-compiled procedures led to a memory leak if an exception was raised inside a for loop and the exception was not handled inside this loop. This problem has been fixed.
- HDevelop did not apply the change of a procedure interface correctly when multiple procedure parameters were renamed, and more than one of these parameter variables were replaced in a single program line. Depending on the system, either not all variables were renamed or HDevelop crashed. This problem has been fixed.
- HDevelop crashed when certain user-defined procedure paths with heavily interdependent procedures were deleted. This problem has been fixed.
- It was not possible to duplicate external procedures with vector parameters in the main menu item Procedures->Duplicate… This problem has been fixed.
- The context help for a procedure call did not show the correct documentation if multiple procedures with the same name were in the path. This problem has been fixed.
- HDevelop sometimes crashed on Windows 8 systems when trying to execute complex procedures JIT-compiled. This happened for procedures in which many (more than about 500) temporary variables were used during execution, i.e., the procedure contained any of the following:
- many local variables,
- many global variables,
- many procedure parameters,
- many (complex) expressions,
- many code lines with arguments, or
- code lines with many arguments.This problem has been fixed.
- When explicitly loading an HDevelop procedure library that contains procedures that call each other, sometimes, the type of some variables could not be determined and the regarding program lines became invalid. This problem has been fixed.
- The behavior of HDevelop with respect to procedure files with capitalized file extensions (.DVP, .HDVP, .HDPL) was inconsistent. HDevelop was able to open those procedure files explicitly for editing, but it did not use them if they were placed in the external procedure path. This problem has been fixed. Now, HDevelop is able to open those procedure files for editing and uses them also if they are placed in the external procedure path.
- Pasting procedures of a library that was directly referenced by an import statement, triggered the dialog to add the directory where the library file resides to the list of external procedures paths, although the import statement pointed directly to the procedure library file and not to the directory. This problem has been fixed.
- In the procedure interface dialog, the Parameter Documentation area was not always in a consistent state. It could have happened that input fields for specifying the minimal and maximal value of the parameter (‘Value Min’ and ‘Value Max’) were visible although no numeric type was specified. Furthermore, it could have happened that as default type a type was selected that was not checked to be a supported type. These problems have been fixed.
- When clicking on “Apply” in the procedure interface dialog, the view changed to the first parameter. This problem has been fixed. Now, the tab of the previously selected parameter remains open.
- In case there were two import statements that pointed to the same library, one directly to the library file itself and one to the directory where the library resided, if the former was deleted or deactivated, the library procedures became unavailable. This problem has been fixed.
- The loading of a protected program or procedure led to a small memory leak. This problem has been fixed.
- If a procedure was explicitly opened, for example by opening it via File -> Open Procedure, and then modified inside HDevelop, HDevelop did not warn the user about unsaved changes, e.g., when closing HDevelop. This problem has been fixed.
- After changing the file location of an imported HDevelop procedure with the Edit Interface dialog, it was not possible to step into this procedure. This problem has been fixed.
Code Export
- HDevelop exported procedures containing local vector variables incorrectly to HALCON/C. Running the exported code created a memory leak. This problem has been fixed.
- HDevelop exported vector length expressions incorrectly to .NET and C++ if the expression was used within an operator or procedure call. This problem has been fixed.
- HDevelop exported control vector element access expressions incorrectly to C# if the regarding code line was an assignment expression, the regarding vector was of dimension 1 (i.e., the elements of the vector were tuples), and single elements of the tuple were accessed. This problem has been fixed.
- HDevelop exported programs containing global vector variables incorrectly if the regarding global variable was used in different procedures (including external procedures) and the option External Procedure Destination was set to separate files. In this case, every exported file that contained procedures in which the regarding global variable was used, contained a definition of the global variable. This problem has been fixed. Now, only the file that contains the procedure also contains the export definition of the global variable (marked by the keyword def in the HDevelop program).
- HDevelop exported unary expressions incorrectly to HALCON/C++ and HALCON/.NET in case the expression argument was a vector element. This problem has been fixed.
Miscellaneous
- HDevelop had problems or even crashed after wakeup when it was running during suspend mode. Additionally, in rare cases internal HDevelop operations could have experienced temporary license errors even if a valid license was available. These problems have been fixed.
- When working with monotonically increasing image sizes, the temporary memory cache could have caused the total memory consumption to increase unnecessarily. This problem has been fixed.
- Sometimes, clearing a vector variable failed in HDevelop. After the execution of the expression .clear(), the variable still held an undefined value instead of an empty vector of the correct type. This problem has been fixed.
- When pasting text under Windows, HDevelop sometimes offered to replace backslashes even though the text was obviously not a path but, e.g., a code block with line breaks. This problem has been fixed.
- HDevelop crashed when trying to access uninitialized global vector variables in JIT-compiled procedures. This problem has been fixed.
- In rare cases, the exit operator in HDevelop could have led to a program crash. This problem has been fixed.
HDevelop Example Programs
New and Improved HDevelop Example Programs
The following HDevelop example programs are new or have been improved:
- The bar code reader is now able to read EAN-13, EAN-8, UPC-A, UPC-E, and EAN/UPC Add-On bar codes in highly blurred images. This works also if the images show moderate effects of overexposure or print growth in addition to the blur. As a consequence, the HDevelop example program barcode_typical_cases.hdev has been adapted. It showed how to handle the problem of reading a blurred EAN-13 code and suggested to preprocess the image. This preprocessing is no longer required and has therefore been removed from the example program.
- The text contained in the QR code in the image
- datacode/qrcode/qr_version_25.pngwas outdated. The image has been replaced.
- The procedure disp_message is now able to display strings at multiple positions in a single call by passing tuples for the input parameters Row and Column.
The following HDevelop example programs have been adapted to make use of the new functionality:- hdevelop/Applications/Color-Inspection/classify_fuses_gmm_based_lut.hdev
- hdevelop/Applications/Color-Inspection/color_fuses_lut_trans.hdev
- hdevelop/Applications/Completeness-Check/ball.hdev
- hdevelop/Applications/Measuring-2D/check_fish_stick_dimension.hdev
- hdevelop/Applications/Measuring-2D/correct_measure_direction.hdev
- hdevelop/Applications/Measuring-2D/measure_ball_bond.hdev
- hdevelop/Applications/Measuring-2D/measure_lcd_cells.hdev
- hdevelop/Applications/Measuring-2D/measure_stamping_part.hdev
- hdevelop/Applications/Measuring-2D/rim.hdev
- hdevelop/Applications/Measuring-2D/segment_ball_bond_lead_frame.hdev
- hdevelop/Applications/OCR/bottle.hdev
- hdevelop/Applications/OCR/bottlet.hdev
- hdevelop/Applications/OCR/dotprt.hdev
- hdevelop/Applications/OCR/engraved.hdev
- hdevelop/Applications/OCR/engravedt.hdev
- hdevelop/Applications/OCR/ocr_tire_photometric_stereo.hdev
- hdevelop/Applications/OCR/ocr_wafer_semi_font.hdev
- hdevelop/Applications/Position-Recognition-2D/clip.hdev
- hdevelop/Applications/Position-Recognition-2D/find_cocoa_packages_local_deformable.hdev
- hdevelop/Applications/Position-Recognition-2D/find_cocoa_packages_max_deformation.hdev
- hdevelop/Applications/Position-Recognition-2D/find_peanut_chocolate_candies_local_deformable.hdev
- hdevelop/Filters/Color/cfa_to_rgb.hdev
- hdevelop/Identification/Bar-Code/barcode_autodiscrimination.hdev
- hdevelop/Identification/Bar-Code/barcode_param_orientation.hdev
- hdevelop/Identification/Bar-Code/barcode_status.hdev
- hdevelop/Identification/Bar-Code/msi.hdev
- hdevelop/OCR/Neural-Nets/letters_mlp.hdev
- hdevelop/OCR/Support-Vector-Machines/letters_svm.hdev
- hdevelop/OCR/Training-Files/protect_ocr_trainf.hdev
- hdevelop/OCR/k-Nearest-Neighbor/letters_knn.hdev
- hdevelop/Object/Information/compare_obj.hdev
- hdevelop/Regions/Features/area_center.hdev
- hdevelop/Tools/Geometry/intersection_contours.hdev
- hdevelop/explore_halcon.hdev
- solution_guide/2d_measuring/measure_metal_part_id.hdev
- solution_guide/3d_vision/pose_of_known_3d_object.hdev
- solution_guide/classification/classify_characters_ocr.hdev
- solution_guide/classification/classify_citrus_fruits.hdev
- solution_guide/classification/segment_citrus_fruits.hdev
- solution_guide/classification/train_characters_ocr.hdev
- HALCON has been extended with the procedure
- select_mask_objwhich selects objects from an object array using a mask (similar to tuple_select_mask).The HDevelop example programs
- hdevelop/Applications/Measuring-2D/check_fish_stick_dimension.hdev,
- hdevelop/Applications/OCR/fontt.hdev,
- hdevelop/Applications/OCR/generate_system_font.hdev,
- hdevelop/Applications/OCR/ocr_cd_print_polar_trans.hdev,
- hdevelop/Applications/Position-Recognition-3D/3d_position_of_rectangle.hdev,
- hdevelop/Applications/Position-Recognition-3D/get_rectangle_pose_barcode.hdev,
- hdevelop/Applications/Surface-Inspection/detect_mura_defects_texture.hdev,
- hdevelop/Morphology/Gray-Values/gray_opening.hdev, and
- hdevelop/XLD/Features/test_closed_xld.hdevhave been adapted to use the new procedure.
- The visualization of 3D scenes now supports text labels. For this, HALCON has been extended with the new operators
- add_scene_3d_label,
- set_scene_3d_label_param, and
- remove_scene_3d_label, which allow to create, modify, and remove labels. The HDevelop example program
- hdevelop/Graphics/3D-Scene/display_scene_3d.hdevhas been extended to show the usage of text labels in 3D scenes.
- The HDevelop example program
- hdevelop/Identification/Bar-Code/barcode_training.hdevhas been revised. It now uses a different set of images. Additionally, since the main advantage of the training is a more robust decoding, the remarks about a possible speedup have been removed.
- The HDevelop example program
- hdevelop/System/IO-Devices/adlink-daqpilot_digital_read.hdev
- The HDevelop example program
- hdevelop/System/IO-Devices/adlink-daqpilot_digital_write.hdev
Bug Fixes
- affine_image_trans_size in very rare cases crashed for very large images (large width, small height) because of incorrect rounding. This, e.g., could have caused operators like train_component_model to crash since they internally use affine_image_trans_size. All operators that internally use image transformations (scaling or rotation) were affected as well. This problem has been fixed. Note that images processed with, e.g., affine_image_trans_size using updated versions might have slightly different gray values.
This change led to slightly different results in the HDevelop example program- hdevelop/Applications/Completeness-Check/check_blister_mixed.hdev.Therefore, this program has been adapted accordingly.
HDevEngine
Functionality
- The loading of large and complex procedure libraries has been accelerated for HDevelop and HDevEngine.
Bug Fixes
- GetParamInfo(ParName,”description”) did not use the currently set documentation language if the documentation language had been changed with SetEngineAttribute. This problem has been fixed. Now, GetParamInfo(ParName,”description”) uses the documentation language that has been set with SetEngineAttribute.
- Unloading certain procedures, e.g., the HDevelop standard procedure analyze_graph_event(), crashed the HDevEngine. This problem occurred with HDevEngine::UnloadProcedure() as well as with HDevEngine::UnloadAllProcedures(). This problem has been fixed.
- The HDevEngine methodHDevEngine::SetEngineAttribute (“ignore_invalid_results”, “false”)did not work for global variables. Therefore, it was not possible to distinguish for global variables whether the variable was intentionally set to an empty tuple or object or whether it has not been initialized yet. This problem has been fixed.
- HDevEngine threw an uncatchable exception when the methods GetGlobalIconicVarVector or GetGlobalCtrlVarVector were called with a variable name that did not belong to a vector variable but to a single object or tuple. This problem has been fixed.
- The Method HDevEngineX::GetGlobalCtrlVarTuple of HDevEngine/COM might have crashed. This problem has been fixed.
- Retrieving control vector variables from the HDevEngine via the C++ interface had a memory problem, which sometimes resulted in corrupted values or even a crash. This problem has been fixed.
- Under Windows, the HDevEngine crashed in rare cases when loading external procedures. This problem has been fixed.
- The loading of a protected program or procedure led to a small memory leak. This problem has been fixed.
- There was a memory leak in the parser of HDevelop. After parsing a regular operator call that consists of the operator name and parameters within parentheses, the string that stores the name of the operator was not freed. This problem has been fixed.
- The HDevEngine/.NET functions GetGlobalIconicVarObject, GetGlobalIconicVarImage, GetGlobalIconicVarRegion, and GetGlobalIconicVarXld contained a memory leak. This problem has been fixed.
HALCON Library
New Functionality
3D
- get_disp_object_model_3d_info and get_display_scene_3d_info are now faster by a factor of up to 50 if the information is requested for multiple positions at once, i.e., if the parameters Row and Column are tuples with multiple elements.
Bar Code
- find_bar_code and decode_bar_code_rectangle2 are now more robust against print growth, print loss, and overexposure for 2/5 Interleaved codes.
- The UPC-A bar code reader now produces fewer false reads (or misreads) if the input image contains an EAN-13 code. This enhancement greatly improves the robustness of the bar code reader if the code type is set to ‘auto’ or ‘UPC-A’.
- The bar code reader is now able to read EAN-13, EAN-8, UPC-A, UPC-E, and EAN/UPC Add-On bar codes in highly blurred images. This works also if the images show moderate effects of overexposure or print growth in addition to the blur. As a consequence, the HDevelop example program barcode_typical_cases.hdev has been adapted. It showed how to handle the problem of reading a blurred EAN-13 code and suggested to preprocess the image. This preprocessing is no longer required and has therefore been removed from the example program.
- The bar code reader is now more robust against interfering edges outside the bar code region.
- HALCON now supports all GS1 application identifiers specified in the latest version of the “GS1 General Specifications” (Version 15, Issue 2, January 2015).
Calibration
- In calibrate_hand_eye and hand_eye_calibration, the accuracy of the linear method of the hand-eye calibration has been improved (‘optimization_method’=’linear’ for calibrate_hand_eye or Method=’linear’ or Method=’scara_linear’ for hand_eye_calibration). In particular, for articulated robots, the accuracy of the pose of the calibration object (‘obj_in_tool_pose’ for stationary cameras and ‘obj_in_base_pose’ for moving cameras) has been improved. For SCARA robots, the accuracy of the pose of the calibration object as well as the pose of the camera (‘base_in_cam_pose’ for stationary cameras and ‘tool_in_cam_pose’ for moving cameras) has been improved.
- get_calib_data and get_camera_setup_param can now be used to query the root mean square error (RMSE) of the back projection of the optimization of the camera system. Thus, the calibration error of the camera calibration can be accessed after a hand_eye_calibration and the calibration error is saved in the camera setup model. Additionally, get_calib_data can now be used to query the pose error of the complete chain of transformations of a hand eye calibration. This change required a new file format version for camera setup models. Camera setup models written with HALCON 12.0.1 or newer cannot be read by older versions of HALCON.
Data Code
- find_data_code_2d has been improved to find 2D data codes more consistently even if the domain of the image was reduced rather tightly around the code region, as long as the reduced image domain contains the complete symbol including its quiet zone.
- The ECC 200 data code reader now strictly respects the parameter settings for ‘stop_after_result_num’.
- get_data_code_2d_results now returns the additional print quality grading parameters ‘Format Information’ and ‘Version Information’ for QR Codes and Micro QR Codes for ‘quality_isoiec15415’ and ‘quality_aimdpm_1_2006’.
- HALCON now supports all GS1 application identifiers specified in the latest version of the “GS1 General Specifications” (Version 15, Issue 2, January 2015).
Graphics
- The visualization of 3D scenes now supports text labels. For this, HALCON has been extended with the new operatorswhich allow to create, modify, and remove labels.The HDevelop example program
- hdevelop/Graphics/3D-Scene/display_scene_3d.hdev
OCR
- All pretrained OCR fonts are now available in a variant with regularized weights and with a rejection class (suffix “_Rej”) and in a variant with regularized weights but without a rejection class (suffix “_NoRej”). Because of the regularization, the new pretrained OCR fonts provide more meaningful confidences. Because of the rejection class, it is possible to distinguish characters from background clutter. The new pretrained fonts are
- DotPrint_0-9+_NoRej.omc,
- DotPrint_0-9+_Rej.omc,
- DotPrint_0-9A-Z_NoRej.omc,
- DotPrint_0-9A-Z_Rej.omc,
- DotPrint_0-9_NoRej.omc,
- DotPrint_0-9_Rej.omc,
- DotPrint_A-Z+_NoRej.omc,
- DotPrint_A-Z+_Rej.omc,
- DotPrint_NoRej.omc,
- DotPrint_Rej.omc,
- HandWritten_0-9_NoRej.omc,
- HandWritten_0-9_Rej.omc,
- OCRA_0-9A-Z_NoRej.omc,
- OCRA_0-9A-Z_Rej.omc,
- OCRA_0-9_NoRej.omc,
- OCRA_0-9_Rej.omc,
- OCRA_A-Z+_NoRej.omc,
- OCRA_A-Z+_Rej.omc,
- OCRA_NoRej.omc,
- OCRA_Rej.omc,
- OCRB_0-9A-Z_NoRej.omc,
- OCRB_0-9A-Z_Rej.omc,
- OCRB_0-9_NoRej.omc,
- OCRB_0-9_Rej.omc,
- OCRB_A-Z+_NoRej.omc,
- OCRB_A-Z+_Rej.omc,
- OCRB_NoRej.omc,
- OCRB_Rej.omc,
- OCRB_passport_NoRej.omc,
- OCRB_passport_Rej.omc,
- Pharma_0-9+.omc,
- Pharma_0-9+_NoRej.omc,
- Pharma_0-9+_Rej.omc,
- Pharma_0-9A-Z_NoRej.omc,
- Pharma_0-9A-Z_Rej.omc,
- Pharma_0-9_NoRej.omc,
- Pharma_0-9_Rej.omc,
- Pharma_NoRej.omc,
- Pharma_Rej.omc,
- SEMI_NoRej.omc, and
- SEMI_Rej.omc.
Speedup
- get_disp_object_model_3d_info and get_display_scene_3d_info are now faster by a factor of up to 50 if the information is requested for multiple positions at once, i.e., if the parameters Row and Column are tuples with multiple elements.
System
- dequeue_message was reentrant and might have blocked exclusive operators when running concurrently in different threads. Now, dequeue_message runs independent of other operators.
XLD
- fit_ellipse_contour_xld, fit_circle_contour_xld, and fit_line_contour_xld returned the error 3264 (“All points classified as outliers (ClippingFactor too small)”), which could be misleading. Now, the operators return the modified error 3264 (“All points classified as outliers (ClippingFactor too small or used points not similar to primitive)”).
Bug Fixes
3D
- calibrate_sheet_of_light in some cases could not robustly segment disparity images of high quality. In particular, the domain of the disparity image was not always taken into account correctly. This problem has been fixed.
- clear_scene_3d crashed in rare cases. This problem has been fixed.
- disp_object_model_3d displayed nothing when called after a triangulate_object_model_3d call that generates no triangles. This problem has been fixed.
- find_shape_model_3d crashed if the parameter ‘pose_refinement’ was set to ‘none’, the image type was byte, and the parameter ‘model_tolerance’ was set to 0. This problem has been fixed.
- fit_primitives_object_model_3d can fit planes into point clouds. Sometimes, small changes of the input point cloud switched the orientation of the fitted plane, i.e., its pose and normal. This problem has been fixed. Now, the normal vector points towards the side of the plane on which the origin is located.
- get_disp_object_model_3d_info and get_display_scene_3d_info sometimes threw an exception if called with multiple values for the parameter Information, e.g., if called with the control parameter tuple [‘object_index’,’depth’]. This problem has been fixed.
- get_display_scene_3d_info crashed in cases where the system did not support persistent storage. This problem has been fixed.
- prepare_object_model_3d destroyed the precomputed data structure and did not recompute it when it was called twice for the same 3D object model. This resulted in a longer runtime of a subsequent call of distance_object_model_3d. This problem has been fixed.
- select_points_object_model_3d returned an error 3510 (“Exceeding the maximum number of run lengths while automatical expansion”) or crashed in rare cases if the current maximum number of run lengths was exceeded during automatic expansion. This problem has been fixed.
- set_profile_sheet_of_light and measure_profile_sheet_of_light crashed when used on a calibrated model read from file. This problem has been fixed.
- simplify_object_model_3d could have led to a deadlock of the calling thread if it ran out of memory. This problem has been fixed.
- triangulate_object_model_3d did not notify the user in cases where a triangulation was not possible because of local inconsistencies like collinear or ‘double’ points. This problem has been fixed. Now, in these cases, triangulate_object_model_3d returns the error 9290 (“Local inconsistencies in all valid neighborhoods (parameters only allow few valid neighborhoods or point cloud not subsampled)”).
- triangulate_object_model_3d did not unlock the input model in special cases. Hence subsequent usage of the model may have deadlocked HALCON. This problem occurred only if the parameter Method was set to ‘implicit’ and triangulate_object_model_3d returned with an error. This problem has been fixed.
- write_object_model_3d accepted empty 3D object models and saved them instead of returning an error message. This problem has been fixed.
- If an OpenGL error occurred, displaying a 3D object model could have led to a crash. This problem has been fixed.
Bar Code
- find_bar_code returned symbol regions without corresponding decoded data string. This happened only in rare cases and only when a timeout occurred. This problem has been fixed.
- find_bar_code accessed uninitialized memory under certain circumstances. This has sometimes led to incorrect results. This problem has been fixed.
- find_bar_code did not read some codes with noisy edges in the quiet zone at the end of the code. This problem has been fixed. In particular, the robustness has been improved. Noisy parts in the quiet zone are ignored if they have a different gray value profile than the original code.
- get_bar_code_objects sometimes returned deformed ‘symbol_regions’ for bar codes that are located close to the image border after a print quality assessment, i.e. after calling get_bar_code_results with the parameter ‘quality_isoiec15416’. This problem has been fixed.
- get_bar_code_result sometimes returned the error 3513 (“Internal error: number of chords too big for num_max”) when the parameter ResultName was set to ‘quality_isoiec15416’, i.e., when get_bar_code_result was used to get a tuple with the assessment of the print quality in compliance with the international standard ISO/IEC 15416. This problem has been fixed.
Calibration
- calibrate_cameras had a small memory leak when called multiple times. This problem has been fixed.
- calibrate_hand_eye could have crashed for articulated robots if the rotations between the calibration object poses exhibited only one rotation axis. This problem has been fixed.
- find_calib_object did not detect some calibration marks if the calibration plate was heavily tilted. This problem has been fixed.
- find_calib_object crashed with certain image dimensions. This problem has been fixed.
- remove_calib_data_observ caused several problems:
- If remove_calib_data_observ was used during a calibration of telecentric cameras, calibrate_cameras and consequently HDevelop crashed. This also caused crashes of the Calibration Assistant.
- In cases where data was removed from a calibration data model with remove_calib_data_observ, some of the data was still used by calibrate_cameras.
- In a scenario involving more than one camera, when data was removed from the calibration data model using remove_calib_data_observ, then query_calib_data_observ_indices still returned the indices of the removed data.
- If the calibration data model for more than one camera was written to and read from file using write_calib_data and read_calib_data, the calibration results of the model that was written and the model that was read differed.These problems have been fixed.
- sim_caltab sometimes did not draw all calibration marks. This problem has been fixed. Note that calibration plates with hexagonally arranged marks, which were introduced with HALCON 12, were not affected.
Classification
- add_sample_class_svm did not accept values of type real for the parameter Class. This problem has been fixed.
- After training samples were added to or removed from an already trained sample identifier with add_sample_identifier_training_data or remove_sample_identifier_training_data, the sample identifier became inconsistent. When applying the inconsistent sample identifier with apply_sample_identifier, the results were non-deterministic. The inconsistency could be fixed by executing the training again by calling train_sample_identifier. This problem has been fixed. Now, retraining is enforced before applying the sample identifier again. If an inconsistent sample identifier is applied by calling apply_sample_identifier, now the error 9610 (“Sample identifier has not been trained yet (use train_sample_identifier)”) is returned.
- The sample-based identification sometimes did not work correctly for input images with reduced domains. In these cases the results might have slightly changed if the domain of the input image was reduced compared to the result that was obtained with the full domain even if the image did not contain any texture outside the reduced domain. This problem has been fixed.
- select_feature_set_svm had a memory leak if the training of a SVM failed because of deficient data. This problem typically occurred when the number of samples per class was extremely disparate. This problem has been fixed.
Compute Device
- find_ncc_model returned slightly incorrect and nondeterministic results on compute devices in rare cases. So far this problem was only observed on OS X systems with Intel HD4000 graphic cards. This problem has been fixed.
Data Code
- create_data_code_2d_model and set_data_code_2d_param set the model parameters ‘module_gap_col_max’ and ‘module_gap_row_max’ to the value ‘small’ instead of to the value ‘big’ for QR codes and for Micro QR codes if the parameter ‘default_parameters’ was set to ‘enhanced_recognition’ or ‘maximum_recognition’. This problem has been fixed.
- find_data_code_2d returned corrupt decode strings for rune Aztec codes in the case the symbol size was set larger than the size of a rune symbol (= 11), the ‘format’ was set to ‘rune’, and ‘strict_model’ was set to ‘true’. This could have resulted in a crash. This problem has been fixed.
- find_data_code_2d sometimes failed to read Aztec codes that were used for training, although they could be read with ‘default_parameters’ set to ‘maximum_recognition’. This problem has been fixed.
- find_data_code_2d in rare cases caused a stack overflow. This problem has been fixed.
- find_data_code_2d in very rare cases returned false QR codes and Micro QR codes for images with a reduced domain. This problem has been fixed.
- find_data_code_2d had a memory leak for ECC 200, PDF417, MicroQR, and QR codes. The memory leak occurred only in the case of successive calls to find_data_code_2d on images with increasing image or domain sizes. This problem has been fixed.
- find_data_code_2d had a high memory consumption and a long execution time for images containing many QR codes. This problem has been fixed.
- In rare cases, a memory leak occurred during the print quality inspection for ECC 200 codes. This problem has been fixed.
- The ECC 200 data code reader did not find dot printed codes in very rare cases when the image domain was reduced. This problem has been fixed.
- The ECC 200 reader did not decode the last codeword if the encodation scheme was C40, Text, or ANSI X12 and the last codeword was encoded as ASCII double digit numeric. Moreover, if the encodation scheme was EDIFACT, the unlatch codeword was ignored. This problem has been fixed.
- The QR code reader crashed in very rare cases. This problem has been fixed.
- The data code reader did not find ECC 200 codes in very rare cases, when a strong edge existed near the data code. This problem has been fixed.
- When setting ‘finder_pattern_tolerance’ to ‘high’, the ‘GS1 DataMatrix’ reader returned results for codes that were non-conformant with the GS1 standard. This problem has been fixed.
- get_data_code_2d_results returned an incorrect value for the AIM DPM-1-2006 grade for cell modulation. Instead of the notional UEC levels, the cell modulation grade levels were reduced with respect to the ISO/IEC 15415 values (see AIM DPM-1-2006, Chap. 9.3). This problem has been fixed.
- get_data_code_2d_results crashed in rare cases for ‘quality_aimdpm_1_2006’ and ‘quality_isoiec15415’ when the inspected or found symbol was too close to the image border. This problem has been fixed.
- get_data_code_2d_results in rare cases returned incorrect grades for ‘quality_aimdpm_1_2006’ and ‘quality_isoiec15415’. This problem has been fixed.
- get_data_code_2d_results may have returned incorrect values for the Print Growth for non-square ECC 200 codes.
This problem has been fixed. - set_data_code_2d_param did not allow to set more than one format for Aztec codes. Setting ‘format’, e.g., to ‘rune compact’ resulted in an error 8830 (“Invalid parameter value”). This problem has been fixed.
Feature
- When the gray value histogram was displayed for floating point (i.e., real) images that contained extreme values (e.g., 1e38), sometimes low level errors occurred. This problem has been fixed.
File
- Regions saved in hobj format were not clipped if the system parameter ‘clip_region’ was set to true. This problem has been fixed.
- On Windows systems the maximum length for a path was limited to 260 characters. This problem has been fixed. Now, the maximum total path length on Windows systems is 32,767 characters.
- read_image sometimes had problem to read 16- and 32-bit TIFF images that were stored using tiles. If the tiles were not aligned with the scanline size of the TIFF file, the data of the last tiles in each row were read incorrectly. This problem has been fixed.
Filter
- convol_image returned incorrect results with some masks with a center of gravity different to the center of the mask if executed on OpenCL compute devices. For example, a 3×3 mask where the first or last column is empty (i.e., all entries in this column are zero) was affected. This problem has been fixed.
- derivate_gauss crashed or returned a memory error if it was called for images with a width smaller than or equal to 4 (SSE2 implementation) or smaller than or equal to 8 (AVX implementation). This problem has been fixed.
- affine_image_trans_size in very rare cases crashed for very large images (large width, small height) because of incorrect rounding. This, e.g., could have caused operators like train_component_model to crash since they internally use affine_image_trans_size. All operators that internally use image transformations (scaling or rotation) were affected as well. This problem has been fixed. Note that images processed with, e.g., affine_image_trans_size using updated versions might have slightly different gray values.
This change led to slightly different results in the HDevelop example program- hdevelop/Applications/Completeness-Check/check_blister_mixed.hdev.Therefore, this program has been adapted accordingly.
- gen_image_to_world_plane_map and gen_radial_distortion_map in rare cases created corrupt maps of type coord_map_sub_pix, such that HALCON may have crashed if these maps were used in map_image. This problem has been fixed.
- lines_gauss might have crashed if the system parameters for the image dimensions (‘width’ or ‘height’) were set smaller than the actual image dimensions of the input image and the input image had a reduced domain. This problem has been fixed.
- polar_trans_image_inv might have set the output image domain incorrectly when running on compute devices and the angle extent was smaller than 2*PI. This problem has been fixed.
- polar_trans_image_inv might have returned wrong gray values when the angle extent exceeded 2*PI. This problem has been fixed.
- var_threshold returned non-deterministic regions for input images with non-rectangular reduced domains. This problem has been fixed.
Graphics
- disp_rectangle1 always returned the error 3040 (“Row value of a coordinate > 2^15-1”) if one coordinate was too big and the error 3043 (“Column value of a coordinate < -2^15”) if one coordinate was too small, regardless whether the coordinate was a row or a column coordinate. This problem has been fixed. Now, disp_rectangle1 returns the correct errors 3040 (“Row value of a coordinate > 2^15-1”), 3041 (“Row value of a coordinate < -2^15”), 3042 (“Column value of a coordinate > 2^15-1”) or 3043 (“Column value of a coordinate < -2^15”), respectively.
- The operators
- draw_circle,
- draw_circle_mod,
- draw_ellipse,
- draw_ellipse_mod,
- draw_line,
- draw_line_mod,
- draw_nurbs,
- draw_nurbs_mod,
- draw_nurbs_interp,
- draw_nurbs_interp_mod,
- draw_point,
- draw_point_mod,
- draw_polygon,
- draw_rectangle1,
- draw_rectangle1_mod,
- draw_rectangle2,
- draw_rectangle2_mod,
- draw_region,
- draw_xld, and
- draw_xld_mod reacted unexpectedly to mouse events outside the HALCON windows. As a consequence, a mouse click outside a HALCON window modified the results in undesired ways or led to error messages. This problem has been fixed. Now, all mouse clicks (except the right mouse button) and modifier keys (Shift or Ctrl) are ignored if the mouse pointer is outside the HALCON windows.
- dump_window and dump_window_image returned incorrect results if drawing objects where attached to the window. This problem has been fixed.
- dump_window_image crashed for windows that are 32768 pixels wide or high, i.e., that have – at least in one dimension – the maximum size supported by standard HALCON. This problem has been fixed. Note that this problem did not occur under HALCON XL.
- When using drawing objects on Linux systems, HALCON in rare cases crashed on exit. This problem has been fixed.
- new_line provoked BadWindow warnings on Linux machines if called on buffer windows. This problem has been fixed.
- set_colored and dev_set_colored did not work correctly after attaching a drawing object to a window. This problem has been fixed.
- set_part did not work correctly for very small negative part borders. This problem has been fixed.
- HALCON may have crashed when terminating an application that had open windows to which drawing objects had been attached. This problem has been fixed.
Matching
- create_shape_model_xld crashed if a very short contour (i.e, shorter than one pixel) was passed as argument. This problem has been fixed. Please note, that such a short contour is no useful input for create_shape_model_xld anyhow. One would have to scale the contour to a proper size in advance.
- find_ncc_model returned wrong scores for uint2 images that contained high gray values. This problem has been fixed.
- find_ncc_model returned slightly incorrect and nondeterministic results on compute devices in rare cases. So far this problem was only observed on OS X systems with Intel HD4000 graphic cards. This problem has been fixed.
- find_ncc_model returned different results in sequential and in parallel mode. This problem has been fixed.
- find_shape_model, find_shape_models, find_scaled_shape_model, find_scaled_shape_models, find_aniso_shape_model, find_aniso_shape_models, and find_shape_model_3d crashed in very rare cases when run in parallel mode. This problem has been fixed.
Measure
- apply_metrology_model returned the error 6002 (“Memory partition on heap has been overwritten”) if a large number of edges were found. This problem has been fixed.
- get_metrology_object_measures returned no edges if it was called after apply_metrology_model for a metrology object configured with ‘measure_transition’=’uniform’ and if only the positive or negative edges were requested. Furthermore, when negative edges were requested, the measure regions were missing. These problems have been fixed.
- When using set_metrology_object_param to set the transition type to ‘uniform’, calling apply_metrology_model, and then setting the transition type to ‘positive’ or ‘negative’, the resulting edge points were different from the edge points of a metrology model where the transition type has not been set to ‘uniform’ in the first step. Additionally, a small memory leak occurred. These problems have been fixed.
- If a metrology model was created with ‘measure_transition’ set to ‘uniform’ and ‘measure_select’ set to ‘first’, up to two edge points per measure were returned instead of up to one per measure. This problem has been fixed.
Memory
- When working with monotonically increasing image sizes, the temporary memory cache could have caused the total memory consumption to increase unnecessarily. This problem has been fixed.
Miscellaneous
- compare_obj returned IsEqual=1 when one image was a filtered image of the other. This problem has been fixed. As a consequence, compare_obj may be slower in these cases.
- There were no default file extensions for variation models and gray value templates. This problem has been fixed. The default file extension for variation models is now ‘vam’. The default file extension for gray value templates is now ‘gvt’.
- Several operators might have crashed while processing large images. Examples include:
- edges_sub_pix,
- var_threshold,
- gauss_image,
- find_text,
- lines_facet,
- find_data_code_2d,
- points_foerstner,
- derivate_gauss,
- median_image,
- gen_radial_distortion_map,
- projective_trans_image, and
- run_bg_esti. This problem has been fixed.
- select_line_longest returned incorrect results for large line lengths. This problem has been fixed.
- Some operators crashed for huge images. The problem occurred for images with reduced domains as well as for operators with automatic parallelization on domain level. This problem has been fixed.
- For the error codes 4103 and 8855 no error messages were returned. This problem has been fixed. Now, the error messages “No device implementation for this parameter” and “Invalid ‘contrast_tolerance'” are returned for the error codes 4103 and 8855, respectively.
- Extension package operators returned incorrect regions in rare cases. If an operator that is parallelized on domain level should have returned an empty region even if the input region was not empty, it returned the input region. This problem has been fixed.
- The HALCON operators local_threshold with Method = ‘adapted_std_deviation’ and points_foerstner may have returned incorrect results in rare cases. These problems have been fixed.
- projective_trans_image could have crashed in rare cases. This happened when projective_trans_image was applied to an uint2 image and the parameter Interpolation was set to ‘bilinear’. This problem has been fixed.
- select_lines_longest crashed with empty input tuples. This problem has been fixed.
- zoom_image_size could have produced incorrect results for certain parameter combinations when executed on an OpenCL device. This problem has been fixed.
- The use of compute devices within a thread led to a memory leak when exiting this thread. This might have caused the error 4101 (“Out of compute device memory”) when executing a compute device operator within a new thread after having forced the problem by exiting threads several times. This problem has been fixed.
- Display operators that took a long time (longer than 5 seconds) could have led to a crash on Windows systems. This problem has been fixed.
OCR
- The operators
- do_ocr_single_class_mlp,
- do_ocr_single_class_knn,
- do_ocr_single_class_svm,
- do_ocr_multi_class_mlp,
- do_ocr_multi_class_svm,
- do_ocr_multi_class_knn,
- do_ocr_word_mlp,
- do_ocr_word_knn, and
- do_ocr_word_svm may have crashed for uint2 images with a height smaller or equal than 2 pixels. This problem has been fixed.
- find_text could have crashed when a single text line contained multiple, overlapping text line structures and the parameter ‘text_line_structure’ had been set with set_text_model_param. This problem has been fixed.
- find_text led to a stack overflow for highly textured images if the text model was created with Mode set to ‘manual’, if dot print characters were searched for, and if the parameters were set such that a very large number of candidate regions was created. This problem has been fixed.
- find_text sometimes returned text lines whose characters did not share a common baseline. This problem has been fixed. The merging of characters into text lines has been improved such that the text lines returned by find_text now usually contain characters that lie on a common baseline.
- find_text sometimes did not return characters that touch the border of the image domain regardless of whether the text model parameter ‘eliminate_border_blobs’ was set to ‘true’ or to ‘false’. This problem has been fixed. Now, find_text returns characters that touch the border of the image domain if the text model parameter ‘eliminate_border_blobs’ is set to ‘false’ (default) and rejects those characters if ‘eliminate_border_blobs’ is set to ‘true’.Note that this change affects the compatibility.
- find_text sometimes returned punctuation marks even if the text model parameter ‘return_punctuation’ was set to ‘false’. This problem has been fixed. Now, the text model parameter ‘return_punctuation’ robustly controls if small punctuation marks that lie close to the base line (like dots or commas) are returned.Note that this change affects the compatibility.
- find_text sometimes crashed when it was running out of memory. This problem has been fixed.
- If text line structures in the text model have been reset via set_text_model_param (TextModel, ‘text_line_structure’, ”), setting any new line structure either caused a crash orset_text_model_param returned the error 6002 (“Memory partition on heap has been overwritten”). This problem has been fixed.
Parallelization
- get_threading_attrib did not check the input handle on validity and crashed on corrupt, invalid input handle pointers. This problem has been fixed.
Region
- crop_domain_rel did not free all temporarily allocated memory and therefore, returned a respective low level error. This problem has been fixed.
- polar_trans_region crashed when the value for at least one of the parameters Width and Height was very large. This problem has been fixed. Note that this problem only occurred under HALCON XL.
- select_shape returned incorrect values for the features ‘area’, ‘row1’, ‘column1’, ‘row2’, and ‘column2’ if floating point values where passed for Min.
These values where rounded down instead of rounded up. This problem has been fixed.
Segmentation
- binary_threshold did not handle tuples of iconic input objects correctly. This problem has been fixed.
- connection returned incorrect results for regions that lay at the boundary of the range that is representable with standard HALCON, i.e., if the region contained the coordinates -32768 or 32767. This problem has been fixed. Note that HALCON XL was not affected by this problem.
- Some threshold operators raised errors for images of maximum width or height (32768 pixel for standard HALCON). The affected operators are:
- auto_threshold,
- binary_threshold,
- bin_threshold,
- char_threshold,
- dual_threshold,
- fast_threshold,
- hysteresis_threshold,
- local_threshold,
- threshold,
- threshold_sub_pix,
- var_threshold, and
- watersheds_threshold. This problem has been fixed.
- var_threshold did not work correctly for images of format int2, uint2, int4, and real. This problem has been fixed.Note that this change affects the compatibility.
System
- get_threading_attrib did not check the input handle on validity and crashed on corrupt, invalid input handle pointers. This problem has been fixed.
- set_system(‘tsp_thread_num’,1) did not work correctly and switched off the automatic operator parallelization thread specifically. This problem has been fixed.
- set_system (‘default_font’, Font) did not return an error if an invalid font name was passed. This problem has been fixed. Now, the error 5137 (“Wrong font name”) is returned.
Tuple
- tuple_str_bit_select might have returned a wrong value if the type of the input tuple element was ‘string’ and the index was greater than the length of the string. This problem has been fixed. Now, tuple_str_bit_select returns an empty string in these cases.
XLD
- fit_ellipse_contour_xld might have crashed in rare cases. This problem has been fixed.
- gen_parallels_xld sometimes extracted wrong parallel XLD polygons when identical polygons were used. This problem has been fixed.
- gen_parallels_xld did not take into account the parameter Dist as expected for contour segments of very different length. This problem has been fixed
- intersection_contours_xld in rare cases returned the start/end point of closed contours as intersections. This problem has been fixed.
- smallest_circle_xld, shape_trans_xld with Type ‘outer_circle’, and select_shape_xld with Feature ‘outer_radius’ sometimes caused a stack overflow for large contours. In rare cases, smallest_circle, shape_trans, select_shape, and fill_up_shape could have been affected. This problem has been fixed.
- smallest_rectangle2_xld returned wrong results in cases where two consecutive segments of a contour have extreme different lengths. In these cases, the operator discarded some points, which led to rectangles which differed significantly from the expected rectangle. This problem has been fixed.
- split_contours_xld crashed if the passed polygon did not have a reference to a contour. This problem has been fixed. In this case, split_contours_xld now returns an appropriate error.
- union_adjacent_contours_xld crashed in certain cases when the contours were more than 10000 pixels away from each other. This problem has been fixed.
Procedures
Functionality
- HALCON has been extended with the procedure
- select_mask_objwhich selects objects from an object array using a mask (similar to tuple_select_mask). The HDevelop example programs
- hdevelop/Applications/Measuring-2D/check_fish_stick_dimension.hdev,
- hdevelop/Applications/OCR/fontt.hdev,
- hdevelop/Applications/OCR/generate_system_font.hdev,
- hdevelop/Applications/OCR/ocr_cd_print_polar_trans.hdev,
- hdevelop/Applications/Position-Recognition-3D/3d_position_of_rectangle.hdev,
- hdevelop/Applications/Position-Recognition-3D/get_rectangle_pose_barcode.hdev,
- hdevelop/Applications/Surface-Inspection/detect_mura_defects_texture.hdev,
- hdevelop/Morphology/Gray-Values/gray_opening.hdev, and
- hdevelop/XLD/Features/test_closed_xld.hdevhave been adapted to use the new procedure.
- The procedure disp_message is now able to display strings at multiple positions in a single call by passing tuples for the input parameters Row and Column.
The following HDevelop example programs have been adapted to make use of the new functionality:- hdevelop/Applications/Color-Inspection/classify_fuses_gmm_based_lut.hdev
- hdevelop/Applications/Color-Inspection/color_fuses_lut_trans.hdev
- hdevelop/Applications/Completeness-Check/ball.hdev
- hdevelop/Applications/Measuring-2D/check_fish_stick_dimension.hdev
- hdevelop/Applications/Measuring-2D/correct_measure_direction.hdev
- hdevelop/Applications/Measuring-2D/measure_ball_bond.hdev
- hdevelop/Applications/Measuring-2D/measure_lcd_cells.hdev
- hdevelop/Applications/Measuring-2D/measure_stamping_part.hdev
- hdevelop/Applications/Measuring-2D/rim.hdev
- hdevelop/Applications/Measuring-2D/segment_ball_bond_lead_frame.hdev
- hdevelop/Applications/OCR/bottle.hdev
- hdevelop/Applications/OCR/bottlet.hdev
- hdevelop/Applications/OCR/dotprt.hdev
- hdevelop/Applications/OCR/engraved.hdev
- hdevelop/Applications/OCR/engravedt.hdev
- hdevelop/Applications/OCR/ocr_tire_photometric_stereo.hdev
- hdevelop/Applications/OCR/ocr_wafer_semi_font.hdev
- hdevelop/Applications/Position-Recognition-2D/clip.hdev
- hdevelop/Applications/Position-Recognition-2D/find_cocoa_packages_local_deformable.hdev
- hdevelop/Applications/Position-Recognition-2D/find_cocoa_packages_max_deformation.hdev
- hdevelop/Applications/Position-Recognition-2D/find_peanut_chocolate_candies_local_deformable.hdev
- hdevelop/Filters/Color/cfa_to_rgb.hdev
- hdevelop/Identification/Bar-Code/barcode_autodiscrimination.hdev
- hdevelop/Identification/Bar-Code/barcode_param_orientation.hdev
- hdevelop/Identification/Bar-Code/barcode_status.hdev
- hdevelop/Identification/Bar-Code/msi.hdev
- hdevelop/OCR/Neural-Nets/letters_mlp.hdev
- hdevelop/OCR/Support-Vector-Machines/letters_svm.hdev
- hdevelop/OCR/Training-Files/protect_ocr_trainf.hdev
- hdevelop/OCR/k-Nearest-Neighbor/letters_knn.hdev
- hdevelop/Object/Information/compare_obj.hdev
- hdevelop/Regions/Features/area_center.hdev
- hdevelop/Tools/Geometry/intersection_contours.hdev
- hdevelop/explore_halcon.hdev
- solution_guide/2d_measuring/measure_metal_part_id.hdev
- solution_guide/3d_vision/pose_of_known_3d_object.hdev
- solution_guide/classification/classify_characters_ocr.hdev
- solution_guide/classification/classify_citrus_fruits.hdev
- solution_guide/classification/segment_citrus_fruits.hdev
- solution_guide/classification/train_characters_ocr.hdev
Bug Fixes
- Since HALCON 12.0, the default background color of the text boxes displayed by the procedure disp_message is light orange. The background color can be changed by setting the parameter Box to a color string, e.g., ‘white’ or ‘blue’. This was already possible in HALCON 12.0, but not fully documented. This problem has been fixed.
HALCON/C++
Bug Fixes
- The object oriented version of the signatures of connection_object_model_3d returned the wrong type in the HALCON/C++ language interface. The return type for the parameter ObjectModel3DConnected must be of an ObjectModel3D array type (HObjectModel3DArray) instead of the single valued type (ObjectModel3D). This problem has been fixed.Note that this change affects the compatibility.
- Cleaning up an object array in Halcon/C++ interface caused a crash when the HALCON object database was turned on by setting the system parameter ‘database’ to ‘true’. This problem has been fixed.
- The HALCON Variable Inspect extension for Visual Studio has not inspected objects from a derived HALCON class. This problem has been fixed.
- When an empty tuple was inspected within the HALCON Variable Inspect extension for Visual Studio, an “Index out of bounds” error message appeared. This problem has been fixed.
- Using the object-oriented variant of register_object_to_model_3d_global returned incorrect results in the HALCON/C++ language interface. This problem has been fixed.
HALCON/.NET
Bug Fixes
- The object oriented version of the signatures of connection_object_model_3d returned the wrong type in the HALCON/.NET language interface. The return type for the parameter ObjectModel3DConnected must be of an ObjectModel3D array type (HObjectModel3D[]) instead of the single valued type (ObjectModel3D). This problem has been fixed.Note that this change affects the compatibility.
- Using the object-oriented variant of register_object_to_model_3d_global returned incorrect results in the HALCON/.NET language interface. This problem has been fixed.
HALCON/COM
Bug Fixes
- The object oriented version of the signatures of connection_object_model_3d returned the wrong type in the HALCON/COM language interface. The return type for the parameter ObjectModel3DConnected must be of an ObjectModel3D array type (HObjectModel3D*) instead of the single valued type (ObjectModel3D). This problem has been fixed.Note that this change affects the compatibility.
Language Interface Example Programs
Functionality
- HALCON has been extended with the C# example program MultiThreadingMessageQueues that demonstrates
- the actor model concurrency pattern,
- the new event based functionality, and
- asynchronous visualization.The actor model concurrency pattern is used to solve the basic task of grabbing an image, processing it, and displaying the results, which is amenable to be scaled. The new event based functionality is used to give immediate feedback based on the current interaction. The asynchronous visualization allows to improve the throughput of the application.
Bug Fixes
- The x64-win64 Visual Studio project could not be built in debug mode when used with exported examples containing vector variables. This problem has been fixed.
HALCON Variable Inspect extension for Visual Studio
Functionality
- The usability of the HALCON Variable Inspect extension for Visual Studio has been improved in several ways:
- The layout of the HALCON Variable Inspect extension for Visual Studio has been renewed.
- All local HALCON variables used in the current method are automatically listed. Therefore, the H Button in the GUI is no longer needed and has been removed.
- The data of the inspected HALCON variable is now automatically displayed whenever the data changes.
- For RGB images the RGB values are now displayed during the mouse over.
- Bugs in the visualization of images have been removed.
- A bug concerning memory and large images has been removed.
- A bug concerning empty or uninitialized variables has been removed.
- HALCON objects derived from the Variable Inspect are supported.
- The HALCON Variable Inspect extension for Visual Studio now also supports the image types int2, uint2, int4, and int8.
Bug Fixes
- The HALCON Variable Inspect extension for Visual Studio did not allow to inspect images of type float. This problem has been fixed.
- The HALCON Variable Inspect extension for Visual Studio allows to inspect regions that are outside the current field of view by using the “Zoom out” button. In some cases, this did not work as expected and instead of the complete region only the part that was already visible in the previous field of view was shown. This problem has been fixed. Now, “Zoom out” can be used to display the complete region.
- The HALCON Variable Inspect extension for Visual Studio sometimes ran into an out of memory error. This happened especially if large images were used. This problem has been fixed.
hbench
Bug Fixes
- The HALCON benchmark program hbench did not check for license errors. If no license was found, it crashed or returned an unspecific error. This problem has been fixed. Now, the error 2036 (“could not find license.dat”) is returned in this case.
Image Acquisition Interfaces
The latest information about new interface revisions and newly supported image acquisition devices can be found on MVTec’s web server. Please refer to the release notes within the documentation of the individual image acquisition interfaces for information about improvements, bugfixes, or whether a new revision of the corresponding device driver is required.
New Image Acquisition Interfaces
- HALCON has been extended with the heliCamC3 interface that supports the heliCam C3 3D sensors from the Swiss camera manufacturer heliotis. This new interface allows the easy and fast acquisition of calibrated 3D data based on the parallel optical low-coherence tomography principle.
- HALCON has been extended with the O3D3xx interface. It supports the O3D3xx camera family from the camera manufacturer ifm electronic. This new interface allows the easy acquisition of calibrated 3D data (Cartesian X/Y/Z, amplitude, distance and confidence images) based on time-of-flight technology.
Miscellaneous
- In the image acquisition interfaces reference documentation, the column that contains the default values was missing in the table for set_framegrabber_param. This problem has been fixed. Now, default values are not only mentioned for get_framegrabber_param table, but also forset_framegrabber_param.
Image Acquisition Example Programs
Modified Image Acquisition Example Programs
- The image acquisition template returned uninitialized memory when grabbing an image using grab_image or grab_image_async. This problem has been fixed by adding a dummy API call for grabbing an image. This dummy imitates an API call that waits for the end of the grab.
- The XCode project for the ia_integration example displayed cyclic dependency warnings when building. This problem has been fixed.
New Image Acquisition Example Programs
- The HDevelop example program
- hdevelop/Image/Acquisition/gigevision_interpacket_delay.hdev
- The HDevelop example program
- hdevelop/Image/Acquisition/gigevision_ip_address_handling.hdev
- The HDevelop example program
- hdevelop/Image/Acquisition/gigevision_software_trigger.hdev
- The HDevelop example program
- hdevelop/Image/Acquisition/helicamc3_2cameras.hdev
- The HDevelop example program
- hdevelop/Image/Acquisition/helicamc3_bidirectional.hdev
- The HDevelop example program
- hdevelop/Image/Acquisition/helicamc3_modes.hdev
- The HDevelop example program
- hdevelop/Image/Acquisition/helicamc3_motor_control.hdev
- The HDevelop example program
- hdevelop/Image/Acquisition/helicamc3_simple.hdev
- The HDevelop example program
- hdevelop/Image/Acquisition/o3d3xx_objectmodel3d.hdev
- The HDevelop example program
- hdevelop/Image/Acquisition/o3d3xx_parameters.hdev
- The HDevelop example program
- hdevelop/Image/Acquisition/o3d3xx_simple.hdev
Digital I/O Interfaces
The latest information about new interface revisions and newly supported digital I/O interfaces can be found on MVTec’s web server. Please refer to the release notes within the documentation of the individual digital I/O interfaces for information about improvements, bugfixes, or whether a new revision of the corresponding device driver is required.
New Digital I/O Interfaces
- HALCON has been extended with the ADLINK-DAQPilot interface for accessing the ADLINK Digital I/O cards.
Digital I/0 Example Programs
- The I/O integration interface example template in the subdirectory examples/io_integration now includes project files for Microsoft Visual Studio 2005 and Apple Xcode.
Documentation
Miscellaneous
- HDevelop provides in-line operations for many of the tuple operators. These operations are generally described in the language chapter of the HDevelop User’s Guide. Now, these operations are also mentioned in the HALCON Operator Reference of the corresponding operators to make them more visible.
- The wording of many error messages has been revised to make them more understandable and more consistent.
- Depending on a computer’s settings, there can be a startup delay caused by a Windows certificate check of our licensing software if there is no Internet connection. This problem can be solved by connecting the machine to the Internet or by adjusting the system settings concerning the Windows certificate checks. The chapter “Troubleshooting” of the Installation Guide has been updated accordingly.
- The reference manual entries of
- create_aniso_shape_model,
- create_aniso_shape_model_xld,
- find_aniso_shape_model,
- find_aniso_shape_models,
- create_scaled_shape_model,
- create_scaled_shape_model_xld,
- find_scaled_shape_model, and
- find_scaled_shape_modelsdescribed the shape models to be invariant with respect to scale. This is incorrect. Instead, the shape models are anisotropically or isotropically scaled, respectively. This problem has been fixed.
Programmer’s Manuals
- The Programmer’s Guide did not mention that HDevEngine loads all standard procedures when it is started. This problem has been fixed.
Reference Manual
- The reference manual entries of affine_trans_object_model_3d and rigid_trans_object_model_3d did not clearly document that these operators do not return an error if an empty transformation is passed. This problem has been fixed.
- The reference manual entries of
- affine_trans_pixel,
- affine_trans_image,
- affine_trans_image_size,
- affine_trans_region,
- affine_trans_contour_xld, and
- affine_trans_polygon_xld did not clearly describe the coordinate system that is used by these operators. Furthermore, the reference manual entries of
- find_shape_model,
- find_scaled_shape_model,
- find_aniso_shape_model, and
- find_ncc_model did not clearly describe the meaning of the resulting coordinates. These problems have been fixed.
- The reference manual entry of assign did not document that assign can also handle iconic variables and vector variables (since HALCON 12). This problem has been fixed.
- Within the reference manual entry of calibrate_cameras the documentation for line-scan cameras did not distinguish between calibration plates with hexagonally and rectangularly arranged marks. This problem has been fixed.
- The reference manual entry of calibrate_hand_eye did not mention the units of the returned errors. This problem has been fixed.
- The reference manual entries of catch and dev_get_exception_data were not correct. In particular, the description of the content of the Exception tuple was incomplete and the sequence of the existing content was not correct. This problem has been fixed.
- The reference manual erroneously stated for some operators that the multithreading scope was local although it is global, i.e., these operators may be called from any thread. This problem has been fixed. The following operators were affected:
- class_ndim_box
- clear_sampset
- close_all_bg_esti
- close_all_class_box
- close_bg_esti
- close_class_box
- create_bg_esti
- create_class_box
- create_drawing_object_ellipse
- create_drawing_object_rectangle1
- create_drawing_object_rectangle2
- create_scene_3d
- descript_class_box
- deserialize_class_box
- disp_object_model_3d
- draw_ellipse_mod
- enquire_class_box
- enquire_reject_class_box
- get_class_box_param
- get_tposition
- learn_class_box
- learn_ndim_box
- learn_ndim_norm
- learn_sampset_box
- query_gray
- read_class_box
- read_sampset
- render_object_model_3d
- serialize_class_box
- set_class_box_param
- set_drawing_object_xld
- set_window_attr
- test_sampset_box
- write_class_box
- In the reference manual entry of create_pose the Yaw-Pitch-Roll convention for 3D rotations is described. In this context, the operator hom_mat3d_rotate_local was shown with an incorrect interface. This problem has been fixed.Now, instead ofhom_mat3d_identity (HomMat3DIdent) hom_mat3d_rotate_local (HomMat3DIdent, RotX, ‘x’, 0, 0, 0, HomMat3DRotX) hom_mat3d_rotate_local (HomMat3DRotX, RotY, ‘y’, 0, 0, 0, HomMat3DRotXY) hom_mat3d_rotate_local (HomMat3DRotXY, RotZ, ‘z’, 0, 0, 0, HomMat3DXYZ) the operator calls are shown correctly in the following way:hom_mat3d_identity (HomMat3DIdent) hom_mat3d_rotate_local (HomMat3DIdent, RotX, ‘x’, HomMat3DRotX) hom_mat3d_rotate_local (HomMat3DRotX, RotY, ‘y’, HomMat3DRotXY) hom_mat3d_rotate_local (HomMat3DRotXY, RotZ, ‘z’, HomMat3DXYZ).
- The reference manual entries of create_scaled_shape_model_xld and create_aniso_shape_model_xld have been extended with an advice for the size of the input contours.
- The reference manual entry of create_surface_model has been extended by illustrations.These illustrations show the effect of the parameter rel_sampling_distance.
- The reference manual entries of create_text_model_reader and find_text did not provide the information that the memory, which has been allocated for the created handles, must be freed explicitly (using clear_text_model and clear_text_result, respectively) when the handles are not needed anymore. This problem has been fixed.
- The reference manual entry of dev_open_window contained wrong default values for the parameters Width and Height. Instead of the value 512, the value 256 was given. This problem has been fixed.
- The reference manual entry of evaluate_class_gmm described the parameter KSigmaProb incorrectly. It stated that KSigmaProb contains as many values as there are classes. Instead, it contains only one value, namely the maximum value over all classes. This problem has been fixed.
- The reference manual entry of find_calib_object refers to edges_sub_pix after describing the parameters ‘sigma’ and ‘alpha’. The intention of these links was misleading, in particular, it was not clear that this reference does not intend to get more information about ‘sigma’ or ‘alpha’ but to get information related to the filter width that is influenced by these parameters. This problem has been fixed.
- The reference manual entry of get_bar_code_results falsely stated that ‘decoded_reference’ returns a value of 10 for the special character FNC1 for GS1-128, GS1 DataBar, and GS1 DataBar Stacked codes. Instead, the operator returns a value of 102 for GS1-128 codes and a value of 29 for GS1 DataBar Expanded and GS1 DataBar Expanded Stacked codes. This problem has been fixed.
- The reference manual entry of get_bar_code_result did not state that the value for the print quality grade ‘Decode’ may be 0 although the symbol has been successfully decoded with HALCON. This may happen, because the decode algorithm of HALCON differs from that of the reference decode algorithm in the ISO standard. This problem has been fixed.
- The reference manual entry of get_calib_data_observ_points incorrectly pointed out that in case of using set_calib_data_observ_points for the calibration and then using find_calib_object for the extraction, the returned values of Row and Column were not the original values. This problem has been fixed.
- The reference manual entries of get_system and set_system were missing the documentation for the Streaming SIMD Extensions (SSE). This problem has been fixed.
- The reference manual entry of get_text_result did not mention the fact that it does not return characters classified as rejection class. This problem has been fixed.
- The reference manual entry of info_parallels_xld now refers to the reference manual entry of gen_paralles_xld for the description of the calculation of the range for the quality factor that is calculated by gen_parallels_xld and that can be queried with info_parallels_xld.
- The reference manual entries of region_features and select_shape did not explicitly state that the features ‘width’ and ‘height’ are measured parallel to the coordinate axes. This problem has been fixed.
- To get a better overview over the different features of regions, the reference manual entry of region_features has been extended by illustrations. These illustrations show regions that vary in the respective feature.
- The reference manual entry of remove_sample_identifier_preparation_data has been extended to make clear that removing the last preparation sample of a preparation object will also remove the corresponding preparation object itself from the sample identifier.
- The reference manual entry of render_object_model_3d incorrectly stated that the output image is a single-channel image. But in fact, render_object_model_3d returns a 3-channel image. This problem has been fixed. Now, the reference manual entry states that a multi-channel image is returned.
- The reference manual entry of sample_object_model_3d incorrectly described the unit of SampleDistance as dependent on the parameter Scale in read_object_model_3d. Instead, the unit of SampleDistance is always meter. This problem has been fixed.
- The reference manual entries of set_bar_code_param and set_data_code_2d_param did not describe the behavior of the bar code reader and of the data code reader, respectively, if a timeout occurs. This problem has been fixed. Now, the reference manual entries describe that no exception is raised if a timeout has been set with set_bar_code_param or set_data_code_2d_param and find_bar_code or find_data_code_2d run into a timeout. Instead, the intermediate results are returned and the occurrence of the timeout can be checked afterwards with get_bar_code_result or get_data_code_2d_results, respectively. Note that this behavior differs from the behavior of the operators find_shape_model, find_shape_models, find_scaled_shape_model, find_scaled_shape_models, find_aniso_shape_model, find_aniso_shape_models, and find_ncc_model, which raise a ‘timeout occurred’ exception.
- The reference manual entry of set_system did not describe that the maximum size of memory blocks to be cached by temporary memory management, which is defined with the parameter ‘alloctmp_max_blocksize’, has to be given in bytes. This problem has been fixed.
- The reference manual entry of set_window_type did not explain that windows of the type ‘pixmap’ support only HALCON objects (images, regions and XLDs). This problem has been fixed.
- The reference manual entries of trans_from_rgb and trans_to_rgb described the domain of the ‘cielab’ color space incorrectly. This problem has been fixed.
- The reference manual entry of union_straight_contours_xld now describes the effect of the parameter Percent in more detail.
- The reference manual entry of wait_seconds now mentions that wait_seconds uses the ‘performance_counter’ for the measurement of time intervals that is described with set_system.
- The reference manual entry of write_object_model_3d did not sufficiently describe the parameter ‘invert_normals’. Especially, some details for different file formats were missing. This problem has been fixed. Now, the behavior for different file formats is clarified.
Solution Guides
- binocular_disparity_ms and binocular_distance_ms were missing in the list of compute-device-supported operators in chapter 20.6 of the Solution Guide Basics.The list has been replaced with instructions and an example how to generate the full list dynamically from within HDevelop.
- In the Solution Guide 3D Vision, the code snippets that illustrate the determination of the object pose in robot base coordinates from the object pose in camera coordinates did not correspond to the respective formulas. This problem has been fixed.
User Guides
- The Installation Guide has been extended with troubleshooting information concerning USB dongles on OS X.
- Section 3.5 in the Installation Guide stated that the license header of upgraded licenses contains the license history. This is no longer the case. Therefore, the corresponding remark and figure have been removed.
- Section 3.3.3 of the Installation Guide (“Floating License Bound to a Network Card or Dongle”) gave an example for a single floating license. Because the minimum number of floating licenses is 2, this example has been removed.
- The documentation of the Image Acquisition Assistant within the HDevelop User’s Guide wrongly stated that Live mode was stopped in case of errors. This problem has been fixed.
- The documentation of the Calibration Assistant within the HDevelop User’s Guide erroneously stated that only 8-bit images (‘byte’) are supported by the assistant, although 16-bit images (‘uint2’) can be used, too. This problem has been fixed.
- In the HDevelop User’s Guide, it was incorrectly described that the expressions .clear(), .insert(), and .remove() can be used in assignments. This problem has been fixed. Actually, these operations can only be used as executable expressions.
- The chapter “The Installed File Structure” in the Appendix of the Installation Guide has been restructured such that it is now subdivided into the operating systems Windows, Linux and, OS X.
Supported Operating Systems
Windows
HALCON 12.0.1 has been compiled for the following Windows platform versions:
- x86sse2-win32 platform version for Windows Vista/2008/7/8/2012 on x86 processors with SSE2 extension, i.e., Intel Pentium 4 / AMD Athlon 64 or newer
- x64-win64 platform version for Windows Vista/2008/7/8/2012 x64 Edition on Intel 64 or AMD64 processors
The setup process checks whether it is running on a 32 or 64 bit system and provides a suitable list of platform versions that can be installed.
During the installation, the environment variable HALCONARCH is set to x86sse2-win32 or x64-win64 to indicate the installed platform version. Please note that if you want to switch to another platform version, you must first install it. Then, you must adapt the environment variable HALCONARCH (see the Installation Guide for more information).
- In general, HALCON 12.0.1 was tested successfully on Windows 10 Technical Preview (Build 10162). However, the following restrictions apply:
- Since the current filter driver of the GigEVision interface does not work, the GigEVision interface can only be used in combination with the socket driver.
- Re-installing the dongle driver (without uninstalling before) leads to an error message which can be safely ignored.
Linux
HALCON 12.0.1 has been compiled in the following Linux platform versions:
- x64-linux platform version for Linux x86_64, Kernel 2.6 or higher with ABI 2, on Intel 64 or AMD64 processors
Please refer to the Installation Guide for detailed system requirements corresponding to the different Application Binary Interfaces.
The installation script checks whether it is running on a 32 or 64 bit system and provides a suitable list of platform versions that can be installed.
OS X
HALCON 12.0.1 has been compiled for OS X in the following platform versions:
- x64-macosx platform version for OS X 10.8, 10.9, and 10.10.
Miscellaneous
Installation
- The Installation Guide has been extended with troubleshooting information concerning USB dongles on OS X.
- The installer for the GigE Vision Streaming Filter now offers return codes that reflect if the driver was actually installed or not. The section “2.5 Manually Installing a Runtime Version of HALCON on Windows” of the Installation Guide has been updated accordingly.
- The Linux installer did not install examples/hdevelop and examples/solution_guide for Full and Custom installations. This problem has been fixed.
- On Windows systems with a large PATH environment variable (> 2000 characters) some entries may have been missing after installing or uninstalling HALCON. Therefore, some programs did not work. This problem has been fixed. Now, the length of the PATH environment variable is checked by the installer and a reboot is recommended, if the length exceeds 2000 characters.
- If a new HALCON version was installed and a desktop shortcut to HDevelop was created, existing shortcuts to former HALCON versions were overwritten. If one of the installed HALCON versions was uninstalled, the shortcut was deleted. This problem has been fixed. Now the desktop shortcut includes a version number, e.g., HDevelop 12.
- Since Windows XP is no more supported, the installer raises a warning if HALCON is installed on Windows XP.
- The Microsoft Visual Studio C++ 2005 Redistributable Runtime Package is no more installed by the HALCON installer. It is no longer needed because GenApi has been updated to version 2.4.1, which is required by the GenICamTL, GigEVision, and USB3Vision image acquisition interfaces.
- The HALCON installer for OS X has been extended with the information that in order to be able to use a dongle-bound license, a “Custom” installation must be chosen with the USB dongle driver selected explicitly.
Licensing
- The HALCON Variable Inspect extension for Visual Studio always runs as a 32-bit application. If only HALCON 64-bit was installed on the system using a dongle, the auxiliary DLL for the 32-bit dongle driver was not installed. This problem has been fixed. Now, if a dongle driver is installed on a 64-bit system, also the auxiliary DLL haspsrm_win32.dll for 32-bit is installed to enable the usage of the Visual Studio extension “HALCON Variable Inspect”.
- HDevelop in rare cases incorrectly raised the error 2003 (“no license found”) some minutes after being started, although a valid license has been found. This problem has been fixed.
- HALCON now uses version 11.13.0.3 of the FLEXnet Publisher license manager software.
Various
- HALCON 12.0.1 is the first maintenance release that contains new operators. Nevertheless HALCON 12.0.1 is fully binary compatible to HALCON 12.0.In order to use the new functionality of HALCON 12.0.1 with HALCON/COM, you must register the halconx.dll from HALCON 12.0.1.If you installed the HALCON/.NET interface in the global assembly cache (GAC), you must register the HALCON 12.0.1 HALCON/.NET interface as well and point your new application to use it. Configurations of existing assemblies must be extended by an application configuration file, such that the binding to the old version is redirected to the new version:<dependentAssembly> <assemblyIdentity name=”halcondotnet” publicKeyToken=”4973BED59DDBF2B8″/> <bindingRedirect oldVersion=”12.0.0.0-12.0.65535.65535″ newVersion=”12.0.1.0″/> </dependentAssembly> Otherwise these applications will still use the old interface.
- The text contained in the Aztec code in the images
- datacode/aztec/aztec_smartphone_01-07.png
- The extension package halconuser for C# could not be executed on 64-bit machines if it was compiled for 32-bit. This problem has been fixed. For 32-bit architectures, the variable CSC_FLAGS has been extended by /platform:x86. Moreover the output files have been renamed to be architecture-dependent, e.g., testthresholddotnet_$(HALCONARCH).exe.