Winner Hannes Naudé (Overfitting is a fool's game)
The Spring 2010 MATLAB® Programming Contest has come to an end. We hope you enjoyed it as much as we did.
Thanks to all the participants and spectators who have helped make the Sensor Contest such a great success. Congratulations to all our winners! We also want to give a special "high-five" to those winners who are already in our MATLAB Contest Hall of Fame, yet made the effort to participate again in this contest.
I live in Pretoria, South Africa. I run a small consulting firm, Innoventix Consulting, together with my coding partner from previous contests, Cobus Potgieter. We do algorithm & software development for our clients who are mostly from the defence industry. Our specialization is in signal and image processing and artificial intelligence, and we use Matlab regularly in the algorithm development side of our business. When I’m not working or playing Matlab Contest I can be found catering to baby girl Mila Naudé’s every whim. It is very important that the contest cutoff be moved, since this clashes with bathtime and I probably won’t get away with submitting 22 minutes early again ;-).
I first participated in the Matlab Contest in the trucking contest of April 2003. Seven years later and the contest remains an extremely fun and addictive way to learn new Matlab tips & tricks. I especially like the new contest machinery. My initial impression was that the changes to the site were mostly cosmetic, but after a couple of days I began to appreciate the real impact of things like the ability to easily see all code based on any given participants entries, the ability to place comments on submissions after-the-fact, and of course the limitation of ten entries per participant per 10 minutes. It is clear that a lot of thought and effort went into the new site and I wish to thank the contest team for this.
Thanks also to all the contestants from which I have learned so much over the past seven years. I hope to see all of you (plus a load of new “faces”) back here in 6 months.
I completed a B.S in Computer Engineering at Clarkson University in 2005, and a M.S. in Electrical Engineering at Syracuse University in 2010.
I am a full-time employee at SRC The early bird prize is a very short lived part of the overall contest. Two things contributed to my success during this phase, first checking the main contest page
so I was aware of the early bird prize, and secondly the small amount of research I performed during the darkness and twilight stages on compressive sensing,
specifically Rice Universities I appreciate all of the improvements the Mathworks contest team implemented since the last contest. As always my hats off to some of the key players like
Oliver, Robert, and Hannes who demonstrated both a mastery of MATLAB and strong problem solving skills.
Regards,
Mike Russell
Alan has been using MATLAB for about 15 years, originally learning at The Ohio State University where he was working on his degree in electrical engineering.
He also has a Ph.D. in biomedical engineering from the University of North Carolina at Chapel Hill. Alan works as a Program Director for the Ohio Supercomputer Center
in Columbus, Ohio and has regularly been an instructor at training classes on MATLAB for a variety of audiences.
As regular competitors know, one of the things I personally enjoy about the contest is developing code the deals with the contest mechanics
(i.e. auto entry submission code). With the new contest website, I found it particularly challenging to create new code to interface with it and spent
several days on that task. I ended up with a program that continuously scanned to see who the current leader is. If it was my own entry it didn't do anything at all.
If it was another new code it grabbed the code, then resubmitted versions with slight tweaks to key parameters.
For example, say a key parameter to tweak was at 0.1234. Then my code would first submit an entry with that changed to 0.1235, the next one would be 0.1233,
next 0.1236, then 0.1232, etc. etc. Then it goes to the next likely parameter (unless of course the leader changes during this process,
in which case it starts over again with the new code). As a result, I ended up submitting 782 entries from my primary user account,
and was able to win both the K-node challenge and the Longevity contest.
I'm currently a Research Engineer at Toshiba Research Europe Ltd., where I develop computer vision algorithms, usually in MATLAB. I first used MATLAB in 2000, for a lab project during my undergraduate degree,
but became a habitual user during my PhD, which I started in 2004 and finished in 2009. The subject of this contest, compressive sensing, is quite a big research topic, so I spent the first day skim reading some relevant papers for inspiration.
I realized that there were two main approaches - choose queries such that the sum of each region (formed by the intersections of regions) is exactly soluble
(preferably in closed form), or choose highly overlapping regions which require complex optimization and regularization to find the 'best' solution.
The papers all used methods in the second category, making the algorithms too complicated to implement quickly, and most likely too slow for the 180 second running time limit.
So my reading turned out to be a waste of time, but by that time I'd missed the darkness phase again!
I then decided to just start coding some algorithms in the former group. The first simply split the image into as many identically sized squares as possible, and computed the mean value for each square. I noticed that this expended queries splitting up large areas which were uniform in value, queries which could be better spent improving textured areas. My next approach started with a much coarser grid, then split some of the squares into quarters, and some of those quarters into quarters and so on. The squares to split were chosen based on their largest difference in value from their neighbours. I further improved this approach by only splitting the regions in half, either horizontally or vertically. Amazingly this was enough to give me my first leading entry, which turned out to be luck more than anything. When I tried to improve my criterion for selecting the next region to split, I couldn't. By chance I'd hit on a good method first time. However, the approach was soon overtaken by entries from Robert Macrae and Alfonso Nieto-Castanon. I needed another improvement.
I then noticed that smooth areas of the original images looked quite blocky in the reconstructions, so decided to add a post-processing smoothing step. This put me back in the lead! I finally added some bilateral filtering using an implementation by Jiawen Chen I found online, to sharpen up the edges which had been blurred by the smoothing. Thankfully that was enough to give me the twilight win.
After that I knew it would be difficult to stay competitive in daylight - there's always someone with more time than you to improve the leading entry, and I thought I should probably get back to work. However, I didn't stop thinking about some alternative approaches (in the latter category of the two I mentioned) which might make significant improvements, and even submitted a very concise one for the 1000 node challenge, but these approaches were always far too slow.
Many thanks to the contest team, and all the participants, for another enjoyable contest.
My biographical info has not changed much since the last contests. I
am still research assistant and PhD student at Chemnitz University of
Technology, but I hope to finish my studies during the next year. My
thesis centers around high-level synthesis of hardware from temporal
properties.
My contest entry was just a straightforward algorithm that always
divides one of the rectangular areas in half, queries one half and
computes the other with the sum of the first and the parent sum. Two
ideas are probably different from other entries. First, I tried to
select the most "profitable" area to split and I chose a metric that
assumes an area where all pixels are binary (either 255 or 0) and
computes the expected score in this case. Therefore, medium colored
areas are preferred.
The other idea, was to tilt (german "kippen") all areas according to
the mean of the neighboring areas. This function also found entry into
the main development during the big sunday push. However, I was not
able really to capitalize from this improvement.
At last, I followed a colleague's hint and used a simple gaussian
filter to blur the image a bit. I am a physicist in the technology department of Carl Zeiss Jena GmbH situated in Jena (Germany). In our work we develop microstructured optics for any application, e.g. spectrometer gratings, beam shaper and others. My first contact was 1999 in France. Since then I engaged more and more with Matlab. I came a bit late to the contest this year. So my first entry was based on Mike's Picture Quality Enchancer. But the weekend was really interesting. The algorithms provided have a lot of tuning opportunities. The Saturday Leap entry was the result of a night on parameter optimization, in this particular case the filtering parameter. Many thanks to the contest team.Mike Russell
Early Bird
Alan Chalker
Tuesday Longevity and K-Node Challenge 
Oliver Woodford
Twilight
Jan Langer
Darkness
Alex P
Saturday Leap

Abhisek comes from Calcutta, India. Currently, he is principal scientist at the 'Integrated Sensor Systems' group of Asea Brown Boveri (ABB) Corporate Research, Baden-Daettwil, Switzerland (www.abb.com). He uses MATLAB, Simulink regularly for signal processing, machine learning, embedded systems related R&D.
I introduced the convoluted solver approach on Saturday by 'Pori clones 1' entry, which by the way fell short of Alex P's entry for Saturday leap. Nevertheless, this algorithm structure(with tweaks) presisted till the final day. I used the parameter pixels/query to choose from two particular solvers. However, as no feedback on score was available, I had to use this forward path logic. This asked for optimization over quite a few unknown parameters like picture contrast, how much edges are present, optimum ranges for each of the solvers, etc. These were quite different for the testsuite than the example one. That's why I had to use a lot of entries ('Pori' series) to figure out. Bad weather in Switzerland on Sunday inspired me to stay home and push along. And finally, Pori is not an acronym for a secret algorithm, it's the nickname of my 1yr old daughter, who did her best to distract me from the computer!