Files
slm/wavef/pha_wavef copy.py
wxchen ba13a3f053 Initial commit
new file:   Copy_of_Exz_with_hamamatsu.m
	new file:   Exz_mod.m
	new file:   Exz_with_hamamatsu.m
	new file:   GS.m
	new file:   MRAF.m
	new file:   MRAF_8bit.bmp
	new file:   PSF of spherical aberration/Exz.m
	new file:   PSF of spherical aberration/Thumbs.db
	new file:   PSF of spherical aberration/josaa-12-10-2136.pdf
	new file:   PSF of spherical aberration/josaa-12-2-325.pdf
	new file:   PSF of spherical aberration/main.m
	new file:   "PSF of spherical aberration/\351\207\215\350\246\201psf\346\226\207\347\214\256.pdf"
	new file:   Spherical_aberration_SiminCao.m
	new file:   gen_m.m
	new file:   gen_rectangle.m
	new file:   hamamatsu.m
	new file:   m.tif
	new file:   m2.tif
	new file:   photo/50-30.BMP
	new file:   photo/8bit_50-30.BMP
	new file:   photo/8bit_ellipse.BMP
	new file:   photo/convert_8bit.exe
	new file:   photo/ellipse.BMP
	new file:   rect_MRAF_SiminCao.m
	new file:   rectangle.tif
	new file:   size/.vscode/settings.json
	new file:   size/black_c_20THSize_4f_1.064lamda.bmp
	new file:   size/black_c_30THSize_4f_61.064lamda.bmp
	new file:   size/black_output.bmp
	new file:   size/black_rect_30THSize_4f_1.064lamda.bmp
	new file:   size/black_rect_30THSize_4f_6_1.064lamda.bmp
	new file:   size/c_20THSize_4f_1.064lamda.bmp
	new file:   size/c_20THSize_4f_1.064lamda_resize.bmp
	new file:   size/c_30THSize_4f_61.064lamda.bmp
	new file:   size/c_30THSize_4f_61.064lamda_resize.bmp
	new file:   size/noisy_output.bmp
	new file:   size/output.bmp
	new file:   size/rect_30THSize_4f_1.064lamda.bmp
	new file:   size/rect_30THSize_4f_1.064lamda_resize.bmp
	new file:   size/rect_30THSize_4f_6_1.064lamda.bmp
	new file:   size/rect_30THSize_4f_6_1.064lamda_resize.bmp
	new file:   size/resize_4.7z
	new file:   size/resize_black.7z
	new file:   size/size copy.py
	new file:   size/size.py
	new file:   size/wave.7z
	new file:   sp.m
	new file:   to8bit.m
	new file:   trans_8bit.zip
	new file:   wavef/A.bmp
	new file:   wavef/B_linear.bmp
	new file:   wavef/PHA SID230828-2003.csv
	new file:   wavef/PHA_bilinear_1280_1024.csv
	new file:   wavef/PHA_bilinear_reversal.csv
	new file:   wavef/PHA_output_1280_1024.csv
	new file:   wavef/Untitled-1.py
	new file:   wavef/filled.bmp
	new file:   wavef/from PIL import Image.py
	new file:   wavef/matrix_filled.csv
	new file:   wavef/output.bmp
	new file:   wavef/output.csv
	new file:   wavef/output2.bmp
	new file:   wavef/pha_wavef copy.py
	new file:   wavef/pha_wavef.py
	new file:   wavef/pha_wavef_step.py
	new file:   wavef/wavef.zip
	new file:   wavef/xy_values.csv
	new file:   "wavef/\346\226\260\345\273\272\346\226\207\344\273\266\345\244\271/matrix.csv"
	new file:   "wavef/\346\226\260\345\273\272\346\226\207\344\273\266\345\244\271/matrix_filled.csv"
2023-08-29 23:06:40 +08:00

56 lines
1.5 KiB
Python

import numpy as np
import pandas as pd
from scipy.spatial import KDTree
from PIL import Image
# 读取CSV文件
data = np.genfromtxt('PHA SID230828-2003.csv', delimiter=',')
# 创建矩阵A
A = np.zeros((120, 120))
A[:data.shape[0], :data.shape[1]] = data
# 创建矩阵B
B = np.zeros((1280, 1024))
# 进行映射和填充已知点
for u in range(120):
for v in range(120):
x = 0.211 * u - 4.538 * v + 894.754
y = -4.594 * u - 0.1044 * v + 800.7384
# 判断坐标是否在矩阵B的范围内
if 0 <= int(x) < 1280 and 0 <= int(y) < 1024:
B[int(x), int(y)] = A[u, v]
# 寻找未知点的最近邻并进行填充
known_points = np.argwhere(B != 0) # 获取已知点的坐标
tree = KDTree(known_points) # 构建KD树
unknown_points = np.argwhere(B == 0) # 获取未知点的坐标
for u, v in unknown_points:
x = 0.211 * u - 4.538 * v + 894.754
y = -4.594 * u - 0.1044 * v + 800.7384
# 寻找最近邻点的索引
_, idx = tree.query([u, v])
nearest_point = known_points[idx]
nearest_u, nearest_v = nearest_point[0], nearest_point[1]
# 用最近邻点的值填充未知点
B[u, v] = B[nearest_u, nearest_v]
# 将矩阵B保存为CSV文件
df = pd.DataFrame(B)
df.to_csv('output.csv', index=False, header=False)
matrix_B = B.copy()
# 将矩阵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('output2.bmp')