![]() |
University of Murcia ![]() |
What is QVision?The QVision is an image processing and computer vision toolkit for application development and fast prototyping.It is intended to rapidly implement and test new ideas, without investing too much time and effort in the gory details of video and image input/output programming, graphical user interface, debugging, testing, performance measuring, and the like. It also includes implementations of well known computer vision and image processing algorithms. Special interest is set on efficiency, which makes the toolkit very adequate for real-time applications. It also offers versatile design tools for multithreaded application programming, so QVision applications can benefit from arising multi-core architectures. The QVision currently works over Linux platforms, but in a future it is planned to work under other operating systems such as Windows and Mac-OS. The toolkit can be used in two ways. First, as a general purpose computer vision library. The QVision integrates efficient functionality for image processing, numerical computation, versatile video input/output, and almost any task relevant to computer vision application development. These are merged under an object oriented and homogeneously documented API. Second, it can be used as an application development and prototyping tool. The toolkit offers a reusable block oriented application development philosophy, which can be used to easily incorporate synchronized and fully data sharing processes (threads) in the application, to create multi-threaded applications. QVision is a computer vision libraryUsability is one of the main highlights of the QVision. The library is built on C++ over the widely used Qt graphical widget toolkit. The developer benefits from its file input/output and networking functionallity, graphical widgets, and high level container structures such as lists and hash tables to easily and cleanly create powerfull applications.Qt's development tools (qmake, Qt designer, etc...) also allow portability amongst different Operative Systems and platforms for applications developed over the QVision. To achieve the first at image processing, the QVision includes the well documented class QVImage, which models images as software objects. Objects derived from this class can load data from a wide range of image files, and provide functionality for pixel access, and basic image operation. Section Basic image processing can be read to get a general idea about the image processing functionality provided by the QVision. Performance is the second main highlight of the QVision. To achieve a good performance at image processing, the toolkit incorporates a comprehensive set of wrapper functions to call IPP image processing functions using the QVision object oriented types for images, matrices and so on. To see the full list of these wrapper functions see the IPP wrapper functions group documentation. Section Advanced image processing can be read to learn specific issues about the usage of these functions. For image input/output the QVision uses Qt's functionality to load/store images from and to PNG or JPG files. If available, the QVision can use the versatile and widely known MPlayer multimedia player as a back-end application. The programmer can cleanly use functionallity to read from lots of video and image file formats and encodings, digital/analogical TV, video-cam and webcams, remote streams, etc... To create a new video file, and store image frames in it, or in the case the MPlayer is not available, the QVision offers functions to create/read video files coded in the YUV4MPEG2 format. Section Image and video input/output describes all these classes and functions provided to perform image an video input/output. You can read the documentation of classes QVMPlayerReader for further specifically info about reading video from a QVision application using MPlayer. Group Math extensions contains the algebraic functionality provided by the toolkit. It offers classes to create and operate with matrices, vector, quaternions and tensors objects. These functions are mostly based on the GNU Scientific Library, Blas and Lapack libraries to enhance performance. Along with the IPP and the GSL, QVision can interoperate with other libraries and toolkits, commonly used in computer vision, such as the OpenCV, the CGAL library and CUDA. The toolkit includes functionality to convert from native data type objects (such as images, matrices, etc..) of those libraries to QVision data type objects. Thus a QVision application can cleanly use functionality from those libraries. Section Interoperability can be read to learn more about using functionality of other libraries in the QVision. QVision as a framework for fast application development and prototyping toolThe QVision developer can create applications by coding and composing logically independent data processing blocks. This approach encourages modularity in the application designs and code re-usability. A computer vision or image processing algorithm can be coded inside a processing block, and be shared or reused in new applications with almost zero programming cost. Also applications can be easily created with good and modular designs.Another advantage of the block oriented design is that it can be used to create parallel applications. The QVision toolkit maps the execution of each logical block to a different thread automatically, obtaining performance gain when the application is executed on a multicore architecture. The developer can create efficient parallel applications by designing a smart block structure for the application, dividing the workload between different blocks, that will be executed by different physical threads. The toolkit includes a set of ready-to-use processing blocks, to perform video input/output (for example, the QVMPlayerReaderBlock can create image an video input blocks based on the MPlayer application), graphical output (which will create widgets connected as input or outputs to other blocks, like image displayers, or control widgets), or basic image processing (module Blocks for the IPP functions includes a comprehensive set of processing blocks that correspond to the image processing functions from the IPP library). A new QVision block-oriented application can be created just by coding the more complex image or data processing blocks (if necessary), and building the application block structure by creating and connecting these user defined processing blocks and those provided by the toolkit. This is a snapshot of a typical QVision application, built using the set of graphical GUI blocks provided by the library:
![]() The graphical user interface blocks provided by the toolkit offer direct inspection and control to the final user over the algorithms and processes created in the application. In this example the user can stop, resume and execute step by step the processing of each input image frame. The user can also use them to modify the parameters and behaviour of the algorithms implemented in the application at execution time. This is specially interesting in research applications. Besides the control (or input) graphical blocks, the toolkit also includes a set of output graphical blocks. The user can inspect with them the performance and results of the algorithms. These widgets can display images (windows named Image canvas for MSER regions and Image canvas for Harris in the former screen-shot), and other output data values, such as points, segments, polylines, resulting from the processing algorithms. Other widgets offered by the QVision plot numerical values, or show CPU time consumption statistics (window named Plot for CPU performance plot of: MSER Block in the screenshot). Processing blocks are specifically designed to be used at a minimal programming cost: with just a few lines of code, the application will create and manages the whole graphical interface. The programmer or researcher can focus on creating, testing and debugging image processing and computer vision algorithms, without messing with graphical widget programming. Section Introduction to block programming provides more insight to block programming in QVision. Section Graphical user interface blocks reviews specifically the different input/output graphical blocks provided by the QVision. To ease the development of complex applications, the QVision offers a visual development tool named The Designer. The developer can include in the application a slate window that displays every block created by the application and the data connections between them. This is the snapshot of an example designer window:
![]() Like in the previous example, the user can modify the behaviour of the different algorithms, and also create new blocks and data connections between them in real time, while the application is running. For further info about this tool, check the section The Designer GUI. Finally, the block oriented development also lets the user of a QVision application to set in the command line initial values for the parameters of the different algorithms, contained in the processing blocks. This allows the easy recreation of test conditions for the algorithms implemented by the applications. Section Command line parameters reviews this topic in detail. |