def test_extreme_example(self): # 0, 1, 2, 3 # 4, 5, 6, 7 # 8, 9,10,11 #12,13,14,15 self.label = numpy.array(range(16)).reshape((4,4)) (adj_mat, adj_dic) = selective_search._calc_adjacency_matrix(self.label, 16) assert numpy.array_equal(adj_mat.transpose(), adj_mat) assert set(numpy.flatnonzero(adj_mat[ 0])) == { 0, 1, 4} assert set(numpy.flatnonzero(adj_mat[ 1])) == { 0, 1, 2, 5} assert set(numpy.flatnonzero(adj_mat[ 2])) == { 1, 2, 3, 6} assert set(numpy.flatnonzero(adj_mat[ 3])) == { 2, 3, 7} assert set(numpy.flatnonzero(adj_mat[ 4])) == { 0, 4, 5, 8} assert set(numpy.flatnonzero(adj_mat[ 5])) == { 1, 4, 5, 6, 9} assert set(numpy.flatnonzero(adj_mat[ 6])) == { 2, 5, 6, 7, 10} assert set(numpy.flatnonzero(adj_mat[ 7])) == { 3, 6, 7, 11} assert set(numpy.flatnonzero(adj_mat[ 8])) == { 4, 8, 9, 12} assert set(numpy.flatnonzero(adj_mat[ 9])) == { 5, 8, 9, 10, 13} assert set(numpy.flatnonzero(adj_mat[10])) == { 6, 9, 10, 11, 14} assert set(numpy.flatnonzero(adj_mat[11])) == { 7, 10, 11, 15} assert set(numpy.flatnonzero(adj_mat[12])) == { 8, 12, 13} assert set(numpy.flatnonzero(adj_mat[13])) == { 9, 12, 13, 14} assert set(numpy.flatnonzero(adj_mat[14])) == {10, 13, 14, 15} assert set(numpy.flatnonzero(adj_mat[15])) == {11, 14, 15} for (i, adj_labels) in adj_dic.items(): assert set(numpy.flatnonzero(adj_mat[i])) - {i} == adj_labels
def test_only_1_segment(self): # 0, 0, 0, 0 # 0, 0, 0, 0 # 0, 0, 0, 0 # 0, 0, 0, 0 (adj_mat, adj_dic) = selective_search._calc_adjacency_matrix(self.label, 1) assert type(adj_mat) == numpy.ndarray assert adj_mat.shape == (1, 1) and adj_mat.dtype == bool assert adj_mat[0, 0] == True assert adj_dic[0] == set()
def test_fully_adjacent(self): # 1, 1, 0, 0 # 1, 1, 0, 0 # 1, 1, 0, 0 # 1, 1, 0, 0 self.label[:2, :] = 1 expected_mat = numpy.array([[True, True],\ [True, True]]) (adj_mat, adj_dic) = selective_search._calc_adjacency_matrix(self.label, 2) assert adj_mat.shape == (2, 2) and adj_mat.dtype == bool assert numpy.array_equal(adj_mat, expected_mat) assert adj_dic[0] == {1} assert adj_dic[1] == {0}
def test_edge_case_horizontal(self): # 0, 0, 0, 0 # 0, 0, 0, 0 # 0, 0, 0, 0 # 1, 1, 2, 2 self.label[-1:, :2] = 1 self.label[-1:, 2:] = 2 expected_mat = numpy.array([[True, True, True],\ [True, True, True],\ [True, True, True]]) (adj_mat, adj_dic) = selective_search._calc_adjacency_matrix(self.label, 3) assert numpy.array_equal(expected_mat, adj_mat) assert adj_dic[0] == {1, 2} assert adj_dic[1] == {0, 2} assert adj_dic[2] == {0, 1}
def test_edge_case_vertical(self): # 0, 0, 0, 1 # 0, 0, 0, 1 # 0, 0, 0, 2 # 0, 0, 0, 2 self.label[:2, -1:] = 1 self.label[2:, -1:] = 2 expected_mat = numpy.array([[True, True, True],\ [True, True, True],\ [True, True, True]]) (adj_mat, adj_dic) = selective_search._calc_adjacency_matrix(self.label, 3) assert numpy.array_equal(expected_mat, adj_mat) assert adj_dic[0] == {1, 2} assert adj_dic[1] == {0, 2} assert adj_dic[2] == {0, 1}
def test_partially_adjacent(self): # 0, 0, 1, 1 # 0, 0, 1, 1 # 2, 2, 3, 3 # 2, 2, 3, 3 self.label[:2, :2] = 0 self.label[:2, 2:] = 1 self.label[2:, :2] = 2 self.label[2:, 2:] = 3 expected_mat = numpy.array([[True, True, True, False],\ [True, True, False, True],\ [True, False, True, True],\ [False, True, True, True]]) (adj_mat, adj_dic) = selective_search._calc_adjacency_matrix(self.label, 4) assert numpy.diag(adj_mat).all() assert numpy.array_equal(adj_mat.transpose(), adj_mat) assert numpy.array_equal(adj_mat, expected_mat) assert adj_dic[0] == {1, 2} assert adj_dic[1] == {0, 3} assert adj_dic[2] == {0, 3} assert adj_dic[3] == {1, 2}