FILE: CORNERTRACKER\README.TXT ACTIVEX CORNERTRACKER V1.0 ----------------------------------------- 1. About CornerTracker ActiveX Server. 2. Known Limitations 3. Files 4. Installation 5. Use in Matlab 6. Use in C++ 7. Technical Information ------------------------------------------ 1. About CornerTracker ActiveX Server. CornerTracker is an ActiveX server object that performs the Lucas-Kanade corner tracker on digital images. It exposes its internal functionality to most programming languages and environments in Windows platforms. It was designed to be accessed via Matlab and C++ clients, but can be used by other compiled/scripted languages. 2. Known Limitations - Only allows grayscale images. - Only allows 1 byte per pixel images - "unsigned char *" in c++ - "uint8" in matlab - Image number of columns should be a multiple of 4 - Only works with MATLAB 6.0 or later. - Requires OpenCV B 2.0 or later. 3. Files CornerTracker is distributed in a zip file (CornerTracker.zip) and includes the following files: CornerTracker.bin - the binary code implementing the object functionality CornerTracker.tlb - the type library required for use with compiled languages README.TXT - this file PROBLEMS.TXT - Description of some problems found in this release INSTALL.BAT - The registration script required to install the object UNINSTALL.BAT - The registration script required to uninstall the object TEST.M - Matlab script file with an example of using the object TEST.EXE - compiled program to test the object; requires the Microsoft Vision SDK IMAGE1.BMP IMAGE2.BMP - Image for Matlab test script. 4. Installation The CornerTracker encapsulates functions from the Intel Open Source Computer Vision Library http://www.intel.com/research/mrl/research/opencv so make sure you install this library before using the ActiveX object. Please check the documentation of this product for installation instructions. Installation of the CornerTracker - Unpack the "CornerTracker.zip" file to a new directory. - Run the registration script "INSTALL.BAT" - If you have the Microsoft Vision SDK installed, you can run the TEST.EXE application to test the ActiveX object. 5. The CornerTracker object can be called by any ActiveX aware scripting languages like Java, VisualBasic and Matlab. Check file TEST.M to see an example of use in Matlab: For more information check matlab help on integration with activex objects 6. C++ Example. The CornerDetector object can also be used with compiled languages and takes advantage of their flexibility to create highly optimized code. It exposes functions that allow the internal access to data structures, avoiding expensive data transfers between the object and the client, but reducing the robustness against programming errors. These functions are not available to scripting languages due to reliability requirements. Check file TEST.CPP to see an example of use in C++. If you have the Microsoft Vision SDK installed in your system, you can compile and run the test application. 7. Technical Information Exposed Functionality interface ICornerTracker : IDispatch { [propget, id(1), helpstring("property lines")] HRESULT lines([out, retval] long *pVal); [propput, id(1), helpstring("property lines")] HRESULT lines([in] long newVal); [propget, id(2), helpstring("property columns")] HRESULT columns([out, retval] long *pVal); [propput, id(2), helpstring("property columns")] HRESULT columns([in] long newVal); [propget, id(3), helpstring("property max_features")] HRESULT max_features([out, retval] long *pVal); [propput, id(3), helpstring("property max_features")] HRESULT max_features([in] long newVal); [id(4), helpstring("method track_corners")] HRESULT track_corners([in] VARIANT imgA, [in] VARIANT imgB, [in] VARIANT features, [out, retval] VARIANT * matches); [id(5), helpstring("method create_corner_tracker")] HRESULT create_corner_tracker(); [id(6), helpstring("method destroy_corner_tracker")] HRESULT destroy_corner_tracker(); [propget, id(7), helpstring("property stop_iterations")] HRESULT stop_iterations([out, retval] long *pVal); [propput, id(7), helpstring("property stop_iterations")] HRESULT stop_iterations([in] long newVal); [propget, id(8), helpstring("property stop_epsilon")] HRESULT stop_epsilon([out, retval] float *pVal); [propput, id(8), helpstring("property stop_epsilon")] HRESULT stop_epsilon([in] float newVal); [propget, id(9), helpstring("property feature_width")] HRESULT feature_width([out, retval] long *pVal); [propput, id(9), helpstring("property feature_width")] HRESULT feature_width([in] long newVal); [propget, id(10), helpstring("property feature_height")] HRESULT feature_height([out, retval] long *pVal); [propput, id(10), helpstring("property feature_height")] HRESULT feature_height([in] long newVal); [propget, id(11), helpstring("property pyramid_levels")] HRESULT pyramid_levels([out, retval] long *pVal); [propput, id(11), helpstring("property pyramid_levels")] HRESULT pyramid_levels([in] long newVal); [propget, id(12), helpstring("property calc_match_residue")] HRESULT calc_match_residue([out, retval] long *pVal); [propput, id(12), helpstring("property calc_match_residue")] HRESULT calc_match_residue([in] long newVal); [propget, id(13), helpstring("property match_residue")] HRESULT match_residue([out, retval] VARIANT *pVal); }; Properties lines Type: long Arguments: none Initial Value: 144 Description: Number of image lines columns Type: long Arguments: none Initial Value: 192 Description: Number of image columns max_features Type: long Arguments: none Initial Value: 400 Description: Maximum number of features to track stop_iterations Type: long Arguments: none Initial Value: 5 Description: stopping criteria - maximum number of iterations stop_epsilon Type: float Arguments: none Initial Value: 0.1 Description: stopping criteria - minimum residue feature_width Type: long Arguments: none Initial Value: 2 Description: feature correlation window width feature_height Type: long Arguments: none Initial Value: 2 Description: feature correlation window height pyramid_levels Type: long Arguments: none Initial Value: 0 Description: Number of dyadic pyramid levels to use calc_match_residue Type: long (boolean use) Arguments: none Initial Value: 0 Description: Compute matching (correlation) residues match_residue Type: VARIANT SAFEARRAY() : VT_R8 Arguments: none Initial Value: none Description: Array of matching residues (read-only) Methods create_corner_tracker: allocates object internal data Input Args: none Output Args: none destroy_corner_tracker: frees object internal data Input Args: none Output Args: none track_corners: Runs corner tracker Input Arguments: imgA Type: VARIANT SAFEARRAY(columns,lines) : VT_U1 imgB Type: VARIANT SAFEARRAY(columns,lines) : VT_U1 features Type: VARIANT SAFEARRAY() : VT_U1 Output Arguments: matches Type: VARIANT SAFEARRAY(2,) : VT_R8 interface _ICornerTracker : IUnknown { [local, helpstring("method _track_corners")] HRESULT _track_corners([in] byte * imgA, [in] byte *imgB, [in] long count,[in] float * featA, [in,out] float *featB, [in,out] byte * status, [in,out] float *residue); }; Methods _track_corners : Runs corner detector Arguments: imgA: input image 1 Type: byte[lines*columns] imgB: input image 2 Type: byte[lines*columns] count: number of features to track Type: long featA: cordinates (x,y) of features to track Type: float[2*count] featB: coordinates (x,y) of tracked features Type: float[2*count] status: boolean indicator of valid match for each feature Type: byte[count] residue: matching residue. If NULL will not be computed Type: float[count] AUTOMATION NAME CornerTracker.CoCornerTracker COM INTERFACES: IUnknown IDispatch ISupportsErrorInfo DEFINED INTERFACES: ICornerTracker (dual) (default) _ICornerTracker (local) COM PROPERTIES Aggregatable Free Threaded Marshaler Threading Model : Both For more information check the OLE/COM object viewer - Object CoCornerDetector Copyright (c) 2001, Alexandre Bernardino - ISR/IST. All rights reserved. alex@isr.ist.utl.pt