Ejemplo n.º 1
0
def overlay_cells(src,
                  center_intensity_radius,
                  dilation_radius=5,
                  load_range=False):
    '''
    
    src = fullsizedata folder
    center_intensity_radius = path to center_intensity_radius.p file 
    
    src = '/home/wanglab/wang/pisano/tracing_output/antero_4x/20161214_db_bl6_crii_l_53hr/full_sizedatafld/20161214_db_bl6_crii_l_53hr_647_010na_z7d5um_75msec_5POVLP_ch00'
    center_intensity_radius = '/home/wanglab/wang/pisano/tracing_output/antero_4x/20161214_db_bl6_crii_l_53hr/cells/20161214_db_bl6_crii_l_53hr_647_010na_z7d5um_75msec_5POVLP_ch00_centers_intensity_radius.p'
    load_range = (400,450)
    dilation_radius = 5
    
    src = '/home/wanglab/wang/pisano/tracing_output/antero_4x/20170115_tp_bl6_lob6a_1000r_02/full_sizedatafld/20170115_tp_bl6_lob6a_1000r_647_010na_z7d5um_125msec_10povlp_ch00'
    center_intensity_radius = '/home/wanglab/wang/pisano/tracing_output/antero_4x/20170115_tp_bl6_lob6a_1000r_02/cells/20170115_tp_bl6_lob6a_1000r_647_010na_z7d5um_125msec_10povlp_ch00_centers_intensity_radius.p'
    
    src = '/home/wanglab/wang/pisano/tracing_output/antero_4x/20170115_tp_bl6_lob6a_1000r_02/cells/test'
    center_intensity_radius = '/home/wanglab/wang/pisano/tracing_output/antero_4x/20170115_tp_bl6_lob6a_1000r_02/cells/test_out.p'
    load_range = (0,100)
    
    '''

    #load centers
    center_intensity_radius = load_dictionary(center_intensity_radius) if type(
        center_intensity_radius) == str else center_intensity_radius
    centers = sorted(center_intensity_radius.keys(), key=lambda x: x[0])

    #adjust and compensate for load range
    if load_range:
        centers = [
            tuple((c[0] - load_range[0], c[1], c[2])) for c in centers
            if c[0] in range(load_range[0], load_range[1])
        ]

    #load
    vol = load_tiff_folder(src, threshold=0, load_range=load_range)
    vol0 = np.zeros_like(vol).astype('bool')
    for c in centers:
        vol0[c[0], c[1], c[2]] = True

    vol0 = dilate_with_element(vol0 * 1, ball(dilation_radius)).astype('uint8')
    #

    return vol, vol0
Ejemplo n.º 2
0
    #plot
    #%matplotlib inline
    save = '/home/wanglab/Downloads/rf'
    plot_roc(save=save, **kwargs)

    #apply
    cnn_src = listdirfull(cnn_output); cnn_src.sort(); cnn_src = cnn_src[0]
    inn = listdirfull(training_data_src); inn.sort();
    raw_src = load_np(inn[0])[0]
    gt = load_np(inn[0])[1]
    centers = apply_random_forest(kwargs['classifier'], raw_src, cnn_src, size = (7,25,25))

    #show
    from tools.conv_net.functions.dilation import dilate_with_element, ball
    gt = dilate_with_element(gt, ball(5))
    src = np.zeros_like(gt)
    for c in centers.astype('int'):
        src[c[0],c[1],c[2]] = 1
    src = dilate_with_element(src, ball(5))

    #Sweep: <-- usually performance is not affected that much by this
    for n_estimator in (10,20,50,100):
        for max_depth in (5,10,20,50,100):
            print('\n\n n_estimator--{}, max_depth--{}'.format(n_estimator, max_depth))
            train_random_forest(tps, fps, n_estimator = n_estimator, max_depth = max_depth, cores = cores, test_size = test_size, dst = dst)



def apply_random_forest(classifier, raw_src, cnn_src, collect_cnn = False, size = (3,12,12), pad=False, cores=4, numZSlicesPerSplit=300, overlapping_planes = 20, chunks=10, maxip=0):
    ''' THIS IS MEMORY INEFFICIENT - SEE random_forest.py for better functions
Ejemplo n.º 3
0
 vols.append(cnn_vol)
 names.append('CNN\noverlay')
 
 #make figure
 fig = plt.figure(figsize=(6,8))
 rows = len(names)
 cols = 5
 tick = 0
 gs1 = gridspec.GridSpec(rows,cols)
 gs1.update(wspace=0.0000025, hspace=0.000005)
 adjust_exposure = True
 for row in range(rows):
     name = names[row]
     im = np.copy(vols[row])#*100
     step = im.shape[0] / cols
     if name == 'CNN\noverlay':im[:,:,:,0] = dilate_with_element(im[:,:,:,0], ball(3))
     for col in range(cols):
         ax = plt.subplot(gs1[tick])
         tick+=1; print tick
         #ax = plt.subplot(rows,cols,tick)
         if name == 'CNN\noverlay':
             from skimage import exposure
             immax = np.swapaxes(np.swapaxes(np.asarray([np.max(im[col*step:(col+1)*step,:,:,i], 0) for i in range(3)]),0,1),1,2)
             bkgrn = skimage.exposure.equalize_hist(immax[:,:,1], nbins=20000)
             ax.imshow(bkgrn,'gray', vmin=.6, vmax=(bkgrn.max()*1.0))
             #modify colormap
             import matplotlib as mpl
             my_cmap = plt.cm.Reds(np.arange(plt.cm.RdBu.N))
             my_cmap[:1,:4] = 0.0
             my_cmap = mpl.colors.ListedColormap(my_cmap)
             my_cmap.set_under('w')
Ejemplo n.º 4
0
    return out.astype('uint8')


if __name__ == '__main__':

    #goal is to generate noise, ask if objects are linear or spherical and exclude based on some feature
    dims = (1, 500, 500, 500)

    #choice of obejct
    selem = ball(9)
    selem = cube(9)
    selem = cylinder(9, 9)
    selem = np.asarray([star(9) for xx in range(9)])

    #dilate
    src = dilate_with_element(
        generate_random_points(dims, numpoints=20)[0], selem)
    lbl = ndi.label(src)
    centers = ndi.measurements.center_of_mass(src, lbl[0],
                                              range(1, lbl[1] + 1))
    plt.imshow(np.max(src, 0))
    plt.imshow(np.max(lbl[0], 0))

    ##
    lbl_vol = np.copy(lbl[0])
    lbl_vol[lbl[0] > 0] = 1
    sitk.Show(sitk.GetImageFromArray(lbl_vol))

    for val in range(1, lbl[1] + 1):
        tvol = np.zeros_like(lbl[0])
        tvol[lbl[0] == val] = 1
        plt.imshow(np.max(tvol, 0))
Ejemplo n.º 5
0
import numpy as np
from matplotlib import rcParams
rcParams['font.family'] = 'serif'
#   3D plot of the
import matplotlib.pyplot as plt
from skimage.morphology import ball, cube, star, octagon
from tools.conv_net.functions.dilation import dilate_with_element, cylinder
import math, cv2
from mpl_toolkits.mplot3d import axes3d, Axes3D
from scipy import ndimage as ndi

if __name__ == '__main__':

    #goal is to generate noise, ask if objects are linear or spherical and exclude based on some feature
    dims = (1, 100, 100, 100)
    src = dilate_with_element(
        generate_random_points(dims, numpoints=5)[0], ball(3))
    for r in range(5, 13, 2):
        src = np.maximum(
            src,
            dilate_with_element(
                generate_random_points(dims, numpoints=5)[0], ball(r)))
    lbl = ndi.label(src)
    centers = ndi.measurements.center_of_mass(src, lbl[0],
                                              range(1, lbl[1] + 1))
    plt.imshow(np.max(src, 0))
    plt.imshow(np.max(lbl[0], 0))
    val, cnts = np.unique(lbl[0], return_counts=True)
    labels = size_filter(lbl, lower=200, upper=50000)
    #%timeit size_filter(lbl, lower=200, upper=50000)
    plt.imshow(np.max(labels[0], 0))
Ejemplo n.º 6
0
    return np.max(src_raw[rn[0], rn[1], rn[2]])

def find_radius(centers, labels):
    '''Function to return dictionary of k=centers, v=list of maximum radius/plane
    ''' 
    dct = {}
    slices = find_objects(labels[0])
    for i,cen in enumerate(centers):
        z,y,x = [aa.astype('int') for aa in cen]
        sl = slices[i]
        arr = np.copy(labels[0][sl])
        arr[arr!=i+1] = 0
        dct[cen] = [np.max(xx).astype('float16') for xx in distance_transform_edt(arr)]
    return dct


if __name__ == '__main__':
    from tools.objectdetection.random_forest import apply_classifier
    #dst = '/home/wanglab/wang/pisano/tracing_output/antero_4x/20161214_db_bl6_crii_l_53hr/cells/20161214_db_bl6_crii_l_53hr_647_010na_z7d5um_75msec_5POVLP_ch00'
    classifier = '/home/wanglab/wang/pisano/Python/lightsheet/supp_files/h129_rf_classifier.pkl'
    cnn_src = '/home/wanglab/wang/pisano/tracing_output/antero_4x/20161214_db_bl6_crii_l_53hr/cells/20161214_db_bl6_crii_l_53hr_647_010na_z7d5um_75msec_5POVLP_ch00_cnn_output'
    raw_src =  '/home/wanglab/wang/pisano/tracing_output/antero_4x/20161214_db_bl6_crii_l_53hr/full_sizedatafld/20161214_db_bl6_crii_l_53hr_647_010na_z7d5um_75msec_5POVLP_ch00'
    
    out = apply_classifier(classifier, raw_src, cnn_src, size = (7,50,50), pad=False, cores=10, numZSlicesPerSplit=25, overlapping_planes = 10, verbose=True)
    
    
    #check
    from tools.conv_net.functions.dilation import dilate_with_element, generate_arr_from_pnts_and_dims, ball
    pnts = [tuple((xx[0] - z, xx[1], xx[2])) for xx in out.keys()] #z in the from below eg 230
    arr1 = dilate_with_element(generate_arr_from_pnts_and_dims(pnts, dims = (40, 7422, 6262)), selem=ball(5))