http://imagenets.wikia.com/wiki/ImageNets_Wiki
ImageNets Wiki
Home
THIS WIKI
Contents
[show]Introduction
The main purposes of ImageNets are:
- 3D-Visualization of Computer Vision results (especially for Robotics -> Create Robot)
- rapid prototyping of Computer Vision function combinations
- utilization of the execution speed of OpenCV
- Feedback Loops in Computer Vision (See: ImageNet_Designer_-_Graphical_Programming_Tutorial#Feedback_Structures_in_Computer_Vision_Tutorial)
Example Videos: Data Fusion Bumblebee & Swissranger, Colored Point Cloud, Table Detection and Simulation, Plane Thresholding, Integrated Help, Feedback Loops
With the easy-to-understand graphical user interface ImageNet Designer, an ImageNet is created and saved as an XML-File. TheImageNet Designer helps to fine-tune your algorithm in the testing phase and to visualize results in 2D and 3D.
After creating an ImageNet, you can load and execute it (without the ImageNet Designer) in your own C / C++ code. SeeImageNet_Designer_-_Execution_Tutorial.
Neither the ImageNet Designer, nor an ImageNet have image processing functionality. This is provided by ImageNets Plug-Ins. They have to be loaded to create an ImageNet with the ImageNet Designer and to execute an ImageNet from code.
Links to ImageNets
http://www.ros.org/wiki/ImageNets
http://en.wikipedia.org/wiki/ImageNets
http://homepages.inf.ed.ac.uk/rbf/CVonline/environ.htm
Tutorials
Icon | Description / Link |
ImageNet Designer - Installation Tutorial | |
ImageNet Designer - Graphical Programming Tutorial | |
ImageNet Designer - Coding Tutorial | |
ImageNet Designer - Execution Tutorial |
Data Types
Icon | ImageType | LayerType | Depth | channels | comment | 3D | 2D |
UNDEFINED | |||||||
COLOR | Image | IPL_DEPTH_8U | 3 | BGR and HSV | X | X | |
GRAY | Image | IPL_DEPTH_8U | 1 | 0...255 | X | X | |
GRAY32F | Image | IPL_DEPTH_32F | 1 | 0...1 | X | X | |
BINARY | Image | IPL_DEPTH_8U | 1 | 0 or 255 | X | X | |
CAMERA_MATRICES | Image | The camera matrices like LayerType "Image" but without an image. | X | X | |||
DISPARITY | Reprojection | IPL_DEPTH_16S | 1 | Darker means less disparity. Unit: pixels, upscaled by 16 to achieve sub-pixel storage capability. | X | ||
POINTCLOUD | Data | XYZ and RGB information is stored in an Octree Octree in ImageNets | X | ||||
FRAME | Frame | 1 4x4 Matrix, representing a coordinate transformation (rotation and translation) | X | X | |||
KEY | Data | CV-Sequence of SIFT Key Points | X | ||||
MATCH | Data | CV-Sequence of SIFT Matches | X | ||||
HISTOGRAM | Data | 1 256x1 Matrix - Normalized bins. The sum of all bins is 1. | X | ||||
POINTS2D | Data | N 1x2 Matrices with double values (sub-pixel accuracy) | X | ||||
CONTOUR | Data | N Mx2 Matrices with double values (sub-pixel accuracy) | X | ||||
CONTOUR3D | Data | N Mx3 Matrices - Two points each (P1x, P1y, P1z, P2x, P2y, P2z) | X | X | |||
LINES | Data | N 1x4 Matrix - Two points each (P1x, P1y, P2x, P2y) | X | ||||
LINES3D | Data | N 1x6 Matrix - Two points each (P1x, P1y, P1z, P2x, P2y, P2z) | X | X | |||
FUNDAMENTAL_MATRIX | Data | 1 3x3 Matrix which describes the relation between two cameras | X | ||||
SCALAR | Data | N 1x1 Matrices (normally only one is used; N Matrices can be used to draw a resulting scalar as the output of a feedback loop.) | X | ||||
BODIES | Data | N Bodies (cuboids, cylinders and spheres) | X | X | |||
FEEDBACK | Data | N 1x1 Matrix, same as SCALAR | X | ||||
MATRICES | Data | N MxL Matrices with double values | X | ||||
RECTANGLES | Data | N 1x5 Matrices, center point x and y, width and height, angle in degrees [0...180[ | X | ||||
ELLIPSES | Data | N 1x5 Matrices, Description of the surrounding rectangle: center point x and y, width and height, angle in degrees [0...180[ | X | ||||
ROBOT | Data | 1 Nx1 Matrix of Robot Joint Angles (For 3D Visualization Convert to Bodies) | X | ||||
USER_DATA | Data | Arbitrary user data via a derived interface. Container class for convenience is available. | |||||
TRIGGER | Data | This input is only used to trigger the execution of the block. No data is passed. | |||||
PAN_TILT_ANGLES | Data | 2x1 Matrix saving pan and tilt angles. | X | ||||
STRING | Data | A vector of strings (std::vector<QString>). Useful for passing the marker type (as a string value) into a subnet. | X |
The connections between two blocks should be possible, only if both connected ports are of the same ImageType. There are the following ImageTypes:
3D and 2D mean if the ImageNet Designer is capable of displaying the ImageType in 3D or in 2D. If there is a 'X', it should generally make sense to display the ImageType in this space. If the 'X' is black, the display possibility is implemented and if the 'X' is red, the display possibility is not yet implemented.
Conventions
LayerType Image has
- a 3x3 Intrinsic Matrix ( CV_64FC1 )
- a 4x1 Distortion Coefficients Vector ( CV_64FC1 )
- a 4x4 Extrinsic Matrix ( CV_64FC1 ) (Same as Frame)
All of these 3 matrices are saved in CLayer.itsData.m_vpCvMat (vector of OpenCV-Matrix).
LayerType Reprojection has
- a 4x4 Extrinsic Matrix ( CV_64FC1 ) and
- a 4x4 Reprojection Matrix ( CV_64FC1 ) This matrix holds information about the Field Of View of the two stereocameras and their distance between each other
LayerType Frame has
- a 4x4 Extrinsic Matrix ( CV_64FC1 )
LayerType Data can have arbitrary data (Matrices, Sequences)
Location of the enumeration ImageType_E: MachineVision.rpy/ImageNet_pkg/Types.
Locations where ImageTypes are used:
- ImageNet_pkg/Packages/Common/Classes/INGUI/toQImage() - Transformation from IplImage - and others - to QImage to display it as the small preview image and in the 2D-3D-Dialog
- ImageNet_pkg/Packages/Common/Classes/INTRANS/imageType() - Transformation from imageType to its string and vice versa
- ImageNet_pkg/Packages/Designer/Packages/ImageDialogClasses/C2DTabFactory/Constructor - how to display the data
User Data
The USER_DATA type represents abritrary user data. It is stored in a vector of pointer to the type CUserData. CUserData defines the following interface.
virtual void* AccessData() ; // Access user data via pointer that has to be cast to the desired type. virtual CUserData* GetCopy() ; // Returns copy of derived class. virtual std::string GetType() ; // Returns an abritrary identifier string for the user data type.
To use user data, this interface must be implemented in a derived class, or the class CUserDataStore can be used. It is a template class that stores an abritrary object of any type. It implements additionally the method AccessStoredData to access the object via a reference and SetType to specify an identifier string.
CUserDataStore< MyDataType > MyData ; MyData.SetType( "MyData" ) ; MyData.AccessStoredData() = ObjectToStore ; MyData().AccessUserData().SetSomething() ;
Folder Structure
Location | Description |
build | source code |
bin | The compiled ImageNetDesigner & The compiled Plugins |
lib | libLogicNet.dll/.so |
resources/ImageNets | Qt-Designer files (The ImageNetDesigner and the edit Dialogs) and icons for the ImageNetDesigner |
etc/ImageNets | The saved ImageNets (*.imagenet files) and example images |
Stability of Blocks
To test the stability of blocks the Image Nets Block Tester is introduced.
Functionality (323 Blocks)
This table is generated with the ImageNet Designer. Select Statistics from the Help Menu. Copy and paste the generated Wiki-code here.