def iaskelm(f, B=iasecross(), option="binary"): from ia870.iaisbinary import iaisbinary from ia870.ialimits import ialimits from ia870.iagray import iagray from ia870.iaintersec import iaintersec from ia870.iasesum import iasesum from ia870.iaero import iaero from ia870.iaisequal import iaisequal from ia870.iaopenth import iaopenth from ia870.iasedil import iasedil from ia870.iaunion import iaunion from ia870.iabinary import iabinary from ia870.iapad import iapad from ia870.iaunpad import iaunpad assert iaisbinary(f),'Input binary image only' option = option.upper() f = iapad(f,B) print(f) k1,k2 = ialimits(f) y = iagray( iaintersec(f, k1),'uint16') iszero = asarray(y) nb = iasesum(B,0) for r in range(1,65535): ero = iaero( f, nb) if iaisequal(ero, iszero): break f1 = iaopenth( ero, B) nb = iasedil(nb, B) y = iaunion(y, iagray(f1,'uint16',r)) if option == 'BINARY': y = iabinary(y) y = iaunpad(y,B) return y
def iaopentransf(f, type='OCTAGON', n=65535, Bc=iasecross(), Buser=iasecross()): from ia870.iaisbinary import iaisbinary from ia870.iabinary import iabinary from ia870.iaisequal import iaisequal from ia870.iaopen import iaopen from ia870.iasesum import iasesum from ia870.iasedisk import iasedisk from ia870.iaaddm import iaaddm from ia870.iagray import iagray from ia870.iagrain import iagrain from ia870.ialabel import ialabel assert iaisbinary(f),'Error: input image is not binary' type = type.upper() rec_flag = (type).find('-REC') if rec_flag != -1: type = type[:rec_flag] # remove the -rec suffix flag = not ((type == 'OCTAGON') or (type == 'CHESSBOARD') or (type == 'CITY-BLOCK')) if not flag: n = min(n,min(f.shape)) elif type == 'LINEAR-H': se = iabinary([1, 1, 1]) n = min(n,f.shape[1]) elif type =='LINEAR-V': se = iabinary([[1],[1],[1]]) n = min(n,f.shape[0]) elif type == 'LINEAR-45R': se = iabinary([[0, 0, 1],[0, 1, 0],[1, 0, 0]]) n = min(n,min(f.shape)) elif type == 'LINEAR-45L': se = iabinary([[1, 0, 0],[0, 1, 0],[0, 0, 1]]) n = min(n,min(f.shape)) elif type == 'USER': se = Buser n = min(n,min(f.shape)) else: #print('Error: only accepts OCTAGON, CHESSBOARD, CITY-BLOCK, LINEAR-H, LINEAR-V, LINEAR-45R, LINEAR-45L, or USER as type, or with suffix -REC.') print('Error') return [] k = 0 y = uint16(zeros(f.shape)) a = iabinary([1]) z = iabinary([0]) while not ( iaisequal(a,z) or (k>=n)): print('processing r=',k) if flag: a = iaopen(f,iasesum(se,k)) else: a = iaopen(f,iasedisk(k,'2D',type)) y = iaaddm(y, iagray(a,'uint16',1)) k = k+1 if rec_flag != -1: y = iagrain( ialabel(f,Bc),y,'max') return y
def iagdist(f, g, Bc=iasecross(), METRIC=None): from ia870.ianeg import ianeg from ia870.iagray import iagray from ia870.iaintersec import iaintersec from ia870.iaisequal import iaisequal from ia870.iacero import iacero from ia870.iaaddm import iaaddm from ia870.iaunion import iaunion assert METRIC is None, 'Does not support EUCLIDEAN' fneg, gneg = ianeg(f), ianeg(g) y = iagray(gneg, 'uint16', 1) ero = iaintersec(y, 0) aux = y i = 1 while (ero != aux).any(): aux = ero ero = iacero(gneg, fneg, Bc, i) y = iaaddm(y, iagray(ero, 'uint16', 1)) i = i + 1 y = iaunion(y, iagray(ero, 'uint16')) return y
def iatoggle(f, f1, f2, OPTION="GRAY"): from ia870.iabinary import iabinary from ia870.iasubm import iasubm from ia870.iagray import iagray from ia870.iaunion import iaunion from ia870.iaintersec import iaintersec from ia870.ianeg import ianeg y = iabinary(iasubm(f, f1), iasubm(f2, f)) if OPTION.upper() == 'GRAY': t = iagray(y) y = iaunion(iaintersec(ianeg(t), f1), iaintersec(t, f2)) return y
def iainpos(f, g, bc=iasecross()): from ia870.iaisbinary import iaisbinary from ia870.iagray import iagray from ia870.ianeg import ianeg from ia870.iadatatype import iadatatype from ia870.ialimits import ialimits from ia870.iasuprec import iasuprec from ia870.iaintersec import iaintersec from ia870.iaunion import iaunion assert iaisbinary(f), 'First parameter must be binary image' fg = iagray(ianeg(f), iadatatype(g)) k1 = ialimits(g)[1] - 1 y = iasuprec(fg, iaintersec(iaunion(g, 1), k1, fg), bc) return y