本脚本是一个基于 Tkinter 的畸变校正小工具,用于:
- 读取畸变参数 Excel(标定点的实际坐标与检测坐标)
- 读取面型数据 XYZ
- 选择不同的校正模型并进行坐标校正
- 对校正后的散点进行插值,生成规则网格的 XYZ
- 输出校正后的 XYZ 文件并可视化结果
脚本提供 3 种校正模式(界面单选):
- 二维多项式畸变:X、Y 同时使用二次多项式拟合。
- 一维 X 方向畸变:仅对 X 方向使用二次多项式拟合,Y 保持不变。
- Brown–Conrady 模型:先求径向畸变系数,再求切向畸变系数。
校正后会生成新的 XYZ 文件,并在窗口中显示:
- 原始散点图
- 校正后散点图
- 插值后的规则网格图
- Python 3.9+(建议)
- 依赖库:
numpypandasmatplotlibscipytkinter(通常随 Python 自带)
安装依赖(如未安装):
pip install numpy pandas matplotlib scipy- 脚本从 第 3 行开始读取数据(索引 2)。
- 第 1、2 行可用于标题或说明,会被跳过。
- 列格式要求:
- A、B 列:实际坐标(X_actual, Y_actual)
- C、D 列:检测坐标(X_detected, Y_detected)
- 空行会被自动忽略。
- 文件前 14 行为头信息,脚本会保留并更新其中部分内容。
- 从第 15 行开始为数据行,每行至少包含三列:
X Y Z
- 文件末尾可带
#结束行(脚本写出时会添加)。
- 运行脚本:
python Distortion_Correction.py
- 在界面选择校正模式(二维 / 一维 / Brown–Conrady)。
- 选择畸变参数 Excel 文件(.xlsx)。
- 选择面型数据文件(.xyz)。
- 如有需要填写:
- 旋转角度(度):检测坐标会按此角度旋转再进行拟合。
- X/Y 方向偏移量:用于调整面型中心位置。
- 点击 “运行”。
脚本会在输入 XYZ 同目录下生成校正后的文件:
corrected_<原文件名>.xyz
输出文件特性:
- 头信息会保留并更新第 4 行(网格起点与大小)。
- 第 9 行显示宽高会在必要时扩大。
- 数据部分为规则整数网格,Z 值为插值结果。
- 插值范围外或超过阈值(默认 2.0)的区域写入
No Data。
- 旋转角度为 度,正值表示逆时针旋转。
- 偏移量用于平移 XYZ 数据中心(在校正前应用)。
- 插值使用线性方法,超出邻域范围会被置为
NaN并写成No Data。 - 校正过程会在界面显示三幅对比图,便于评估校正效果。
Q: 为什么提示“旋转角度/偏移量必须为数字”?
A: 这些输入必须为可转换为浮点数的字符串;为空时默认为 0。
Q: 输出 XYZ 的网格是整数坐标,能否改为原始浮点?
A: 当前实现使用整数网格插值。如果需要保留浮点网格,需要修改插值部分的网格生成逻辑。