def generate(self):
        while True:
            rand_idxs = np.arange(len(self.oc_gt_paths))
            if self.random:
                self.rng.shuffle(rand_idxs)
            for pos in xrange(0, len(rand_idxs), self.batch_size):
                idxs_batch = rand_idxs[pos:pos + self.batch_size]
                nb = len(idxs_batch)

                # allocate batches
                x_batch = np.zeros((nb,) + self.p_transform['patch_size'], dtype='float32')
                y_batch = np.zeros((nb,) + self.p_transform['patch_size'], dtype='float32')
                z_batch = np.zeros((nb,) + self.p_transform['patch_size'], dtype='float32')

                batch_ids = []

                for i, idx in enumerate(idxs_batch):
                    oc_gt_path = self.oc_gt_paths[idx]

                    cid = contour.get_contour_id(oc_gt_path)
                    did = contour.get_dicom_id(oc_gt_path)
                    sid = str(contour.get_slice_id(oc_gt_path))

                    ic_gt_path = contour.get_icontour_path(oc_gt_path)

                    sample_id = cid + '_' + did + '_' + sid

                    batch_ids.append(sample_id)

                    try:
                        x, pixel_spacing = scan.read_dicom_slice(did, sid)
                    except Exception:
                        print 'cannot open dicom, dicom id: ', did, ', slice id:', sid

                    try:
                        ic_contour_lst = contour.parse_contour_file(ic_gt_path)
                    except Exception:
                        print 'cannot open i-contour', ic_gt_path

                    try:
                        oc_contour_lst = contour.parse_contour_file(oc_gt_path)
                    except Exception:
                        print 'cannot open o-contour', oc_gt_path

                    y = contour.poly_to_mask(ic_contour_lst,x.shape[0],x.shape[1])
                    z = contour.poly_to_mask(oc_contour_lst,x.shape[0],x.shape[1])

                    x_batch[i] = self.data_prep_fun(x, pixel_spacing)
                    y_batch[i] = self.mask_prep_fun(y)
                    z_batch[i] = self.mask_prep_fun(z)


                if self.full_batch:
                    if nb == self.batch_size:
                        yield x_batch, y_batch, z_batch, batch_ids
                else:
                    yield x_batch, y_batch, z_batch, batch_ids

            if not self.infinite:
                break
def generate_polygon_mask_plot(icp):
    did = contour.get_dicom_id(icp)
    sid = contour.get_slice_id(icp)
    c_lst = contour.parse_contour_file(icp)
    mask = contour.poly_to_mask(c_lst,256,256)
    outfile = 'plots/pm_'+contour.get_contour_id(icp)+'_' \
                      +did+'_' \
                      +str(sid)+'.jpg'
    print 'plotting polygones and masks to file', outfile
    utils_plots.plot_polygone_on_mask(c_lst, mask, outfile, resolution=100)
def generate_ocontours_icontours_border_plots(lst_ocontours, pixel_spacing_normalization=False):
    for idx, ocp in enumerate(lst_ocontours):
        icp = contour.get_icontour_path(ocp)
        did = contour.get_dicom_id(ocp)
        sid = contour.get_slice_id(ocp)
        slice, pixel_spacing = scan.read_dicom_slice(did, sid)
        oc_lst = contour.parse_contour_file(ocp)
        ic_lst = contour.parse_contour_file(icp)
        
        outfile = 'plots/'+contour.get_contour_id(ocp)+'_' \
                          +did+'_' \
                          +str(sid)+'.jpg'
        print pixel_spacing, 'plotting mask to file', outfile
        if pixel_spacing_normalization:
            assert pixel_spacing[0]==pixel_spacing[1]
            slice = scipy.ndimage.zoom(slice, pixel_spacing[0], order=0)

        masko = contour.poly_to_mask(oc_lst,slice.shape[0],slice.shape[1])
        maski = contour.poly_to_mask(ic_lst,slice.shape[0],slice.shape[1])
        utils_plots.plot_borders_on_slice(slice, masko, maski, outfile, figsize=(20, 20))#, x_bs=[75,175], y_bs=[75,175])
def generate_polygon_mask_plots():
    for idx, icp in enumerate(contour.get_list_available_icontours()):
        did = contour.get_dicom_id(icp)
        sid = contour.get_slice_id(icp)
        c_lst = contour.parse_contour_file(icp)
        mask = contour.poly_to_mask(c_lst,256,256)
        outfile = 'plots/bp_oc_ic_'+contour.get_contour_id(icp)+'_' \
                          +did+'_' \
                          +str(sid)+'.jpg'
        print 'plotting polygones and masks to file', outfile
        utils_plots.plot_polygone_on_mask(c_lst, mask, outfile)
def generate_masked_scan_plots(lst_ocontours):
    for idx, ocp in enumerate(lst_ocontours):
        did = contour.get_dicom_id(ocp)
        sid = contour.get_slice_id(ocp)
        slice, pixel_spacing = scan.read_dicom_slice(did, sid)
        oc_lst = contour.parse_contour_file(ocp)
        
        outfile = 'plots/masked_scan_'+contour.get_contour_id(ocp)+'_' \
                          +did+'_' \
                          +str(sid)+'.jpg'
        print pixel_spacing, 'plotting masked slice to file', outfile

        mask = contour.poly_to_mask(oc_lst,slice.shape[0],slice.shape[1])
        masked_slice = mask*slice
        utils_plots.plot_slice(masked_slice, outfile, figsize=(20, 20), x_bs=[75,175], y_bs=[75,175])
def generate_histograms_masked_scan(lst_ocontours):
    for idx, ocp in enumerate(lst_ocontours):
        did = contour.get_dicom_id(ocp)
        sid = contour.get_slice_id(ocp)
        slice, pixel_spacing = scan.read_dicom_slice(did, sid)
        oc_lst = contour.parse_contour_file(ocp)
        
        outfile = 'plots/hist_masked_sc_'+contour.get_contour_id(ocp)+'_' \
                          +did+'_' \
                          +str(sid)+'.jpg'
        print pixel_spacing, 'plotting masked slice to file', outfile

        mask = contour.poly_to_mask(oc_lst,slice.shape[0],slice.shape[1])
        masked_slice = mask*slice 
        print np.amin(masked_slice), np.amax(masked_slice)
        bins = np.arange(0,550,10) 
        hist,bins = np.histogram(masked_slice, bins=bins) 
        print hist
        th_mslice = masked_slice > 150
        utils_plots.plot_slice_hist(masked_slice, th_mslice, bins[1:], outfile, figsize=(10, 5), x_bs=[75,175], y_bs=[75,175])