I have been involved in the image-based barcode decoding area for 15 years now. I downloaded your project to help me test out a project that I have been developing.
I have a program that will extensively test a decoder with respect to (currently) 27 parameters (blur, noise, white level and so on). I wanted to see how easy it was to integrate your code into my test engine to make sure that I had the interface as flexible as I could.
Well, that's just background. Bottom line is that I was able to run my test program on your decoder, and I am starting to get results.
I normally charge for this, but given that you were so nice to make the source available, I thought that I would likewise give some free feedback on your software.
Your package is able to handle far less blur than commercial packages. This is a tricky area, and I am not surprised. Likewise, it is pretty fussy as far as noise is concerned.
But the biggest thing that I noted was that I was finding it very hard to get anything to decode at first. After a bit of further testing, I noticed a pattern.
There is a bit of a "hole" in ZBar's ability to handle combinations of black and white levels. Notably, if white is brighter than about 100 counts, then if black is darker than about 50% of white, it has a hard time decoding. Oddly enough, if you lose contrast by making black brighter, it decodes just fine.
For example, a white level of 200 and black of zero will only rarely decode, whereas a white level of 200 an black level of 150 will decode easily, even though it has one quarter the contrast.
If anybody here wants any further information on this, just reply to this post, and I will try to get back to you on it.
Just another note…
This does not appear to be true for QR Code, but it definitely is for C128 and C39.
I have completed some testing of ZBar, and have used my testing as a case study on my web page. You can see the case study here: http://www.qedware.com/DecoderMetricCaseStudy.html. There is also a brief description of the test program here: http://www.qedware.com/DecoderMetric.html.
In short, I was able to greatly improve the reading by adding a few lines of code. The problem boils down to the code having a fixed minimum edge size. When you have a high contrast image with moderate absolute noise (but small relative to the signal), the decoder interprets the noise as edges.
The web page describes the change and gives before and after graph showing the improvements.