During the next months, we will be working on a lot of new Computer Vision functionality for ArrayFire. This means dozens of new functions specifically targeted for the most common and used applications in this field, like feature tracking, object classification, scene segmentation, optical flow, stereo-vision, among others, will be added to take full advantage of most GPU devices.

Feature tracking consists of three basic steps:
<ol>
	<li>Detecting good or unique features, normally they are corners or blobs of an image;</li>
	<li>Extracting a descriptor for each feature, that consists of understanding the texture of a small patch around each feature;</li>
	<li>Descriptor matching, finding out the best match for each pair of descriptors (one from the object being tracked, another from a scene that potentially contains that object), if any.</li>
</ol>
To get started on what is coming to ArrayFire, in this article we dive deeper in the first step of feature tracking, detecting good features. Through a step-by-step guide, we will develop a simple corner detector, known as the Harris corner detector.

The Harris corner detector is very simple to implement, especially when you have so many good tools and libraries out there to do the core matrix manipulation. What we specifically need for Harris are some convolutions, together with a few element-wise matrix addition and multiplication operations, all of these operations are present in most scientific tools and libraries that work with matrix manipulation. I will try to avoid going into the mathematical details in this post and go directly to the implementation.

The first step in the Harris corner detector is to determine first order derivatives of an image, in both horizontal and vertical directions. This can be achieved by one convolution for each direction.

&nbsp;