
344 A Computational Introduction to Digital Image Processing, Second Edition
Python
def disttrans(image,mask):
backmask = np.rot90(np.rot90(mask))
mr,mc = mask.shape
if mr%2 == 0 or mc%2 == 0:
raise ValueError("Error:
Mask must have odd numbers of rows and
columns")
r,c = image.shape
nr = (mr-1)/2
nc = (mc-1)/2
image2 = np.float64(np.pad(image,[nr,nc],mode=’edge’))
image2[np.where(image2==0)]=float(’inf’)
image2[np.where(image2==1)]=0
for i in range(r):
for j in range(c):
image2[i+nr,j+nc] = (image2[i:i+mr,j:j+mc]+mask).
min()
for i in range(r)[::-1]:
for j in range(c)[::-1]:
image2[i+nr,j+nc] = (image2[i:i+mr,j:j+mc]+backmask).min()
return image2[nr:nr+r,nc:nc+c] ...