def bugfix_new(img, coords, rets=False): # Now include the intermediate processing steps where offsets are applied... offsets = _offsets_diamond(img.ndim) coords = (coords[:, np.newaxis, :] + offsets).reshape(-1, img.ndim) # ...skip some more code as "the damage has been done" by the function above hull, vertices, hull_perim_r, hull_perim_c, mask = common_subroutine_2(img.shape,coords,rets) if rets: # Return early (otherwise cannot return the intermediate values) return offsets, coords, hull, vertices, hull_perim_r, hull_perim_c, mask mask[hull_perim_r, hull_perim_c] = True # raises IndexError
def bugfix_draft(img, coords, rets=False): # Now include the intermediate processing steps where offsets are applied... offsets = _offsets_diamond(img.ndim) coords = (coords[:, np.newaxis, :] + offsets).reshape(-1, img.ndim) # But remediate the out-of-bounds indices coords[coords[:,0] == coords[:,0].min()] += [0.5, 0.] coords[coords[:,1] == coords[:,1].min()] += [0., 0.5] coords[coords[:,0] == coords[:,0].max()] -= [0.5, 0.] coords[coords[:,1] == coords[:,1].max()] -= [0., 0.5] # ...skip some more code as "the damage has been done" by the function above hull, vertices, hull_perim_r, hull_perim_c, mask = common_subroutine_2(coords,rets) if rets: # Return early (otherwise cannot return the intermediate values) return offsets, coords, hull, vertices, hull_perim_r, hull_perim_c, mask mask[hull_perim_r, hull_perim_c] = True # raises IndexError
def bug_5ary(img=None, rets=False): "If `rets` is True, return all variables to populate the caller's namespace" if img is None: img = SAMPLE.astype(np.bool) coords = possible_hull(np.ascontiguousarray(img, dtype=np.uint8)) # Now include the intermediate processing steps where offsets are applied... ndim = img.ndim offsets = _offsets_diamond(img.ndim) coords = (coords[:, np.newaxis, :] + offsets).reshape(-1, ndim) # ...skip some more code as "the damage has been done" by the function above # ...then continue with the rest of the func, which didn't error in `nobug_5ary` hull = ConvexHull(coords) vertices = hull.points[hull.vertices] hull_perim_r, hull_perim_c = polygon_perimeter(vertices[:, 0], vertices[:, 1]) mask = np.zeros(img.shape, dtype=np.bool) if rets: # Return early (otherwise cannot return the intermediate values) return img, ndim, offsets, coords, hull, vertices, hull_perim_r, hull_perim_c, mask # This is the line that now raises IndexError mask[hull_perim_r, hull_perim_c] = True
edge_includers.insert(0, dummy_edge) offset_mask = np.invert(edge_includers).T offset_idx = np.argwhere(offset_mask.ravel()).ravel() coords = (coords[:, np.newaxis, :] + offsets).reshape(-1, img.ndim)[offset_idx] return coords SAMPLE = np.array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0], [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0], [1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0], [0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1], [0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1]]) rp = regionprops(SAMPLE)[0] img = SAMPLE.astype(np.bool) coords = _convex_hull.possible_hull(np.ascontiguousarray(img, dtype=np.uint8)) offsets = _offsets_diamond(img.ndim) # Apply bugfix to apply these offsets in a partial (valid/limited) way to the coords coords = apply_partial_offsets(img, coords, offsets) hull = ConvexHull(coords) vertices = hull.points[hull.vertices] hull_perim_r, hull_perim_c = polygon_perimeter(vertices[:, 0], vertices[:, 1]) mask = np.zeros(img.shape, dtype=np.bool) mask[hull_perim_r, hull_perim_c] = True