Exemplo n.º 1
0
def process_image(name, do_closing, closing_structure):
    image_train, _, _ = image_read_write.load_itk_image(name)
    name = name.replace("mask", "truth")
    image_truth, _, _ = image_read_write.load_itk_image(name)
    truth = np.zeros(image_truth.shape, dtype=np.uint8)
    truth[image_truth > 0] = 1
    if do_closing:
        image_train = binary_closing(image_train, closing_structure, 1)

    image_train = binary_closing(image_train,
                                 [[[1]], [[1]], [[1]], [[1]], [[1]]], 1)

    score = calculate_dice(image_train, truth, name)

    return score
Exemplo n.º 2
0
def candidates_to_image(cands, radius):
    image_names = []
    for subset in xrange(0, 10):
        subset_names = glob.glob("../data/subset{0}/*.mhd".format(subset))
        names = [os.path.split(x)[1].replace('.mhd', '') for x in subset_names]
        image_names.append(names)
    previous_candidate = ""
    images = []
    image = []
    origin = []
    spacing = []
    number = 0
    for candidate in tqdm(cands.values):
        if candidate[0] != previous_candidate:
            number = 0
            previous_candidate = candidate[0]
            for image_subset in xrange(0, 10):
                if candidate[0] in image_names[image_subset]:
                    image, origin, spacing = load_itk_image(
                        "../data/subset{0}/{1}.mhd".format(
                            image_subset, candidate[0]))
                    break
        coords = world_2_voxel([candidate[3], candidate[2], candidate[1]],
                               origin, spacing)
        im = image_part_from_candidate(image, coords, radius)
        #images.append(im)
        if candidate[4]:
            label = "true"
        else:
            label = "false"
        scipy.misc.imsave(
            '../data/samples/{0}_{1}_{2}.jpg'.format(candidate[0], number,
                                                     label), im)
        number += 1
    return images
Exemplo n.º 3
0
def candidates_to_image(cands,radius):
    image_names = []
    for subset in xrange(0,10):
        subset_names = glob.glob("../data/subset{0}/*.mhd".format(subset))
        names = [os.path.split(x)[1].replace('.mhd','') for x in subset_names]
        image_names.append(names)
    previous_candidate = ""
    images = []
    image = []
    origin = []
    spacing = []
    number = 0
    for candidate in tqdm(cands.values):
        if candidate[0] != previous_candidate:
            number = 0
            previous_candidate = candidate[0]
            for image_subset in xrange(0,10):
                if candidate[0] in image_names[image_subset]:
                    image,origin,spacing = load_itk_image("../data/subset{0}/{1}.mhd".format(image_subset,candidate[0]))
                    break
        coords = world_2_voxel([candidate[3],candidate[2],candidate[1]],origin,spacing)
        im = image_part_from_candidate(image,coords,radius)
        #images.append(im)
        if candidate[4]:
            label = "true"
        else:
            label = "false"
        scipy.misc.imsave('../data/samples/{0}_{1}_{2}.jpg'.format(candidate[0],number,label), im)
        number += 1
    return images
Exemplo n.º 4
0
def load_data(image_names):
    print "loading images"
    images = []
    origins= []
    spacings = []
    for image in image_names:
        i,o,s = image_read_write.load_itk_image(image)
        images.append(i)
        origins.append(o)
        spacings.append(s)
    print "done"
    return images,origins,spacings
Exemplo n.º 5
0
def process_failure(name):
    name = name.replace("mask","truth")
    name2 = name.replace("truth","")
    image,_,_ = image_read_write.load_itk_image(name2)
    #image_cropped = image[:,120:420,60:460]
    image_mask = np.zeros(image.shape)
    center = 256
    cc,rr = circle(center+20,center,160)
    image_mask[:,cc,rr] = 1
    image[image>threshold]=0
    image[image!=0]=1
    image = image*image_mask
    #image_cropped[image_cropped>threshold]=0
    #image_cropped[image_cropped!=0]=1

    kernel20 = np.zeros((15,15))
    cc,rr = circle(7,7,8)
    kernel20[cc,rr]=1
    image = binary_closing(image, [kernel20],1)
    #image[:,:,:]=0
    #image[:,120:420,60:460]=image_cropped
    truth,_,_ = image_read_write.load_itk_image(name)
    print evaluator.calculate_dice(image,truth,name)
    image = np.array(image,dtype=np.int8)
Exemplo n.º 6
0
def process_failure(name):
    name = name.replace("mask", "truth")
    name2 = name.replace("truth", "")
    image, _, _ = image_read_write.load_itk_image(name2)
    #image_cropped = image[:,120:420,60:460]
    image_mask = np.zeros(image.shape)
    center = 256
    cc, rr = circle(center + 20, center, 160)
    image_mask[:, cc, rr] = 1
    image[image > threshold] = 0
    image[image != 0] = 1
    image = image * image_mask
    #image_cropped[image_cropped>threshold]=0
    #image_cropped[image_cropped!=0]=1

    kernel20 = np.zeros((15, 15))
    cc, rr = circle(7, 7, 8)
    kernel20[cc, rr] = 1
    image = binary_closing(image, [kernel20], 1)
    #image[:,:,:]=0
    #image[:,120:420,60:460]=image_cropped
    truth, _, _ = image_read_write.load_itk_image(name)
    print evaluator.calculate_dice(image, truth, name)
    image = np.array(image, dtype=np.int8)
Exemplo n.º 7
0
def remove_pipeline(data_per_slice, imagename):
    # print 'reading for ' + imagename
    if DO_OUTSIDE_LUNG_REMOVAL:
        lungmasklocation = MHDLOCATIONS + imagename + '.mhd'
        numpyImage, numpyOrigin, numpySpacing = image_read_write.load_itk_image(
            lungmasklocation)
        to_remove = []
        for coords in data_per_slice:
            voxel = ca.world_2_voxel(coords[::-1], numpyOrigin, numpySpacing)
            if ((numpyImage[voxel[0]][voxel[1]][voxel[2]] != 4)
                    and (numpyImage[voxel[0]][voxel[1]][voxel[2]] != 3)):
                to_remove.append(coords)
        for coords in to_remove:
            data_per_slice.remove(coords)
    return data_per_slice
Exemplo n.º 8
0
        #print np.linalg.norm(image_coord-coords)

        for x in xrange(-diameter,diameter):
            for y in xrange(-diameter,diameter):
                for z in xrange(-diameter,diameter):
                    coords = candidates.world_2_voxel(np.array((coord_x+x,coord_y+y,coord_z+z)),origin,spacing)
                    if np.linalg.norm(image_coord-coords) < diameter:
                        image_mask[coords[0],coords[1],coords[2]] = 1

    print np.sum(image_mask)
    # for i in xrange(0,300):
    #     if np.sum(image_mask[i,:,:])>5:
    #         plt.imshow(image_mask[150,:,:])
    #         plt.show()
    #         break
    return image_mask
    #image_read_write.save_itk(image_mask,"../data/circle_sample.mhd")

if __name__ == "__main__":
    for i in xrange(0,2):
        cads = candidates.load_candidates("/data/annotations.csv")
        #index = 2
        image_names = glob.glob("../data/subset{}/*.mhd".format(i))
        for image_name in image_names:
            image,origin,spacing = image_read_write.load_itk_image(image_name)
            name = os.path.split(image_name)[1].replace('.mhd','')
            image_cads = cads[cads['seriesuid'] == name]
            print name
            image_mask=draw_circles(image,image_cads,origin,spacing)
            create_lung_segmented_same_spacing_data.save_itk(image_mask,origin,spacing,"../data/annotation_masks/subset{}/{}.mhd".format(i,name))
Exemplo n.º 9
0
    #coords = blob.blob_image('../data/hoi.mhd')
    #with open('../data/hoi_coords.pkl','w') as f:
    #    pickle.dump(coords, f)
    with open('../data/hoi_coords.pkl','r') as f:
        candidates = pickle.load(f)

    coords = []
    #coords = [y for y in [x for x in candidates]]

    #slice, blob, xyz

    for slice in candidates:
        #print slice
        for blob in slice:
            coords.append(blob)
    #print coords

    image, origin, spacing = load_itk_image('../data/hoi.mhd')

    world_coords = np.array([voxel_2_world(y,origin,spacing) for y in coords])

    #print world_coords


    candidates = coords_to_candidates(world_coords, '1.3.6.1.4.1.14519.5.2.1.6279.6001.105756658031515062000744821260')
    print len(candidates)
    candidates = merge_candidates(candidates)
    print len(candidates)

    save_candidates('../data/hoi_candidates.csv', candidates)
Exemplo n.º 10
0
import numpy as np
import image_read_write
import matplotlib.pyplot as plt

#orientation can be: x,y,z
def show_slice(image,coordinate,orientation):
    if orientation == "x":
        return image[:,coordinate,:]

    elif orientation == "y":
        return image[:,:,coordinate]

    else:
        return image[coordinate,:,:]

if __name__ == "__main__":
    #image,_,_= image_read_write.load_itk_image("../data/subset0/subset0/1.3.6.1.4.1.14519.5.2.1.6279.6001.105756658031515062000744821260.mhd")
    image,_,_= image_read_write.load_itk_image("../data/subset0/hoi.mhd")
    print image.shape
    show_slice(image,150,"z")


Exemplo n.º 11
0
    #    pickle.dump(coords, f)
    with open('../data/hoi_coords.pkl', 'r') as f:
        candidates = pickle.load(f)

    coords = []
    #coords = [y for y in [x for x in candidates]]

    #slice, blob, xyz

    for slice in candidates:
        #print slice
        for blob in slice:
            coords.append(blob)
    #print coords

    image, origin, spacing = load_itk_image('../data/hoi.mhd')

    world_coords = np.array(
        [voxel_2_world(y, origin, spacing) for y in coords])

    #print world_coords

    candidates = coords_to_candidates(
        world_coords,
        '1.3.6.1.4.1.14519.5.2.1.6279.6001.105756658031515062000744821260')
    print len(candidates)
    candidates = merge_candidates(candidates)
    print len(candidates)

    save_candidates('../data/hoi_candidates.csv', candidates)
Exemplo n.º 12
0
def process_image(name):
    image,_,_ = image_read_write.load_itk_image(name)
    volume = np.sum(image)/np.product(image.shape)

    return volume
Exemplo n.º 13
0
def process_image(name):
    image, _, _ = image_read_write.load_itk_image(name)
    volume = np.sum(image) / np.product(image.shape)

    return volume
Exemplo n.º 14
0
                        np.array((coord_x + x, coord_y + y, coord_z + z)),
                        origin, spacing)
                    if np.linalg.norm(image_coord - coords) < diameter:
                        image_mask[coords[0], coords[1], coords[2]] = 1

    print np.sum(image_mask)
    # for i in xrange(0,300):
    #     if np.sum(image_mask[i,:,:])>5:
    #         plt.imshow(image_mask[150,:,:])
    #         plt.show()
    #         break
    return image_mask
    #image_read_write.save_itk(image_mask,"../data/circle_sample.mhd")


if __name__ == "__main__":
    for i in xrange(0, 2):
        cads = candidates.load_candidates("/data/annotations.csv")
        #index = 2
        image_names = glob.glob("../data/subset{}/*.mhd".format(i))
        for image_name in image_names:
            image, origin, spacing = image_read_write.load_itk_image(
                image_name)
            name = os.path.split(image_name)[1].replace('.mhd', '')
            image_cads = cads[cads['seriesuid'] == name]
            print name
            image_mask = draw_circles(image, image_cads, origin, spacing)
            create_lung_segmented_same_spacing_data.save_itk(
                image_mask, origin, spacing,
                "../data/annotation_masks/subset{}/{}.mhd".format(i, name))