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]),
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)
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
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,