python读取InSAR复数数据
InSAR复数数据的读取,如:fint(滤波后相位),dint(滤波前相位)等
注:注意行列号输入正确!
转载请标明出处,谢谢!
注:有任何问题请私信或评论!
import numpy as np
import math
import os
import matplotlib.pyplot as plt
import struct
import matplotlib
def xshow(filename, nx, nz):
f = open(filename, 'rb')
pic = np.zeros((nx, nz))
for i in range(nx):
for j in range(nz):
data = f.read(4)
elem = struct.unpack("f", data)[0]
pic[i][j] = elem
f.close()
return pic
def ReadFloatComplex(file_path, col: int, row: int):
"""
:param file_path: float_complex
:param col: samples
:param row: lines
:return: phase,intensity data
"""
# 读取数据
row = row*2
Data_RealImag = xshow(filename=file_path, nx=col, nz=row)
coldiv2 = math.floor(row / 2.0)
# 实部、虚部数据在复数数据中的索引
Real_Index = list(range(0, row - 1, 2))
Imag_Index = list(range(1, row, 2))
# 提取实部数据
real = []
for i in range(coldiv2):
Col_Ctl_Real = Real_Index[i]
Data_Real = Data_RealImag[:, Col_Ctl_Real]
real.append(Data_Real)
# list转numpy
real = np.array(real)
# print('real is {}'.format(real))
# 提取虚部数据
imag = []
for j in range(coldiv2):
Col_Ctl_Imag = Imag_Index[j]
Data_Imag = Data_RealImag[:, Col_Ctl_Imag]
imag.append(Data_Imag)
# list转numpy
imag = np.array(imag)
# print('imag is {}'.format(imag))
# 合成复数数据
Data = real + 1j * imag
# 相位数据
phase = np.angle(Data)
phase = np.transpose(phase)
# 零值转为nan
phase[phase == 0] = np.nan
# 强度数据
intensity = abs(Data)
intensity = np.transpose(intensity)
# 零值转为nan
intensity[intensity == 0] = np.nan
return phase, intensity
if __name__ == '__main__':
# -------------------------------------------------参数设置---------------------------------------------------------
file = r'' # 复数数据路径
col = # 行列号
row = # 行列号
phase, intensity = ReadFloatComplex(file_path=file, col=col, row=row)
norm = matplotlib.colors.Normalize(vmin=-1, vmax=1)
plt.imshow(phase, cmap='jet')
plt.colorbar()
plt.show()
plt.imshow(intensity, cmap='gray', norm=norm)
plt.colorbar()
plt.show()