def iathick(f, Iab=None, n=-1, theta=45, DIRECTION="CLOCKWISE"): from iaisbinary import iaisbinary from iaintersec import iaintersec from iasupgen import iasupgen from iainterot import iainterot from iaunion import iaunion from iaisequal import iaisequal from iahomothick import iahomothick if Iab is None: Iab = iahomothick() DIRECTION = upper(DIRECTION) assert iaisbinary(f),'f must be binary image' if n == -1: n = product(f.shape) y = f zero = iaintersec(f,0) for i in range(n): aux = zero for t in range(0,360,theta): sup = iasupgen( y, iainterot(Iab, t, DIRECTION)) aux = iaunion( aux, sup) y = iaunion( y, sup) if iaisequal(aux,zero): break return y
def iacero(f, g, b=iasecross(), n=1): from iaunion import iaunion from iaero import iaero from iaisequal import iaisequal y = iaunion(f,g) for i in range(n): aux = y y = iaunion( iaero(y,b),g) if iaisequal(y,aux): break return y
def iaskelmrec(f, B=None): from iabinary import iabinary from iaintersec import iaintersec from iadil import iadil from iaunion import iaunion from iasecross import iasecross if B is None: B = iasecross(None) y = iabinary( iaintersec(f, 0)) for r in range(max(ravel(f)),1,-1): y = iadil( iaunion(y,iabinary(f,r)), B) y = iaunion(y, iabinary(f,1)) return y
def iaskelm(f, B=iasecross(), option="binary"): from iaisbinary import iaisbinary from ialimits import ialimits from iagray import iagray from iaintersec import iaintersec from iasesum import iasesum from iaero import iaero from iaisequal import iaisequal from iaopenth import iaopenth from iasedil import iasedil from iaunion import iaunion from iabinary import iabinary from iapad import iapad from iaunpad import iaunpad assert iaisbinary(f),'Input binary image only' option = upper(option) 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 iagshow(X, X1=None, X2=None, X3=None, X4=None, X5=None, X6=None): from iaisbinary import iaisbinary from iagray import iagray from iaunion import iaunion from iaintersec import iaintersec from ianeg import ianeg from iaconcat import iaconcat if iaisbinary(X): X = iagray(X,'uint8') r = X g = X b = X if X1 is not None: # red 1 0 0 assert iaisbinary(X1),'X1 must be binary overlay' x1 = iagray(X1,'uint8') r = iaunion(r,x1) g = iaintersec(g,ianeg(x1)) b = iaintersec(b,ianeg(x1)) if X2 is not None: # green 0 1 0 assert iaisbinary(X2),'X2 must be binary overlay' x2 = iagray(X2,'uint8') r = iaintersec(r,ianeg(x2)) g = iaunion(g,x2) b = iaintersec(b,ianeg(x2)) if X3 is not None: # blue 0 0 1 assert iaisbinary(X3),'X3 must be binary overlay' x3 = iagray(X3,'uint8') r = iaintersec(r,ianeg(x3)) g = iaintersec(g,ianeg(x3)) b = iaunion(b,x3) if X4 is not None: # magenta 1 0 1 assert iaisbinary(X4),'X4 must be binary overlay' x4 = iagray(X4,'uint8') r = iaunion(r,x4) g = iaintersec(g,ianeg(x4)) b = iaunion(b,x4) if X5 is not None: # yellow 1 1 0 assert iaisbinary(X5),'X5 must be binary overlay' x5 = iagray(X5,'uint8') r = iaunion(r,x5) g = iaunion(g,x5) b = iaintersec(b,ianeg(x5)) if X6 is not None: # cyan 0 1 1 assert iaisbinary(X6),'X6 must be binary overlay' x6 = iagray(X6,'uint8') r = iaintersec(r,ianeg(x6)) g = iaunion(g,x6) b = iaunion(b,x6) return iaconcat('d',r,g,b) return Y
def iainfgen(f, Iab): from iaunion import iaunion from iadil import iadil from ianeg import ianeg A, Bc = Iab y = iaunion(iadil(f, A), iadil(ianeg(f), Bc)) return y
def iainfcanon(f, Iab, theta=45, DIRECTION="CLOCKWISE"): from iaunion import iaunion from iainterot import iainterot from iaintersec import iaintersec from iainfgen import iainfgen DIRECTION = upper(DIRECTION) y = iaunion(f,1) for t in range(0,360,theta): Irot = iainterot( Iab, t, DIRECTION ) y = iaintersec( y, iainfgen(f, Irot)) return y
def iabshow(f1, f2=None, f3=None, factor=17): from iabinary import iabinary from iaframe import iaframe from iadil import iadil from iaunion import iaunion from iasedisk import iasedisk from iaserot import iaserot from iasecross import iasecross from iasesum import iasesum assert f1.dtype == bool, 'f1 must be boolean image' factor = max(factor,9) hfactor = factor/2 if size(f1.shape) == 1: f1 = f1[newaxis,:] if f2 != None: f2 = f2[newaxis,:] if f3 != None: f3 = f3[newaxis,:] bz = zeros(factor * array(f1.shape)).astype(bool) b0 = asarray(bz) b0[hfactor::factor,hfactor::factor] = f1 fr1 = iaframe(zeros((factor,factor),bool)) fr1 = iadil(b0,fr1) if f2 != None: assert f1.shape == f2.shape, 'f1 and f2 must have same shape' b1 = asarray(bz) b1[hfactor::factor,hfactor::factor] = f2 fr2 = iadil(b1,iasedisk(hfactor - 4)) fr1 = iaunion(fr1,fr2) if f3 != None: assert f1.shape == f3.shape, 'f1 and f3 must have same shape' bz[hfactor::factor,hfactor::factor] = f3 fr3 = iadil(bz, iasesum(iaserot(iasecross(1),45),hfactor - 1)) fr1 = iaunion(fr1,fr3) return fr1
def iatoggle(f, f1, f2, OPTION="GRAY"): from iabinary import iabinary from iasubm import iasubm from iagray import iagray from iaunion import iaunion from iaintersec import iaintersec from ianeg import ianeg y=iabinary( iasubm(f,f1),iasubm(f2,f)) if upper(OPTION) == 'GRAY': t=iagray(y) y=iaunion( iaintersec( ianeg(t),f1),iaintersec(t,f2)) return y
def iainpos(f, g, bc=iasecross()): from iaisbinary import iaisbinary from iagray import iagray from ianeg import ianeg from iadatatype import iadatatype from ialimits import ialimits from iasuprec import iasuprec from iaintersec import iaintersec from 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
def iacbisector(f, B, n): from iaintersec import iaintersec from iasesum import iasesum from iaero import iaero from iacdil import iacdil from iasubm import iasubm from iaunion import iaunion y = iaintersec(f,0) for i in range(n): nb = iasesum(B,i) nbp = iasesum(B,i+1) f1 = iaero(f,nbp) f2 = iacdil(f1,f,B,n) f3 = iasubm( iaero(f,nb),f2) y = iaunion(y,f3) return y
def iacenter(f, b=None): from iaasf import iaasf from iaunion import iaunion from iaintersec import iaintersec from iaisequal import iaisequal from iasecross import iasecross if b is None: b = iasecross(None) y = f diff = 0 while not diff: aux = y beta1 = iaasf(y,'COC',b,1) beta2 = iaasf(y,'OCO',b,1) y = iaunion( iaintersec(y,beta1),beta2) diff = iaisequal(aux,y) return y
def iagdist(f, g, Bc=iasecross(), METRIC=None): from ianeg import ianeg from iagray import iagray from iaintersec import iaintersec from iaisequal import iaisequal from iacero import iacero from iaaddm import iaaddm from 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 iacthin(f, g, Iab=None, n=-1, theta=45, DIRECTION="CLOCKWISE"): from iaisbinary import iaisbinary from iasupgen import iasupgen from iainterot import iainterot from iaunion import iaunion from iasubm import iasubm from iaisequal import iaisequal from iahomothin import iahomothin if Iab is None: Iab = iahomothin() DIRECTION = upper(DIRECTION) assert iaisbinary(f),'f must be binary image' if n == -1: n = product(f.shape) y = f old = y for i in range(n): for t in range(0,360,theta): sup = iasupgen( y, iainterot(Iab, t, DIRECTION)) y = iaunion( iasubm( y, sup),g) if iaisequal(old,y): break old = y return y
def iasymdif(f1, f2): from iaunion import iaunion from iasubm import iasubm y = iaunion( iasubm(f1,f2),iasubm(f2,f1)) return y