Friday, 27 March 2009

2D Gaussian Function

In my last post I mentioned using 5x5 Gaussian kernel as a Point Spread Function to make an image blurry.

What occured to me last night is that these Gaussian kernels are demonstrated so many times in image processing without any explanation of the underlying function used. A Gaussian function is in fact continuous and not like the 5x5 matrix I showed at all.

So to explain a bit more lets derive our 5x5 Gaussian kernel in the last post from the 2D Gaussian function (I've installed LaTex plugin to wordpress to make it a bit more readable):

Thursday, 26 March 2009

Canny Edge Detection Steps

As promised in my previous post and in response to a comment  , here is a step by step explanation of the Canny Edge Detector. I have some images from a previous post available here.

Firstly we need to apply a Gaussian Point Spread Function (PSF) to our image. This will make the image seem slightly blurry. Increasing the width of the filter will of course increase the blurriness of the image. A wider filter tends to cause the Canny Edge detector to detect longer smoother lines while a narrow filter allows it to find shorter lines.

Almost Wedding Time!

Regular readers of this blog will remember that I got engaged last year ( Time really does fly and we are getting married in less than two weeks time! :)    I might even post a few photos here :)

This news hopefully explains the lack of updates on any projects lately although I have done a bit of work on the raytracer.  Interestingly some of the ray tracer accelerations can also be used in the fluid modelling project with a few tweaks.  On the visualization interface front I've been playing a bit more with the new qt4.5 and it is pretty decent. I'm still loving the new IDE.  But....  in terms of quickly making an extensible, good looking and function interface Flex 3 is winning by a large margin.  Actually I should clarify that the flex isnt actually doing any calculations its merely displaying images it is retrieving from the rendering service. If the app itself was calculating and rendering then I would probably pick qt4.  Personally I like the idea of seperate bits doing things on their own, which is nice for redundancy / scalability but not everyone likes to work in this manner.

Monday, 9 March 2009

Qt Revisited

I managed to find some time to play with Qt this weekend. Firstly, I am rather impressed by the new IDE: While not quite as good as eclipse in terms of editing it seems more stable and uses FAR less memory. It is definately more user friendly than my visual studio 2003 and has a nice auto-complete feature that seems to actually work.

The new widgets and libraries are great if a little large and its pretty quick to whip something together. A nice touch in the IDE is the ability to just drag and drop signals to slots right on the visual layout of the form.

Friday, 6 March 2009

Qt 4.5

As my raytracer is getting more and more complex with lots of dynamic options and movement controls trying to remember keypresses from a command window to turn things off and on is getting increasingly difficult.

The time has come to build a proper interface for the rendering window. Now as I dont want to spend too much time developing this from scratch I thought I'd have another look at Qt (pronounced cute). Its been quite a while and a good few versions since I last used it, and am pleasently surprised at the improvements and additions. As it does offer openGL widget / rendering it is the perfect library to use for my raytracer.  Using openGL and Qt still gives me the option of going cross-platform on the raytracer and as the memory handling / page locked mem is faster on linux this could give a few more fps :)

In short, if you are looking at a C++ friendly interface designer you could do a lot worse than using the new Qt. (

Thursday, 5 March 2009

GPU Radix Sort

In the ongoing search of finding efficient GPU sorting algorithms I came across the following paper:   by Nadathur Satish, Mark Harris, and Michael Garland.  It is a preprint for the 23rd IEEE Int’l Parallel & Distributed Processing Symposium, May 2009 (

I have not tested if it is faster than the GPU quicksort ( Normal quicksort does slow down on nearly sorted or already sorted data so a radix sort might exhibit more stable behaviour.