mirror of
https://github.com/zxing/zxing.git
synced 2025-03-05 20:48:51 -08:00
Reformat, and implement some performance optimization
git-svn-id: https://zxing.googlecode.com/svn/trunk@1578 59b500cc-1b3d-0410-9834-0bbf25fbcc57
This commit is contained in:
parent
8d5559050b
commit
2526ea8713
|
@ -85,8 +85,8 @@ public final class WhiteRectangleDetector {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (right >= width) {
|
if (right >= width) {
|
||||||
sizeExceeded = true;
|
sizeExceeded = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// .....
|
// .....
|
||||||
|
@ -102,8 +102,8 @@ public final class WhiteRectangleDetector {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (down >= height) {
|
if (down >= height) {
|
||||||
sizeExceeded = true;
|
sizeExceeded = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// .....
|
// .....
|
||||||
|
@ -119,8 +119,8 @@ public final class WhiteRectangleDetector {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (left < 0) {
|
if (left < 0) {
|
||||||
sizeExceeded = true;
|
sizeExceeded = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// .___.
|
// .___.
|
||||||
|
@ -148,91 +148,85 @@ public final class WhiteRectangleDetector {
|
||||||
|
|
||||||
if (!sizeExceeded && atLeastOneBlackPointFoundOnBorder) {
|
if (!sizeExceeded && atLeastOneBlackPointFoundOnBorder) {
|
||||||
|
|
||||||
ResultPoint x=null, y=null, z=null, t=null;
|
ResultPoint x = null, y = null, z = null, t = null;
|
||||||
|
|
||||||
final int max_size = right-left;
|
final int max_size = right - left;
|
||||||
|
|
||||||
for (int i = 1; i < max_size; i++){
|
for (int i = 1; i < max_size; i++) {
|
||||||
ResultPoint a = new ResultPoint(left, down-i);
|
z = getBlackPointOnSegment(left, down - i, left + i, down);
|
||||||
ResultPoint b = new ResultPoint(left+i, down);
|
if (z != null) {
|
||||||
z = getBlackPointOnSegment(a, b);
|
break;
|
||||||
if (z != null){
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (z == null){
|
if (z == null) {
|
||||||
throw NotFoundException.getNotFoundInstance();
|
throw NotFoundException.getNotFoundInstance();
|
||||||
|
}
|
||||||
|
|
||||||
|
//go down right
|
||||||
|
for (int i = 1; i < max_size; i++) {
|
||||||
|
t = getBlackPointOnSegment(left, up + i, left + i, up);
|
||||||
|
if (t != null) {
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//go down right
|
if (t == null) {
|
||||||
for (int i = 1; i < max_size; i++){
|
throw NotFoundException.getNotFoundInstance();
|
||||||
ResultPoint a = new ResultPoint(left, up+i);
|
}
|
||||||
ResultPoint b = new ResultPoint(left+i, up);
|
|
||||||
t = getBlackPointOnSegment(a, b);
|
//go down left
|
||||||
if (t != null){
|
for (int i = 1; i < max_size; i++) {
|
||||||
break;
|
x = getBlackPointOnSegment(right, up + i, right - i, up);
|
||||||
}
|
if (x != null) {
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (t == null){
|
if (x == null) {
|
||||||
throw NotFoundException.getNotFoundInstance();
|
throw NotFoundException.getNotFoundInstance();
|
||||||
|
}
|
||||||
|
|
||||||
|
//go up left
|
||||||
|
for (int i = 1; i < max_size; i++) {
|
||||||
|
y = getBlackPointOnSegment(right, down - i, right - i, down);
|
||||||
|
if (y != null) {
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//go down left
|
if (y == null) {
|
||||||
for (int i = 1; i < max_size; i++){
|
throw NotFoundException.getNotFoundInstance();
|
||||||
ResultPoint a = new ResultPoint(right, up+i);
|
}
|
||||||
ResultPoint b = new ResultPoint(right-i, up);
|
|
||||||
x = getBlackPointOnSegment(a, b);
|
|
||||||
if (x != null){
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (x == null){
|
return centerEdges(y, z, x, t);
|
||||||
throw NotFoundException.getNotFoundInstance();
|
|
||||||
}
|
|
||||||
|
|
||||||
//go up left
|
|
||||||
for (int i = 1; i < max_size; i++){
|
|
||||||
ResultPoint a = new ResultPoint(right, down-i);
|
|
||||||
ResultPoint b = new ResultPoint(right-i, down);
|
|
||||||
y = getBlackPointOnSegment(a, b);
|
|
||||||
if (y != null){
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (y == null){
|
|
||||||
throw NotFoundException.getNotFoundInstance();
|
|
||||||
}
|
|
||||||
|
|
||||||
return centerEdges(y, z, x, t);
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
throw NotFoundException.getNotFoundInstance();
|
throw NotFoundException.getNotFoundInstance();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private ResultPoint getBlackPointOnSegment(ResultPoint a, ResultPoint b) {
|
private ResultPoint getBlackPointOnSegment(float aX, float aY, float bX, float bY) {
|
||||||
int dist = distanceL2(a, b);
|
int dist = distanceL2(aX, aY, bX, bY);
|
||||||
float xStep = (b.getX()-a.getX())/dist;
|
float xStep = (bX - aX) / dist;
|
||||||
float yStep = (b.getY()-a.getY())/dist;
|
float yStep = (bY - aY) / dist;
|
||||||
|
|
||||||
for (int i = 0; i < dist; i++){
|
for (int i = 0; i < dist; i++) {
|
||||||
if (image.get(Math.round(a.getX()+i*xStep), Math.round(a.getY()+i*yStep))){
|
int x = Math.round(aX + i * xStep);
|
||||||
return new ResultPoint(Math.round(a.getX()+i*xStep), Math.round(a.getY()+i*yStep));
|
int y = Math.round(aY + i * yStep);
|
||||||
}
|
if (image.get(x, y)) {
|
||||||
}
|
return new ResultPoint(x, y);
|
||||||
return null;
|
}
|
||||||
}
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
private static int distanceL2(ResultPoint a, ResultPoint b) {
|
private static int distanceL2(float aX, float aY, float bX, float bY) {
|
||||||
return (int) Math.round(Math.sqrt((a.getX() - b.getX())
|
float xDiff = aX - bX;
|
||||||
* (a.getX() - b.getX()) + (a.getY() - b.getY())
|
float yDiff = aY - bY;
|
||||||
* (a.getY() - b.getY())));
|
return (int) Math.round(Math.sqrt(xDiff * xDiff + yDiff * yDiff));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* recenters the points of a constant distance towards the center
|
* recenters the points of a constant distance towards the center
|
||||||
|
@ -257,17 +251,25 @@ public final class WhiteRectangleDetector {
|
||||||
// y y
|
// y y
|
||||||
//
|
//
|
||||||
|
|
||||||
float yi = y.getX(), yj = y.getY(), zi = z.getX(), zj = z.getY(), xi = x
|
float yi = y.getX();
|
||||||
.getX(), xj = x.getY(), ti = t.getX(), tj = t.getY();
|
float yj = y.getY();
|
||||||
|
float zi = z.getX();
|
||||||
|
float zj = z.getY();
|
||||||
|
float xi = x.getX();
|
||||||
|
float xj = x.getY();
|
||||||
|
float ti = t.getX();
|
||||||
|
float tj = t.getY();
|
||||||
|
|
||||||
final int corr = 1;
|
final int corr = 1;
|
||||||
if (yi < width / 2) {
|
if (yi < width / 2) {
|
||||||
return new ResultPoint[]{new ResultPoint(ti - corr, tj + corr),
|
return new ResultPoint[]{
|
||||||
|
new ResultPoint(ti - corr, tj + corr),
|
||||||
new ResultPoint(zi + corr, zj + corr),
|
new ResultPoint(zi + corr, zj + corr),
|
||||||
new ResultPoint(xi - corr, xj - corr),
|
new ResultPoint(xi - corr, xj - corr),
|
||||||
new ResultPoint(yi + corr, yj - corr)};
|
new ResultPoint(yi + corr, yj - corr)};
|
||||||
} else {
|
} else {
|
||||||
return new ResultPoint[]{new ResultPoint(ti + corr, tj + corr),
|
return new ResultPoint[]{
|
||||||
|
new ResultPoint(ti + corr, tj + corr),
|
||||||
new ResultPoint(zi + corr, zj - corr),
|
new ResultPoint(zi + corr, zj - corr),
|
||||||
new ResultPoint(xi - corr, xj + corr),
|
new ResultPoint(xi - corr, xj + corr),
|
||||||
new ResultPoint(yi - corr, yj - corr)};
|
new ResultPoint(yi - corr, yj - corr)};
|
||||||
|
@ -295,11 +297,11 @@ public final class WhiteRectangleDetector {
|
||||||
for (int y = a; y <= b; y++) {
|
for (int y = a; y <= b; y++) {
|
||||||
if (image.get(fixed, y)) {
|
if (image.get(fixed, y)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
Loading…
Reference in a new issue