public Region<E> rankMin(Region<E> reg) { CubeHistogram<E> ch; try { ch = new CubeHistogram<E>((PixelCube<E, BaseIndex>) reg); int ndim = reg.getNDimensions(); final int[] center = new int[ndim]; RankMin<E> dil = new RankMin<E>((StructureElement<E>) se); dil.initFunction(ch); reg.setIterationPattern(IP_DEFAULT); reg.setIndexing(BASE_INDEXING); reg.setElementFnct(dil); // setLimboDilation(reg, ch); setLimboErosion(reg, ch); Region<E> out = new Region<E>((PixelCube<E, ?>) reg.clone(), (StructureElement<E>) se); out.setIterationPattern(IP_DEFAULT); out.setIndexing(BASE_INDEXING); if (useIter) { ArrayIterator<E> iter = (ArrayIterator<E>) reg.iterator(); ArrayIterator<E> iterout = (ArrayIterator<E>) out.iterator(); while (iter.hasNext() && iterout.hasNext()) { final int idx = iter.index(); // System.out.print(idx+" "); final E elem = reg.elementTransform(idx, center); iter.inc(); if (elem.intValue() == 0) iterout.putInt(0); else iterout.inc(); } } else { Access<E> accessOut = out.getAccess(); final int n = accessOut.size()[0]; for (int i = 0; i < n; i++) { final E elem = reg.elementTransform(i, center); // we return a masking element if (elem.intValue() == 0) { // System.out.print(elem.intValue()+"+"); accessOut.putInt(i, 0); } } } return out; } catch (UnsupportedTypeException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; }
@SuppressWarnings("unchecked") @Override public Region<E> erode(Region<E> reg) { try { CubeHistogram<E> ch = new CubeHistogram<E>((PixelCube<E, BaseIndex>) reg); Erosion<E> er = new Erosion<E>((StructureElement<E>) se); er.initFunction(ch); reg.setIterationPattern(IP_DEFAULT); reg.setIndexing(BASE_INDEXING); reg.setElementFnct(er); setLimboErosion(reg, ch); Region<E> out = new Region<E>((PixelCube<E, ?>) reg.clone(), (StructureElement<E>) se); // out.setIterationPattern(IP_DEFAULT); // out.setIndexing(BASE_INDEXING); final ZonalProcessor zp = reg.getProcessor(); VectorCube<E> ve = reg.getVectorCube(); // System.out.println(ve); BoundaryCondition<int[]> bc = reg.getBoundaryCondition(); // System.out.println(bc); if (useIter) { ArrayIterator<E> iter = (ArrayIterator<E>) reg.iterator(); ArrayIterator<E> iterout = (ArrayIterator<E>) out.iterator(); while (iter.hasNext() && iterout.hasNext()) { int idx = iter.index(); // System.out.print(idx+" "); // final E elem=zp.elementTransform(ve, er, idx); final E elem = zp.elementTransformCond(ve, er, bc, idx); iter.inc(); iterout.put(elem); } } else { Access<E> accessOut = out.getAccess(); final int n = accessOut.size()[0]; for (int idx = 0; idx < n; idx++) { // System.out.print(" i="+i+","); // final E elem=zp.elementTransform(ve, er, idx); final E elem = zp.elementTransformCond(ve, er, bc, idx); accessOut.putE(idx, elem); } } return out; } catch (UnsupportedTypeException e) { e.printStackTrace(); } return null; }