diff --git a/field.py b/field.py index df37c9d..1ae057b 100644 --- a/field.py +++ b/field.py @@ -685,10 +685,12 @@ class BinaryFieldNd: for source_ in np.unique(lab_hi[li]): map_[source_] = 0 else: - sl_lo = tuple(slice(0,1) if ii==axis else slice(None) for ii in range(self._ndim)) - sl_hi = tuple(slice(-1,None) if ii==axis else slice(None) for ii in range(self._ndim)) + sl_lo = tuple(slice(0,1) if ii==axis else slice(None) for ii in range(self._ndim)) + sl_hi = tuple(slice(-1,None) if ii==axis else slice(None) for ii in range(self._ndim)) + sl_pre = tuple(slice(-2,-1) if ii==axis else slice(None) for ii in range(self._ndim)) lab_lo = labels_[sl_lo] lab_hi = labels_[sl_hi] + lab_pre = np.unique(labels_[sl_pre]) # all labels in last (unwrapped) slice # Initialize array to keep track of wrapping wrap_[axis] = np.zeros(nlabels_+1,dtype=bool) # Determine new label and map @@ -703,12 +705,14 @@ class BinaryFieldNd: while target_ != map_[target_]: # map it recursively target_ = map_[target_] map_[source_] = target_ - wrap_[axis][target_] = True + if source_ in lab_pre: # check if source is not a ghost + wrap_[axis][target_] = True # Remove gaps from target mapping idx_,map_ = np.unique(map_,return_index=True,return_inverse=True)[1:3] # Relabel and remove padding labels_ = map_[labels_[sl_pad]] nlabels_ = np.max(map_) + assert nlabels_==len(idx_)-1, "DEBUG assertion" for axis in range(self._ndim): if wrap_[axis] is not None: wrap_[axis] = wrap_[axis][idx_]