parent
2637bb6a9e
commit
fd28d2e126
|
@ -755,146 +755,3 @@ def reformatMaskedAreas(maskedAreas, length, width):
|
|||
return maskedAreasReformated
|
||||
|
||||
|
||||
########################################################################################################
|
||||
# The following functions are not used anywhere, and can be deleted.
|
||||
########################################################################################################
|
||||
|
||||
def fit_surface(x, y, z, wgt, order):
|
||||
# x: x coordinate, a column vector
|
||||
# y: y coordinate, a column vector
|
||||
# z: z coordinate, a column vector
|
||||
# wgt: weight of the data points, a column vector
|
||||
|
||||
|
||||
#number of data points
|
||||
m = x.shape[0]
|
||||
l = np.ones((m,1), dtype=np.float64)
|
||||
|
||||
# #create polynomial
|
||||
# if order == 1:
|
||||
# #order of estimated coefficents: 1, x, y
|
||||
# a1 = np.concatenate((l, x, y), axis=1)
|
||||
# elif order == 2:
|
||||
# #order of estimated coefficents: 1, x, y, x*y, x**2, y**2
|
||||
# a1 = np.concatenate((l, x, y, x*y, x**2, y**2), axis=1)
|
||||
# elif order == 3:
|
||||
# #order of estimated coefficents: 1, x, y, x*y, x**2, y**2, x**2*y, y**2*x, x**3, y**3
|
||||
# a1 = np.concatenate((l, x, y, x*y, x**2, y**2, x**2*y, y**2*x, x**3, y**3), axis=1)
|
||||
# else:
|
||||
# raise Exception('order not supported yet\n')
|
||||
|
||||
if order < 1:
|
||||
raise Exception('order must be larger than 1.\n')
|
||||
|
||||
#create polynomial
|
||||
a1 = l;
|
||||
for i in range(1, order+1):
|
||||
for j in range(i+1):
|
||||
a1 = np.concatenate((a1, x**(i-j)*y**(j)), axis=1)
|
||||
|
||||
#number of variable to be estimated
|
||||
n = a1.shape[1]
|
||||
|
||||
#do the least squares
|
||||
a = a1 * np.matlib.repmat(np.sqrt(wgt), 1, n)
|
||||
b = z * np.sqrt(wgt)
|
||||
c = np.linalg.lstsq(a, b, rcond=-1)[0]
|
||||
|
||||
#type: <class 'numpy.ndarray'>
|
||||
return c
|
||||
|
||||
|
||||
def cal_surface(x, y, c, order):
|
||||
#x: x coordinate, a row vector
|
||||
#y: y coordinate, a column vector
|
||||
#c: coefficients of polynomial from fit_surface
|
||||
#order: order of polynomial
|
||||
|
||||
if order < 1:
|
||||
raise Exception('order must be larger than 1.\n')
|
||||
|
||||
#number of lines
|
||||
length = y.shape[0]
|
||||
#number of columns, if row vector, only one element in the shape tuple
|
||||
#width = x.shape[1]
|
||||
width = x.shape[0]
|
||||
|
||||
x = np.matlib.repmat(x, length, 1)
|
||||
y = np.matlib.repmat(y, 1, width)
|
||||
z = c[0] * np.ones((length,width), dtype=np.float64)
|
||||
|
||||
index = 0
|
||||
for i in range(1, order+1):
|
||||
for j in range(i+1):
|
||||
index += 1
|
||||
z += c[index] * x**(i-j)*y**(j)
|
||||
|
||||
return z
|
||||
|
||||
|
||||
def weight_fitting(ionos, weight, width, length, nrli, nali, nrlo, nalo, order):
|
||||
'''
|
||||
ionos: input ionospheric phase
|
||||
weight: weight
|
||||
width: file width
|
||||
length: file length
|
||||
nrli: number of range looks of the input interferograms
|
||||
nali: number of azimuth looks of the input interferograms
|
||||
nrlo: number of range looks of the output ionosphere phase
|
||||
nalo: number of azimuth looks of the ioutput ionosphere phase
|
||||
order: the order of the polynomial for fitting ionosphere phase estimates
|
||||
'''
|
||||
|
||||
from isceobj.Alos2Proc.Alos2ProcPublic import create_multi_index2
|
||||
|
||||
lengthi = int(length/nali)
|
||||
widthi = int(width/nrli)
|
||||
lengtho = int(length/nalo)
|
||||
widtho = int(width/nrlo)
|
||||
|
||||
#calculate output index
|
||||
rgindex = create_multi_index2(widtho, nrli, nrlo)
|
||||
azindex = create_multi_index2(lengtho, nali, nalo)
|
||||
|
||||
#look for data to use
|
||||
flag = (weight!=0)*(ionos!=0)
|
||||
point_index = np.nonzero(flag)
|
||||
m = point_index[0].shape[0]
|
||||
|
||||
#calculate input index matrix
|
||||
x0=np.matlib.repmat(np.arange(widthi), lengthi, 1)
|
||||
y0=np.matlib.repmat(np.arange(lengthi).reshape(lengthi, 1), 1, widthi)
|
||||
|
||||
x = x0[point_index].reshape(m, 1)
|
||||
y = y0[point_index].reshape(m, 1)
|
||||
z = ionos[point_index].reshape(m, 1)
|
||||
w = weight[point_index].reshape(m, 1)
|
||||
|
||||
#convert to higher precision type before use
|
||||
x=np.asfarray(x,np.float64)
|
||||
y=np.asfarray(y,np.float64)
|
||||
z=np.asfarray(z,np.float64)
|
||||
w=np.asfarray(w,np.float64)
|
||||
coeff = fit_surface(x, y, z, w, order)
|
||||
|
||||
#convert to higher precision type before use
|
||||
rgindex=np.asfarray(rgindex,np.float64)
|
||||
azindex=np.asfarray(azindex,np.float64)
|
||||
phase_fit = cal_surface(rgindex, azindex.reshape(lengtho, 1), coeff, order)
|
||||
|
||||
#format: widtho, lengtho, single band float32
|
||||
return phase_fit
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue