#### The End: Google Summer of Code 2012

**This is the end, beautiful friend**

**This is the end, beautiful friend**

When BITS Goa adapted LDAP authentication, I had some problems configuring the proxy settings for apt-get. Many of my batchmates and juniors have faced similar problems so I decided to write a small blog post about it.

»I am working on a tracking algorithm based on **Lucas-Kanade** Method using **Optical Flow**. The Lucas–Kanade method is a widely used differential method for optical flow estimation developed by Bruce D. Lucas and Takeo Kanade. It assumes that the flow is essentially constant in a local neighbourhood of the pixel under consideration, and solves the basic optical flow equations for all the pixels in that neighbourhood, by the least squares criterion.

Kalman Filter is a set of mathematical equations that provides an efficient computational (recursive) means to estimate the state of a process, in a way that minimizes the mean of the squared error. It uses a series of measurements observed over time, containing noise (random variations) and other inaccuracies, and produces estimates of unknown variables that tend to be more precise than those that would be based on a single measurement alone.The filter is named for Rudolf (Rudy) E. Kálmán, one of the primary developers of its theory.

»GSoC 2012 Mid-Term evaluations are over and I passed. As usual we had a meeting on Wednesday 11:30 am EST on IRC where I and Kat discussed the tracking scenario of SimpleCV and how to implement different tracking algorithms with efficiency. She advised me that the tracking object should live in FeatureSet so that the tracked path can be stored in Features. So, it looks like this

»**CAMShift** stands for **C**ontinuously **A**daptive **M**ean Shift. It is the basis for the **face-tracking** algorithm in OpenCV. It combines the basic **Mean Shift** algorithm with an adaptive region-sizing step. The kernel is a simple step function applied to a skin-probability map. The skin probability of each image pixel is based on color using a method called **histogram backprojection**. Color is represented as Hue from the HSV color model.

The **Sobel Operator** is used in Image Processing to get the edges in the image. It is a **Discrete Differentiation Operator** which computes an approximation of the gradient of the image intensity function.The Sobel operator is based on convolving the image with a small, separable, and integer valued filter in horizontal and vertical direction and is therefore relatively inexpensive in terms of computations.
The sobel operator calculates the gradient of the image intensity at each point, giving the direction of the largest possible increase from light to dark and the rate of change in that direction.
Each image point, the gradient vector points in the direction of largest possible intensity increase, and the length of the gradient vector corresponds to the rate of change in that direction.

In my previous post Configuring Boost::Python and Hello Boost, I have shown how to configure **Boost::Python**. I have managed to use OpenCV C++ with Python, using Boost::Python. I have been able to load and show an image successfully.

In my recent blog posts, I have mentioned that python is quite slow and I need to find an option to increase run-time speed of my python port of OpenTLD. I need to extend Python with C++ and hence I was looking at all the available options. I have once used **swig bindings**. I can’t say anything about it’s performance, but it was kind of boring to use swig. I had to make few files and then compile and make. So I started looking at other options. **Python/C API** is good but you need to pass pointer reference, objects and sometimes it just becomes messy. I have never tried **Cython**. I might give it a shot.

I have been working on George Nebehay’s OpenTLD version to port it to python and it has given me a good amount of exposure to C++ and OpenCV with C++. I must confess that I never thought C++ would be so amazing. Despite of C++ being an intermediate-level language, I think it’s better than Python. The usage of pointers and robustness/run-time speed are plus point of C++ over Python. Python may be a very high level language and easy to understand, I don’t think it can be compared to C++ yet.

»To get colored output in terminal,

»