/** * {@inheritDoc} * * @return */ @Override public K compute(final K in, final K r) { final Cursor<BitType> cur = in.localizingCursor(); ArrayList<Point> points = new ArrayList<Point>(); while (cur.hasNext()) { cur.fwd(); if (cur.get().get()) { points.add(new Point(cur.getIntPosition(m_dimX), cur.getIntPosition(m_dimY))); } } points = quickHull(points); final Polygon poly = new Polygon(); for (final Point p : points) { poly.addPoint(p.x, p.y); } Cursor<BitType> resCur = r.localizingCursor(); if (m_fill) { while (resCur.hasNext()) { resCur.fwd(); if (poly.contains(resCur.getIntPosition(m_dimX), resCur.getIntPosition(m_dimY))) { resCur.get().set(true); } } } else { // m_imgManFalse.compute(in, r); final RandomAccess<BitType> ra = r.randomAccess(); for (int i = 0; i < poly.npoints - 1; i++) { drawLine(ra, poly, i, i + 1, m_dimX, m_dimY); } if (poly.npoints > 0) { drawLine(ra, poly, poly.npoints - 1, 0, m_dimX, m_dimY); } } return r; }