def iaseshow(B, option="NORMAL"): from ia870 import iaisbinary, iaintersec, iagray, iabinary from ia870 import iasedil, iaero, iabshow option = upper(option) if option == 'NON-FLAT': y = array([0], int32) if iaisbinary(B): B = iaintersec(iagray(B, 'int32'), 0) elif option == 'NORMAL': if iaisbinary(B): y = iabinary([1]) else: y = array([0], int32) elif option == 'EXPAND': assert iaisbinary(B), 'This option is only available with flat SE' y = iasedil(iabinary([1]), B) b1 = iabinary(y >= 0) b0 = b1 < 0 b0[shape(b0)[0] / 2, shape(b0)[1] / 2] = 1 y = iabshow(b1, y, b0) return y else: print('iaseshow: not a valid flag: NORMAL, EXPAND or NON-FLAT') y = iasedil(y, B) return y
def iaseshow(B, option="NORMAL"): from ia870 import iaisbinary, iaintersec, iagray, iabinary from ia870 import iasedil, iaero, iabshow option = upper(option) if option == "NON-FLAT": y = array([0], int32) if iaisbinary(B): B = iaintersec(iagray(B, "int32"), 0) elif option == "NORMAL": if iaisbinary(B): y = iabinary([1]) else: y = array([0], int32) elif option == "EXPAND": assert iaisbinary(B), "This option is only available with flat SE" y = iasedil(iabinary([1]), B) b1 = iabinary(y >= 0) b0 = b1 < 0 b0[shape(b0)[0] / 2, shape(b0)[1] / 2] = 1 y = iabshow(b1, y, b0) return y else: print "iaseshow: not a valid flag: NORMAL, EXPAND or NON-FLAT" y = iasedil(y, B) return y
def iasedisk(r=3, DIM="2D", METRIC="EUCLIDEAN", FLAT="FLAT", h=0): from ia870 import iabinary, iasecross, iasedil, iasesum from ia870 import iasebox, iaseintersec, iagray METRIC = METRIC.upper() FLAT = FLAT.upper() assert DIM == '2D', 'Supports only 2D structuring elements' if FLAT == 'FLAT': y = iabinary([1]) else: y = int32([h]) if r == 0: return y if METRIC == 'CITY-BLOCK': if FLAT == 'FLAT': b = iasecross(1) else: b = int32([[-2147483647, 0, -2147483647], [0, 1, 0], [-2147483647, 0, -2147483647]]) return iasedil(y, iasesum(b, r)) elif METRIC == 'CHESSBOARD': if FLAT == 'FLAT': b = iasebox(1) else: b = int32([[1, 1, 1], [1, 1, 1], [1, 1, 1]]) return iasedil(y, iasesum(b, r)) elif METRIC == 'OCTAGON': if FLAT == 'FLAT': b1, b2 = iasebox(1), iasecross(1) else: b1 = int32([[1, 1, 1], [1, 1, 1], [1, 1, 1]]) b2 = int32([[-2147483647, 0, -2147483647], [0, 1, 0], [-2147483647, 0, -2147483647]]) if r == 1: return b1 else: return iasedil(iasedil(y, iasesum(b1, r // 2)), iasesum(b2, (r + 1) // 2)) elif METRIC == 'EUCLIDEAN': v = arange(-r, r + 1) x = resize(v, (len(v), len(v))) y = transpose(x) Be = iabinary(sqrt(x * x + y * y) <= (r + 0.5)) if FLAT == 'FLAT': return Be be = h + int32( sqrt(maximum((r + 0.5) * (r + 0.5) - (x * x) - (y * y), 0))) be = iaintersec(iagray(Be, 'int32'), be) return be else: assert 0, 'Non valid metric' return B
def iasesum(B, N=1): from ia870 import iaisbinary, iabinary, iasedil if N==0: if iaisbinary(B): return iabinary([1]) else: return array([0],int32) # identity NB = B for i in range(N-1): NB = iasedil(NB,B) return NB
def iasesum(B, N=1): from ia870 import iaisbinary, iabinary, iasedil if N == 0: if iaisbinary(B): return iabinary([1]) else: return array([0], int32) # identity NB = B for i in range(N - 1): NB = iasedil(NB, B) return NB