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
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
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
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
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)
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)
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
#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))
#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)
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")
# 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)
def process_image(name): image,_,_ = image_read_write.load_itk_image(name) volume = np.sum(image)/np.product(image.shape) return volume
def process_image(name): image, _, _ = image_read_write.load_itk_image(name) volume = np.sum(image) / np.product(image.shape) return volume
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))