@Override public PointList clone() { final PointList p = new PointList(); for (final Point2d point2d : this) { p.points.add(point2d.copy()); } return p; }
public static void main(String[] args) throws IOException { final List<PointList> pointData = loadData(); final PointListConnections plc = loadConnections(); final List<FImage> images = loadImages(); System.out.println(pointData.size()); System.out.println(images.size()); final Float[][] cols = new Float[pointData.get(0).size()][]; for (int i = 0; i < cols.length; i++) cols[i] = RGBColour.randomColour(); for (int j = 0; j < pointData.size(); j++) { final PointList pl = pointData.get(j); final MBFImage img = images.get(j).toRGB(); final List<Line2d> lines = plc.getLines(pl); img.drawLines(lines, 1, RGBColour.RED); for (int i = 0; i < pl.size(); i++) { final Point2d pt = pl.get(i); img.drawPoint(pt, cols[i], 3); } DisplayUtilities.display(img); } } }
public PointList nextCurve(float prop) { Matrix dragonTurn = TransformUtilities.rotationMatrixAboutPoint((-Math.PI/2f)*prop, startOfDragon.getX(), startOfDragon.getY()); PointList newCurve = this.currentCurve.transform(dragonTurn); return newCurve; }
/** * Scale the {@link PointList} about its centre of gravity. Scalefactors * between 0 and 1 shrink the {@link PointList}. * * @param sc * the scale factor */ @Override public void scaleCentroid(float sc) { final Point2d cog = calculateCentroid(); this.translate(-cog.getX(), -cog.getY()); this.scale(sc); this.translate(cog.getX(), cog.getY()); }
/** * {@inheritDoc} * @see org.openimaj.vis.video.VideoBarVisualisation#updateVis(org.openimaj.image.MBFImage) */ @Override public void updateVis( final MBFImage vis ) { final float scalar = vis.getHeight() / this.frameHeight; // Redraw each of the positions. int frame = 0; for( final PointList pos : this.objectPositions ) { final PointList pp = new PointList( pos.points, true ); pp.scale( scalar ); this.drawType.draw( vis, (int)this.getTimePosition( frame ), 0, pp ); frame++; } } }
final Matrix pose = TransformUtilities.translateMatrix(cog.getX(), cog.getY()).times( TransformUtilities.scaleMatrix(facescale, facescale)); shape = asm.getPDM().getMean().transform(pose); tracking[0] = true; final float shapeScale = shape.computeIntrinsicScale(); for (final Point2d pt : shape) { final Line2d normal = connections.calculateNormalLine(pt, shape, scale * shapeScale);
final PointList pl = new PointList(centers); final Polygon hull = pl.calculateConvexHull(); centers.set(skip, temp); final double hullArea = hull.calculateArea();
protected static PointList alignPointsAndAverage(List<PointList> shapes, PointList reference, double referenceScaling, Point2d referenceCog) { ProcrustesAnalysis pa = new ProcrustesAnalysis(reference); for (PointList shape : shapes) { pa.align(shape); } PointList mean = PointList.computeMean(shapes); //normalise translation to reference Point2d cog = mean.calculateCentroid(); Matrix trans = TransformUtilities.translateToPointMatrix(cog, referenceCog); mean.translate((float)trans.get(0,2), (float)trans.get(1,2)); //normalise scaling to reference double scale = ProcrustesAnalysis.computeScale(mean, referenceCog.getX(), referenceCog.getY()); float sf = (float)(scale / referenceScaling); mean.scale(referenceCog, sf); return mean; }
Point2d cog = toAlign.calculateCentroid(); Matrix trans = TransformUtilities.translateToPointMatrix(cog, this.referenceCog); toAlign.translate((float)trans.get(0,2), (float)trans.get(1,2)); toAlign.scale(referenceCog, sf); toAlign.rotate(this.referenceCog, theta);
@Override public void updateModel(FImage image, Point2d point, PointList pointList) { float lineScale = normalLength * pointList.computeIntrinsicScale(); Line2d line = connections.calculateNormalLine(point, pointList, lineScale); model.updateModel(image, line); }
private Matrix buildDataMatrix(List<PointList> data) { final int nData = data.size(); final int nPoints = data.get(0).size(); final Matrix m = new Matrix(nData, nPoints * 2); final double[][] mData = m.getArray(); for (int i = 0; i < nData; i++) { final PointList pts = data.get(i); for (int j = 0, k = 0; k < nPoints; j += 2, k++) { final Point2d pt = pts.points.get(k); mData[i][j] = pt.getX(); mData[i][j + 1] = pt.getY(); } } return m; }
final Matrix pose = TransformUtilities.translateMatrix(cog.getX(), cog.getY()).times( TransformUtilities.scaleMatrix(facescale, facescale)); shape = asm.getPDM().getMean().transform(pose); tracking[0] = true; final float shapeScale = shape.computeIntrinsicScale(); for (final Point2d pt : shape) { final Line2d normal = connections.calculateNormalLine(pt, shape, scale * shapeScale);
/** * Construct the {@link ProcrustesAnalysis} with the given * reference shape. The reference shape is optionally normalised * to a standardised scale and translated to the origin. * * @param reference The reference shape. * @param normalise if true, then the reference is normalised (changing * the reference shape itself). */ public ProcrustesAnalysis(PointList reference, boolean normalise) { this.reference = reference; referenceCog = reference.calculateCentroid(); scaling = computeScale(reference, referenceCog.getX(), referenceCog.getY()); if (normalise) { reference.translate(-referenceCog.getX(), -referenceCog.getY()); reference.scale((float) scaling); referenceCog.setX(0); referenceCog.setY(0); scaling = 1; } }