def returnCenterline(fname = None, nurbs = 0, div = 0): if fname == None: fname = 't250_half_sup_straight_seg.nii.gz' file = nibabel.load(fname) data = file.get_data() hdr_seg = file.get_header() nx, ny, nz = spline_app.getDim(fname) x = [0 for iz in range(0, nz, 1)] y = [0 for iz in range(0, nz, 1)] z = [iz for iz in range(0, nz, 1)] for iz in range(0, nz, 1): x[iz], y[iz] = ndimage.measurements.center_of_mass(numpy.array(data[:,:,iz])) points = [[x[n],y[n],z[n]] for n in range(len(x))] p1, p2, p3 = spline_app.getPxDimensions(fname) size = spline_app.getSize(x, y, z, p1, p2, p3) data = data*0 if nurbs: print 'div = ',div,' size = ', round(size) nurbs = NURBS(int(round(size)), int(div), 3, 3000, points) P = nurbs.getCourbe3D() if P==1: print "ERROR: instability in NURBS computation, div will be incremented. " return 1 x_centerline_fit=P[0] y_centerline_fit=P[1] z_centerline_fit=P[2] for i in range(len(z_centerline_fit)) : data[int(round(x_centerline_fit[i])),int(round(y_centerline_fit[i])),int(z_centerline_fit[i])] = 1 else: for i in range(len(z)) : data[int(round(x[i])),int(round(y[i])),int(z[i])] = 1 path, file_name, ext_fname = sct_utils.extract_fname(fname) img = nibabel.Nifti1Image(data, None, hdr_seg) #return img saveFile(file_name, img, div) return size
def check_nurbs(div, size=0, points=0, centerline=''): if centerline == '': print 'div = ', div, ' size = ', round(size) nurbs = NURBS(int(round(size)), int(div), 3, 3000, points) P = nurbs.getCourbe3D() if P == 1: print "ERROR: instability in NURBS computation, div will be incremented. " return 1 else: file = nibabel.load(centerline) data = file.get_data() hdr_seg = file.get_header() nx, ny, nz = spline_app.getDim(centerline) x = [0 for iz in range(0, nz, 1)] y = [0 for iz in range(0, nz, 1)] z = [iz for iz in range(0, nz, 1)] for iz in range(0, nz, 1): x[iz], y[iz] = ndimage.measurements.center_of_mass( numpy.array(data[:, :, iz])) points = [[x[n], y[n], z[n]] for n in range(len(x))] p1, p2, p3 = spline_app.getPxDimensions(centerline) size = spline_app.getSize(x, y, z, p1, p2, p3) print 'div = ', div, ' size = ', round(size) #nurbs = NURBS(int(round(size)), int(div), 3, 3000, points) --> this work with sct_nurbs_v1 try: nurbs = NURBS(3, 3000, points, False, None, int(round(size)), int(div)) P = nurbs.getCourbe3D() except UnboundLocalError: print "ERROR: instability in NURBS computation, UnboundLocalError caught, div will be incremented. " return 1 except ZeroDivisionError: print "ERROR: instability in NURBS computation, ZeroDivisionError caught, div will be incremented. " return 1 if P == 1: print "ERROR: instability in NURBS computation, div will be incremented. " return 1 else: return round(size)
def returnCenterline(fname=None, nurbs=0, div=0): if fname == None: fname = 't250_half_sup_straight_seg.nii.gz' file = nibabel.load(fname) data = file.get_data() hdr_seg = file.get_header() nx, ny, nz = spline_app.getDim(fname) x = [0 for iz in range(0, nz, 1)] y = [0 for iz in range(0, nz, 1)] z = [iz for iz in range(0, nz, 1)] for iz in range(0, nz, 1): x[iz], y[iz] = ndimage.measurements.center_of_mass( numpy.array(data[:, :, iz])) points = [[x[n], y[n], z[n]] for n in range(len(x))] p1, p2, p3 = spline_app.getPxDimensions(fname) size = spline_app.getSize(x, y, z, p1, p2, p3) data = data * 0 if nurbs: if check_nurbs(div, size, points) != 0: x_centerline_fit = P[0] y_centerline_fit = P[1] z_centerline_fit = P[2] for i in range(len(z_centerline_fit)): data[int(round(x_centerline_fit[i])), int(round(y_centerline_fit[i])), int(z_centerline_fit[i])] = 1 else: return 1 else: for i in range(len(z)): data[int(round(x[i])), int(round(y[i])), int(z[i])] = 1 path, file_name, ext_fname = sct_utils.extract_fname(fname) img = nibabel.Nifti1Image(data, None, hdr_seg) #return img saveFile(file_name, img, div) return size
def returnCenterline(fname = None, nurbs = 0, div = 0): if fname == None: fname = 't250_half_sup_straight_seg.nii.gz' file = nibabel.load(fname) data = file.get_data() hdr_seg = file.get_header() nx, ny, nz = spline_app.getDim(fname) x = [0 for iz in range(0, nz, 1)] y = [0 for iz in range(0, nz, 1)] z = [iz for iz in range(0, nz, 1)] for iz in range(0, nz, 1): x[iz], y[iz] = ndimage.measurements.center_of_mass(numpy.array(data[:,:,iz])) points = [[x[n],y[n],z[n]] for n in range(len(x))] p1, p2, p3 = spline_app.getPxDimensions(fname) size = spline_app.getSize(x, y, z, p1, p2, p3) data = data*0 if nurbs: if check_nurbs(div, size, points) != 0: x_centerline_fit=P[0] y_centerline_fit=P[1] z_centerline_fit=P[2] for i in range(len(z_centerline_fit)) : data[int(round(x_centerline_fit[i])),int(round(y_centerline_fit[i])),int(z_centerline_fit[i])] = 1 else: return 1 else: for i in range(len(z)) : data[int(round(x[i])),int(round(y[i])),int(z[i])] = 1 path, file_name, ext_fname = sct_utils.extract_fname(fname) img = nibabel.Nifti1Image(data, None, hdr_seg) #return img saveFile(file_name, img, div) return size
def check_nurbs(div, size = 0, points = 0, centerline = ''): if centerline == '': print 'div = ',div,' size = ', round(size) nurbs = NURBS(int(round(size)), int(div), 3, 3000, points) P = nurbs.getCourbe3D() if P==1: print "ERROR: instability in NURBS computation, div will be incremented. " return 1 else: file = nibabel.load(centerline) data = file.get_data() hdr_seg = file.get_header() nx, ny, nz = spline_app.getDim(centerline) x = [0 for iz in range(0, nz, 1)] y = [0 for iz in range(0, nz, 1)] z = [iz for iz in range(0, nz, 1)] for iz in range(0, nz, 1): x[iz], y[iz] = ndimage.measurements.center_of_mass(numpy.array(data[:,:,iz])) points = [[x[n],y[n],z[n]] for n in range(len(x))] p1, p2, p3 = spline_app.getPxDimensions(centerline) size = spline_app.getSize(x, y, z, p1, p2, p3) print 'div = ',div,' size = ', round(size) #nurbs = NURBS(int(round(size)), int(div), 3, 3000, points) --> this work with sct_nurbs_v1 try: nurbs = NURBS(3, 3000, points, False, None, int(round(size)), int(div)) P = nurbs.getCourbe3D() except UnboundLocalError: print "ERROR: instability in NURBS computation, UnboundLocalError caught, div will be incremented. " return 1 except ZeroDivisionError: print "ERROR: instability in NURBS computation, ZeroDivisionError caught, div will be incremented. " return 1 if P==1: print "ERROR: instability in NURBS computation, div will be incremented. " return 1 else: return round(size)
def returnSquaredErrors(fname=None, div=None, size=None): if fname == None: #fname = 'centerlines/t250_half_sup_straight_seg_centerline.nii.gz' fname = 't234_crop_200_500_straight_centerline.nii.gz' file = nibabel.load(fname) data = file.get_data() p1, p2, p3 = splinap.getPxDimensions(fname) nx, ny, nz = splinap.getDim(fname) #os.remove(fname) print 'sizes: ', nx, ny, nx #x, y, x_fit, y_fit = fit(data, nz) ''' print x, y, z fig1 = plt.figure() ax = Axes3D(fig1) ax.plot(x,y,z,'b:',zdir='z') plt.show() ''' X,Y,Z = (data>0).nonzero() zmin = min(Z) + 10 zmax = max(Z) - 10 print "min value element : ", zmin print "max value element : ", zmax nz = zmax - zmin x = [0 for iz in range(0, nz, 1)] y = [0 for iz in range(0, nz, 1)] z = [iz for iz in range(0, nz, 1)] for iz in range(0, nz, 1): x[iz], y[iz] = ndimage.measurements.center_of_mass(np.array(data[:,:,iz + zmin])) x_fit,y_fit = get_good_centerline(nx, ny, nz) msx = mean_squared_error(x, x_fit) msy = mean_squared_error(y, y_fit) mean_ms = (msx+msy)/2 #print x, x_fit #print y, y_fit fig1 = plt.figure() ax = Axes3D(fig1) ax.plot(x,y,z,zdir='z') ax.plot(x_fit,y_fit,z,zdir='z') plt.show() print msx, msy, mean_ms size_crop = splinap.getSize(x, y, z, p1, p2, p3) txt = open('results.txt', 'a') txt.write(str(div)+' '+str(int(round(size))/div)+' '+str(size_crop)+' '+str(size)+' '+str(msx)+' '+str(msy)+' '+' '+str(mean_ms)+' '+fname+'\n') #txt.write(' plynomial_fitting '+str(size_crop)+' '+str(size)+' '+str(msx)+' '+str(msy)+' '+' '+str(mean_ms)+' '+fname+'\n') txt.close()