コード例 #1
0
def fitDataRigidScaleNoCorr_TwoSurfaces( X1,X2,data1,data2, xtol=1e-5, maxfev=0, t0=None ):
	""" fit list of points X to list of points data by minimising
	least squares distance between each point in X and closest neighbour
	in data
	"""
	if t0==None:
		t0 = scipy.array([0.0,0.0,0.0,0.0,0.0,0.0,1.0])
			
	data1Tree = cKDTree( data1 )
	data2Tree = cKDTree( data2 )
	X1 = scipy.array(X1)
	X2 = scipy.array(X2)
	
	def obj( t ):
		x1R = transformRigid3D( X1, t[:6] )
		x1RS = transformScale3D( x1R, scipy.ones(3)*t[6] )
		d1 = data1Tree.query( list(x1RS) )[0]
		x2R = transformRigid3D( X2, t[:6] )
		x2RS = transformScale3D( x2R, scipy.ones(3)*t[6] )
		d2 = data2Tree.query( list(x2RS) )[0]
		d=concatenate((d1,d2),0)
		return d*d
		
	tOpt = leastsq( obj, t0, xtol=xtol, maxfev=maxfev )[0]
	X1Opt = transformRigid3D( X1, tOpt[:6] )
	X2Opt = transformRigid3D( X2, tOpt[:6] )
	X1Opt = transformScale3D( X1Opt, tOpt[6:] )
	X2Opt = transformScale3D( X2Opt, tOpt[6:] )
	
	return tOpt, X1Opt,X2Opt
コード例 #2
0
	def obj( t ):
		x1R = transformRigid3D( X1, t[:6] )
		x1RS = transformScale3D( x1R, scipy.ones(3)*t[6] )
		d1 = data1Tree.query( list(x1RS) )[0]
		x2R = transformRigid3D( X2, t[:6] )
		x2RS = transformScale3D( x2R, scipy.ones(3)*t[6] )
		d2 = data2Tree.query( list(x2RS) )[0]
		d=concatenate((d1,d2),0)
		return d*d
コード例 #3
0
	def obj( t ):
		x1R = transformRigid3D( X1, t[:6] )
		x1SR = transformScale3D( x1R, t[6:] )
		x1SRTree = cKDTree(x1SR)
		d1 = x1SRTree.query( list(data1) )[0]
		x2R = transformRigid3D( X2, t[:6] )
		x2SR = transformScale3D( x2R, t[6:] )
		x2SRTree = cKDTree(x2SR)
		d2 = x2SRTree.query( list(data2) )[0]
		d=concatenate((d1,d2),0)
		return d*d
コード例 #4
0
	def obj( t ):
		x1S = transformScale3D( X1, t[6:] )
		x1RS = transformRigid3D( x1S, t[:6] )
		x1RSTree = cKDTree(x1RS)
		d1 = x1RSTree.query( list(data1) )[0]
		x2S = transformScale3D( X2, t[6:] )
		x2RS = transformRigid3D( x2S, t[:6] )
		x2RSTree = cKDTree(x2RS)
		d2 = x2RSTree.query( list(data2) )[0]
		d=concatenate((d1,d2),0)
		#print t
		SSQ.append(scipy.sum(d*d))
		return d*d
コード例 #5
0
def fitRigidFMin(data, target, x0=None, xtol=1e-3, maxfev=0, verbose=0):
    """ fits for tx,ty,tz,rx,ry,rz to transform points in data to points
	in target. Points in data and target are assumed to correspond by
	order. uses fmin instead of leastsq
	"""
    if x0 == None:
        x0 = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]

    def obj(x):
        dataT = transformRigid3D(data, x)
        d = ((dataT - target) ** 2.0).sum(1)
        rmsD = scipy.sqrt(d.mean())
        return rmsD

    x0 = scipy.array(x0)
    if verbose:
        rms0 = scipy.sqrt(obj(x0).mean())
        print "initial RMS:", rms0

    xOpt = fmin(obj, x0, xtol=xtol, maxiter=maxfev)

    if verbose:
        rmsOpt = scipy.sqrt(obj(xOpt).mean())
        print "final RMS:", rmsOpt

    dataFitted = transformRigid3D(data, xOpt)
    return xOpt, dataFitted
コード例 #6
0
def fitDataTranslateNoCorr(X, data, xtol=1e-5, maxfev=0, t0=None):
    """ fit list of points X to list of points data by minimising
	least squares distance between each point in X and closest neighbour
	in data
	"""
    if t0 == None:
        t0 = scipy.array([0.0, 0.0, 0.0])

    dataTree = cKDTree(data)
    X = scipy.array(X)

    def obj(t):
        x = transformRigid3D(X, scipy.hstack((t, [0.0, 0.0, 0.0])))
        d = dataTree.query(list(x))[0]
        # ~ print d.mean()
        return d * d

    tOpt = leastsq(obj, t0, xtol=xtol, maxfev=maxfev)[0]
    XOpt = transformRigid3D(X, scipy.hstack((tOpt, [0.0, 0.0, 0.0])))

    return tOpt, XOpt
コード例 #7
0
def fitDataRigidScaleNoCorr_ModelTree( X, data, xtol=1e-5, maxfev=0, t0=None ):
	""" fit list of points X to list of points data by minimising
	least squares distance between each point in X and closest neighbour
	in data
	"""
	if t0==None:
		t0 = scipy.array([0.0,0.0,0.0,0.0,0.0,0.0,1.0])
			
	data = scipy.array(data)
	
	def obj( t ):
		xR = transformRigid3D( X, t[:6] )
		xRS = transformScale3D( xR, scipy.ones(3)*t[6] )
		xRSTree = cKDTree(xRS)
		d = xRSTree.query( list(data) )[0]
		return d*d
		
	tOpt = leastsq( obj, t0, xtol=xtol, maxfev=maxfev )[0]
	XOpt = transformRigid3D( X, tOpt[:6] )
	XOpt = transformScale3D( XOpt, tOpt[6:] )
	
	return tOpt, XOpt
コード例 #8
0
def fitDataRigidAnisotropicScaleNoCorr( X, data, xtol=1e-5, maxfev=0, t0=None ):
	""" fit list of points X to list of points data by minimising
	least squares distance between each point in X and closest neighbour
	in data
	"""
	if t0==None:
		t0 = scipy.array([0.0,0.0,0.0,0.0,0.0,0.0,1.0,1.0,1.0])
			
	dataTree = cKDTree( data )
	X = scipy.array(X)
	
	def obj( t ):
		xR = transformRigid3D( X, t[:6] )
		xRS = transformScale3D( xR, t[6:])
		d = dataTree.query( list(xRS) )[0]
		#~ print d.mean()
		return d*d
		
	tOpt = leastsq( obj, t0, xtol=xtol, maxfev=maxfev )[0]
	XOpt = transformRigid3D( X, tOpt[:6] )
	XOpt = transformScale3D( XOpt, tOpt[6:] )
	
	return tOpt, XOpt
コード例 #9
0
def TransformingData (current_study_name,current_file):
	print ''
	print '==================================================='
	print '== Step 1 : Align Surface Data with the LV Model =='
	print '==================================================='
	print ''

	#####################################################################################
	##############============ Step 1.1(a): Read in the UPF data ==============############
	## Select files associated with DS
	for j in current_file:
			if re.search('_epi_DS',str(j)):
				filename_tmp=j
	
	filename='../Data/'+ filename_tmp
	UPFEpi=readSurfaceData(filename)
	noData_UPFEpi=len(UPFEpi)
	## Select files associated with DS
	for j in current_file:
			if re.search('_endo_DS',str(j)):
				filename_tmp=j

	filename='../Data/'+ filename_tmp
	UPFEndo=readSurfaceData(filename)
	noData_UPFEndo=len(UPFEndo)
	UPFTotal = concatenate((UPFEndo,UPFEpi),0)
	noData=len(UPFTotal)
	filename='../'+current_study_name +'/TransformedData/' + current_study_name + '_ds_lvepi.ipdata'
	groupname=current_study_name.replace("-","")
	writeIpdata(UPFEpi, filename, header=groupname+'_ds_lvepi')
	filename='../'+current_study_name +'/TransformedData/' + current_study_name + '_ds_lvendo.ipdata'
	writeIpdata(UPFEndo, filename, header=groupname+'_ds_lvendo')
	print '== Step 1.1 : Read in UPF Data  =='
	print 'The total number data in UPF is ', noData
	print ' '

	## Calculate the max x
	x_coor=UPFEpi[:,0]
	y_coor=UPFEpi[:,1]
	z_coor=UPFEpi[:,2]
	x_coor_mean=scipy.mean(x_coor)
	y_coor_mean=scipy.mean(y_coor)
	z_coor_mean=scipy.mean(z_coor)
	#####################################################################################

	##############======== Step 1.1(b): Remove Extra RV Endo points =========############
	print '== Step 1.1(b) : Remove extra RV Endo points at DS =='	
	index=[38,39,40,42,43,44,48,49,50,77,78,98,99,100,101,133,135,138,151,153,154,155,158,167,168,174,180,191,204,205,215,220,221,224,225,238,240,245,248,252,255,259,270,275,285,290,293,298,302,312,319,327,330,331,334,337,353,354,358,363,365,373,379,380,382,385,387,388,390,400,401,406,415,416,418,423,428,442,452,457,462,472,484,486,513,526,527,540,543,544,559,566,574,575,578,583,593,597,610,612,613,644,645,654,664,666,682,683,695,696,698,702,707,709,712,735,742,748,750,751,766,770,771,787,790,807,808,810,818,819,828,846,857,861,864,866,867,871,875,883,885,887,893,894,896,906,918,919,920,923,932,937,941,942,944,949,960,961,964,973,977,983,988,989,994,999,1002,1014,1018,1020,1024,1025,1027,1030,1039,1041,1048,1052,1054,1063,1067,1070,1079,1080,1087,1093,1101,1110,1116,1118]
	no_data_delete=len(index)
	print 'The total number of Endo points to be deleted is '
	print no_data_delete

	UPFEndo_trunc=[]
	j=0
	for i in range(0,noData_UPFEndo):
			if j<no_data_delete :
				if i!=(index[j]-1):
					UPFEndo_trunc.append(UPFEndo[i,:])
				else :
					j=j+1
			else :
				UPFEndo_trunc.append(UPFEndo[i,:])
							
	UPFEndo=array(UPFEndo_trunc)
	noData_UPFEndo_trunc=len(UPFEndo)
	print 'After deleting the extra RV points, the total number of Endo points is '
	print noData_UPFEndo_trunc
	
	filename='../'+current_study_name +'/TransformedData/' + current_study_name + '_ds_lvendo_trunc.ipdata'
	writeIpdata(UPFEndo, filename, header=groupname+'_ds_lvendo_trunc')
	
	#####################################################################################
	##############======== Step 1.2: Read in the Canine Surface data ==========############
	CanineEpi  = readIpdata('../../../LVModel/VickyCanineModel/LVModelEpi.ipdata')
	CanineEndo = readIpdata('../../../LVModel/VickyCanineModel/LVModelEndo.ipdata')
	CanineTotal = concatenate((CanineEndo,CanineEpi),0)
	noData=len(CanineTotal)
	print '== Step 1.2 : Read in Canine Data =='
	print 'The total number data in Canine is ', noData
	print ' '
	
	## Firstly translate the data
	UPFEpi_Trans=transformRigid3D( UPFEpi, scipy.hstack(([-x_coor_mean,-y_coor_mean,-z_coor_mean,0.0,0,0,0.0])) )
	UPFEndo_Trans=transformRigid3D(UPFEndo, scipy.hstack(([-x_coor_mean,-y_coor_mean,-z_coor_mean,0.0,0,0,0.0])) )
	filename='../'+current_study_name +'/TransformedData/' + current_study_name + '_ds_lvepi_Trans.ipdata'
	writeIpdata(UPFEpi_Trans, filename, header=groupname+'_ds_lvepi_Trans')
	filename='../'+current_study_name +'/TransformedData/' + current_study_name + '_ds_lvendo_Trans.ipdata'
	writeIpdata(UPFEndo_Trans, filename, header=groupname+'_ds_lvendo_Trans')
	
	UPFEpi=UPFEpi_Trans
	UPFEndo=UPFEndo_Trans
	
	
	#####################################################################################
	##########============= Step 1.3: Perform initial transformation ==============########
	##########========== to match canine surface data with UPF surface data =====########
	print '== Step 1.3 : Translate,Rotate and Scale the canine data to match UPF data =='
	## Write out the final scaling vector
	
	filename='../'+ current_study_name + '/GeometricModel_DS_' + current_study_name +'/TransformationMatrix_Scaling.TRN'
	
	[TransformationVector,CanineEpi_Transformed,CanineEndo_Transformed]= fitDataAnisotropicScaleRigidNoCorr_ModelTree_TwoSurfaces(CanineEpi,CanineEndo,UPFEpi,UPFEndo, filename,xtol=1e-5, maxfev=0, t0=None)
	print 'Transformation Vector from Canine to UPF with Anisotropic Scaling is '
	print TransformationVector
	print ' '
		
	## Import the transformation vector and compute the full transformation matrix
	TransformationMatrix_Full=constructTransformationMatrix(TransformationVector)
	
	#####################################################################################
	########========= Step 1.4: Inverse rigid transform the UPF data ==============########
	########======== Back transform UPF data to cardiac cooridinate system ======########
	print '== Step 1.4 : Back transform UPF to align with cardiac coordinate system =='
	UPFEpi_BackTransformed = inverseTransformRigid3D( UPFEpi, scipy.hstack(TransformationVector))
	UPFEndo_BackTransformed = inverseTransformRigid3D( UPFEndo, scipy.hstack(TransformationVector))
	CanineEpi_BackTransformed = inverseTransformRigid3D( CanineEpi_Transformed, scipy.hstack(TransformationVector))
	CanineEndo_BackTransformed = inverseTransformRigid3D( CanineEndo_Transformed, scipy.hstack(TransformationVector))

	#####################################################################################
	#########========= Step 1.5(a): Rotate the UPF data along the y and z axes ==========########
	print '== Step 1.5(a) : Rotate UPF data  =='
	x_apex = UPFEpi_BackTransformed[6,0]
	y_apex = UPFEpi_BackTransformed[6,1]	## Most Apical Epi data point
	z_apex = UPFEpi_BackTransformed[6,2]	## Most Apical Epi data point
	print 'The Y and Z coordinates of the most apical data points are ',y_apex,z_apex
	print ' '
	## Further rotate the UPF data
	apex_vector_length=scipy.sqrt(x_apex*x_apex+y_apex*y_apex+z_apex*z_apex)
	x_apex=x_apex/apex_vector_length
	y_apex=y_apex/apex_vector_length
	z_apex=z_apex/apex_vector_length
	theta_z=-scipy.arctan2(y_apex,x_apex)
	theta_y=scipy.arctan2(z_apex,x_apex)
	print theta_z
	print theta_y
	UPFEpi_BackTransformed_Rotated = transformRigid3D( UPFEpi_BackTransformed, scipy.hstack(([0.0,0.0,0.0,0.0,theta_y,theta_z])) )
	UPFEndo_BackTransformed_Rotated = transformRigid3D( UPFEndo_BackTransformed, scipy.hstack(([0.0,0.0,0.0,0.0,theta_y,theta_z])) )

	#####################################################################################
	#########========= Step 1.5(b): Rotate the UPF data along the long-axis ==========########
	####### to ensure y-axis goes through data point 1199 (center points in RV) #########

	## Print closest RV point
	print '== Step 1.5(b) : Rotate UPF data to align y-axis with RV =='
	print 'Cloest RV points'
	print UPFEpi_BackTransformed_Rotated[1270]
	print ' '
	## Define the theta angle for rigid rotation about long-axis to align y with RV
	theta=scipy.arctan2(UPFEpi_BackTransformed_Rotated[1270,2],UPFEpi_BackTransformed_Rotated[1270,1])
	print 'UPF data should be rotated along the x-axis by ', theta
	print ' '

	## Write the rotational angle to a file
	filename='../'+ current_study_name + '/GeometricModel_DS_' + current_study_name + '/TransformationMatrix_Scaling.TRN'
	writeTransformation_Rotation(theta/scipy.constants.pi*180,filename)
	## Perform rigid rotation about long-axis to align y-axis with RV for the UPF data
	UPFEpi_BackTransformed_FinalRotated = transformRigid3D( UPFEpi_BackTransformed_Rotated,scipy.hstack(([0.0,0.0,0.0,-theta,0.0,0.0])) )
	UPFEndo_BackTransformed_FinalRotated = transformRigid3D( UPFEndo_BackTransformed_Rotated, scipy.hstack(([0.0,0.0,0.0,-theta,0.0,0.0])) )

	## Perform rigid rotation about long-axis to align y-axis with RV for the canine data
	CanineEpi_BackTransformed_Rotated = transformRigid3D( CanineEpi_BackTransformed, scipy.hstack(([0.0,0.0,0.0,-theta,0.0,0.0])) )
	CanineEndo_BackTransformed_Rotated = transformRigid3D( CanineEndo_BackTransformed, scipy.hstack(([0.0,0.0,0.0,-theta,0.0,0.0])) )
	#####################################################################################

	#####################################################################################
	#############============= Step 1.6: WriteOut Transformed Data ===================#####
	## Create a folder to store output data
	print '== Step 1.6(a) : Write out transformed canine model data  =='
	filename='../'+current_study_name +'/TransformedData/TransformedCanine_Epi.ipdata'
	writeIpdata(CanineEpi_Transformed, filename, header='TransformedCanine_Epi')
	filename='../'+current_study_name +'/TransformedData/TransformedCanine_Endo.ipdata'
	writeIpdata(CanineEndo_Transformed, filename, header='TransformedCanine_Endo')
	
	print '== Step 1.6(b) : Write out backtransformed UPF data  =='
	filename='../'+current_study_name +'/TransformedData/BackTransformedUPF_Epi.ipdata'
	writeIpdata(UPFEpi_BackTransformed, filename, header='BackTransformedUPF_Epi')
	filename='../'+current_study_name +'/TransformedData/BackTransformedUPF_Endo.ipdata'
	writeIpdata(UPFEndo_BackTransformed, filename, header='BackTransformedUPF_Endo')
	
	print '== Step 1.6(c) : Write out backtransformed canine model  data  =='
	filename='../'+current_study_name +'/TransformedData/BackTransformedCanine_Epi.ipdata'
	writeIpdata(CanineEpi_BackTransformed, filename, header='BackTransformedCanine_Epi')
	filename='../'+current_study_name +'/TransformedData/BackTransformedCanine_Endo.ipdata'
	writeIpdata(CanineEndo_BackTransformed, filename, header='BackTransformedCanine_Endo')
	
	print '== Step 1.6(d) : Write out backtransformed canine model data after rotating along long-axis =='
	filename='../'+current_study_name +'/TransformedData/BackTransformedCanineRotated_Epi.ipdata'
	writeIpdata(CanineEpi_BackTransformed_Rotated, filename, header='BackTransformedCanineRotated_Epi')
	filename='../'+current_study_name +'/TransformedData/BackTransformedCanineRotated_Endo.ipdata'
	writeIpdata(CanineEndo_BackTransformed_Rotated, filename, header='BackTransformedCanineRotated_Endo')

	print '== Step 1.6(e) : Write out backtransformed UPF data after rotating along y and z axes =='
	filename='../'+current_study_name +'/TransformedData/BackTransformedUPFRotated_Epi.ipdata'
	writeIpdata(UPFEpi_BackTransformed_Rotated, filename, header='BackTransformedUPFRotated_Epi')
	filename='../'+current_study_name +'/TransformedData/BackTransformedUPFRotated_Endo.ipdata'
	writeIpdata(UPFEndo_BackTransformed_Rotated, filename, header='BackTransformedUPFRotated_Endo')

	print '== Step 1.6(f) : Write out backtransformed UPF data after rotating along long-axis =='
	filename='../'+current_study_name +'/TransformedData/BackTransformedUPFFinalRotated_Epi.ipdata'
	writeIpdata(UPFEpi_BackTransformed_FinalRotated, filename, header='BackTransformedUPFFinalRotated_Epi')
	filename='../'+current_study_name +'/TransformedData/BackTransformedUPFFinalRotated_Endo.ipdata'
	writeIpdata(UPFEndo_BackTransformed_FinalRotated, filename, header='BackTransformedUPFFinalRotated_Endo')
	
	#####################################################################################
	########### Step 1.7: Apply transformation to the ED surface data #####################

	## Select files associated with ED
	for j in current_file:
			if re.search('_epi_ED',str(j)):
				filename_tmp=j
	
	filename='../Data/'+ filename_tmp
	UPFEpi_ED=readSurfaceData(filename)
	noData_UPFEpi_ED=len(UPFEpi_ED)

	for j in current_file:
			if re.search('_endo_ED',str(j)):
				filename_tmp=j
	
	filename='../Data/'+ filename_tmp
	UPFEndo_ED=readSurfaceData(filename)
	noData_UPFEndo_ED=len(UPFEndo_ED)
	UPFTotal_ED = concatenate((UPFEndo_ED,UPFEpi_ED),0)
	noData=len(UPFTotal_ED)
	filename='../'+current_study_name +'/TransformedData/' + current_study_name + '_ed_lvepi.ipdata'
	writeIpdata(UPFEpi_ED, filename, header=groupname+'_ed_lvepi')
	filename='../'+current_study_name +'/TransformedData/' + current_study_name + '_ed_lvendo.ipdata'
	writeIpdata(UPFEndo_ED, filename, header=groupname+'_ed_lvendo')
	print '================ Step 1.7(a) : Read in UPF Data  at ED ===================='
	print 'The total number data in UPF is ', noData
	print ' '
	
	##############======== Step 1.7(b): Remove Extra RV Endo points =========############
	print '== Step 1.7(b) : Remove extra RV Endo points at ED =='
	index=[38,39,40,42,43,44,48,49,50,77,78,98,99,100,101,133,135,138,151,153,154,155,158,167,168,174,180,191,204,205,215,220,221,224,225,238,240,245,248,252,255,259,270,275,285,290,293,298,302,312,319,327,330,331,334,337,353,354,358,363,365,373,379,380,382,385,387,388,390,400,401,406,415,416,418,423,428,442,452,457,462,472,484,486,513,526,527,540,543,544,559,566,574,575,578,583,593,597,610,612,613,644,645,654,664,666,682,683,695,696,698,702,707,709,712,735,742,748,750,751,766,770,771,787,790,807,808,810,818,819,828,846,857,861,864,866,867,871,875,883,885,887,893,894,896,906,918,919,920,923,932,937,941,942,944,949,960,961,964,973,977,983,988,989,994,999,1002,1014,1018,1020,1024,1025,1027,1030,1039,1041,1048,1052,1054,1063,1067,1070,1079,1080,1087,1093,1101,1110,1116,1118]
	no_data_delete=len(index)
	print 'The total number of Endo points to be deleted is '
	print no_data_delete

	UPFEndo_ED_trunc=[]
	j=0
	for i in range(0,noData_UPFEndo_ED):
			if j<no_data_delete :
				if i!=(index[j]-1):
					UPFEndo_ED_trunc.append(UPFEndo_ED[i,:])
				else :
					j=j+1
			else :
				UPFEndo_ED_trunc.append(UPFEndo_ED[i,:])
			
			
	
	UPFEndo_ED=array(UPFEndo_ED_trunc)
	noData_UPFEndo_trunc=len(UPFEndo_ED)
	print 'After deleting the extra RV points, the total number of Endo points is '
	print noData_UPFEndo_trunc

	filename='../'+current_study_name +'/TransformedData/' + current_study_name + '_ed_lvendo_trunc.ipdata'
	writeIpdata(UPFEndo_ED, filename, header=groupname+'_ed_lvendo_trunc')


	## Firstly translate the data
	UPFEpi_ED_Trans=transformRigid3D( UPFEpi_ED, scipy.hstack(([-x_coor_mean,-y_coor_mean,-z_coor_mean,0.0,0,0,0.0])) )
	UPFEndo_ED_Trans=transformRigid3D(UPFEndo_ED, scipy.hstack(([-x_coor_mean,-y_coor_mean,-z_coor_mean,0.0,0,0,0.0])) )
	filename='../'+current_study_name +'/TransformedData/' + current_study_name + '_ed_lvepi_Trans.ipdata'
	writeIpdata(UPFEpi_ED_Trans, filename, header=groupname+'_ed_lvepi_Trans')
	filename='../'+current_study_name +'/TransformedData/' + current_study_name + '_ed_lvendo_Trans.ipdata'
	writeIpdata(UPFEndo_ED_Trans, filename, header=groupname+'_ed_lvendo_Trans')
	
	UPFEpi_ED=UPFEpi_ED_Trans
	UPFEndo_ED=UPFEndo_ED_Trans
	
	print '== Step 1.7(c) : Back-transform the UPF data at ED =='
	UPFEpi_ED_BackTransformed = inverseTransformRigid3D( UPFEpi_ED, scipy.hstack(TransformationVector))
	UPFEndo_ED_BackTransformed = inverseTransformRigid3D( UPFEndo_ED, scipy.hstack(TransformationVector))

	print '== Step 1.7(d) : Rotate UPF data at ED along y and z axes =='
	UPFEpi_ED_BackTransformed_Rotated = transformRigid3D( UPFEpi_ED_BackTransformed, scipy.hstack(([0.0,0.0,0.0,0.0,theta_y,theta_z])) )
	UPFEndo_ED_BackTransformed_Rotated = transformRigid3D( UPFEndo_ED_BackTransformed, scipy.hstack(([0.0,0.0,0.0,0.0,theta_y,theta_z])) )

	print '== Step 1.7(e) : Rotate UPF data at ED to align y-axis with RV =='
	UPFEpi_ED_BackTransformed_FinalRotated = transformRigid3D( UPFEpi_ED_BackTransformed_Rotated, scipy.hstack(([0.0,0.0,0.0,-theta,0.0,0.0])) )
	UPFEndo_ED_BackTransformed_FinalRotated = transformRigid3D( UPFEndo_ED_BackTransformed_Rotated, scipy.hstack(([0.0,0.0,0.0,-theta,0.0,0.0])) )

	print '== Step 1.7(f) : Write out the transformed data at ED =='
	filename='../'+current_study_name +'/TransformedData/BackTransformedUPFFinalRotated_Epi_ED.ipdata'
	writeIpdata(UPFEpi_ED_BackTransformed_FinalRotated, filename, header='BackTransformedUPFFinalRotated_Epi_ED')
	filename='../'+current_study_name +'/TransformedData/BackTransformedUPFFinalRotated_Endo_ED.ipdata'
	writeIpdata(UPFEndo_ED_BackTransformed_FinalRotated, filename, header='BackTransformedUPFFinalRotated_Endo_ED')
	
	#####################################################################################
	########### Step 1.8: Apply transformation to the ES surface data #####################
	## Select files associated with ED
	for j in current_file:
			if re.search('_epi_ES',str(j)):
				filename_tmp=j
	
	filename='../Data/'+ filename_tmp	
	UPFEpi_ES=readSurfaceData(filename)
	noData_UPFEpi_ES=len(UPFEpi_ES)

	for j in current_file:
			if re.search('_endo_ES',str(j)):
				filename_tmp=j
	
	filename='../Data/'+ filename_tmp
	UPFEndo_ES=readSurfaceData(filename)
	noData_UPFEndo_ES=len(UPFEndo_ES)
	UPFTotal_ES = concatenate((UPFEndo_ES,UPFEpi_ES),0)
	noData=len(UPFTotal_ES)
	filename='../'+current_study_name +'/TransformedData/' + current_study_name + '_es_lvepi.ipdata'
	writeIpdata(UPFEpi_ES, filename, header=groupname+'_es_lvepi')
	filename='../'+current_study_name +'/TransformedData/' + current_study_name + '_es_lvendo.ipdata'
	writeIpdata(UPFEndo_ES, filename, header=groupname+'_es_lvendo')
	print '== Step 1.8(a) : Read in UPF Data  at ES =='
	print 'The total number data in UPF is ', noData
	print ' '
	
	##############======== Step 1.8(b): Remove Extra RV Endo points =========############
	print '== Step 1.8(b) : Remove extra RV Endo points at ES =='
	index=[38,39,40,42,43,44,48,49,50,77,78,98,99,100,101,133,135,138,151,153,154,155,158,167,168,174,180,191,204,205,215,220,221,224,225,238,240,245,248,252,255,259,270,275,285,290,293,298,302,312,319,327,330,331,334,337,353,354,358,363,365,373,379,380,382,385,387,388,390,400,401,406,415,416,418,423,428,442,452,457,462,472,484,486,513,526,527,540,543,544,559,566,574,575,578,583,593,597,610,612,613,644,645,654,664,666,682,683,695,696,698,702,707,709,712,735,742,748,750,751,766,770,771,787,790,807,808,810,818,819,828,846,857,861,864,866,867,871,875,883,885,887,893,894,896,906,918,919,920,923,932,937,941,942,944,949,960,961,964,973,977,983,988,989,994,999,1002,1014,1018,1020,1024,1025,1027,1030,1039,1041,1048,1052,1054,1063,1067,1070,1079,1080,1087,1093,1101,1110,1116,1118]
	no_data_delete=len(index)
	print 'The total number of Endo points to be deleted is '
	print no_data_delete

	UPFEndo_ES_trunc=[]
	j=0
	for i in range(0,noData_UPFEndo_ES):
			if j<no_data_delete :
				if i!=(index[j]-1):
					UPFEndo_ES_trunc.append(UPFEndo_ES[i,:])
				else :
					j=j+1
			else :
				UPFEndo_ES_trunc.append(UPFEndo_ES[i,:])
			
			
	
	UPFEndo_ES=array(UPFEndo_ES_trunc)
	noData_UPFEndo_trunc=len(UPFEndo_ES)
	print 'After deleting the extra RV points, the total number of Endo points is '
	print noData_UPFEndo_trunc

	filename='../'+current_study_name +'/TransformedData/' + current_study_name + '_es_lvendo_trunc.ipdata'
	writeIpdata(UPFEndo_ES, filename, header=groupname+'_ES_lvendo_trunc')
	
	## Firstly translate the data
	UPFEpi_ES_Trans=transformRigid3D( UPFEpi_ES, scipy.hstack(([-x_coor_mean,-y_coor_mean,-z_coor_mean,0.0,0,0,0.0])) )
	UPFEndo_ES_Trans=transformRigid3D(UPFEndo_ES, scipy.hstack(([-x_coor_mean,-y_coor_mean,-z_coor_mean,0.0,0,0,0.0])) )
	filename='../'+current_study_name +'/TransformedData/' + current_study_name + '_es_lvepi_Trans.ipdata'
	writeIpdata(UPFEpi_ES_Trans, filename, header=groupname+'_es_lvepi_Trans')
	filename='../'+current_study_name +'/TransformedData/' + current_study_name + '_es_lvendo_Trans.ipdata'
	writeIpdata(UPFEndo_ES_Trans, filename, header=groupname+'_es_lvendo_Trans')
	
	UPFEpi_ES=UPFEpi_ES_Trans
	UPFEndo_ES=UPFEndo_ES_Trans

	print '== Step 1.8(c) : Back-transform the UPF data at ES =='
	UPFEpi_ES_BackTransformed = inverseTransformRigid3D( UPFEpi_ES, scipy.hstack(TransformationVector))
	UPFEndo_ES_BackTransformed = inverseTransformRigid3D( UPFEndo_ES, scipy.hstack(TransformationVector))

	print '== Step 1.8(d) : Rotate UPF data at ES along y and z axes =='
	UPFEpi_ES_BackTransformed_Rotated = transformRigid3D( UPFEpi_ES_BackTransformed, scipy.hstack(([0.0,0.0,0.0,0.0,theta_y,theta_z])) )
	UPFEndo_ES_BackTransformed_Rotated = transformRigid3D( UPFEndo_ES_BackTransformed, scipy.hstack(([0.0,0.0,0.0,0.0,theta_y,theta_z])) )

	print '== Step 1.8(e) : Rotate UPF data at ES to align y-axis with RV =='
	UPFEpi_ES_BackTransformed_FinalRotated = transformRigid3D( UPFEpi_ES_BackTransformed_Rotated, scipy.hstack(([0.0,0.0,0.0,-theta,0.0,0.0])) )
	UPFEndo_ES_BackTransformed_FinalRotated = transformRigid3D( UPFEndo_ES_BackTransformed_Rotated, scipy.hstack(([0.0,0.0,0.0,-theta,0.0,0.0])) )

	print '== Step 1.8(f) : Write out the transformed data at ES =='
	filename='../'+current_study_name +'/TransformedData/BackTransformedUPFFinalRotated_Epi_ES.ipdata'
	writeIpdata(UPFEpi_ES_BackTransformed_FinalRotated, filename, header='BackTransformedUPFFinalRotated_Epi_ES')
	filename='../'+current_study_name +'/TransformedData/BackTransformedUPFFinalRotated_Endo_ES.ipdata'
	writeIpdata(UPFEndo_ES_BackTransformed_FinalRotated, filename, header='BackTransformedUPFFinalRotated_Endo_ES')
	
	return
コード例 #10
0
	def obj( t ):
		xR = transformRigid3D( X, t[:6] )
		xRS = transformScale3D( xR, t[6:] )
		xRSTree = cKDTree(xRS)
		d = xRSTree.query( list(data) )[0]
		return d*d
コード例 #11
0
	def obj( t ):
		xR = transformRigid3D( X, t[:6] )
		xRS = transformScale3D( xR, t[6:])
		d = dataTree.query( list(xRS) )[0]
		#~ print d.mean()
		return d*d
コード例 #12
0
 def obj(x):
     dataT = transformRigid3D(data, x)
     d = ((dataT - target) ** 2.0).sum(1)
     rmsD = scipy.sqrt(d.mean())
     return rmsD
コード例 #13
0
 def obj(x):
     dataT = transformRigid3D(data, x)
     d = ((dataT - target) ** 2.0).sum(1)
     return d
コード例 #14
0
 def obj(t):
     x = transformRigid3D(X, scipy.hstack((t, [0.0, 0.0, 0.0])))
     d = dataTree.query(list(x))[0]
     # ~ print d.mean()
     return d * d
コード例 #15
0
 def obj(t):
     x = transformRigid3D(X, t)
     d = dataTree.query(list(x))[0]
     # ~ print d.mean()
     return d * d