May 15th, 2006

Great news! Skype just released the news that they would provide free calls to US and Canada landlines (regular phones) and mobile phones till the end of the year.I have been using the free PC to PC Skype calls to chat with family members in China for quite some time already, and the sound quality is always pretty good as long as both ends are using broadband connections.
The best feature of Skype is that it now supports Video chatting using the 2.0 version on Windows (unfortunely no video chatting yet on Mac OS X). The interface is pretty simple and easy to use. My grandma even knows how to use it now
Have a try and enjoy!
Posted in SiteNews | 5 Comments »
April 24th, 2006
I just found out that I didn’t do a fair enough comparison between the MATLAB built-in normxcorr2 function and the pre-compiled normxcorr2_mex in the previous post. The reason is that MATLAB is calculating the full normalized cross-correlation, while the pre-compiled MEX file only calculates the values for the “valid” region of the cross correlation. The idea of calculating only the “valid” region assumes that the feature/template that you are looking for is WITHIN the larger image. If the feature has several pixels sticking out of the larger image, this assumption will make the normxcorr_mex to give the wrong peak position.
So, to match the output of the normxcorr2 in matlab, one will need to pad the larger image with zeros before using the normxcorr2_mex. For example, instead of using
ncc = normxcorr2_mex(template, img);
The following code will give you exactly the same result as the output from the Matlab normxcorr2 function:
img_padded=padarray(img,[size(template,1)-1,size(template,2)-1]);
ncc=normxcorr2_mex(template, img_padded, 'valid');
By doing this, we are calculating more correlation values, thus trading off performance, as is indicated by the comparison plot below (still 10 times speed-up with large image sizes, compared with the matlab built-in function) :

Posted in Apple, MATLAB, LABVIEW | 3 Comments »
April 21st, 2006
Recently, I’ve encounter the problem of finding a template in an image, which is a common issue in image registration or computer vision.
With the built-in function “normxcorr2″ in MATLAB, it is rather easy to write a program to do this. However, the performance is not that great.
Luckily, I came across the following discussion by Daniel Eaton:
“How to do Normalized Cross-Correlation Fast”
By wrapping the C++ code from OpenCV project and making it available as a MATLAB MEX-file, Daniel claims that he achieved a huge performance boost.
I was a bit suspicious at first, but decided to give it a shot. As I am using a n Apple PowerMac G5, I found out that I need to compile the MEX-file on Mac OS X, which turns out not be a trivial task (see my dedicated post).
Anyway, the outcome really surprised me. I can assure you now, that it is well worth the time and trouble to compile the MEX-file!
By embedding a random grayscale pattern in a larger image, I was able to benchmark the performance on an Apple PowerMac G5 (Dual 2.5GHz PowerPC CPUs). Take a look:

The template stays the same (100×100 pixels), while the size of search image is increasing (from 200×200 to 800×800, indicated by the X-axis). The Y-axis shows the cpu time. Clearly, there is a speedup of 15x – 20x, using the compiled MEX-file over the built-in “normxcorr2″!
Life is better, right?
Posted in MATLAB, LABVIEW | 72 Comments »
April 21st, 2006
I was trying to compile the fast Normalized Cross-correlation function from Daniel Eaton, when I encountered compilation errors on my PowerMac G5. It took me some time to figure out a solution, so I thought it might be useful to other people who want to use Intel s Open Computer Vision library in MATLAB on Mac OS X Tiger.
- Follow Christoph Seibert’s guide to compile OpenCV on Mac OS X Tiger. You will need Fink installed (use FinkCommander), as well as Apple XCode and X11.
- Open an X11 Terminal window and type in the following command to set up the environment for pkg-config.
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
Or you can add this line to your .bash_profile file.
- Following the above command, start MATLAB by typing:
/Application/MATLAB71/bin/matlab
(use your own version of MATLAB, instead of 7.1 here)
- In MATLAB command window, type in
mex -setup
and choose the default gcc option (# 2).
- Open a new Terminal window and modify the matlab mexopts.sh file (~/.matlab/R14SP3/mexopts.sh for example). Now open the file with your favorite text editor (vi or pico) and find the section starting with
mac)
#-------------------------
CC='gcc-3.3'
- replace the CC line with the following line and save the file.
CC='gcc-3.3 -bind_at_load `pkg-config --cflags opencv` `pkg-config --libs opencv`'
- Okay, now you can go ahead and compile the MEX file, by using the “mex” command in MATLAB. For example:
mex mycode.cpp
Have fun!
Posted in Apple, MATLAB, LABVIEW | 30 Comments »