def get_edgemask(a, edge_env=False, convex=False, dilate=False):
a = checkma(a)
#Need to deal with RGB images here
#Need to be careful, probably want to take minimum value from masks
if a.ndim == 3:
#Assume that the same mask applies to each band
#Only create edges for one band
b = a[:,:,0]
#Could convert to HSL and do edges for L channel
#b = a[:,:,0].mask + a[:,:,1].mask + a[:,:,2].mask
else:
b = a
#Get pixel locations of edges
edges0, edges1, edges = get_edges(b, convex)
#Compute min/max indices
#minrow, maxrow, mincol, maxcol
#edge_bbox = [edges0[0][0].min(), edges0[1][0].max() + 1, edges0[0][1].min(), edges0[1][1].max() + 1]
edge_bbox = [edges[0].min(), edges[0].max() + 1, edges[1].min(), edges[1].max() + 1]
#Initialize new mask arrays
#Need both to deal with undercuts
colmask = np.empty_like(b.mask)
colmask[:] = True
rowmask = np.empty_like(b.mask)
rowmask[:] = True
#Loop through each item in the edge list
#i is index, col is the column number listed at index i
#unmask pixels between specified row numbers at index i
for i,col in enumerate(edges0[0][1]):
colmask[edges0[0][0][i]:edges0[1][0][i], col] = False
for j,row in enumerate(edges1[0][0]):
rowmask[row, edges1[0][1][j]:edges1[1][1][j]] = False
#Combine the two masks with or operator
newmask = np.logical_or(colmask, rowmask)
if dilate:
print("Dilating edgemask")
import scipy.ndimage as ndimage
n = 3
#Note: this results in unmasked elements near image corners
#This will erode True values, which correspond to masked elements
#Effect is to expand the unmasked area
#newmask = ndimage.morphology.binary_erosion(newmask, iterations=n)
#Now dilate to return to original size
#newmask = ndimage.morphology.binary_dilation(newmask, iterations=n)
#This is a more logical approach, dilating unmasked areas
newmask = ~ndimage.morphology.binary_dilation(~newmask, iterations=n)
newmask = ~ndimage.morphology.binary_erosion(~newmask, iterations=n)
if edge_env:
return newmask, edge_bbox
else:
return newmask
#This will update the mask to remove interior holes from unmasked region
评论列表
文章目录