Пример #1
0
    def get_rag():
        g = hg.get_4_adjacency_graph((4, 4))
        vertex_labels = np.asarray(
            (1, 1, 5, 5, 1, 1, 5, 5, 1, 1, 3, 3, 1, 1, 10, 10))

        return hg.make_region_adjacency_graph_from_labelisation(
            g, vertex_labels)
Пример #2
0
 def test_vertex_perimeter_rag(self):
     g = hg.get_4_adjacency_graph((2, 3))
     vertex_labels = np.asarray(((1, 2, 2), (3, 3, 3)))
     rag = hg.make_region_adjacency_graph_from_labelisation(
         g, vertex_labels)
     ref = np.asarray((2, 3, 3))
     res = hg.attribute_vertex_perimeter(rag)
     self.assertTrue(np.allclose(ref, res))
Пример #3
0
    def test_contour_length_rag_partition_tree(self):
        g = hg.get_4_adjacency_graph((3, 3))
        vertex_labels = np.asarray(((0, 1, 1), (0, 2, 2), (3, 2, 4)))
        rag = hg.make_region_adjacency_graph_from_labelisation(
            g, vertex_labels)
        edge_weights = np.asarray((1, 5, 4, 3, 6, 2), dtype=np.float64)
        tree, altitudes = hg.bpt_canonical(rag, edge_weights)

        ref_attribute = np.asarray([3, 3, 6, 2, 2, 4, 4, 4, 0],
                                   dtype=np.float64)
        attribute = hg.attribute_contour_length(tree)
        self.assertTrue(np.allclose(ref_attribute, attribute))
Пример #4
0
    def test_saliency(self):
        graph = hg.get_4_adjacency_graph((2, 3))
        edge_weights = np.asarray((1, 0, 2, 1, 1, 1, 2))
        sm = hg.saliency(*hg.bpt_canonical(graph, edge_weights))

        self.assertTrue(np.all(sm == edge_weights))

        labels = np.asarray(((1, 2, 3), (1, 4, 5)))
        rag = hg.make_region_adjacency_graph_from_labelisation(graph, labels)
        rag_edge_weights = np.asarray((1, 2, 1, 1, 1, 2))
        sm = hg.saliency(*hg.bpt_canonical(rag, rag_edge_weights))
        self.assertTrue(np.all(sm == edge_weights))
Пример #5
0
    def test_frontier_length_rag(self):
        g = hg.get_4_adjacency_graph((3, 3))
        vertex_labels = np.asarray(((0, 1, 1),
                                    (0, 2, 2),
                                    (3, 2, 4)))
        rag = hg.make_region_adjacency_graph_from_labelisation(g, vertex_labels)
        edge_weights = np.asarray((1, 5, 4, 3, 6, 2))
        tree, altitudes = hg.bpt_canonical(rag, edge_weights)

        ref_attribute = [0, 0, 0, 0, 0, 1, 2, 1, 4]
        attribute = hg.attribute_frontier_length(tree)
        self.assertTrue(np.allclose(ref_attribute, attribute))
Пример #6
0
    def test_frontier_strength_rag(self):
        g = hg.get_4_adjacency_graph((3, 3))
        vertex_labels = np.asarray(((0, 1, 1),
                                    (0, 2, 2),
                                    (3, 2, 4)))
        rag = hg.make_region_adjacency_graph_from_labelisation(g, vertex_labels)
        rag_edge_weights = np.asarray((1, 5, 4, 3, 6, 2))
        tree, altitudes = hg.bpt_canonical(rag, rag_edge_weights)
        # tree is [5 5 6 7 6 7 8 8 8]
        edge_weights = np.asarray((1, 6, 2, 6, 1, 1, 5, 4, 5, 3, 1, 1), dtype=np.float64)

        ref_attribute = [0, 0, 0, 0, 0, 1, 2, 5, 9 / 4]
        attribute = hg.attribute_frontier_strength(tree, edge_weights)
        self.assertTrue(np.allclose(ref_attribute, attribute))
Пример #7
0
    def test_rag_2d_vertex_perimeter_and_edge_length_simple(self):

        shape = (3, 2)
        g = hg.get_4_adjacency_graph(shape)

        vertex_labels = np.array((1, 2, 3, 3, 4, 4))

        rag = hg.make_region_adjacency_graph_from_labelisation(
            g, vertex_labels)
        vertex_perimeter, edge_length = hg.rag_2d_vertex_perimeter_and_edge_length(
            rag)

        ref_perimeter = (4, 4, 6, 6)
        ref_length = (1, 1, 1, 2)

        self.assertTrue(np.all(vertex_perimeter == ref_perimeter))
        self.assertTrue(np.all(edge_length == ref_length))
Пример #8
0
    def test_align_hierarchies(self):
        g = hg.get_4_adjacency_graph((3, 3))
        fine_labels = np.asarray((0, 1, 2, 3, 4, 2, 3, 4, 2), dtype=np.int32)

        t = hg.Tree(np.asarray((9, 10, 10, 9, 11, 11, 9, 11, 11, 13, 12, 12, 13, 13), dtype=np.int64))
        altitudes = np.asarray((0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2), dtype=np.int32)

        t2 = hg.Tree(np.asarray((4, 3, 3, 4, 4), dtype=np.int64))
        rag = hg.make_region_adjacency_graph_from_labelisation(g, np.asarray((0, 1, 1,
                                                                              0, 2, 2,
                                                                              0, 2, 2)))
        hg.CptHierarchy.link(t2, rag)
        altitudes2 = np.asarray((0, 0, 0, 1, 2), dtype=np.int32)
        sm_coarse = np.asarray((2, 0, 0, 1, 1, 2, 0, 0, 0, 0, 2, 0), dtype=np.int32)

        sm_coarse_rag = np.asarray((2, 1, 2), dtype=np.int32)

        sm_k_ref = np.asarray(((0, 2, 0, 1, 0),
                               (0, 2, 1, 1, 0),
                               (0, 2, 0, 0, 0),
                               (0, 2, 0, 0, 0),
                               (0, 2, 0, 0, 0)), dtype=np.int32)

        # test only one:
        res = hg.align_hierarchies(g, fine_labels, (t, altitudes))
        res_k = hg.graph_4_adjacency_2_khalimsky(g, res, (3, 3))
        self.assertTrue(np.all(res_k == sm_k_ref))

        res = hg.align_hierarchies(g, fine_labels, (t2, altitudes2))
        res_k = hg.graph_4_adjacency_2_khalimsky(g, res, (3, 3))
        self.assertTrue(np.all(res_k == sm_k_ref))

        res = hg.align_hierarchies(g, fine_labels, (g, sm_coarse))
        res_k = hg.graph_4_adjacency_2_khalimsky(g, res, (3, 3))
        self.assertTrue(np.all(res_k == sm_k_ref))

        res = hg.align_hierarchies(g, fine_labels, (rag, sm_coarse_rag))
        res_k = hg.graph_4_adjacency_2_khalimsky(g, res, (3, 3))
        self.assertTrue(np.all(res_k == sm_k_ref))

        # test several
        res_all = hg.align_hierarchies(g, fine_labels,
                                       ((t2, altitudes2), (g, sm_coarse), (t, altitudes), (rag, sm_coarse_rag)))
        for res in res_all:
            res_k = hg.graph_4_adjacency_2_khalimsky(g, res, (3, 3))
            self.assertTrue(np.all(res_k == sm_k_ref))
Пример #9
0
    def test_contour_strength_rag_partition_tree(self):
        g = hg.get_4_adjacency_graph((3, 3))
        vertex_labels = np.asarray(((0, 1, 1), (0, 2, 2), (3, 2, 4)))

        base_edge_weights = np.arange(g.num_edges(), dtype=np.float64)

        rag = hg.make_region_adjacency_graph_from_labelisation(
            g, vertex_labels)
        edge_weights = np.asarray((1, 5, 4, 3, 6, 2))
        tree, altitudes = hg.bpt_canonical(rag, edge_weights)

        attribute = hg.attribute_contour_strength(tree, base_edge_weights)

        ref_perimeter = np.asarray([3, 3, 6, 2, 2, 4, 4, 4, 1],
                                   dtype=np.float64)
        ref_weights = np.asarray([11, 7, 42, 16, 20, 18, 22, 22, 0],
                                 dtype=np.float64)

        self.assertTrue(np.allclose(ref_weights / ref_perimeter, attribute))
Пример #10
0
    def test_filter_small_node_from_tree_on_rag(self):
        g = hg.get_4_adjacency_graph((2, 8))
        labels = np.asarray(((0, 1, 2, 3, 4, 5, 6, 7),
                             (0, 1, 2, 3, 4, 5, 6, 7)))

        rag = hg.make_region_adjacency_graph_from_labelisation(g, labels)
        edge_weights = np.asarray((0, 2, 0, 0, 1, 0, 0))

        tree, altitudes = hg.quasi_flat_zone_hierarchy(rag, edge_weights)

        res_tree, res_altitudes = hg.filter_small_nodes_from_tree(tree, altitudes, 5)

        sm = hg.saliency(res_tree, res_altitudes, handle_rag=False)
        sm_ref = np.asarray((0, 0, 0, 0, 1, 0, 0))
        self.assertTrue(np.all(sm == sm_ref))

        sm = hg.saliency(res_tree, res_altitudes, handle_rag=True)
        sm_ref = np.asarray((0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0))
        self.assertTrue(np.all(sm == sm_ref))
Пример #11
0
    def test_horizontal_cut_nodes_rag_delinearization(self):
        g = hg.get_4_adjacency_graph((2, 2))
        labels = np.array((0, 0, 1, 2))
        rag = hg.make_region_adjacency_graph_from_labelisation(g, labels)
        tree = hg.Tree((3, 3, 4, 4, 4))
        hg.CptHierarchy.link(tree, rag)
        altitudes = np.asarray((0, 0, 0, 1, 2))

        hch = hg.HorizontalCutExplorer(tree, altitudes)

        c = hch.horizontal_cut_from_num_regions(2)

        lbls = c.labelisation_leaves(tree)
        self.assertTrue(np.all(lbls.shape == (2, 2)))
        ref_lbls = np.array((0, 0, 0, 1))
        self.assertTrue(hg.is_in_bijection(lbls[:], ref_lbls))

        vweights = c.reconstruct_leaf_data(tree, altitudes)
        ref_vweights = np.array(((1, 1), (1, 0)))
        self.assertTrue(np.all(vweights == ref_vweights))