Exemplo n.º 1
0
    def run(self, ips, imgs, para=None):
        edges, nodes = [], []
        ntitles = ['PartID', 'NodeID', 'Degree', 'X', 'Y', 'Z']
        etitles = ['PartID', 'StartID', 'EndID', 'Length', 'Distance']
        k, unit = ips.unit
        comid = 0
        for g in nx.connected_component_subgraphs(ips.data, False):
            for idx in g.nodes():
                o = g.node[idx]['o']
                nodes.append([
                    comid, idx,
                    g.degree(idx),
                    round(o[1] * k, 2),
                    round(o[0] * k, 2),
                    round(o[2])
                ])
            for (s, e) in g.edges():
                eds = g[s][e]
                for i in eds:
                    l = round(eds[i]['weight'] * k, 2)
                    dis = round(
                        np.linalg.norm(g.node[s]['o'] - g.node[e]['o']) * k, 2)
                    edges.append([comid, s, e, l, dis])
            comid += 1

        IPy.table(ips.title + '-nodes', nodes, ntitles)
        IPy.table(ips.title + '-edges', edges, etitles)
Exemplo n.º 2
0
    def run(self, ips, imgs, para=None):
        lab = WindowsManager.get(para['lab']).ips.get_img()
        if lab.dtype != np.uint8 and lab.dtype != np.int16:
            IPy.alert('Label image must be in type 8-bit or 16-bit')
            return
        index = list(range(1, lab.max() + 1))
        titles = ['Max', 'Min', 'Mean', 'Variance', 'Standard', 'Sum']
        key = {
            'Max': 'max',
            'Min': 'min',
            'Mean': 'mean',
            'Variance': 'var',
            'Standard': 'std',
            'Sum': 'sum'
        }
        titles = ['value'] + [i for i in titles if para[key[i]]]

        data = [index]
        img = ips.get_img()
        if img is lab: img = img > 0
        if para['max']: data.append(ndimage.maximum(img, lab, index))
        if para['min']: data.append(ndimage.minimum(img, lab, index))
        if para['mean']: data.append(ndimage.mean(img, lab, index).round(4))
        if para['var']: data.append(ndimage.variance(img, lab, index).round(4))
        if para['std']:
            data.append(ndimage.standard_deviation(img, lab, index).round(4))
        if para['sum']: data.append(ndimage.sum(img, lab, index).round(4))

        data = list(zip(*data))
        IPy.table(ips.title + '-segment', data, titles)
Exemplo n.º 3
0
 def run(self, ips, snap, img, para=None):
     rst = builder.build_graph(img / 127)
     data = []
     for i in rst:
         data.append([len(i[0]), len(i[1])])
     print(data)
     IPy.table('Graph Builder', data, ['nodes', 'arcs'])
Exemplo n.º 4
0
    def run(self, ips, imgs, para=None):
        titles = ['P1', 'P2', 'P3', 'angle']
        k, unit = ips.unit
        graph = ips.data
        datas = []
        for s in graph.nodes():
            o = graph.node[s]['o']
            x = graph[s]
            if len(x) <= 1: continue
            rst = []
            for e in x:
                eds = x[e]
                for ed in eds:
                    l = eds[ed]['pts']
                    if len(l) < 10: continue
                    if norm(l[0] - o) > norm(l[-1] - o): l = l[::-1]
                    p1, p2 = l[0], l[5]
                    rst.append((s, e, p2 - p1))
            if len(rst) < 2: continue
            com = combinations(range(len(rst)), 2)
            for i1, i2 in com:
                v1, v2 = rst[i1][2], rst[i2][2]
                a = np.arccos(np.dot(v1, v2) / norm(v1) / norm(v2))
                datas.append([rst[i1][1], rst[i1][0], rst[i2][1], round(a, 4)])

        print(titles, datas)
        IPy.table(ips.title + '-graph', datas, titles)
Exemplo n.º 5
0
 def report(self, title):
     rst = []
     titles = ['Area', 'OX', 'OY']
     for pg in self.body:
         plg = Polygon(pg)
         area, xy = plg.area, plg.centroid
         rst.append([round(i, 1) for i in [area, xy.x, xy.y]])
     IPy.table(title, rst, titles)
Exemplo n.º 6
0
    def run(self, ips, imgs, para = None):
        titles = ['Max','Min','Mean','Variance','Standard']
        key = {'Max':'max','Min':'min','Mean':'mean','Variance':'var','Standard':'std'}
        titles = [i for i in titles if para[key[i]]]

        if self.para['stack']:
            data = []
            for n in range(ips.get_nslices()):
                data.append(self.count(imgs[n], para))
                self.progress(n, len(imgs))
        else: data = [self.count(ips.img, para)]
        IPy.table(ips.title+'-statistic', data, titles)
Exemplo n.º 7
0
 def run(self, ips, imgs, para=None):
     data = []
     sly, slx = ips.get_rect()
     xs = np.linspace(0, slx.stop - slx.start - 1, para['num']).astype(int)
     for img in imgs:
         img = img[sly, slx]
         ys = np.array([np.where(img[:, i] == 255)[0].max() for i in xs])
         data.append(ys + sly.start)
     xs += slx.start
     ips.mark = Mark(xs, data)
     k, unit = ips.unit
     data = (np.array(data) * k).round(3)
     IPy.table(ips.title + '-pts', data, ['%.3f' % i for i in xs * k])
Exemplo n.º 8
0
 def run(self, ips, imgs, para = None):
     titles = ['PartID', 'Noeds', 'Edges', 'TotalLength', 'Density', 'AveConnect']
     k, unit = ips.unit
     
     gs = nx.connected_component_subgraphs(ips.data, False) if para['parts'] else [ips.data]
     comid, datas = 0, []
     for g in gs:
         sl = 0
         for (s, e) in g.edges():
             sl += sum([i['weight'] for i in g[s][e].values()])
         datas.append([comid, g.number_of_nodes(), g.number_of_edges(), round(sl*k, 2), 
             round(nx.density(g), 2), round(nx.average_node_connectivity(g),2)][1-para['parts']:])
         comid += 1
     print(titles, datas)
     IPy.table(ips.title+'-graph', datas, titles[1-para['parts']:])
Exemplo n.º 9
0
    def run(self, ips, imgs, para=None):
        if not para['slice']: imgs = [ips.get_img()]
        data = []
        for i in range(len(imgs)):
            maxv = imgs[i].max()
            if maxv == 0: continue
            ct = np.histogram(imgs[i], maxv, [1, maxv + 1])[0]
            titles = ['slice', 'value', 'count']
            dt = [[i] * len(ct), list(range(maxv + 1)), ct]
            if not para['slice']:
                titles, dt = titles[1:], dt[1:]
            if self.para['fre']:
                fre = ct / float(ct.sum())
                titles.append('frequence')
                dt.append(fre.round(4))
            dt = list(zip(*dt))
            data.extend(dt)

        IPy.table(ips.title + '-histogram', data, titles)
Exemplo n.º 10
0
 def report(self, title):
     unit = 1 if self.unit is None else self.unit[0]
     rst = [(x * unit, y * unit) for x, y in self.body]
     titles = ['OX', 'OY']
     IPy.table(title, rst, titles)
Exemplo n.º 11
0
 def report(self, title):
     rst = self.body
     titles = ['OX', 'OY']
     IPy.table(title, rst, titles)