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) print(matrix_A[27,15]) # 获取已知点和对应的值 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 # 将矩阵保存为CSV文件 df = pd.DataFrame(matrix) df.to_csv('matrix.csv', index=False, header=False) # 创建矩阵B的网格坐标 x = np.linspace(0, 1279, 1280) y = np.linspace(0, 1023, 1024) xx, yy = np.meshgrid(x, y) # 保存 x 和 y 的值到 CSV 文件 xy_values = np.column_stack((xx.flatten(), yy.flatten())) df_xy = pd.DataFrame(xy_values, columns=['x', 'y']) df_xy.to_csv('xy_values.csv', index=False) # 使用双线性插值进行插值 matrix_B = griddata(known_points, known_values, (xx, yy), method='linear') # 将矩阵B中的未知位置填充为0 matrix_B = np.nan_to_num(matrix_B, nan=0) # # 保存中间图像 # matrix_B_gray = matrix_B * (255 / np.max(matrix_B)) # matrix_B_gray = matrix_B_gray.astype(np.uint8) # image = Image.fromarray(matrix_B_gray, mode='L') # image.save('B_linear.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')