コード例 #1
0
    def data_extract(self):

        list_img = os.listdir(self.input_slide_dir)
        list_obj_mask = os.listdir(self.obj_dir)
        list_obj_Tissue = os.listdir(self.tissue_mask_dir)
        list_img = sorted(list_img, key=natural_key)
        list_obj_mask = sorted(list_obj_mask, key=natural_key)
        list_obj_Tissue = sorted(list_obj_Tissue, key=natural_key)

        voronoi_dir = 'voronoi'

        if os.path.exists(os.path.join(self.output_dir, voronoi_dir)) is False:
            os.makedirs(os.path.join(self.output_dir, voronoi_dir))

        for p1 in range(len(list_img)):
            file_name = list_img[p1]
            img = cv2.imread(os.path.join(self.input_slide_dir, list_img[p1]))
            img_orig = img.copy()

            file1 = os.path.join(self.obj_dir, list_obj_mask[p1])
            file2 = os.path.join(self.tissue_mask_dir, list_obj_Tissue[p1])

            x1 = []
            y1 = []
            points11 = []
            x1, y1 = centroids1(file1)

            for i in range(0, len(x1)):
                points11.append([x1[i], y1[i]])

            points = np.array(points11)

            vor = Voronoi(points)

            regions, vertices = voronoi_finite_polygons_2d(vor)
            cnts_img_t = Contours(file2)
            point_t = []

            for c1 in cnts_img_t:

                point_t.append([c1[0][0], c1[0][1]])
            point_t = np.array(point_t)

            pts = MultiPoint([Point(i) for i in point_t])
            mask = pts.convex_hull
            print("mask=", mask.bounds)

            new_vertices = []
            a = 0
            for region in regions:
                print("a=", a)
                a = a + 1
                polygon = vertices[region]
                shape = list(polygon.shape)
                shape[0] += 1
                p = Polygon(np.append(
                    polygon, polygon[0]).reshape(*shape)).intersection(mask)
                print("p=", p.bounds)
                print("lk=", int(p.length))
                l1 = int(p.length)
                if (l1 > 0):
                    poly = np.array(
                        list(
                            zip(p.boundary.coords.xy[0][:-1],
                                p.boundary.coords.xy[1][:-1])))
                    new_vertices.append(poly)
                    new_vertices.append(poly)

            for p1 in new_vertices:

                pts = np.array(p1, np.int32)
                pts = pts.reshape((-1, 1, 2))

                cv2.polylines(img, [pts], True, (0, 0, 0), 3)
            for p1 in points11:

                cv2.circle(img, (p1[0], p1[1]), 13, (0, 255, 0), cv2.FILLED,
                           cv2.LINE_AA, 0)
                #
            cv2.imwrite(os.path.join(self.output_dir, voronoi_dir, file_name),
                        img)

            new_vert = []
            for i in range(len(new_vertices)):
                new_vert.append(new_vertices[i].tolist())

            write_voronoi_detail(self.output_dir, file_name, new_vert)