Switch to side-by-side view

--- a
+++ b/sandbox/test_transformations_scan.py
@@ -0,0 +1,172 @@
+import os
+import numpy as np
+import data_transforms
+import pathfinder
+import utils
+import utils_lung
+from configuration import set_configuration, config
+from utils_plots import plot_slice_3d_2, plot_2d, plot_2d_4, plot_slice_3d_3
+import utils_lung
+import lung_segmentation
+
+set_configuration('configs_seg_scan', 'luna_s_local')
+
+
+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_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 count_proportion():
+    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]
+
+    n_white = 0
+    n_black = 0
+
+    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]
+
+        img_out, annotations_out = data_transforms.transform_scan3d(img,
+                                                                    pixel_spacing=pixel_spacing,
+                                                                    p_transform=config().p_transform,
+                                                                    p_transform_augment=None,
+                                                                    # config().p_transform_augment,
+                                                                    luna_annotations=annotations,
+                                                                    luna_origin=origin)
+
+        mask = data_transforms.make_3d_mask_from_annotations(img_out.shape, annotations_out, shape='sphere')
+        n_white += np.sum(mask)
+        n_black += mask.shape[0] * mask.shape[1] * mask.shape[2] - np.sum(mask)
+
+        print 'white', n_white
+        print 'black', n_black
+
+
+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)
+
+
+if __name__ == '__main__':
+    # test_luna3d()
+    test_dsb()