Beispiel #1
0
def edge_decisions(overseg_vol, groundtruth_vol, asdict=True):
    """
    Given an oversegmentation and a reference segmentation,
    return a dict of {(sp1, sp2) : bool} indicating whether or
    not edge (sp1,sp2) is ON in the reference segmentation.

    If asdict=False, return separate ndarrays for edge_ids
    and boolean decisions instead of combined dict.
    """
    sp_edges_per_axis = []
    for axis in range(overseg_vol.ndim):
        edge_mask = edge_mask_for_axis(overseg_vol, axis)
        sp_edges = edge_ids_for_axis(overseg_vol, edge_mask, axis)
        del edge_mask
        sp_edges_per_axis.append(sp_edges)
    unique_sp_edges = unique_edge_labels(sp_edges_per_axis)[["sp1",
                                                             "sp2"]].values

    sp_to_gt_mapping = label_vol_mapping(overseg_vol, groundtruth_vol)
    decisions = sp_to_gt_mapping[unique_sp_edges[0]] != sp_to_gt_mapping[
        unique_sp_edges[1]]

    if asdict:
        return dict(zip(map(tuple, unique_sp_edges), decisions))
    return unique_sp_edges, decisions
Beispiel #2
0
def test_label_vol_mapping():
    # 1 2
    # 3 4    
    vol1 = np.zeros((20,20), dtype=np.uint8)
    vol1[ 0:10,  0:10] = 1
    vol1[ 0:10, 10:20] = 2
    vol1[10:20,  0:10] = 3
    vol1[10:20, 10:20] = 4

    # 2 3
    # 4 5
    vol2 = vol1.copy() + 1
    
    assert (label_vol_mapping(vol1, vol2) == [0,2,3,4,5]).all()
    assert (label_vol_mapping(vol1[3:], vol2[:-3]) == [0,2,3,4,5]).all()
    assert (label_vol_mapping(vol1[6:], vol2[:-6]) == [0,2,3,2,3]).all()
    
    # 7 7
    # 4 5
    vol2[( vol2 == 2 ).nonzero()] = 7
    vol2[( vol2 == 3 ).nonzero()] = 7

    assert (label_vol_mapping(vol1, vol2) == [0,7,7,4,5]).all()
Beispiel #3
0
def edge_decisions( overseg_vol, groundtruth_vol, asdict=True ):
    """
    Given an oversegmentation and a reference segmentation,
    return a dict of {(sp1, sp2) : bool} indicating whether or
    not edge (sp1,sp2) is ON in the reference segmentation.
    
    If asdict=False, return separate ndarrays for edge_ids 
    and boolean decisions instead of combined dict. 
    """
    sp_edges_per_axis = []
    for axis in range(overseg_vol.ndim):
        edge_mask = edge_mask_for_axis(overseg_vol, axis)
        sp_edges = edge_ids_for_axis(overseg_vol, edge_mask, axis)
        del edge_mask
        sp_edges_per_axis.append( sp_edges )
    unique_sp_edges = unique_edge_labels(sp_edges_per_axis)[['sp1', 'sp2']].values

    sp_to_gt_mapping = label_vol_mapping(overseg_vol, groundtruth_vol)
    decisions = sp_to_gt_mapping[unique_sp_edges[0]] != sp_to_gt_mapping[unique_sp_edges[1]]

    if asdict:    
        return dict( izip(imap(tuple, unique_sp_edges), decisions) )
    return unique_sp_edges, decisions
Beispiel #4
0
    return segmentation_img

if __name__ == "__main__":
    # 1 2
    # 3 4    
    vol1 = np.zeros((20,20), dtype=np.uint8)
    vol1[ 0:10,  0:10] = 1
    vol1[ 0:10, 10:20] = 2
    vol1[10:20,  0:10] = 3
    vol1[10:20, 10:20] = 4

    # 2 3
    # 4 5
    vol2 = vol1.copy() + 1
    
    assert (label_vol_mapping(vol1, vol2) == [0,2,3,4,5]).all()
    assert (label_vol_mapping(vol1[3:], vol2[:-3]) == [0,2,3,4,5]).all()
    assert (label_vol_mapping(vol1[6:], vol2[:-6]) == [0,2,3,2,3]).all()
    
    # 7 7
    # 4 5
    vol2[( vol2 == 2 ).nonzero()] = 7
    vol2[( vol2 == 3 ).nonzero()] = 7

    assert (label_vol_mapping(vol1, vol2) == [0,7,7,4,5]).all()
    
    decision_dict = edge_decisions(vol1, vol2, asdict=True)
    
    edge_ids, decisions = edge_decisions(vol1, vol2, asdict=False)
    relabel_volume_from_edge_decisions( vol1, edge_ids, decisions )
    print "DONE"