Ejemplo n.º 1
0
for theta in xrange(0,360,args.theta):
    print "tetha =", theta
    v = np.cos(float(theta)/180*np.pi)*v0 + np.sin(float(theta)/180*np.pi)*w0
    w = np.cos(float(theta+90)/180*np.pi)*v0 + np.sin(float(theta+90)/180*np.pi)*w0
    for i in xrange(0,coords.shape[0],args.chunk_size):
        j = min(i+args.chunk_size,coords.shape[0])
        # pre-allocating memory
        x = np.zeros( (j-i,offsets1.shape[0]+offsets3.shape[0]+offsets5.shape[0]+1), dtype='float32' )
        if args.not_centered:
             x1 = get_block_comparisons_cpp( sat, coords[i:j],
                                             offsets1, sizes1,
                                             offsets2, sizes2,n_jobs=args.n_jobs )
             x2 = get_block_comparisons_cpp( sat_grad, coords[i:j],
                                             offsets3, sizes3,
                                             offsets4, sizes4, n_jobs=args.n_jobs)
             x_grad1 = get_grad( coords[i:j].astype('int32'), offsets5.astype('int32'),
                                 gradZ.astype('float32'), gradY.astype('float32'), gradX.astype('float32') )
             x_grad2 = get_grad( coords[i:j].astype('int32'), offsets6.astype('int32'),
                                 gradZ.astype('float32'), gradY.astype('float32'), gradX.astype('float32') )
        else:
            x[:,:offsets1.shape[0]] = get_block_comparisons_cpp_uvw( sat,
                                                np.ascontiguousarray(coords[i:j]),
                                                np.ascontiguousarray(w[i:j]),
                                                np.ascontiguousarray(v[i:j]),
                                                np.ascontiguousarray(u[i:j]),
                                                offsets1, sizes1,
                                                offsets2, sizes2, n_jobs=args.n_jobs )
            feature_offset = offsets1.shape[0]
            
            x[:,feature_offset:feature_offset+offsets3.shape[0]] = get_block_comparisons_cpp_uvw(
                sat_grad,
                np.ascontiguousarray(coords[i:j]),
Ejemplo n.º 2
0
def get_training_data_classification( img, seg, label_name ):
    seg = irtk.imread( seg, dtype='int32', force_neurological=True )
    img = irtk.imread( img, dtype='int32', force_neurological=True )

    #u0,v0,w0 = get_orientation_training(seg)
    brain_center, heart_center, left_lung, right_lung = get_centers(seg)
    
    grad = irtk.Image(nd.gaussian_gradient_magnitude( img, 0.5 ),
                      img.get_header())

    blurred_img = nd.gaussian_filter(img,0.5)
    gradZ = nd.sobel( blurred_img, axis=0 ).astype('float32')
    gradY = nd.sobel( blurred_img, axis=1 ).astype('float32')
    gradX = nd.sobel( blurred_img, axis=2 ).astype('float32')

    new_seg = irtk.zeros( seg.get_header() )
    if label_name == "lungs":
        new_seg[seg==3] = 1 # lung 1
        new_seg[seg==4] = 1 # lung 2
    elif label_name == "heart":
        new_seg[seg==5] = 1 # heart
    elif label_name == "liver":
        new_seg[seg==8] = 1 # liver
    seg = new_seg

    sat = integral_image(img)
    sat_grad = integral_image(grad)

    m = np.zeros(img.shape, dtype='uint8')
    m[brain_center[0],
      brain_center[1],
      brain_center[2]] = 1

    narrow_band = nd.distance_transform_edt(np.logical_not(m))
    if args.narrow_band:
        narrow_band[narrow_band<30] = 0
        narrow_band[narrow_band>120] = 0
    narrow_band[img==0] = 0
    
    X = []
    Y = []
    for l in range(2):
        coords = np.argwhere(np.logical_and(narrow_band>0,seg==l))

        if l==0:
            coords = coords[np.random.randint( 0,
                                               coords.shape[0],
                                               int(args.factor_background*args.n_samples))].astype('int32')
        else:
            coords = coords[np.random.randint( 0,
                                               coords.shape[0],
                                               args.n_samples)].astype('int32')

        if args.not_centered:
            x1 = get_block_comparisons_cpp( sat, coords,
                                            offsets1, sizes1,
                                            offsets2, sizes2,
                                            n_jobs=args.n_jobs )
            x2 = get_block_comparisons_cpp( sat_grad, coords,
                                            offsets3, sizes3,
                                            offsets4, sizes4,
                                            n_jobs=args.n_jobs )
            x_grad1 = get_grad( coords.astype('int32'), offsets5.astype('int32'),
                                gradZ.astype('float32'), gradY.astype('float32'), gradX.astype('float32'))
            x_grad2 = get_grad( coords.astype('int32'), offsets6.astype('int32'),
                                gradZ.astype('float32'), gradY.astype('float32'), gradX.astype('float32'))
        else:

            if l == 0:
                u,v,w = get_random_orientation(coords.shape[0])
            else:
                # u = np.tile(u0,(coords.shape[0],1))
                # v = np.tile(v0,(coords.shape[0],1))
                # w = np.tile(w0,(coords.shape[0],1))
                u,v,w = get_orientation_training_jitter( brain_center,
                                                         heart_center,
                                                         left_lung,
                                                         right_lung,
                                                         coords.shape[0],
                                                         brain_jitter=args.brain_jitter,
                                                         heart_jitter=args.heart_jitter,
                                                         lung_jitter=args.lung_jitter )

            x1 = get_block_comparisons_cpp_uvw( sat, coords,
                                                w,v,u,
                                                offsets1, sizes1,
                                                offsets2, sizes2,
                                                n_jobs=args.n_jobs )
            x2 = get_block_comparisons_cpp_uvw( sat_grad, coords,
                                                 w,v,u,
                                                offsets3, sizes3,
                                                offsets4, sizes4,
                                                n_jobs=args.n_jobs )
            x3 = get_grad_comparisons_cpp_uvw( gradZ, gradY, gradX,
                                               coords,
                                               offsets5, offsets6,
                                               w,v,u,
                                               n_jobs=args.n_jobs )
            # x_grad1 = get_grad_uvw( coords.astype('int32'), offsets5.astype('int32'),
            #                         gradZ.astype('float32'), gradY.astype('float32'), gradX.astype('float32'),
            #                         w.astype('float32'), v.astype('float32'), u.astype('float32') )

            # x_grad2 = get_grad_uvw( coords.astype('int32'), offsets6.astype('int32'),
            #                         gradZ.astype('float32'), gradY.astype('float32'), gradX.astype('float32'),
            #                         w.astype('float32'), v.astype('float32'), u.astype('float32') )

        R = np.linalg.norm( coords - brain_center, axis=1 )
        #x = np.concatenate( ( x1, x2, x_grad1 > x_grad2, R[...,np.newaxis] ), axis=1 )
        x = np.concatenate( ( x1, x2, x3, R[...,np.newaxis] ), axis=1 )
        
        y = seg[coords[:,0],
                coords[:,1],
                coords[:,2]]

        X.extend(x)
        Y.extend(y)

    return (X,Y)
Ejemplo n.º 3
0
def get_training_data_regression( img, seg ):
    seg = irtk.imread( seg, dtype='int32', force_neurological=True )
    img = irtk.imread( img, dtype='int32', force_neurological=True )

    #u0,v0,w0 = get_orientation_training(seg)
    brain_center, heart_center, left_lung, right_lung = get_centers(seg)
    
    grad = irtk.Image(nd.gaussian_gradient_magnitude( img, 0.5 ),
                      img.get_header())

    blurred_img = nd.gaussian_filter(img,0.5)
    gradZ = nd.sobel( blurred_img, axis=0 ).astype('float32')
    gradY = nd.sobel( blurred_img, axis=1 ).astype('float32')
    gradX = nd.sobel( blurred_img, axis=2 ).astype('float32')

    new_seg = irtk.zeros( seg.get_header() )
    new_seg[seg==3] = 1 # lung 1
    new_seg[seg==4] = 1 # lung 2
    new_seg[seg==5] = 2 # heart
    new_seg[seg==8] = 3 # liver
    seg = new_seg

    center1 =  np.array(nd.center_of_mass( (seg == 1).view(np.ndarray) ),
                        dtype='float32')
    center2 =  np.array(nd.center_of_mass( (seg == 2).view(np.ndarray) ),
                        dtype='float32')
    center3 =  np.array(nd.center_of_mass( (seg == 3).view(np.ndarray) ),
                        dtype='float32')
    
    sat = integral_image(img)
    sat_grad = integral_image(grad)

    m = np.zeros(img.shape, dtype='uint8')
    m[brain_center[0],
      brain_center[1],
      brain_center[2]] = 1
    
    X = []
    Y = []
    for l in range(1,nb_labels):
        coords = np.argwhere(seg==l)

        coords = coords[np.random.randint( 0,
                                           coords.shape[0],
                                           args.n_samples)].astype('int32')

        if args.not_centered:
            x1 = get_block_comparisons_cpp( sat, coords,
                                            offsets1, sizes1,
                                            offsets2, sizes2,n_jobs=args.n_jobs )
            x2 = get_block_comparisons_cpp( sat_grad, coords,
                                            offsets3, sizes3,
                                            offsets4, sizes4,
                                            n_jobs=args.n_jobs )
            x_grad1 = get_grad( coords.astype('int32'), offsets5.astype('int32'),
                                gradZ.astype('float32'), gradY.astype('float32'), gradX.astype('float32') )
            x_grad2 = get_grad( coords.astype('int32'), offsets6.astype('int32'),
                                gradZ.astype('float32'), gradY.astype('float32'), gradX.astype('float32') )
        else:
            # u = np.tile(u0,(coords.shape[0],1))
            # v = np.tile(v0,(coords.shape[0],1))
            # w = np.tile(w0,(coords.shape[0],1))
            u,v,w = get_orientation_training_jitter( brain_center,
                                                     heart_center,
                                                     left_lung,
                                                     right_lung,
                                                     coords.shape[0],
                                                     brain_jitter=args.brain_jitter,
                                                     heart_jitter=args.heart_jitter,
                                                     lung_jitter=args.lung_jitter )

            x1 = get_block_comparisons_cpp_uvw( sat, coords,
                                                w,v,u,
                                                offsets1, sizes1,
                                                offsets2, sizes2,n_jobs=args.n_jobs )
            x2 = get_block_comparisons_cpp_uvw( sat_grad, coords,
                                                w,v,u,
                                                offsets3, sizes3,
                                                offsets4, sizes4,
                                                n_jobs=args.n_jobs )
            x3 = get_grad_comparisons_cpp_uvw( gradZ, gradY, gradX,
                                               coords,
                                               offsets5, offsets6,
                                               w,v,u,
                                               n_jobs=args.n_jobs )
            # x_grad1 = get_grad_uvw( coords.astype('int32'), offsets5.astype('int32'),
            #                         gradZ.astype('float32'), gradY.astype('float32'), gradX.astype('float32'),
            #                         w.astype('float32'), v.astype('float32'), u.astype('float32') )

            # x_grad2 = get_grad_uvw( coords.astype('int32'), offsets6.astype('int32'),
            #                         gradZ.astype('float32'), gradY.astype('float32'), gradX.astype('float32'),
            #                         w.astype('float32'), v.astype('float32'), u.astype('float32') )
             
        #x = np.concatenate( ( x1, x2, x_grad1 > x_grad2 ), axis=1 )
        x = np.concatenate( ( x1, x2, x3 ), axis=1 )

        if l == 1:
            y = center1[np.newaxis,...] - coords.astype('float32')
            if not args.not_centered:
                y = np.concatenate( ( (y*w).sum(axis=1)[...,np.newaxis],
                                      (y*v).sum(axis=1)[...,np.newaxis],
                                      (y*u).sum(axis=1)[...,np.newaxis] ),
                                    axis=1 )
        elif l == 2:
            y = center2[np.newaxis,...] - coords.astype('float32')
            if not args.not_centered:
                y = np.concatenate( ( (y*w).sum(axis=1)[...,np.newaxis],
                                      (y*v).sum(axis=1)[...,np.newaxis],
                                      (y*u).sum(axis=1)[...,np.newaxis] ),
                                    axis=1 )
        else:
            y = center3[np.newaxis,...] - coords.astype('float32')
            if not args.not_centered:
                y = np.concatenate( ( (y*w).sum(axis=1)[...,np.newaxis],
                                      (y*v).sum(axis=1)[...,np.newaxis],
                                      (y*u).sum(axis=1)[...,np.newaxis] ),
                                    axis=1 )

        X.append(x)
        Y.append(y)
            
    return X,Y
Ejemplo n.º 4
0
     print "theta =",theta
 v = np.cos(float(theta)/180*np.pi)*v0 + np.sin(float(theta)/180*np.pi)*w0
 w = np.cos(float(theta+90)/180*np.pi)*v0 + np.sin(float(theta+90)/180*np.pi)*w0
 for i in xrange(0,coords.shape[0],args.chunk_size):
     j = min(i+args.chunk_size,coords.shape[0])
     # pre-allocating memory
     x = np.zeros( (j-i,offsets1.shape[0]+offsets3.shape[0]+offsets5.shape[0]+2), dtype='float32' )
     if args.not_centered:
          x1 = get_block_comparisons_cpp( sat, np.ascontiguousarray(coords[i:j]),
                                          offsets1, sizes1,
                                          offsets2, sizes2,n_jobs=args.n_jobs )
          x2 = get_block_comparisons_cpp( sat_grad, np.ascontiguousarray(coords[i:j]),
                                          offsets3, sizes3,
                                          offsets4, sizes4, n_jobs=args.n_jobs)
          x_grad1 = get_grad( np.ascontiguousarray(coords[i:j].astype('int32')),
                              offsets5.astype('int32'),
                              gradZ.astype('float32'), gradY.astype('float32'), gradX.astype('float32') )
          x_grad2 = get_grad( np.ascontiguousarray(coords[i:j].astype('int32')),
                              offsets6.astype('int32'),
                              gradZ.astype('float32'), gradY.astype('float32'), gradX.astype('float32') )
     else:
         x[:,:offsets1.shape[0]] = get_block_comparisons_cpp_uvw( sat,
                                             np.ascontiguousarray(coords[i:j]),
                                             np.ascontiguousarray(w[i:j]),
                                             np.ascontiguousarray(v[i:j]),
                                             np.ascontiguousarray(u[i:j]),
                                             offsets1, sizes1,
                                             offsets2, sizes2, n_jobs=args.n_jobs )
         feature_offset = offsets1.shape[0]
         
         x[:,feature_offset:feature_offset+offsets3.shape[0]] = get_block_comparisons_cpp_uvw( sat_grad,