相机标定的几点注意

20140512补充:

1、基线距B=两摄像机投影中心的距离;

************************************************

1、通过立体标定得出的Translation的向量的第一个分量Tx的绝对值就是左右摄像头的中心距。

我标出来的stereoParams里的TranslationOfCamera2的第一个值是-96.1714,与我当初量测的两摄像头中心距离10cm(100mm)比较接近,误差可能是我量测的不准。

2、cc_left、cc_right是左相机成像中心、右相机成像中心;

与stereoParams里生成的内参矩阵的(Cx,Cy)是一样的。


3、fc_left就是内参矩阵里的[fx,fy]

看calib_results.m里面写它是焦距。。。

主要是单位的缘故,内参矩阵里的fx和fy是像素值,要转成F(毫米)必须除以Sx或Sy(每毫米所占的像素数),

得到的F(毫米),否则fx,fy(像素)。


4、fx=F*Sx  fy=F*Sy 

F焦距,Sx是x方向每毫米所占的像素数,Sy同理。

像素与毫米的转换
转换还需要知道另一个参数:DPI(每英寸多少点)
象素数 / DPI = 英寸数
英寸数 * 25.4 = 毫米数 
图像大小640*480,宽度640pixels,高度480pixels,水平分辨率96dpi,垂直分辨率96dpi;
那么,宽度=640pixels=640/96英寸=(640/96)*25.4mm=169.3333mm
高度=(480/96)*25.4mm=127mm

可以用photoshop直接看图像的(col,row),切换成mm再看一下图像大小,就知道转换关系了。

5、一些参数

calib_results.m里面显示的:

fc: Focal length:

cc-- Principal point

alpha_c -- Skew coefficient

kc-- Distortion coefficients:

n_ima = 10; % Number of calibration images est_fc = [ 1 ; 1 ]; % Estimation indicator of the two focal variables est_aspect_ratio = 1; % Estimation indicator of the aspect ratio fc(2)/fc(1) center_optim = 1; % Estimation indicator of the principal point est_alpha = 0; % Estimation indicator of the skew coefficient est_dist = [ 1 ; 1 ; 1 ; 1 ; 0 ]; % Estimation indicator of the distortion coefficients

### OpenCV C++ 相机标定中斑点检测算法实现 在相机标定过程中,斑点检测是一种常用的技术手段。以下是基于OpenCV库的C++实现方案。 #### 1. 斑点检测基础原理 斑点检测的核心在于识别图像中的显著区域,并对其进行特征提取和筛选。通常情况下,可以通过调整阈值、分组以及后续的过滤操作完成这一过程[^3]。对于相机标定而言,目标通常是找到特定形状(如圆)的斑点位置及其几何特性。 #### 2. 使用 `SimpleBlobDetector` 进行初步检测 OpenCV 提供了一个名为 `SimpleBlobDetector` 的类,可以用来快速定位图像中的斑点。其主要工作流程包括以下几个阶段: - **阈值处理**:通过对原始图像应用一系列不同的阈值生成多张二值化图片。 - **分组**:将每幅二值化图像上的连通域视为候选斑点。 - **合并**:依据设定的距离参数 (`minDistBetweenBlobs`) 合并相近的斑点。 - **属性计算与过滤**:最终保留满足指定条件(颜色、面积范围等)的目标对象。 下面是创建自定义配置文件并通过它实例化的代码片段: ```cpp // 定义 SimpleBlobDetector 参数结构体 cv::SimpleBlobDetector::Params params; // 更改默认行为以适应实际需求 params.minThreshold = 10; params.maxThreshold = 200; params.filterByArea = true; // 是否启用面积过滤器 params.minArea = 15; // 设置最小允许面积 params.filterByCircularity = false;// 圆形度不作为约束项 params.filterByConvexity = false; // 凸包比例忽略掉 params.filterByInertia = true; // 考虑惯性矩影响 // 构造函数调用方式 std::vector<cv::KeyPoint> keypoints; auto detector = cv::SimpleBlobDetector::create(params); detector->detect(image, keypoints); // 输入 image 是 Mat 类型变量 ``` 上述方法能够有效捕捉到大部分符合条件的小区域中心坐标集合 `keypoints` 中存储着每一个关键点的具体信息比如响应强度、直径大小等等。 #### 3. 结合圆形模板匹配优化结果质量 为了进一步提高精度,在某些场景下可能还需要额外引入形态学运算或者霍夫变换之类的方法辅助确认所选出来的兴趣点确实对应于真实世界里的物理标记物。例如利用 Hough Circle Transform 寻找接近理想状态下的完美圆圈轮廓线段;又或者是借助预训练好的机器学习模型预测最有可能代表棋盘格角落部分的那一簇密集分布的数据点群集[^2]。 另外值得注意的是当涉及到动态变化环境时,则往往需要考虑光照干扰因素的影响从而适当调节亮度对比度等相关参数使得整个系统具备更强鲁棒性和泛化能力。 --- ####
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值