def test_luna3d(): image_dir = utils.get_dir_path('analysis', pathfinder.METADATA_PATH) image_dir = image_dir + '/test_luna/' utils.auto_make_dir(image_dir) id2zyxd = utils_lung.read_luna_annotations(pathfinder.LUNA_LABELS_PATH) luna_data_paths = utils_lung.get_patient_data_paths(pathfinder.LUNA_DATA_PATH) luna_data_paths = [p for p in luna_data_paths if '.mhd' in p] # luna_data_paths = [ # pathfinder.LUNA_DATA_PATH + '/1.3.6.1.4.1.14519.5.2.1.6279.6001.287966244644280690737019247886.mhd'] luna_data_paths = [ '/mnt/sda3/data/kaggle-lung/luna_test_patient/1.3.6.1.4.1.14519.5.2.1.6279.6001.943403138251347598519939390311.mhd'] for k, p in enumerate(luna_data_paths): img, origin, pixel_spacing = utils_lung.read_mhd(p) id = os.path.basename(p).replace('.mhd', '') print(id) annotations = id2zyxd[id] img_out, mask, annotations_out = config().data_prep_function(img, pixel_spacing=pixel_spacing, luna_annotations=annotations, luna_origin=origin) mask[mask == 0.] = 0.1 print(annotations_out) for zyxd in annotations_out: plot_slice_3d_2(img_out, mask, 0, id, idx=zyxd) plot_slice_3d_2(img_out, mask, 1, id, idx=zyxd) plot_slice_3d_2(img_out, mask, 2, id, idx=zyxd)
def test_luna_patches_3d(): image_dir = utils.get_dir_path('analysis', pathfinder.METADATA_PATH) image_dir = image_dir + '/test_luna/' utils.auto_make_dir(image_dir) id2zyxd = utils_lung.read_luna_annotations(pathfinder.LUNA_LABELS_PATH) luna_data_paths = utils_lung.get_patient_data_paths(pathfinder.LUNA_DATA_PATH) luna_data_paths = [p for p in luna_data_paths if '.mhd' in p] # pid = '1.3.6.1.4.1.14519.5.2.1.6279.6001.138080888843357047811238713686' # luna_data_paths = [pathfinder.LUNA_DATA_PATH + '/%s.mhd' % pid] for k, p in enumerate(luna_data_paths): img, origin, pixel_spacing = utils_lung.read_mhd(p) # img = data_transforms.hu2normHU(img) id = os.path.basename(p).replace('.mhd', '') print id annotations = id2zyxd[id] print annotations for zyxd in annotations: img_out, mask = config().data_prep_function_train(img, pixel_spacing=pixel_spacing, p_transform=config().p_transform, p_transform_augment=config().p_transform_augment, patch_center=zyxd, luna_annotations=annotations, luna_origin=origin) try: plot_slice_3d_2(img_out, mask, 0, id) plot_slice_3d_2(img_out, mask, 1, id) plot_slice_3d_2(img_out, mask, 2, id) except: pass print '------------------------------------------'
def test_luna3d(): image_dir = utils.get_dir_path('analysis', pathfinder.METADATA_PATH) image_dir = image_dir + '/test_luna/' utils.auto_make_dir(image_dir) id2zyxd = utils_lung.read_luna_annotations(pathfinder.LUNA_LABELS_PATH) luna_data_paths = utils_lung.get_patient_data_paths(pathfinder.LUNA_DATA_PATH) luna_data_paths = [p for p in luna_data_paths if '.mhd' in p] # luna_data_paths = [ # pathfinder.LUNA_DATA_PATH + '/1.3.6.1.4.1.14519.5.2.1.6279.6001.287966244644280690737019247886.mhd'] luna_data_paths = [ '/mnt/sda3/data/kaggle-lung/luna_test_patient/1.3.6.1.4.1.14519.5.2.1.6279.6001.943403138251347598519939390311.mhd'] for k, p in enumerate(luna_data_paths): img, origin, pixel_spacing = utils_lung.read_mhd(p) id = os.path.basename(p).replace('.mhd', '') print id annotations = id2zyxd[id] img_out, mask, annotations_out = config().data_prep_function(img, pixel_spacing=pixel_spacing, luna_annotations=annotations, luna_origin=origin) mask[mask == 0.] = 0.1 print annotations_out for zyxd in annotations_out: plot_slice_3d_2(img_out, mask, 0, id, idx=zyxd) plot_slice_3d_2(img_out, mask, 1, id, idx=zyxd) plot_slice_3d_2(img_out, mask, 2, id, idx=zyxd)
def test_luna3d_2(): image_dir = utils.get_dir_path('analysis', pathfinder.METADATA_PATH) image_dir = image_dir + '/test_luna/' utils.auto_make_dir(image_dir) id2zyxd = utils_lung.read_luna_annotations(pathfinder.LUNA_LABELS_PATH) luna_data_paths = [ '/mnt/sda3/data/kaggle-lung/luna_test_patient/1.3.6.1.4.1.14519.5.2.1.6279.6001.943403138251347598519939390311.mhd'] for k, p in enumerate(luna_data_paths): id = os.path.basename(p).replace('.mhd', '') print id img, origin, pixel_spacing = utils_lung.read_mhd(p) lung_mask = lung_segmentation.segment_HU_scan(img) annotations = id2zyxd[id] x, annotations_tf, tf_matrix, lung_mask_out = data_transforms.transform_scan3d(data=img, pixel_spacing=pixel_spacing, p_transform=p_transform, luna_annotations=annotations, p_transform_augment=None, luna_origin=origin, lung_mask=lung_mask, world_coord_system=True) y = data_transforms.make_3d_mask_from_annotations(img_shape=x.shape, annotations=annotations_tf, shape='sphere') for zyxd in annotations_tf: plot_slice_3d_3(x, lung_mask_out, y, 0, id, idx=zyxd) plot_slice_3d_3(x, lung_mask_out, y, 1, id, idx=zyxd) plot_slice_3d_3(x, lung_mask_out, y, 2, id, idx=zyxd)
def intermediate_valid_predictions(xs, gts, preds, pid, it_valid, n_save=10): path = pathfinder.METADATA_PATH + '/checkpoints/' + pid utils.auto_make_dir(path) pred_id = 0 for batch_x, batch_gt, batch_pred in zip(xs, gts, preds): for x, gt, pred in zip(batch_x, batch_gt, batch_pred): if pred_id >= n_save: break # save pred pred = 255 * pred pred = pred.astype(int) app.save_image(pred[0], path + '/' + str(it_valid) + '_' + str(pred_id) + '_pred.jpg', mode='L') # save ground truth gt = 255 * gt gt = gt.astype(int) app.save_image(gt, path + '/' + str(it_valid) + '_' + str(pred_id) + '_real.jpg', mode='L') # save input data_reverse_tf(x) app.save_image(x, path + '/' + str(it_valid) + '_' + str(pred_id) + '_input.jpg', mode='RGB') pred_id += 1
def test1(): image_dir = utils.get_dir_path('analysis', pathfinder.METADATA_PATH) image_dir = image_dir + '/test_1/' utils.auto_make_dir(image_dir) sys.stdout = logger.Logger(image_dir + '/%s.log' % 'test1_log') sys.stderr = sys.stdout patient_data_paths = utils_lung.get_patient_data_paths( pathfinder.DATA_PATH) print len(patient_data_paths) for k, p in enumerate(patient_data_paths): pid = utils_lung.extract_pid_dir(p) try: sid2data, sid2metadata = utils_lung.get_patient_data(p) sids_sorted = utils_lung.sort_sids_by_position(sid2metadata) sids_sorted_jonas = utils_lung.sort_slices_jonas(sid2metadata) sid2position = utils_lung.slice_location_finder(sid2metadata) try: slice_thickness_pos = np.abs( sid2metadata[sids_sorted[0]]['ImagePositionPatient'][2] - sid2metadata[sids_sorted[1]]['ImagePositionPatient'][2]) except: print 'This patient has no ImagePosition!' slice_thickness_pos = 0. try: slice_thickness_loc = np.abs( sid2metadata[sids_sorted[0]]['SliceLocation'] - sid2metadata[sids_sorted[1]]['SliceLocation']) except: print 'This patient has no SliceLocation!' slice_thickness_loc = 0. jonas_slicethick = [] for i in xrange(len(sids_sorted_jonas) - 1): s = np.abs(sid2position[sids_sorted_jonas[i + 1]] - sid2position[sids_sorted_jonas[i]]) jonas_slicethick.append(s) full_img = np.stack([ data_transforms.ct2normHU(sid2data[sid], sid2metadata[sid]) for sid in sids_sorted ]) del sid2data, sid2metadata print np.min(full_img), np.max(full_img) # spacing = sid2metadata[sids_sorted[0]]['PixelSpacing'] # spacing = [slice_thickness, spacing[0], spacing[1]] # resampled_image, _ = resample(full_img, spacing) plot_2d(full_img, axis=0, pid=pid + 'ax0', img_dir=image_dir) plot_2d(full_img, axis=1, pid=pid + 'ax1', img_dir=image_dir) plot_2d(full_img, axis=2, pid=pid + 'ax2', img_dir=image_dir) print k, pid, full_img.shape, slice_thickness_pos, slice_thickness_loc, set( jonas_slicethick) del full_img except: print 'exception!!!', pid
def test_luna3d(): image_dir = utils.get_dir_path('analysis', pathfinder.METADATA_PATH) image_dir = image_dir + '/test_luna/' utils.auto_make_dir(image_dir) id2zyxd = utils_lung.read_luna_annotations(pathfinder.LUNA_LABELS_PATH) luna_data_paths = [ '/mnt/sda3/data/kaggle-lung/luna_test_patient/1.3.6.1.4.1.14519.5.2.1.6279.6001.877026508860018521147620598474.mhd' ] candidates = utils.load_pkl( '/mnt/sda3/data/kaggle-lung/luna_test_patient/1.3.6.1.4.1.14519.5.2.1.6279.6001.877026508860018521147620598474.pkl' ) candidates = candidates[:4] print(candidates) print('--------------') print(id2zyxd[ '1.3.6.1.4.1.14519.5.2.1.6279.6001.877026508860018521147620598474']) for k, p in enumerate(luna_data_paths): id = os.path.basename(p).replace('.mhd', '') print(id) img, origin, pixel_spacing = utils_lung.read_mhd(p) lung_mask = lung_segmentation.segment_HU_scan_ira(img) print(np.min(lung_mask), np.max(lung_mask)) x, annotations_tf, tf_matrix, lung_mask_out = data_transforms.transform_scan3d( data=img, pixel_spacing=pixel_spacing, p_transform=p_transform, luna_annotations=candidates, p_transform_augment=None, luna_origin=origin, lung_mask=lung_mask, world_coord_system=False) print(np.min(lung_mask_out), np.max(lung_mask_out)) plot_slice_3d_2(x, lung_mask_out, 0, id) plot_slice_3d_2(x, lung_mask_out, 1, id) plot_slice_3d_2(x, lung_mask_out, 2, id) # for zyxd in annotations_tf: # plot_slice_3d_2(x, lung_mask_out, 0, id, idx=zyxd) # plot_slice_3d_2(x, lung_mask_out, 1, id, idx=zyxd) # plot_slice_3d_2(x, lung_mask_out, 2, id, idx=zyxd) for i in range(136, x.shape[1]): plot_slice_3d_2(x, lung_mask_out, 1, str(id) + str(i), idx=np.array([200, i, 200]))
def test1(): image_dir = utils.get_dir_path('analysis', pathfinder.METADATA_PATH) image_dir = image_dir + '/test_1/' utils.auto_make_dir(image_dir) sys.stdout = logger.Logger(image_dir + '/%s.log' % 'test1_log') sys.stderr = sys.stdout patient_data_paths = utils_lung.get_patient_data_paths(pathfinder.DATA_PATH) print len(patient_data_paths) for k, p in enumerate(patient_data_paths): pid = utils_lung.extract_pid_dir(p) try: sid2data, sid2metadata = utils_lung.get_patient_data(p) sids_sorted = utils_lung.sort_sids_by_position(sid2metadata) sids_sorted_jonas = utils_lung.sort_slices_jonas(sid2metadata) sid2position = utils_lung.slice_location_finder(sid2metadata) try: slice_thickness_pos = np.abs(sid2metadata[sids_sorted[0]]['ImagePositionPatient'][2] - sid2metadata[sids_sorted[1]]['ImagePositionPatient'][2]) except: print 'This patient has no ImagePosition!' slice_thickness_pos = 0. try: slice_thickness_loc = np.abs( sid2metadata[sids_sorted[0]]['SliceLocation'] - sid2metadata[sids_sorted[1]]['SliceLocation']) except: print 'This patient has no SliceLocation!' slice_thickness_loc = 0. jonas_slicethick = [] for i in xrange(len(sids_sorted_jonas) - 1): s = np.abs(sid2position[sids_sorted_jonas[i + 1]] - sid2position[sids_sorted_jonas[i]]) jonas_slicethick.append(s) full_img = np.stack([data_transforms.ct2normHU(sid2data[sid], sid2metadata[sid]) for sid in sids_sorted]) del sid2data, sid2metadata print np.min(full_img), np.max(full_img) # spacing = sid2metadata[sids_sorted[0]]['PixelSpacing'] # spacing = [slice_thickness, spacing[0], spacing[1]] # resampled_image, _ = resample(full_img, spacing) plot_2d(full_img, axis=0, pid=pid + 'ax0', img_dir=image_dir) plot_2d(full_img, axis=1, pid=pid + 'ax1', img_dir=image_dir) plot_2d(full_img, axis=2, pid=pid + 'ax2', img_dir=image_dir) print k, pid, full_img.shape, slice_thickness_pos, slice_thickness_loc, set(jonas_slicethick) del full_img except: print 'exception!!!', pid
def test_luna3d(): image_dir = utils.get_dir_path('analysis', pathfinder.METADATA_PATH) image_dir = image_dir + '/test_luna/' utils.auto_make_dir(image_dir) id2zyxd = utils_lung.read_luna_annotations(pathfinder.LUNA_LABELS_PATH) luna_data_paths = [ '/mnt/sda3/data/kaggle-lung/luna_test_patient/1.3.6.1.4.1.14519.5.2.1.6279.6001.877026508860018521147620598474.mhd'] candidates = utils.load_pkl( '/mnt/sda3/data/kaggle-lung/luna_test_patient/1.3.6.1.4.1.14519.5.2.1.6279.6001.877026508860018521147620598474.pkl') candidates = candidates[:4] print candidates print '--------------' print id2zyxd['1.3.6.1.4.1.14519.5.2.1.6279.6001.877026508860018521147620598474'] for k, p in enumerate(luna_data_paths): id = os.path.basename(p).replace('.mhd', '') print id img, origin, pixel_spacing = utils_lung.read_mhd(p) lung_mask = lung_segmentation.segment_HU_scan_ira(img) print np.min(lung_mask), np.max(lung_mask) x, annotations_tf, tf_matrix, lung_mask_out = data_transforms.transform_scan3d(data=img, pixel_spacing=pixel_spacing, p_transform=p_transform, luna_annotations=candidates, p_transform_augment=None, luna_origin=origin, lung_mask=lung_mask, world_coord_system=False) print np.min(lung_mask_out), np.max(lung_mask_out) plot_slice_3d_2(x, lung_mask_out, 0, id) plot_slice_3d_2(x, lung_mask_out, 1, id) plot_slice_3d_2(x, lung_mask_out, 2, id) # for zyxd in annotations_tf: # plot_slice_3d_2(x, lung_mask_out, 0, id, idx=zyxd) # plot_slice_3d_2(x, lung_mask_out, 1, id, idx=zyxd) # plot_slice_3d_2(x, lung_mask_out, 2, id, idx=zyxd) for i in xrange(136, x.shape[1]): plot_slice_3d_2(x, lung_mask_out, 1, str(id) + str(i), idx=np.array([200, i, 200]))
def test_dsb(): image_dir = utils.get_dir_path('analysis', pathfinder.METADATA_PATH) image_dir = image_dir + '/test_1/' utils.auto_make_dir(image_dir) patient_data_paths = utils_lung.get_patient_data_paths(pathfinder.DATA_PATH) print len(patient_data_paths) patient_data_paths = [pathfinder.DATA_PATH + '/01de8323fa065a8963533c4a86f2f6c1'] for k, p in enumerate(patient_data_paths): pid = utils_lung.extract_pid_dir(p) # sid2data, sid2metadata = utils_lung.get_patient_data(p) # sids_sorted = utils_lung.sort_sids_by_position(sid2metadata) # sids_sorted_jonas = utils_lung.sort_slices_jonas(sid2metadata) # sid2position = utils_lung.slice_location_finder(sid2metadata) # # jonas_slicethick = [] # for i in xrange(len(sids_sorted_jonas) - 1): # s = np.abs(sid2position[sids_sorted_jonas[i + 1]] - sid2position[sids_sorted_jonas[i]]) # jonas_slicethick.append(s) # # img = np.stack([data_transforms.ct2HU(sid2data[sid], sid2metadata[sid]) for sid in sids_sorted]) # xx = (jonas_slicethick[0], # sid2metadata[sids_sorted[0]]['PixelSpacing'][0], # sid2metadata[sids_sorted[0]]['PixelSpacing'][1]) # pixel_spacing = np.asarray(xx) img, pixel_spacing = utils_lung.read_dicom_scan(p) mask = lung_segmentation.segment_HU_scan_ira(img) print pid print pixel_spacing print '====================================' img_out, transform_matrix, mask_out = data_transforms.transform_scan3d(img, pixel_spacing=pixel_spacing, p_transform=config().p_transform, p_transform_augment=None, lung_mask=mask) for i in xrange(100, img_out.shape[0], 5): plot_slice_3d_2(img_out, mask_out, 0, str(pid) + str(i), idx=np.array([i, 200, 200])) plot_slice_3d_2(img_out, mask_out, 0, pid, idx=np.array(img_out.shape) / 2) plot_slice_3d_2(mask_out, img_out, 0, pid, idx=np.array(img_out.shape) / 4) plot_slice_3d_2(mask_out, img_out, 0, pid, idx=np.array(img_out.shape) / 8)
def test_dsb(): image_dir = utils.get_dir_path('analysis', pathfinder.METADATA_PATH) image_dir = image_dir + '/test_1/' utils.auto_make_dir(image_dir) patient_data_paths = utils_lung.get_patient_data_paths(pathfinder.DATA_PATH) print(len(patient_data_paths)) patient_data_paths = [pathfinder.DATA_PATH + '/01de8323fa065a8963533c4a86f2f6c1'] for k, p in enumerate(patient_data_paths): pid = utils_lung.extract_pid_dir(p) # sid2data, sid2metadata = utils_lung.get_patient_data(p) # sids_sorted = utils_lung.sort_sids_by_position(sid2metadata) # sids_sorted_jonas = utils_lung.sort_slices_jonas(sid2metadata) # sid2position = utils_lung.slice_location_finder(sid2metadata) # # jonas_slicethick = [] # for i in range(len(sids_sorted_jonas) - 1): # s = np.abs(sid2position[sids_sorted_jonas[i + 1]] - sid2position[sids_sorted_jonas[i]]) # jonas_slicethick.append(s) # # img = np.stack([data_transforms.ct2HU(sid2data[sid], sid2metadata[sid]) for sid in sids_sorted]) # xx = (jonas_slicethick[0], # sid2metadata[sids_sorted[0]]['PixelSpacing'][0], # sid2metadata[sids_sorted[0]]['PixelSpacing'][1]) # pixel_spacing = np.asarray(xx) img, pixel_spacing = utils_lung.read_dicom_scan(p) mask = lung_segmentation.segment_HU_scan_ira(img) print(pid) print(pixel_spacing) print('====================================') img_out, transform_matrix, mask_out = data_transforms.transform_scan3d(img, pixel_spacing=pixel_spacing, p_transform=config().p_transform, p_transform_augment=None, lung_mask=mask) for i in range(100, img_out.shape[0], 5): plot_slice_3d_2(img_out, mask_out, 0, str(pid) + str(i), idx=np.array([i, 200, 200])) plot_slice_3d_2(img_out, mask_out, 0, pid, idx=np.array(img_out.shape) / 2) plot_slice_3d_2(mask_out, img_out, 0, pid, idx=np.array(img_out.shape) / 4) plot_slice_3d_2(mask_out, img_out, 0, pid, idx=np.array(img_out.shape) / 8)
def test1(): image_dir = utils.get_dir_path('analysis', pathfinder.METADATA_PATH) image_dir = image_dir + '/test_luna/' utils.auto_make_dir(image_dir) id2zyxd = utils_lung.read_luna_annotations(pathfinder.LUNA_LABELS_PATH) luna_data_paths = utils_lung.get_patient_data_paths( pathfinder.LUNA_DATA_PATH) luna_data_paths = [p for p in luna_data_paths if '.mhd' in p] print len(luna_data_paths) print id2zyxd.keys() for k, p in enumerate(luna_data_paths): img, origin, pixel_spacing = utils_lung.read_mhd(p) img = data_transforms.hu2normHU(img) id = os.path.basename(p).replace('.mhd', '') for nodule_zyxd in id2zyxd.itervalues(): zyx = np.array(nodule_zyxd[:3]) voxel_coords = utils_lung.world2voxel(zyx, origin, pixel_spacing) diameter_mm = nodule_zyxd[-1] radius_px = diameter_mm / pixel_spacing[1] / 2. roi_radius = (radius_px, radius_px) slice = img[voxel_coords[0], :, :] slice_prev = img[voxel_coords[0] - 1, :, :] slice_next = img[voxel_coords[0] + 1, :, :] roi_center_yx = (voxel_coords[1], voxel_coords[2]) mask = data_transforms.make_2d_mask(slice.shape, roi_center_yx, roi_radius, masked_value=0.1) plot_2d(slice, mask, id, image_dir) plot_2d_4(slice, slice_prev, slice_next, mask, id, image_dir) a = [{'center': roi_center_yx, 'diameter_mm': diameter_mm}] p_transform = { 'patch_size': (256, 256), 'mm_patch_size': (360, 360) } slice_patch, mask_patch = data_transforms.luna_transform_slice( slice, a, pixel_spacing[1:], p_transform, None) plot_2d(slice_patch, mask_patch, id, image_dir)
def test1(): image_dir = utils.get_dir_path('analysis', pathfinder.METADATA_PATH) image_dir = image_dir + '/test_luna/' utils.auto_make_dir(image_dir) # sys.stdout = logger.Logger(image_dir + '/test_luna.log') # sys.stderr = sys.stdout id2zyxd = utils_lung.read_luna_annotations(pathfinder.LUNA_LABELS_PATH) luna_data_paths = utils_lung.get_patient_data_paths( pathfinder.LUNA_DATA_PATH) luna_data_paths = [p for p in luna_data_paths if '.mhd' in p] print len(luna_data_paths) print id2zyxd.keys() for k, p in enumerate(luna_data_paths): img, origin, spacing = utils_lung.read_mhd(p) img = data_transforms.hu2normHU(img) id = os.path.basename(p).replace('.mhd', '') for roi in id2zyxd[id]: zyx = np.array(roi[:3]) voxel_coords = utils_lung.world2voxel(zyx, origin, spacing) print spacing radius_mm = roi[-1] / 2. radius_px = radius_mm / spacing[1] print 'r in pixels =', radius_px # roi_radius = (32.5, 32.5) roi_radius = (radius_px, radius_px) slice = img[voxel_coords[0], :, :] roi_center_yx = (voxel_coords[1], voxel_coords[2]) # print slice.shape, slice_resample.shape mask = make_circular_mask(slice.shape, roi_center_yx, roi_radius) plot_2d(slice, mask, id, image_dir) slice_mm, _ = resample(slice, spacing[1:]) roi_center_mm = tuple( int(r * ps) for r, ps in zip(roi_center_yx, spacing[1:])) mask_mm = make_circular_mask(slice_mm.shape, roi_center_mm, (radius_mm, radius_mm)) plot_2d(slice_mm, mask_mm, id, image_dir)
def test_luna3d(): image_dir = utils.get_dir_path('analysis', pathfinder.METADATA_PATH) image_dir = image_dir + '/test_luna/' utils.auto_make_dir(image_dir) id2zyxd = utils_lung.read_luna_annotations(pathfinder.LUNA_LABELS_PATH) luna_data_paths = [ 'problem_patients/1.3.6.1.4.1.14519.5.2.1.6279.6001.877026508860018521147620598474.mhd' ] candidates = utils.load_pkl( 'problem_patients/1.3.6.1.4.1.14519.5.2.1.6279.6001.877026508860018521147620598474.pkl' ) candidates = candidates[:4] print candidates print '--------------' print id2zyxd[ '1.3.6.1.4.1.14519.5.2.1.6279.6001.877026508860018521147620598474'] for k, p in enumerate(luna_data_paths): id = os.path.basename(p).replace('.mhd', '') print id img, origin, pixel_spacing = utils_lung.read_mhd(p) lung_mask = lung_segmentation.segment_HU_scan_elias(img) x, annotations_tf, tf_matrix, lung_mask_out = data_transforms.transform_scan3d( data=img, pixel_spacing=pixel_spacing, p_transform=p_transform, luna_annotations=candidates, p_transform_augment=None, luna_origin=origin, lung_mask=lung_mask, world_coord_system=False) for zyxd in annotations_tf: plot_slice_3d_2(x, lung_mask_out, 0, id, img_dir='./', idx=zyxd) plot_slice_3d_2(x, lung_mask_out, 1, id, img_dir='./', idx=zyxd) plot_slice_3d_2(x, lung_mask_out, 2, id, img_dir='./', idx=zyxd)
def test1(): image_dir = utils.get_dir_path('analysis', pathfinder.METADATA_PATH) image_dir = image_dir + '/test_luna/' utils.auto_make_dir(image_dir) # sys.stdout = logger.Logger(image_dir + '/test_luna.log') # sys.stderr = sys.stdout id2zyxd = utils_lung.read_luna_annotations(pathfinder.LUNA_LABELS_PATH) luna_data_paths = utils_lung.get_patient_data_paths(pathfinder.LUNA_DATA_PATH) luna_data_paths = [p for p in luna_data_paths if '.mhd' in p] print len(luna_data_paths) print id2zyxd.keys() for k, p in enumerate(luna_data_paths): img, origin, spacing = utils_lung.read_mhd(p) img = data_transforms.hu2normHU(img) id = os.path.basename(p).replace('.mhd', '') for roi in id2zyxd[id]: zyx = np.array(roi[:3]) voxel_coords = utils_lung.world2voxel(zyx, origin, spacing) print spacing radius_mm = roi[-1] / 2. radius_px = radius_mm / spacing[1] print 'r in pixels =', radius_px # roi_radius = (32.5, 32.5) roi_radius = (radius_px, radius_px) slice = img[voxel_coords[0], :, :] roi_center_yx = (voxel_coords[1], voxel_coords[2]) # print slice.shape, slice_resample.shape mask = make_circular_mask(slice.shape, roi_center_yx, roi_radius) plot_2d(slice, mask, id, image_dir) slice_mm, _ = resample(slice, spacing[1:]) roi_center_mm = tuple(int(r * ps) for r, ps in zip(roi_center_yx, spacing[1:])) mask_mm = make_circular_mask(slice_mm.shape, roi_center_mm, (radius_mm, radius_mm)) plot_2d(slice_mm, mask_mm, id, image_dir)
def test1(): image_dir = utils.get_dir_path('analysis', pathfinder.METADATA_PATH) image_dir = image_dir + '/test_luna/' utils.auto_make_dir(image_dir) id2zyxd = utils_lung.read_luna_annotations(pathfinder.LUNA_LABELS_PATH) luna_data_paths = utils_lung.get_patient_data_paths(pathfinder.LUNA_DATA_PATH) luna_data_paths = [p for p in luna_data_paths if '.mhd' in p] print len(luna_data_paths) print id2zyxd.keys() for k, p in enumerate(luna_data_paths): img, origin, pixel_spacing = utils_lung.read_mhd(p) img = data_transforms.hu2normHU(img) id = os.path.basename(p).replace('.mhd', '') for nodule_zyxd in id2zyxd.itervalues(): zyx = np.array(nodule_zyxd[:3]) voxel_coords = utils_lung.world2voxel(zyx, origin, pixel_spacing) diameter_mm = nodule_zyxd[-1] radius_px = diameter_mm / pixel_spacing[1] / 2. roi_radius = (radius_px, radius_px) slice = img[voxel_coords[0], :, :] slice_prev = img[voxel_coords[0] - 1, :, :] slice_next = img[voxel_coords[0] + 1, :, :] roi_center_yx = (voxel_coords[1], voxel_coords[2]) mask = data_transforms.make_2d_mask(slice.shape, roi_center_yx, roi_radius, masked_value=0.1) plot_2d(slice, mask, id, image_dir) plot_2d_4(slice, slice_prev, slice_next, mask, id, image_dir) a = [{'center': roi_center_yx, 'diameter_mm': diameter_mm}] p_transform = {'patch_size': (256, 256), 'mm_patch_size': (360, 360)} slice_patch, mask_patch = data_transforms.luna_transform_slice(slice, a, pixel_spacing[1:], p_transform, None) plot_2d(slice_patch, mask_patch, id, image_dir)
def test_luna_patches_3d(): image_dir = utils.get_dir_path('analysis', pathfinder.METADATA_PATH) image_dir = image_dir + '/test_luna/' utils.auto_make_dir(image_dir) id2zyxd = utils_lung.read_luna_annotations(pathfinder.LUNA_LABELS_PATH) luna_data_paths = utils_lung.get_patient_data_paths( pathfinder.LUNA_DATA_PATH) luna_data_paths = [p for p in luna_data_paths if '.mhd' in p] # pid = '1.3.6.1.4.1.14519.5.2.1.6279.6001.138080888843357047811238713686' # luna_data_paths = [pathfinder.LUNA_DATA_PATH + '/%s.mhd' % pid] for k, p in enumerate(luna_data_paths): img, origin, pixel_spacing = utils_lung.read_mhd(p) # img = data_transforms.hu2normHU(img) id = os.path.basename(p).replace('.mhd', '') print(id) annotations = id2zyxd[id] print(annotations) for zyxd in annotations: img_out, mask = config().data_prep_function_train( img, pixel_spacing=pixel_spacing, p_transform=config().p_transform, p_transform_augment=config().p_transform_augment, patch_center=zyxd, luna_annotations=annotations, luna_origin=origin) try: plot_slice_3d_2(img_out, mask, 0, id) plot_slice_3d_2(img_out, mask, 1, id) plot_slice_3d_2(img_out, mask, 2, id) except: pass print('------------------------------------------')
def test_luna3d(): image_dir = utils.get_dir_path('analysis', pathfinder.METADATA_PATH) image_dir = image_dir + '/test_luna/' utils.auto_make_dir(image_dir) id2zyxd = utils_lung.read_luna_annotations(pathfinder.LUNA_LABELS_PATH) luna_data_paths = [ 'problem_patients/1.3.6.1.4.1.14519.5.2.1.6279.6001.877026508860018521147620598474.mhd'] candidates = utils.load_pkl( 'problem_patients/1.3.6.1.4.1.14519.5.2.1.6279.6001.877026508860018521147620598474.pkl') candidates = candidates[:4] print candidates print '--------------' print id2zyxd['1.3.6.1.4.1.14519.5.2.1.6279.6001.877026508860018521147620598474'] for k, p in enumerate(luna_data_paths): id = os.path.basename(p).replace('.mhd', '') print id img, origin, pixel_spacing = utils_lung.read_mhd(p) lung_mask = lung_segmentation.segment_HU_scan_elias(img) x, annotations_tf, tf_matrix, lung_mask_out = data_transforms.transform_scan3d(data=img, pixel_spacing=pixel_spacing, p_transform=p_transform, luna_annotations=candidates, p_transform_augment=None, luna_origin=origin, lung_mask=lung_mask, world_coord_system=False) for zyxd in annotations_tf: plot_slice_3d_2(x, lung_mask_out, 0, id, img_dir='./', idx=zyxd) plot_slice_3d_2(x, lung_mask_out, 1, id, img_dir='./', idx=zyxd) plot_slice_3d_2(x, lung_mask_out, 2, id, img_dir='./', idx=zyxd)
# metadata metadata_dir = utils.get_dir_path('models', pathfinder.METADATA_PATH) metadata_path = utils.find_model_metadata(metadata_dir, config_name) metadata = utils.load_pkl(metadata_path) expid = metadata['experiment_id'] # logs logs_dir = utils.get_dir_path('logs', pathfinder.METADATA_PATH) sys.stdout = logger.Logger(logs_dir + '/%s-test.log' % expid) sys.stderr = sys.stdout # predictions path predictions_dir = utils.get_dir_path('model-predictions', pathfinder.METADATA_PATH) outputs_path = predictions_dir + '/' + expid utils.auto_make_dir(outputs_path) print('Build model') model = config().build_model() all_layers = nn.layers.get_all_layers(model.l_out) all_params = nn.layers.get_all_params(model.l_out) num_params = nn.layers.count_params(model.l_out) print(' number of parameters: %d' % num_params) print(string.ljust(' layer output shapes:', 36),) print(string.ljust('#params:', 10),) print('output shape:') for layer in all_layers: name = string.ljust(layer.__class__.__name__, 32) num_param = sum([np.prod(p.get_value().shape) for p in layer.get_params()]) num_param = string.ljust(num_param.__str__(), 10) print(' %s %s %s' % (name, num_param, layer.output_shape))
utils.save_pkl(blobs, outputs_path + '/%s.pkl' % pid) jobs = [] theano.config.warn_float64 = 'raise' if len(sys.argv) < 2: sys.exit("Usage: test_luna_scan.py <configuration_name>") config_name = sys.argv[1] set_configuration('configs_seg_scan', config_name) # predictions path predictions_dir = utils.get_dir_path('model-predictions', pathfinder.METADATA_PATH) outputs_path = predictions_dir + '/%s' % config_name utils.auto_make_dir(outputs_path) # logs logs_dir = utils.get_dir_path('logs', pathfinder.METADATA_PATH) sys.stdout = logger.Logger(logs_dir + '/%s.log' % config_name) sys.stderr = sys.stdout # builds model and sets its parameters model = config().build_model() x_shared = nn.utils.shared_empty(dim=len(model.l_in.shape)) idx_z = T.lscalar('idx_z') idx_y = T.lscalar('idx_y') idx_x = T.lscalar('idx_x') window_size = config().window_size
def test_dsb3d(): image_dir = utils.get_dir_path('analysis', pathfinder.METADATA_PATH) image_dir = image_dir + '/test_luna/' utils.auto_make_dir(image_dir) #id2zyxd = utils_lung.read_luna_annotations(pathfinder.LUNA_LABELS_PATH) # dsb_data_paths = ['problem_patients/154a79706bcecd0402b913d4bee9eed7/', # 'problem_patients/122c5c959fd98036c9972eec2062dc59/', # 'problem_patients/0121c2845f2b7df060945b072b2515d7/', # 'problem_patients/081f4a90f24ac33c14b61b97969b7f81/', # 'problem_patients/0030a160d58723ff36d73f41b170ec21/', # 'problem_patients/19f3b4dea7af5d6e13acb472d6af23d8/', # 'problem_patients/17ffaa3e8b53cc48e97fc6b87114e6dd/', # 'problem_patients/15aa585fb2d3018b295df8619f2d1cf7/', # 'problem_patients/14c534e0b7c3176d9106c6215d0aa8c6/', # 'problem_patients/09b1c678fc1009d84a038cd879be4198/', # 'problem_patients/0f5ab1976a1b1ef1c2eb1d340b0ce9c4/', # 'problem_patients/0c98fcb55e3f36d0c2b6507f62f4c5f1/', # 'problem_patients/0c9d8314f9c69840e25febabb1229fa4/'] # dsb_data_paths = [ 'problem_patients/19f3b4dea7af5d6e13acb472d6af23d8/', # 'problem_patients/081f4a90f24ac33c14b61b97969b7f81/', # 'problem_patients/15aa585fb2d3018b295df8619f2d1cf7/', # 'problem_patients/14c534e0b7c3176d9106c6215d0aa8c6/' # ] # new_dsb_data_paths = [ 'problem_patients/00cba091fa4ad62cc3200a657aeb957e/', # 'problem_patients/01de8323fa065a8963533c4a86f2f6c1/', # 'problem_patients/02801e3bbcc6966cb115a962012c35df/', # 'problem_patients/07abb7bec548d1c0ccef088ce934e517/', # 'problem_patients/07bca4290a2530091ce1d5f200d9d526/', # 'problem_patients/0ff552aa083ecfabaf1cfd65b0a8e674/', # 'problem_patients/11616de262f844e6542d3c65d9238b6e/', # 'problem_patients/11fe5426ef497bc490b9f1465f1fb25/', # 'problem_patients/122c5c959fd98036c9972eec2062dc59/', # 'problem_patients/14afefc82d992018c485949285d20c03/', # 'problem_patients/14c534e0b7c3176d9106c6215d0aa8c6/', # 'problem_patients/154a79706bcecd0402b913d4bee9eed7/', # 'problem_patients/15aa585fb2d3018b295df8619f2d1cf7/', # 'problem_patients/174a9fc87f54d6def3730954fbafc99d/', # 'problem_patients/17f5ae9fa49c4e47624f344d29bd03eb/', # 'problem_patients/17ffaa3e8b53cc48e97fc6b87114e6dd/', # 'problem_patients/197e035d3aed52b5a2a0de3ee4d5fcea/', # 'problem_patients/199ff05d08ade6e298d37cc542bc3565/', # 'problem_patients/19f3b4dea7af5d6e13acb472d6af23d8/', # 'problem_patients/1b7ca8dad5c36feb0a6abf8079173e22/', # 'problem_patients/1edf5480bf676f8342a7d516bab58fa0/', # 'problem_patients/20c73e37fc89e007ae5b242480830860/', # 'problem_patients/21bdacdcdb87bf401f34d5d582247c77/', # ] dsb_data_paths = [ 'problem_patients/51fbac477a3639f983904fc4d42b8c15/' ] # candidates = utils.load_pkl( # 'problem_patients/11616de262f844e6542d3c65d9238b6e.pkl') # candidates = candidates[:4] # print(candidates) # print('--------------') for k, p in enumerate(dsb_data_paths): pid = p.split('/')[-2] print(pid) img, pixel_spacing = utils_lung.read_dicom_scan(p) lung_mask = lung_segmentation.segment_HU_scan_elias(img, pid=pid, plot=True)
def test_dsb3d(): image_dir = utils.get_dir_path('analysis', pathfinder.METADATA_PATH) image_dir = image_dir + '/test_luna/' utils.auto_make_dir(image_dir) #id2zyxd = utils_lung.read_luna_annotations(pathfinder.LUNA_LABELS_PATH) # dsb_data_paths = ['problem_patients/154a79706bcecd0402b913d4bee9eed7/', # 'problem_patients/122c5c959fd98036c9972eec2062dc59/', # 'problem_patients/0121c2845f2b7df060945b072b2515d7/', # 'problem_patients/081f4a90f24ac33c14b61b97969b7f81/', # 'problem_patients/0030a160d58723ff36d73f41b170ec21/', # 'problem_patients/19f3b4dea7af5d6e13acb472d6af23d8/', # 'problem_patients/17ffaa3e8b53cc48e97fc6b87114e6dd/', # 'problem_patients/15aa585fb2d3018b295df8619f2d1cf7/', # 'problem_patients/14c534e0b7c3176d9106c6215d0aa8c6/', # 'problem_patients/09b1c678fc1009d84a038cd879be4198/', # 'problem_patients/0f5ab1976a1b1ef1c2eb1d340b0ce9c4/', # 'problem_patients/0c98fcb55e3f36d0c2b6507f62f4c5f1/', # 'problem_patients/0c9d8314f9c69840e25febabb1229fa4/'] # dsb_data_paths = [ 'problem_patients/19f3b4dea7af5d6e13acb472d6af23d8/', # 'problem_patients/081f4a90f24ac33c14b61b97969b7f81/', # 'problem_patients/15aa585fb2d3018b295df8619f2d1cf7/', # 'problem_patients/14c534e0b7c3176d9106c6215d0aa8c6/' # ] # new_dsb_data_paths = [ 'problem_patients/00cba091fa4ad62cc3200a657aeb957e/', # 'problem_patients/01de8323fa065a8963533c4a86f2f6c1/', # 'problem_patients/02801e3bbcc6966cb115a962012c35df/', # 'problem_patients/07abb7bec548d1c0ccef088ce934e517/', # 'problem_patients/07bca4290a2530091ce1d5f200d9d526/', # 'problem_patients/0ff552aa083ecfabaf1cfd65b0a8e674/', # 'problem_patients/11616de262f844e6542d3c65d9238b6e/', # 'problem_patients/11fe5426ef497bc490b9f1465f1fb25/', # 'problem_patients/122c5c959fd98036c9972eec2062dc59/', # 'problem_patients/14afefc82d992018c485949285d20c03/', # 'problem_patients/14c534e0b7c3176d9106c6215d0aa8c6/', # 'problem_patients/154a79706bcecd0402b913d4bee9eed7/', # 'problem_patients/15aa585fb2d3018b295df8619f2d1cf7/', # 'problem_patients/174a9fc87f54d6def3730954fbafc99d/', # 'problem_patients/17f5ae9fa49c4e47624f344d29bd03eb/', # 'problem_patients/17ffaa3e8b53cc48e97fc6b87114e6dd/', # 'problem_patients/197e035d3aed52b5a2a0de3ee4d5fcea/', # 'problem_patients/199ff05d08ade6e298d37cc542bc3565/', # 'problem_patients/19f3b4dea7af5d6e13acb472d6af23d8/', # 'problem_patients/1b7ca8dad5c36feb0a6abf8079173e22/', # 'problem_patients/1edf5480bf676f8342a7d516bab58fa0/', # 'problem_patients/20c73e37fc89e007ae5b242480830860/', # 'problem_patients/21bdacdcdb87bf401f34d5d582247c77/', # ] dsb_data_paths = [ 'problem_patients/51fbac477a3639f983904fc4d42b8c15/' ] # candidates = utils.load_pkl( # 'problem_patients/11616de262f844e6542d3c65d9238b6e.pkl') # candidates = candidates[:4] # print candidates # print '--------------' for k, p in enumerate(dsb_data_paths): pid = p.split('/')[-2] print pid img, pixel_spacing = utils_lung.read_dicom_scan(p) lung_mask = lung_segmentation.segment_HU_scan_elias(img, pid=pid, plot=True)