python读取InSAR复数数据

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()
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值