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
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
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
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
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
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
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