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)
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)
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'])
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)
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)
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)
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])
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']:])
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)
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)
def report(self, title): rst = self.body titles = ['OX', 'OY'] IPy.table(title, rst, titles)