summaryrefslogtreecommitdiff
path: root/core/src/main/java
diff options
context:
space:
mode:
authorDaniel Gredler <daniel.gredler@gmail.com>2025-11-11 16:27:13 +0300
committerGitHub <noreply@github.com>2025-11-11 16:27:13 +0300
commit5481784650ebd49d4a823d98917bd40c49b94454 (patch)
treee720fae0e5cacd161d12b71e59e04e8943d1cc15 /core/src/main/java
parent45b3a16e812cb08cd66d25b3bb4767f92b0833b3 (diff)
downloadzxing-5481784650ebd49d4a823d98917bd40c49b94454.tar.xz
Loosen ITF max variance for 3x module widths (#2014)
Diffstat (limited to 'core/src/main/java')
-rw-r--r--core/src/main/java/com/google/zxing/oned/ITFReader.java10
1 files changed, 6 insertions, 4 deletions
diff --git a/core/src/main/java/com/google/zxing/oned/ITFReader.java b/core/src/main/java/com/google/zxing/oned/ITFReader.java
index a4e6ec318..3f990b9c0 100644
--- a/core/src/main/java/com/google/zxing/oned/ITFReader.java
+++ b/core/src/main/java/com/google/zxing/oned/ITFReader.java
@@ -46,11 +46,12 @@ import java.util.Map;
public final class ITFReader extends OneDReader {
private static final float MAX_AVG_VARIANCE = 0.38f;
- private static final float MAX_INDIVIDUAL_VARIANCE = 0.5f;
+ private static final float MAX_INDIVIDUAL_VARIANCE_2X = 0.5f; // 2x wide lines -> stricter
+ private static final float MAX_INDIVIDUAL_VARIANCE_3X = 0.75f; // 3x wide lines -> less strict
private static final int W = 3; // Pixel width of a 3x wide line
private static final int w = 2; // Pixel width of a 2x wide line
- private static final int N = 1; // Pixed width of a narrow line
+ private static final int N = 1; // Pixel width of a narrow line
/** Valid ITF lengths. Anything longer than the largest value is also allowed. */
private static final int[] DEFAULT_ALLOWED_LENGTHS = {6, 8, 10, 12, 14};
@@ -328,7 +329,7 @@ public final class ITFReader extends OneDReader {
counters[counterPosition]++;
} else {
if (counterPosition == patternLength - 1) {
- if (patternMatchVariance(counters, pattern, MAX_INDIVIDUAL_VARIANCE) < MAX_AVG_VARIANCE) {
+ if (patternMatchVariance(counters, pattern, MAX_INDIVIDUAL_VARIANCE_2X) < MAX_AVG_VARIANCE) {
return new int[]{patternStart, x};
}
patternStart += counters[0] + counters[1];
@@ -360,7 +361,8 @@ public final class ITFReader extends OneDReader {
int max = PATTERNS.length;
for (int i = 0; i < max; i++) {
int[] pattern = PATTERNS[i];
- float variance = patternMatchVariance(counters, pattern, MAX_INDIVIDUAL_VARIANCE);
+ float maxVariance = (i <= 9 ? MAX_INDIVIDUAL_VARIANCE_2X : MAX_INDIVIDUAL_VARIANCE_3X);
+ float variance = patternMatchVariance(counters, pattern, maxVariance);
if (variance < bestVariance) {
bestVariance = variance;
bestMatch = i;