Skip to content

Commit 0e6473f

Browse files
committed
Merge remote-tracking branch 'origin/master'
# Conflicts: # src/main/java/ptrman/Showcases/TestClustering.java
1 parent f0b2b66 commit 0e6473f

File tree

9 files changed

+30
-47
lines changed

9 files changed

+30
-47
lines changed

src/main/java/ptrman/InternalTests/ProcessH.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@ private static void testOverlapA()
4141
ptrman.levels.retina.ProcessH processH = new ptrman.levels.retina.ProcessH();
4242

4343
Collection<RetinaPrimitive> detectors = new ArrayList<>();
44-
detectors.add(RetinaPrimitive.makeLine(SingleLineDetector.createFromFloatPositions(new ArrayRealVector(new double[]{7.0f, 5.0f+2.0f*7.0f}), new ArrayRealVector(new double[]{15.0f, 5.0f+2.0f*15.0f}))));
45-
detectors.add(RetinaPrimitive.makeLine(SingleLineDetector.createFromFloatPositions(new ArrayRealVector(new double[]{5.0f, 5.0f+2.0f*5.0f+2.0f}), new ArrayRealVector(new double[]{10.0f, 5.0f+2.0f*10.0f+2.0f}))));
44+
detectors.add(RetinaPrimitive.makeLine(SingleLineDetector.createFromFloatPositions(new ArrayRealVector(new double[]{7.0f, 5.0f+2.0f*7.0f}), new ArrayRealVector(new double[]{15.0f, 5.0f+2.0f*15.0f}), 0.2)));
45+
detectors.add(RetinaPrimitive.makeLine(SingleLineDetector.createFromFloatPositions(new ArrayRealVector(new double[]{5.0f, 5.0f+2.0f*5.0f+2.0f}), new ArrayRealVector(new double[]{10.0f, 5.0f+2.0f*10.0f+2.0f}), 0.2)));
4646

4747
// TODO< modernize >
4848
//processH.process(detectors);
@@ -59,8 +59,8 @@ private static void testOverlapAEqual()
5959
ptrman.levels.retina.ProcessH processH = new ptrman.levels.retina.ProcessH();
6060

6161
Collection<RetinaPrimitive> detectors = new ArrayList<>();
62-
detectors.add(RetinaPrimitive.makeLine(SingleLineDetector.createFromFloatPositions(new ArrayRealVector(new double[]{5.0f, 5.0f+2.0f*5.0f}), new ArrayRealVector(new double[]{15.0f, 5.0f+2.0f*15.0f}))));
63-
detectors.add(RetinaPrimitive.makeLine(SingleLineDetector.createFromFloatPositions(new ArrayRealVector(new double[]{5.0f, 5.0f+2.0f*5.0f+2.0f}), new ArrayRealVector(new double[]{10.0f, 5.0f+2.0f*10.0f+2.0f}))));
62+
detectors.add(RetinaPrimitive.makeLine(SingleLineDetector.createFromFloatPositions(new ArrayRealVector(new double[]{5.0f, 5.0f+2.0f*5.0f}), new ArrayRealVector(new double[]{15.0f, 5.0f+2.0f*15.0f}), 0.2)));
63+
detectors.add(RetinaPrimitive.makeLine(SingleLineDetector.createFromFloatPositions(new ArrayRealVector(new double[]{5.0f, 5.0f+2.0f*5.0f+2.0f}), new ArrayRealVector(new double[]{10.0f, 5.0f+2.0f*10.0f+2.0f}), 0.2)));
6464

6565
// TODO< modernize >
6666
//processH.process(detectors);

src/main/java/ptrman/InternalTests/TestPatternMatching.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public static void main(String[] args) {
4343

4444
List<RetinaPrimitive> lineDetectors = new ArrayList<>();
4545

46-
lineDetectors.add(RetinaPrimitive.makeLine(SingleLineDetector.createFromFloatPositions(new ArrayRealVector(new double[]{0.0f, 0.0f}), new ArrayRealVector(new double[]{10.0f, 40.0f}))));
46+
lineDetectors.add(RetinaPrimitive.makeLine(SingleLineDetector.createFromFloatPositions(new ArrayRealVector(new double[]{0.0f, 0.0f}), new ArrayRealVector(new double[]{10.0f, 40.0f}), 0.2)));
4747

4848
ITranslatorStrategy retinaToWorkspaceTranslatorStrategy = new NearIntersectionStrategy();
4949

src/main/java/ptrman/bindingNars/NarsBinding.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public void emitRetinaPrimitives(Iterable<RetinaPrimitive> primitives) {
2929
int bx = (int)iPrimitive.line.b.getDataRef()[0];
3030
int by = (int)iPrimitive.line.b.getDataRef()[1];
3131

32-
consumer.emitLineSegment(String.valueOf(primnitiveIdCntr), ax,ay,bx,by, iPrimitive.conf);
32+
consumer.emitLineSegment(String.valueOf(primnitiveIdCntr), ax,ay,bx,by, iPrimitive.retConf());
3333
primnitiveIdCntr++;
3434
}
3535
}

src/main/java/ptrman/levels/retina/ProcessD.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -562,7 +562,7 @@ private static List<RetinaPrimitive> clusterPointsFromLinedetectorToLinedetector
562562
lastAxisPosition = Helper.getAxis(iterationPoint, axis);
563563
} else {
564564
// form a new line
565-
RetinaPrimitive newPrimitive = RetinaPrimitive.makeLine(SingleLineDetector.createFromFloatPositions(lineStartPosition, iterationPoint));
565+
RetinaPrimitive newPrimitive = RetinaPrimitive.makeLine(SingleLineDetector.createFromFloatPositions(lineStartPosition, iterationPoint, conf));
566566
newPrimitive.objectId = objectId;
567567
resultSingleLineDetectors.add(newPrimitive);
568568

@@ -574,9 +574,8 @@ private static List<RetinaPrimitive> clusterPointsFromLinedetectorToLinedetector
574574
ArrayRealVector lastPoint = pointPositions.get(pointPositions.size() - 1);
575575

576576
if (!nextIsNewLineStart && Helper.getAxis(lastPoint, axis) - lastAxisPosition < HardParameters.ProcessD.LINECLUSTERINGMAXDISTANCE) {
577-
RetinaPrimitive newPrimitive = RetinaPrimitive.makeLine(SingleLineDetector.createFromFloatPositions(lineStartPosition, lastPoint));
577+
RetinaPrimitive newPrimitive = RetinaPrimitive.makeLine(SingleLineDetector.createFromFloatPositions(lineStartPosition, lastPoint, conf));
578578
newPrimitive.objectId = objectId;
579-
newPrimitive.conf = conf;
580579
resultSingleLineDetectors.add(newPrimitive);
581580
}
582581

src/main/java/ptrman/levels/retina/ProcessG.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -213,8 +213,9 @@ private static void recalculateIntersections(Iterable<SingleLineDetector> lineDe
213213
CurveElement endCurveElement = iterationCurve.curveElements.get(iterationCurve.curveElements.size() - 1);
214214

215215
// TODO ASK< maybe we have to search the ending with the minimal x position? >
216-
SingleLineDetector tempBeginCurveTangentLine = SingleLineDetector.createFromFloatPositions(beginCurveElement.calcPosition(0.0f), beginCurveElement.calcPosition(0.0f).add(beginCurveElement.calcTangent(0.0f)));
217-
SingleLineDetector tempEndCurveTangentLine = SingleLineDetector.createFromFloatPositions(endCurveElement.calcPosition(1.0f), endCurveElement.calcPosition(1.0f).add(endCurveElement.calcTangent(1.0f)));
216+
// TODO< compute confidence >
217+
SingleLineDetector tempBeginCurveTangentLine = SingleLineDetector.createFromFloatPositions(beginCurveElement.calcPosition(0.0f), beginCurveElement.calcPosition(0.0f).add(beginCurveElement.calcTangent(0.0f)), 0.0);
218+
SingleLineDetector tempEndCurveTangentLine = SingleLineDetector.createFromFloatPositions(endCurveElement.calcPosition(1.0f), endCurveElement.calcPosition(1.0f).add(endCurveElement.calcTangent(1.0f)), 0.0);
218219

219220
final double curveBeginM = tempBeginCurveTangentLine.getM();
220221
final double curveBeginN = tempBeginCurveTangentLine.getN();

src/main/java/ptrman/levels/retina/ProcessH.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import ptrman.Datastructures.Vector2d;
1818
import ptrman.bpsolver.HardParameters;
1919
import ptrman.levels.retina.helper.ProcessConnector;
20+
import ptrman.math.NalTv;
2021
import ptrman.misc.Assert;
2122

2223
import java.util.Collection;
@@ -137,16 +138,13 @@ public static void combineOfObjectId(Deque<RetinaPrimitive> workingDetectors, fi
137138
if( canDetectorsBeFusedOverlap(detectorLow, detectorHigh) ) {
138139

139140
SingleLineDetector fusedLineDetector = fuseLineDetectorsOverlap(detectorLow, detectorHigh);
140-
141141
addNewLine(workingDetectors, objectId, fusedLineDetector);
142142

143-
144143
fused = true;
145144
}
146145
else if( canDetectorsBeFusedInside(detectorLow, detectorHigh) ) {
147146

148147
SingleLineDetector fusedLineDetector = fuseLineDetectorsInside(detectorLow, detectorHigh);
149-
150148
addNewLine(workingDetectors, objectId, fusedLineDetector);
151149

152150
fused = true;
@@ -259,7 +257,9 @@ private static SingleLineDetector fuseLineDetectorsOverlap(SingleLineDetector de
259257
projectedBEnd = tempEnd;
260258
}
261259

262-
SingleLineDetector fusedLineDetector = SingleLineDetector.createFromFloatPositions(projectedABegin, projectedBEnd);
260+
261+
double conf = NalTv.calcRevConf(detectorA.conf, detectorB.conf);
262+
SingleLineDetector fusedLineDetector = SingleLineDetector.createFromFloatPositions(projectedABegin, projectedBEnd, conf);
263263
fusedLineDetector.resultOfCombination = true;
264264
return fusedLineDetector;
265265
}
@@ -286,13 +286,15 @@ else if( vectorXBetweenInclusive(detectorB.a, detectorB.b, detectorA.a) && vecto
286286
private static SingleLineDetector fuseLineDetectorsInside(SingleLineDetector detectorA, SingleLineDetector detectorB) {
287287
SingleLineDetector fusedLineDetector;
288288

289+
double conf = NalTv.calcRevConf(detectorA.conf, detectorB.conf);
290+
289291
// TODO< vertical special case >
290292

291293
// which case?
292294
if( vectorXBetweenInclusive(detectorA.a, detectorA.b, detectorB.a) && vectorXBetweenInclusive(detectorA.a, detectorA.b, detectorB.b) ) {
293295
// detectorB inside detectorA
294296

295-
fusedLineDetector = SingleLineDetector.createFromFloatPositions(detectorA.a, detectorA.b);
297+
fusedLineDetector = SingleLineDetector.createFromFloatPositions(detectorA.a, detectorA.b, conf);
296298
fusedLineDetector.resultOfCombination = true;
297299
return fusedLineDetector;
298300
}
@@ -301,7 +303,7 @@ private static SingleLineDetector fuseLineDetectorsInside(SingleLineDetector det
301303

302304
// detectorA inside detectorB
303305

304-
fusedLineDetector = SingleLineDetector.createFromFloatPositions(detectorB.a, detectorB.b);
306+
fusedLineDetector = SingleLineDetector.createFromFloatPositions(detectorB.a, detectorB.b, conf);
305307
fusedLineDetector.resultOfCombination = true;
306308
return fusedLineDetector;
307309
}

src/main/java/ptrman/levels/retina/RetinaPrimitive.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,14 +54,16 @@ public enum EnumType {
5454

5555
public int objectId = -1;
5656

57-
public double conf = 0.0; // NAL confidence
58-
5957
public boolean hasValidObjectId() {
6058
return objectId != -1;
6159
}
6260

6361
private RetinaPrimitive() {
6462
}
63+
64+
public double retConf() {
65+
return line.conf;
66+
}
6567

6668
public static RetinaPrimitive makeLine(SingleLineDetector line) {
6769

src/main/java/ptrman/levels/retina/SingleLineDetector.java

Lines changed: 4 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -33,40 +33,19 @@ public class SingleLineDetector {
3333
private ArrayRealVector normalizedDirection;
3434
public final int serial;
3535

36+
public double conf;
37+
3638
private SingleLineDetector() {
3739
this.serial = nextSerial.addAndGet(1);
3840
}
3941

40-
public static SingleLineDetector createFromIntegerPositions(Vector2d<Integer> a, Vector2d<Integer> b) {
41-
42-
SingleLineDetector createdDetector = new SingleLineDetector();
43-
createdDetector.a = new ArrayRealVector(new double[]{(double)a.x, (double)a.y}, false);
44-
createdDetector.b = new ArrayRealVector(new double[]{(double)b.x, (double)b.y}, false);
45-
createdDetector.fullfillABInvariant();
46-
//createdDetector.integratedSampleIndices = integratedSampleIndices;
47-
48-
// calculate m, n
49-
// bug outruling
50-
//createdDetector.m = 0.0f; //(b.y-a.y)/(b.x-a.x);
51-
//createdDetector.n = 0.0f; //a.y - a.y * createdDetector.m;
52-
53-
createdDetector.update();
54-
55-
return createdDetector;
56-
}
57-
58-
public static SingleLineDetector createFromFloatPositions(ArrayRealVector a, ArrayRealVector b) {
42+
public static SingleLineDetector createFromFloatPositions(ArrayRealVector a, ArrayRealVector b, double conf) {
5943

6044
SingleLineDetector createdDetector = new SingleLineDetector();
6145
createdDetector.a = a;
6246
createdDetector.b = b;
47+
createdDetector.conf = conf;
6348
createdDetector.fullfillABInvariant();
64-
//createdDetector.integratedSampleIndices = integratedSampleIndices;
65-
66-
// calculate m, n
67-
// bug outruling
68-
//createdDetector.m = 0.0f; //(b.y-a.y)/(b.x-a.x);
69-
//createdDetector.n = 0.0f; //a.y - a.y * createdDetector.m;
7049

7150
createdDetector.update();
7251

src/test/java/ptrman/levels/retina/SingleLineDetectorTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public class SingleLineDetectorTest {
1515
@Test
1616
public void unittestProjectPoint() {
1717

18-
SingleLineDetector testLine = SingleLineDetector.createFromFloatPositions(new ArrayRealVector(new double[]{1.0f, 2.0f}), new ArrayRealVector(new double[]{2.0f, 3.0f}));
18+
SingleLineDetector testLine = SingleLineDetector.createFromFloatPositions(new ArrayRealVector(new double[]{1.0f, 2.0f}), new ArrayRealVector(new double[]{2.0f, 3.0f}), 0.2);
1919
ArrayRealVector point = new ArrayRealVector(new double[]{2.0f, 1.0f}, false);
2020

2121
ArrayRealVector projectedPoint = testLine.projectPointOntoLine(point);
@@ -29,7 +29,7 @@ public void unittestProjectPoint() {
2929
}
3030

3131

32-
testLine = SingleLineDetector.createFromFloatPositions(new ArrayRealVector(new double[]{1.0f, 2.0f}), new ArrayRealVector(new double[]{2.0f, 2.0f}));
32+
testLine = SingleLineDetector.createFromFloatPositions(new ArrayRealVector(new double[]{1.0f, 2.0f}), new ArrayRealVector(new double[]{2.0f, 2.0f}), 0.2);
3333
point = new ArrayRealVector(new double[]{2.0f, 1.0f});
3434

3535
projectedPoint = testLine.projectPointOntoLine(point);
@@ -42,7 +42,7 @@ public void unittestProjectPoint() {
4242
fail();
4343
}
4444

45-
testLine = SingleLineDetector.createFromFloatPositions(new ArrayRealVector(new double[]{0.0f, 1.0f}), new ArrayRealVector(new double[]{1.0f, 0.0f}));
45+
testLine = SingleLineDetector.createFromFloatPositions(new ArrayRealVector(new double[]{0.0f, 1.0f}), new ArrayRealVector(new double[]{1.0f, 0.0f}), 0.2);
4646
point = new ArrayRealVector(new double[]{2.0f, 1.0f});
4747

4848
projectedPoint = testLine.projectPointOntoLine(point);

0 commit comments

Comments
 (0)