--- a +++ b/sandbox/test_luna_data.py @@ -0,0 +1,106 @@ +import matplotlib.pyplot as plt +import numpy as np # linear algebra +import pathfinder +import utils +import utils_lung +import os +import data_transforms +import skimage.draw +import scipy +import collections + + +def make_circular_mask(img_shape, roi_center, roi_radii): + mask = np.ones(img_shape) * 0.1 + rr, cc = skimage.draw.ellipse(roi_center[0], roi_center[1], roi_radii[0], roi_radii[1], img_shape) + mask[rr, cc] = 1. + return mask + + +def plot_2d(img, mask, pid, img_dir): + # fig = plt.figure() + fig, ax = plt.subplots(2, 2, figsize=[8, 8]) + fig.canvas.set_window_title(pid) + ax[0, 0].imshow(img, cmap='gray') + ax[0, 1].imshow(mask, cmap='gray') + ax[1, 0].imshow(img * mask, cmap='gray') + plt.show() + fig.savefig(img_dir + '/%s.png' % pid, bbox_inches='tight') + fig.clf() + plt.close('all') + + +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 test2(): + image_dir = utils.get_dir_path('analysis', pathfinder.METADATA_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) + pid2mm_shape = {} + + for k, p in enumerate(luna_data_paths): + img, origin, spacing = utils_lung.read_mhd(p) + id = os.path.basename(p).replace('.mhd', '') + mm_shape = img.shape * spacing + pid2mm_shape[id] = mm_shape + print k, id, mm_shape + if k % 50 == 0: + print 'Saved' + utils.save_pkl(pid2mm_shape, image_dir + '/pid2mm.pkl') + + utils.save_pkl(pid2mm_shape, image_dir + '/pid2mm.pkl') + + +def test3(): + image_dir = utils.get_dir_path('analysis', pathfinder.METADATA_PATH) + id2mm_shape = utils.load_pkl(image_dir + '/pid2mm.pkl') + s = [(key, value) for (key, value) in sorted(id2mm_shape.items(), key=lambda x: x[1][0])] + for i in xrange(5): + print s[i] + print '--------------------------' + for i in xrange(1,6): + print s[-i] + + +if __name__ == '__main__': + # test2() + test3()