SIMOrthoProgram-Orth_LT1AB-.../Ortho/tool/algorithm/polsarpro/bin2tif.py

86 lines
3.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import os
import glob
import numpy as np
import struct
from PIL import Image
from tool.algorithm.ml.machineLearning import MachineLeaning as ml
def read_bin_to_img(bin_path):
"""
读取bin格式二进制数据输出为矩阵
:param bin_path : bin文件的路径包含.bin,.config
:return : 矩阵信息
"""
(bin_dir, bin_name) = os.path.split(bin_path)
config_path = os.path.join(bin_dir, 'config.txt')
config = open(config_path, 'r').read().split('\n', -1)
rows = int(config[1])
cols = int(config[4])
bin_file = open(bin_path, 'rb') # 打开二进制文件
size = os.path.getsize(bin_path) # 获得文件大小
if size < rows * cols * 4:
raise Exception(
'bin size less than rows*cols*4! size:',
size,
'byte, rows:',
rows,
'cols:',
cols)
img = np.zeros([rows, cols], dtype=np.float32)
for row in range(rows):
data = bin_file.read(4 * cols) # 每次读取一行的二进制数据
row_data = struct.unpack('f' * cols, data) # 转为一行float数据
img[row, :] = row_data
bin_file.close()
return img
def write_bin_to_tif(out_tif_dir, bin_dir):
"""
读取H-A-Alpha分解二进制数据输出为矩阵格式的字典
:param out_tif_dir : tif的输出路径
:param bin_dir : 二进制数据的目录,包含.bin,.config
:return out_tif_path: 生成tif的路径字典
"""
bin_paths = list(glob.glob(os.path.join(bin_dir, '*.bin')))
out_tif_path = {}
for in_path in bin_paths:
name = os.path.split(in_path)[1].split('.')[0]
out_path = os.path.join(out_tif_dir, name + '.tif')
out_tif_path.update({name: out_path})
if os.path.exists(os.path.split(out_path)[0]) is False:
os.makedirs(os.path.split(out_path)[0])
img_array = read_bin_to_img(in_path)
img_array[np.isnan(img_array)] = 0 # 异常值填充为0
img_array = ml.standardization(img_array) # 数据标准化到[0,1]
out_image = Image.fromarray(img_array)
out_image.save(out_path)
return out_tif_path
def write_bin_to_tif_soil(out_tif_dir, bin_dir):
"""
读取H-A-Alpha分解二进制数据输出为矩阵格式的字典
:param out_tif_dir : tif的输出路径
:param bin_dir : 二进制数据的目录,包含.bin,.config
:return out_tif_path: 生成tif的路径字典
"""
bin_paths = list(glob.glob(os.path.join(bin_dir, '*.bin')))
out_tif_path = {}
for in_path in bin_paths:
name = os.path.split(in_path)[1].split('.')[0]
out_path = os.path.join(out_tif_dir, name + '.tif')
out_tif_path.update({name: out_path})
if os.path.exists(os.path.split(out_path)[0]) is False:
os.makedirs(os.path.split(out_path)[0])
img_array = read_bin_to_img(in_path)
img_array[np.isnan(img_array)] = 0 # 异常值填充为0
# img_array = ml.standardization(img_array) # 数据标准化到[0,1]
out_image = Image.fromarray(img_array)
out_image.save(out_path)
return out_tif_path