List of usage examples for org.opencv.imgproc Subdiv2D Subdiv2D
public Subdiv2D()
From source file:de.hu_berlin.informatik.spws2014.ImagePositionLocator.TriangleImagePositionLocator.java
License:Open Source License
/** * Builds ProjectionTriangles from triangulated markers. * Requires OpenCV!//from w w w . j ava 2s . co m */ public void newMarkerAdded(List<Marker> markers) { if (markers.size() < 2) return; if (markers.size() == 2) { //Guess third marker projs = new ArrayList<ProjectionTriangle>(); projs.add(new ProjectionTriangle(markers.get(0), markers.get(1))); } else { Subdiv2D subdiv = new Subdiv2D(); subdiv.initDelaunay(new Rect(0, 0, imageSize.x, imageSize.y)); for (Marker m : markers) System.out.println("-> " + m.realpoint.longitude + " / " + m.realpoint.latitude); for (Marker m : markers) subdiv.insert(new Point(m.imgpoint.x, m.imgpoint.y)); MatOfFloat6 mafloat = new MatOfFloat6(); subdiv.getTriangleList(mafloat); float[] tmparray = mafloat.toArray(); ArrayList<ProjectionTriangle> tmplist = new ArrayList<ProjectionTriangle>(); for (int i = 0; i < tmparray.length; i += 6) { Marker m1 = findMarkerByPoint(markers, tmparray[i], tmparray[i + 1]); Marker m2 = findMarkerByPoint(markers, tmparray[i + 2], tmparray[i + 3]); Marker m3 = findMarkerByPoint(markers, tmparray[i + 4], tmparray[i + 5]); if (m1 != null && m2 != null && m3 != null) tmplist.add(new ProjectionTriangle(m1, m2, m3, settings.getMaxDissimilarityPercent(), settings.getBadTriWeightPenalty(), settings.getMinTriAngleSize())); } for (ProjectionTriangle mainPt : tmplist) { for (ProjectionTriangle subPt : tmplist) { if (mainPt != subPt) mainPt.tryAddToProjGroup(subPt); } } projs = tmplist; } }