import numpy as np import pandas as pd from scipy.interpolate import griddata from PIL import Image # 读取CSV文件并填充矩阵A data = pd.read_csv('PHA SID230828-2003.csv', header=None) matrix_A = data.values # matrix_A = np.flipud(matrix_A) # 获取已知点和对应的值 known_points = [] known_values = [] for u in range(120): for v in range(120): if matrix_A[u, v] != 0: x = int(0.211 * u - 4.538 * v + 894.754) y = int(-4.594 * u - 0.1044 * v + 800.7384) if u == 27 and v == 15: print(x, y) known_points.append([x, y]) known_values.append(matrix_A[u, v]) known_points = np.array(known_points) known_values = np.array(known_values) # 创建一个1280x1024的矩阵 matrix_size = (1280, 1024) matrix = np.zeros(matrix_size) # 根据已知点和对应的值填充矩阵 for i in range(len(known_points)): x, y = known_points[i] value = known_values[i] matrix[x, y] = value print(matrix.shape) # 生成网格点坐标 grid_x, grid_y = np.mgrid[0:matrix_size[0], 0:matrix_size[1]] # 使用双线性插值填充未知点 points = np.transpose(np.nonzero(matrix == 0)) filled_values = griddata(known_points, known_values, points, method='linear') # 将填充后的值放入矩阵 for i in range(len(points)): x, y = points[i] value = filled_values[i] matrix[x, y] = value # 将矩阵中的未知位置填充为0 matrix = np.nan_to_num(matrix, nan=0) # 将矩阵保存为CSV文件 df = pd.DataFrame(matrix) df.to_csv('matrix_filled.csv', index=False, header=False) # # 将矩阵保存为CSV文件 # df = pd.DataFrame(matrix) # df.to_csv('matrix.csv', index=False, header=False) matrix_B = matrix.copy() print(matrix_B.shape) matrix_c = np.where(matrix_B != 0, matrix_B * 217, matrix_B) image_filled = Image.fromarray(matrix_c.astype(np.uint8)) # 保存为BMP图像 image_filled.save('filled.bmp') # 将矩阵B中的非零值取反 matrix_B = np.where(matrix_B != 0, -matrix_B, matrix_B) # 对负数进行+1操作 matrix_B = np.where(matrix_B < 0, matrix_B + 1, matrix_B) # 再次对负数进行+1操作 matrix_B = np.where(matrix_B < 0, matrix_B + 1, matrix_B) # 将矩阵B保存为CSV文件 df = pd.DataFrame(matrix_B) df.to_csv('PHA_bilinear_reversal.csv', header=False, index=False) # 将矩阵B中的非零值映射到灰度值范围 matrix_B = np.where(matrix_B != 0, matrix_B * 217, matrix_B) # 将矩阵B转换为8位灰度图像 image = Image.fromarray(matrix_B.astype(np.uint8)) # 保存为BMP图像 image.save('output.bmp')