Esempio n. 1
0
def iabshow(f1, f2=None, f3=None, factor=17):
    from ia870 import iabinary, iaframe, iadil, iaunion
    from ia870 import iasedisk, iaserot, iasecross, 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 is not 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 is not 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
Esempio n. 2
0
def iagshow(X, X1=None, X2=None, X3=None, X4=None, X5=None, X6=None):
    from ia870 import iaisbinary, iagray, iaunion
    from ia870 import iaintersec, ianeg, 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 np.array([r, g, b])
    return Y
Esempio n. 3
0
def ialabel_rec(f, Bc=iasecross()):
    assert MT.iaisbinary(f), 'Can only label binary image'
    faux = f.copy()
    label = 1
    y = MT.iagray(f, 'uint16', 0)  # zero image (output)
    x = faux.ravel().nonzero()  # get list of unlabeled pixel
    while len(x[0]):
        fmark = np.zeros_like(f)
        fmark.flat[x[0][0]] = 1  # get the first unlabeled pixel
        r = MT.iainfrec(fmark, faux, Bc)  # detects all pixels connected to it
        faux -= r  # remove them from faux
        r = MT.iagray(r, 'uint16', label)  # label them with the value label
        y = MT.iaunion(y, r)  # merge them with the labeled image
        label = label + 1
        x = faux.ravel().nonzero()  # get list of unlabeled pixel
    return y
Esempio n. 4
0
def ialabel_rec(f, Bc=iasecross()):
    assert MT.iaisbinary(f),'Can only label binary image'
    faux=f.copy()
    label = 1
    y = MT.iagray( f,'uint16',0)          # zero image (output)
    x = faux.ravel().nonzero()            # get list of unlabeled pixel
    while len(x[0]):
        fmark = np.zeros_like(f)
        fmark.flat[x[0][0]] = 1           # get the first unlabeled pixel
        r = MT.iainfrec( fmark, faux, Bc) # detects all pixels connected to it
        faux -= r                         # remove them from faux
        r = MT.iagray( r,'uint16',label)  # label them with the value label
        y = MT.iaunion( y, r)             # merge them with the labeled image
        label = label + 1
        x = faux.ravel().nonzero()        # get list of unlabeled pixel
    return y
Esempio n. 5
0
def iaareaopen_eq(f, a, Bc=iasecross()):

    if f.dtype == np.bool:
      fr = MT.ialabel(f,Bc)      # binary area open, use area measurement
      g = MT.iablob(fr,'area')
      y = g >= a
    else:
      y = np.zeros_like(f)
      k1 = f.min()
      k2 = f.max()
      for k in xrange(k1,k2+1):   # gray-scale, use thresholding decomposition
        fk = (f >= k)
        fo = MT.iaareaopen(fk,a,Bc)
        if not fo.any():
          break
        y = MT.iaunion(y, MT.iagray(fo,f.dtype,k))
    return y
Esempio n. 6
0
def iaareaopen_eq(f, a, Bc=iasecross()):

    if f.dtype == np.bool:
        fr = MT.ialabel(f, Bc)  # binary area open, use area measurement
        g = MT.iablob(fr, "area")
        y = g >= a
    else:
        y = np.zeros_like(f)
        k1 = f.min()
        k2 = f.max()
        for k in xrange(k1, k2 + 1):  # gray-scale, use thresholding decomposition
            fk = f >= k
            fo = MT.iaareaopen(fk, a, Bc)
            if not fo.any():
                break
            y = MT.iaunion(y, MT.iagray(fo, f.dtype, k))
    return y
Esempio n. 7
0
def iathin(f, Iab=None, n=-1, theta=45, DIRECTION="CLOCKWISE"):
    import ia870 as MT

    if Iab is None: Iab = MT.iahomothin()

    DIRECTION = upper(DIRECTION)
    assert MT.iaisbinary(f),'f must be binary image'
    if n == -1: n = product(f.shape)
    y = f
    zero = MT.iaintersec(f,0)
    for i in range(n):
        aux = zero
        for t in range(0,360,theta):
            sup = MT.iasupgen( y, MT.iainterot(Iab, t, DIRECTION))
            aux = MT.iaunion( aux, sup)
            #y -= sup
            y = MT.iasubm( y, sup)
        #if iaisequal(aux,zero): break
        if not aux.any(): break
    return y