用matlab对相机进行标定获取相机内参

相机内参标定

内参是相机自身的固有参数(如焦距、主点、畸变系数)

作用是将图片中的像素坐标转换为相机坐标系下的 3D 坐标,修正相机畸变(比如鱼眼镜头的图像变形)

相机的内参虽然是固定的,但实际出厂时会有误差,所以必须先用棋盘格标定(比如 OpenCV 的标定工具),得到准确的 fx、fy、cx、cy

内参用一个 3×3 的矩阵表示,结构是:

内参矩阵每个参数的意思:

  • (f_x、f_y) :"焦距的像素表示"------fx与fy的像素值(比如 fx=500 像素)表征着相机的焦距(比如 35mm)

    就像你用手机拍杯子时:fx 决定了 "杯子在屏幕左右方向上的放大程度";fy 决定了 "杯子在屏幕上下方向上的放大程度"。

  • (c_x、c_y):"图像主点的像素坐标"------ 相机光轴(镜头中心的射线)在照片里对应的像素点(理想情况下是照片的中心,比如 1280×720 的照片,cx≈640,cy≈360)。

转换公式(核心逻辑)

如果相机坐标系里有一个物体点,坐标是(X_c, Y_c, Z_c)(Zc 是物体离相机的距离,即深度),那么它在照片里对应的像素坐标(u, v),就是通过内参矩阵计算的:

像素与相机坐标系3D 坐标转换例子:

RGBD 相机能同时拍到 "像素(u,v)" 和 "深度(Zc,即物体离相机的距离)",结合内参,就能反推出物体在相机坐标系里的 3D 坐标(X_c, Y_c, Z_c):

举个例子:

  • 相机内参:fx=500,fy=500,cx=640,cy=360;(出厂后就固定了)
  • 照片里物体的像素(坐标)是 (740, 410),深度是 0.5 米(Zc=0.5);
  • 计算得:Xc=(740-640)×0.5/500=0.1 米,Yc=(410-360)×0.5/500=0.05 米;
  • 所以物体在相机坐标系里的位置是 (0.1, 0.05, 0.5) 米。

内参的标定方法总共来说有3种,一种是使用matlab,一种是使用opencv,一种是自己写出张正友标定源码去计算内参,本文介绍matlab

用matlab对相机进行标定获取相机内参的步骤

Step1 打开相机标定工具箱

在《图像处理和计算机视觉》栏 找到相机标定工具:

选择从文件夹中导入图片(提前用你的相机从多个角度拍摄好棋盘格照片,20张)

测算,修改你的棋盘格尺寸

执行

清洗一下数据

选择输出参数

查看参数

上图划红线解释依次为:

径向畸变系数(3阶),切向畸变系数(2阶),世界坐标单位是mm,内参矩阵,焦距(分fx,fy),成像平面原点(理想情况是图像宽高中心位置),成像平面原点坐标(单位是像素);

s

相关推荐
机器学习之心1 分钟前
MATLAB灰狼优化算法(GWO)改进物理信息神经网络(PINN)光伏功率预测
神经网络·算法·matlab·物理信息神经网络
代码游侠5 分钟前
学习笔记——ESP8266 WiFi模块
服务器·c语言·开发语言·数据结构·算法
行者9610 分钟前
Flutter跨平台开发适配OpenHarmony:进度条组件的深度实践
开发语言·前端·flutter·harmonyos·鸿蒙
DYS_房东的猫14 分钟前
《 C++ 零基础入门教程》第3章:结构体与类 —— 用面向对象组织代码
开发语言·c++
向量引擎17 分钟前
复刻“疯狂的鸽子”?用Python调用Sora2与Gemini-3-Pro实现全自动热点视频流水线(附源码解析)
开发语言·人工智能·python·gpt·ai·ai编程·api调用
CoderCodingNo20 分钟前
【GESP】C++五级练习(贪心思想考点) luogu-P1115 最大子段和
开发语言·c++·算法
a程序小傲22 分钟前
得物Java面试被问:边缘计算的数据同步和计算卸载
java·开发语言·数据库·后端·面试·golang·边缘计算
lly20240623 分钟前
PHP 运算符
开发语言
txinyu的博客23 分钟前
make_shraed & make_unique 替代了new ? 什么场景使用new
开发语言·c++·算法
不会c嘎嘎24 分钟前
QT中的常用控件(五)
服务器·开发语言·qt