public Region<E> rankMax(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]; RankMax<E> dil = new RankMax<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; }