It seems that for some images the low level symbols are not read
correctly.
The scanned barcode image is not as 'clean' as the generated barcode
image.
Both images have the same content.
Is it possible to tweak the HybridBinarizer thresholding algorithm (or
another routine) to minimize the decoding errors?
This is the partial symbol output from a scan that was not decoded
successfully (too many errors):
11110101001111000 cw=4 ColumnNumber=0i=0
10100001000010000 cw=109 ColumnNumber=1i=17
11000001000100110 cw=861 ColumnNumber=2i=34
10000010011000110 cw=841 ColumnNumber=3i=51
11010011101110000 cw=-1 ColumnNumber=4i=68
11000011101100001 cw=-1 ColumnNumber=5i=85
11100010100111001 cw=-1 ColumnNumber=6i=102
11010011001111000 cw=-1 ColumnNumber=7i=119
10000010001000100 cw=864 ColumnNumber=8i=136
10001110111001000 cw=865 ColumnNumber=9i=153
11010100001100000 cw=8 ColumnNumber=10i=170
11111000100011000 cw=-1 ColumnNumber=0i=0
11110010101000000 cw=210 ColumnNumber=1i=17
10110001001111110 cw=396 ColumnNumber=2i=34
10011110101111000 cw=853 ColumnNumber=3i=51
11000001011100000 cw=-1 ColumnNumber=4i=68
11111001001011101 cw=-1 ColumnNumber=5i=85
10110001111001001 cw=-1 ColumnNumber=6i=102
11100001000100010 cw=-1 ColumnNumber=7i=119
...
Compare with a partial symbol output from a successfully decoded
generated barcode:
11111010100111110 cw=5 ColumnNumber=0i=0
11010000100000110 cw=112 ColumnNumber=1i=17
11000001000100110 cw=861 ColumnNumber=2i=34
10000010011000110 cw=841 ColumnNumber=3i=51
11010011101111000 cw=61 ColumnNumber=4i=68
11100011010110000 cw=617 ColumnNumber=5i=85
11110011010011100 cw=390 ColumnNumber=6i=102
11101001100111100 cw=54 ColumnNumber=7i=119
10000010001000100 cw=864 ColumnNumber=8i=136
10001110111001000 cw=865 ColumnNumber=9i=153
11010100001100000 cw=8 ColumnNumber=10i=170
11110101000000100 cw=12 ColumnNumber=0i=0
11110010101000000 cw=210 ColumnNumber=1i=17
10110001001111110 cw=396 ColumnNumber=2i=34
10011110101111000 cw=853 ColumnNumber=3i=51
...
The code that manipulates the image:
private static String getDecodeText(File file) {
BufferedImage image;
try {
image = ImageIO.read(file);
} catch (IOException ioe) {
return ioe.toString();
}
if (image == null) {
return "Could not decode image";
}
LuminanceSource source = new BufferedImageLuminanceSource(image);
BinaryBitmap bitmap = new BinaryBitmap(new
HybridBinarizer(source));
Result result;
try {
result = new MultiFormatReader().decode(bitmap);
} catch (ReaderException re) {
return re.toString();
}
return result.getText();