En

A simple CUDA kernel + mex file (part 1)

In the previous post, I introduced the various problems that I have encountered when I had to install some external CUDA library on our Mac workstations. In this post and the next, I will take a simple example (moving data from array A to array B through the GPU) to show how I finally achieved this installation process. While the application is not really useful, it demonstrates all the various tips and tricks that we applied.

CUDA : lessons from the trenches

I’ve done a lot of casual (unfortunately, non-thesis-writing related) stuff this summer, including a lot of code. Among these, we had the chance to host a software consultant during a few days, to test and deploy some CUDA codes that they had been optimizing during the last year. As the official Nerd PhD Student0 on optical flow), I was picked up by a post-doc to assist the consultant integrating their CUDA stuff on our Mac line.

Radio silence

Wow ! A long period without any updates.

OpenCV + iOS tutorial

A short post to let you know about this interesting initiative from the blog Computer Vision Talks. The blogger (and augmented reality software developer) Eugene Khvedchenya has started a tutorial series on using OpenCV in the iOS world. This is really useful, since it can be problematic to make both worlds work together. Furthermore, CV and Image Processing people are usually not really aware of software design issues, and developing nice iOS demos of our cool algorithms can be a really painful process without this knowledge.

CUDA weirdness

Just lost a few hours ripping my hair apart1. I’m currently doing some tests compiling CUDA code as object files or as a C/C++ library, in order to call it from the Dreaded Matlab. Wait a minute… did you say external Cuda lib + Matlab ? Yes, I did say that. I am aware of the existence of Matlab’s Parallel Computing Toolbox. However, two important things make me avoid it :

Reshaping a matrix with OpenCV

A short post about the method cv::Mat::reshape(int channels, int rows).

The SNR strikes back

The SNR situation is getting worse, or at the very least more and more intriguing.

Code repo updated

Some updates I’m quietly updating the github depot associated with this blog. If you sync the code regularly, you may have already noticed the apparition of movies a few weeks ago. They will be useful when the optical flow code will be online ;-) Today’s update brings hard and soft-thresholding, and a demo on how to use them for image denoising (in the DCT domain). Being original The implementation of soft-thresholding may seem a bit awkward to people familiar with it : the soft-thresholding is implemented via a shrinkage operation on the original coefficient, without explicit sign extraction.

Linearized model of LBPs

LBP model An LBP can be decomposed into two tiers: first, a real description vector, obtained by convolution-then-difference then the quantization (binarization) operation. Mathematically, the real i-th component of the descriptor is computed with the formula: $${\mathcal L}(p)i = \langle{\mathcal G}{x_i, \sigmai} , p \rangle - \langle G{x_i’, \sigmai’} , p\rangle, $$ where ${\mathcal G}{x_i, \sigmai}, {\mathcal G}{x’_i, \sigma’_i}$ are two Gaussians. The variety of the LBP family comes from the choice of these Gaussians : they can have a fixed size but random positions (a la BRIEF), fixed sizes and positions (a la BRISK)1… The choice in FREAK was :

SNR, why have you forsaken me ?

I’m not as much on FREAKs reconstruction and blogging as I wished, because I have one really important target for the next 6 months: submitting my thesis before the end of the year. The dreaded SNR measure We’ve come up with a nice equation in the past few months (hence, this work is completely unpublished) and after managing to implement it I’m now testing it to show that it is actually outstanding.