/** * {@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++; } } }
/** * 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()); }
toAlign.scale(referenceCog, sf);
/** * 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; } }
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; }