예제 #1
0
파일: iathick.py 프로젝트: DiJei/ia870
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
예제 #2
0
파일: iacero.py 프로젝트: DiJei/ia870
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
예제 #3
0
파일: iaskelmrec.py 프로젝트: DiJei/ia870
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
예제 #4
0
파일: iaskelm.py 프로젝트: DiJei/ia870
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
예제 #5
0
파일: iagshow.py 프로젝트: DiJei/ia870
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
예제 #6
0
파일: iainfgen.py 프로젝트: ramosapf/ia870
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
예제 #7
0
파일: iainfcanon.py 프로젝트: DiJei/ia870
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
예제 #8
0
파일: iabshow.py 프로젝트: DiJei/ia870
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
예제 #9
0
파일: iatoggle.py 프로젝트: DiJei/ia870
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
예제 #10
0
파일: iainpos.py 프로젝트: DiJei/ia870
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
예제 #11
0
파일: iacbisector.py 프로젝트: DiJei/ia870
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
예제 #12
0
파일: iacenter.py 프로젝트: DiJei/ia870
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
예제 #13
0
파일: iagdist.py 프로젝트: DiJei/ia870
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
예제 #14
0
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
예제 #15
0
def iasymdif(f1, f2):
    from iaunion import iaunion
    from iasubm import iasubm
    y = iaunion( iasubm(f1,f2),iasubm(f2,f1))
    return y