From 24cce4a4fafd6e87eaeed2c8492171ae99bc8f6e Mon Sep 17 00:00:00 2001 From: srowen Date: Tue, 21 Jul 2009 09:39:31 +0000 Subject: [PATCH] Small detector simplification that addresses issue 215 and picks up a net +4 more images decoded in tests git-svn-id: http://zxing.googlecode.com/svn/trunk@1022 59b500cc-1b3d-0410-9834-0bbf25fbcc57 --- .../qrcode/detector/FinderPatternFinder.java | 35 +++++++------------ .../zxing/qrcode/QRCodeBlackBox1TestCase.java | 4 +-- .../zxing/qrcode/QRCodeBlackBox2TestCase.java | 8 ++--- .../zxing/qrcode/QRCodeBlackBox3TestCase.java | 4 +-- 4 files changed, 21 insertions(+), 30 deletions(-) diff --git a/core/src/com/google/zxing/qrcode/detector/FinderPatternFinder.java b/core/src/com/google/zxing/qrcode/detector/FinderPatternFinder.java index 9d385580..902c4bbb 100755 --- a/core/src/com/google/zxing/qrcode/detector/FinderPatternFinder.java +++ b/core/src/com/google/zxing/qrcode/detector/FinderPatternFinder.java @@ -480,34 +480,25 @@ public class FinderPatternFinder { * @throws ReaderException if 3 such finder patterns do not exist */ private FinderPattern[] selectBestPatterns() throws ReaderException { - Collections.insertionSort(possibleCenters, new CenterComparator()); - int size = 0; - int max = possibleCenters.size(); - while (size < max) { - if (((FinderPattern) possibleCenters.elementAt(size)).getCount() < CENTER_QUORUM) { - break; - } - size++; - } - - if (size < 3) { + if (possibleCenters.size() < 3) { // Couldn't find enough finder patterns throw ReaderException.getInstance(); } + Collections.insertionSort(possibleCenters, new CenterComparator()); - if (size > 3) { + if (possibleCenters.size() > 3) { // Throw away all but those first size candidate points we found. - possibleCenters.setSize(size); - // We need to pick the best three. Find the most - // popular ones whose module size is nearest the average - float averageModuleSize = 0.0f; - for (int i = 0; i < size; i++) { - averageModuleSize += ((FinderPattern) possibleCenters.elementAt(i)).getEstimatedModuleSize(); - } - averageModuleSize /= (float) size; - // We don't have java.util.Collections in J2ME - Collections.insertionSort(possibleCenters, new ClosestToAverageComparator(averageModuleSize)); + possibleCenters.setSize(3); + } + // We need to pick the best three. Find the most + // popular ones whose module size is nearest the average + float averageModuleSize = 0.0f; + for (int i = 0; i < 3; i++) { + averageModuleSize += ((FinderPattern) possibleCenters.elementAt(i)).getEstimatedModuleSize(); } + averageModuleSize /= 3.0f; + // We don't have java.util.Collections in J2ME + Collections.insertionSort(possibleCenters, new ClosestToAverageComparator(averageModuleSize)); return new FinderPattern[]{ (FinderPattern) possibleCenters.elementAt(0), diff --git a/core/test/src/com/google/zxing/qrcode/QRCodeBlackBox1TestCase.java b/core/test/src/com/google/zxing/qrcode/QRCodeBlackBox1TestCase.java index f6b83eaa..7d45588d 100644 --- a/core/test/src/com/google/zxing/qrcode/QRCodeBlackBox1TestCase.java +++ b/core/test/src/com/google/zxing/qrcode/QRCodeBlackBox1TestCase.java @@ -29,8 +29,8 @@ public final class QRCodeBlackBox1TestCase extends AbstractBlackBoxTestCase { super("test/data/blackbox/qrcode-1", new MultiFormatReader(), BarcodeFormat.QR_CODE); addTest(19, 19, 0.0f); addTest(15, 15, 90.0f); - addTest(16, 16, 180.0f); - addTest(13, 14, 270.0f); + addTest(17, 17, 180.0f); + addTest(14, 14, 270.0f); } } \ No newline at end of file diff --git a/core/test/src/com/google/zxing/qrcode/QRCodeBlackBox2TestCase.java b/core/test/src/com/google/zxing/qrcode/QRCodeBlackBox2TestCase.java index 085cbf30..2f88b46c 100644 --- a/core/test/src/com/google/zxing/qrcode/QRCodeBlackBox2TestCase.java +++ b/core/test/src/com/google/zxing/qrcode/QRCodeBlackBox2TestCase.java @@ -27,10 +27,10 @@ public final class QRCodeBlackBox2TestCase extends AbstractBlackBoxTestCase { public QRCodeBlackBox2TestCase() { super("test/data/blackbox/qrcode-2", new MultiFormatReader(), BarcodeFormat.QR_CODE); - addTest(24, 24, 0.0f); - addTest(21, 21, 90.0f); - addTest(22, 22, 180.0f); - addTest(17, 18, 270.0f); + addTest(23, 23, 0.0f); + addTest(20, 20, 90.0f); + addTest(21, 21, 180.0f); + addTest(19, 19, 270.0f); } } \ No newline at end of file diff --git a/core/test/src/com/google/zxing/qrcode/QRCodeBlackBox3TestCase.java b/core/test/src/com/google/zxing/qrcode/QRCodeBlackBox3TestCase.java index 9440d405..6888c945 100644 --- a/core/test/src/com/google/zxing/qrcode/QRCodeBlackBox3TestCase.java +++ b/core/test/src/com/google/zxing/qrcode/QRCodeBlackBox3TestCase.java @@ -29,8 +29,8 @@ public final class QRCodeBlackBox3TestCase extends AbstractBlackBoxTestCase { super("test/data/blackbox/qrcode-3", new MultiFormatReader(), BarcodeFormat.QR_CODE); addTest(33, 33, 0.0f); addTest(33, 33, 90.0f); - addTest(32, 32, 180.0f); - addTest(34, 34, 270.0f); + addTest(33, 33, 180.0f); + addTest(35, 35, 270.0f); } } \ No newline at end of file -- 2.20.1