Implementing algorithms on topics such scene understanding, object recognition or cognitive neuroscience of visual object recognition.
Implementing algorithms on topics such machine learning, deep learning or reinforcement learning.
Achieved using CUDA parallelization and highly optimized data structures and algorithms.
Using C++, GPU, CUDA, OpenCV, Robot Operating System (ROS), Linux, Eclipse, CMake, Git, QT, Design Patterns, OOP, UML, TDD.
Robotic automation has transformed the manufacturing industry and has the potential to change many other aspects of our lives. However robotics has made relatively less progress in other important industries which have a complex and time variant landscape. Vision is the missing capability that currently prevents robots from performing useful tasks in the complex, unstructured and dynamically changing environments in which we live and work.
Seeing is a lot more than just processing images. It is a complex process tightly coupled with memory - which enables an understanding of the scenario required to robustly perform tasks that involve objects and places. These are tightly coupled with action, thereby providing rapid and continuous feedback for control.
For these reasons combining Image Processing with Machine Learning is highly advisable. All algorithms are to be developed in a manner that enables real-time execution on commodity embedded systems.
#1 Software Development
Java, C++, CUDA, Linux, Eclipse, QT, Git, Agile
#2 Robotic Vision
GPU, CUDA, OpenCV
#3 Machine Learning
Object Recognition, Deep Learning, Reinforcement Learning
#4 Embedded Systems
ROS, NVIDIA Jetson
This prototype tests different implementations of the image classification with Deep Learning, Convolutional Neural Networks (CNN), Caffe, OpenCV 3.x and CUDA. Topics covered: Image Classification, Neural Networks vs Deep Learning, CNN vs R-CNN, cuDNN, Caffe, ImageNet & challenges Testing of OpenCV’s DNN CPU classification using GoogLeNet, a trained network from Caffe model zoo Testing of[…]
This prototype tests different implementations of the real-time feature-based object detection with SURF, KNN, FLANN, OpenCV 3.X and CUDA. Object detection is the process of finding instances of real-world objects such as faces, bicycles, and buildings in images or videos. Object detection algorithms typically use extracted features and learning algorithms to recognize instances of an object[…]
This prototype tests implementations of the pencil sketch operation for images and videos using C++, CUDA, OpenCV 3.X. Sketching is a natural way of expressing some types of ideas. It conveys information that can be really hard to explain using text, and at the same time it does not require a tremendous amount of effort. It[…]
This prototype tests the image segmentation with several Watershed-based algorithms, including the marker-controlled variation provided by OpenCV 3.X, with the graph-based variation Power Watershed implemented in C++, with the unified version of waterfalls, standard and P algorithms implemented in C++, and a CUDA implementation of the standard algorithm. In computer vision, image segmentation is the[…]
This prototype tests different implementations of the image gradient using the Sobel operator, C++, CUDA and OpenCV 3.X. An image gradient is a directional change in the intensity or color in an image. Image gradients may be used to extract information from images. In graphics software for digital image editing, the term gradient or color[…]
This prototype tests different implementations of the histogram calculation for images using C++, CUDA, OpenCV 3.X. An image histogram is a type of histogram that acts as a graphical representation of the tonal distribution in a digital image. It plots the number of pixels for each tonal value. By looking at the histogram for a specific[…]
This prototype tests different implementations of the bilateral filtering to smooth images using C++, CUDA, OpenCV 3.X. Several smoothing algorithms exist, but the most popular are: Normalized Box Filter: this filter is the simplest of all. Each output pixel is the mean of its kernel neighbors (all of them contribute with equal weights) Gaussian Filter: Probably the most useful[…]
This prototype implements and tests different downsampling algorithms of grayscale and color images to any size using C++, CUDA, OpenCV 3.X. In image analysis downsampling is a fundamental transformation to significantly decrease the processing time with little or no errors introduced into the system. Several algorithms exist, from simple skipping pixels which results in aliased images[…]
This prototype deals with the conversion of colour pictures from RGB to grayscale using C++, CUDA, OpenCV and Jetson TK1 for building and deployment. Three different methods are being implemented and compared to each other in the prototype : an already implemented method from OpenCV cv::cvtColor() own method rgbaToGreyscaleCuda() implemented in Cuda to run in parallel[…]
This post is the first in a series of posts which I’ll be writing to provide an introduction to image processing and machine learning using C++ and CUDA parallel processing. Its main contents include unboxing of the development board, remote connection, building, debugging and profiling of a hello world CUDA program. GPUs have become the[…]