42 posts
几何 · 特征 · 三维视觉
相机、特征、多视图几何和一些检测分割——视觉里我会反复核对的基础。
多视图三角化的角度条件:基线够长仍可能数值病态
从射线夹角、深度参数化与协方差传播解释退化配置,比较线性三角化与非线性精炼;用已知尺度场景的重投影与深度误差切片验收。
PnP 协方差怎么估:从像素噪声传播到位姿退化告警
在明确扰动约定后推导重投影雅可比与近似 Hessian,解释共面点、窄视场与深度分布如何让位姿失约束;用蒙特卡洛与覆盖率验收。
ChArUco 标定不是多拍几张:用姿态覆盖与参数可观性收敛
从部分可见角点到法方程条件数,用覆盖、逐视图误差与留出集判断内参是否真的可辨识。
OpenCV remap 的固定点地图:convertMaps 该放在哪一层
预计算去畸变映射后,用 convertMaps 生成 CV_16SC2/CV_16UC1 地图,并核对插值、边界与输出误差。
OpenCV 流水线:先剖面再优化
重复 Mat 拷贝、cvtColor 来回和每帧 undistort 吃 CPU;getTickCount 剖面找热点,再谈换 SOTA 模型。
视觉指标:mAP 之外
检测 mAP 高不代表 latency、误报率和 worst-case 能上线;要报 tail latency、固定 FP 预算下的 recall 和场景切片。
视觉数据:标注比你想的脏
错标、漏标、框贴边和 train/test 场景泄漏,常比换 backbone 涨点更多;清洗数据是视觉项目最被低估的杠杆。
视觉伺服:误差到控制
IBVS 用图像特征误差和 interaction matrix 映射相机速度;标定误差、延迟和奇异位形在闭环里会被积分放大。
AprilTag:便宜的辅助真值
opencv aruco/AprilTag 检测 + solvePnP 给 6DoF;物理尺寸要实测,远距离小 tag 角度噪声涨得快。
多相机:外参更金贵
stereoCalibrate / Kalibr 估 rig 外参和时间偏移;温漂和振动下外参 drift,融合深度和 BEV 会互相打架。
卷帘快门:急转会歪
RS 逐行曝光,快速平移/旋转时直线变斜、PnP/VO 的全局快门模型失效;需控运动、RS 模型或换 global shutter。
曝光:前端的隐变量
CAP_PROP_AUTO_EXPOSURE 开着时亮度是自由变量;ORB、LK、NCC 都假设光度稳定,锁曝光常是第一步修复。
ROI:算力放在刀刃上
Mat ROI 是 view 不拷贝;全图跑重模型不如 crop,但 ROI miss 就全错——proposal 要 recall-oriented。
视觉增广:别增到不合理
几何增广要同步变换 bbox/mask;随机翻转对「文字/左右语义」数据集是毒药;ColorJitter 范围要在部署域内。
单目深度:别当激光用
单目 depth 网络输出多为 relative / up-to-scale;米制精度、边缘对齐和动态物体与 LiDAR 不是一类问题,上线前要做尺度对齐。
多目标跟踪:检测抖轨迹碎
ByteTrack 用高低分框两阶段关联减断轨;跟踪 ceiling 仍是检测质量,框抖和漏检要先在 det 上查。
检测与 NMS:阈值是现场活
score 阈值和 NMS IoU 决定 operating point;mAP 积分掩盖产线真正用的那一个 (threshold, IoU) 点。
语义分割:边界能不能用
mIoU 高不代表边界够抓、小物体 recall 够;部署要看 boundary IoU、稀有类 recall 和 downstream 碰撞 margin。
视觉位姿图:边从哪来
Pose graph 边来自 VO match + 几何验证;信息矩阵/协方差瞎填会让 g2o/Ceres 把地图拧成 confident wrong shape。
五点法:最小解的脾气
findEssentialMat 内部可用 5-point;工程上总包 RANSAC,cheirality 和归一化比算法名字重要。
重投影误差:单位是像素
BA 最小化加权像素 reproj;Huber/Cauchy 核和外点权重要配合,RMS 小不代表 3D 结构对——错配点也能低 cost。
极线搜索:把范围收回来
已知 F 或 rectified stereo 时,匹配搜索从 O(WH) 收到极线段;搜索窗宽度要配合 descriptor 噪声和外点率。
去畸变映射:别每帧重算
initUndistortRectifyMap 预计算 remap 表,remap 比每帧 undistort 快一个数量级;map 与 K、dist、分辨率绑定。
张正友标定:板子怎么摆
calibrateCamera 联合优化 K、dist 和每帧外参;姿势覆盖不足时 fx 与 k1 互借误差,RMS 低但外推畸变大。
模板匹配:受控才好用
matchTemplate 的 TM_CCOEFF_NORMED 对亮度有一定归一化,但尺度旋转变化仍脆;适合 fix camera、fix pose 工位。
霍夫直线:结构化场景
HoughLinesP 在结构化场景(标线、PCB)仍可靠;rho/theta 分辨率和 Canny 预处理决定峰值质量。
Canny:阈值和噪声
Canny 边缘由高斯 σ 和双阈值 hysteresis 决定;σ 太大结构断,太小噪声当边,OpenCV Canny 的 apertureSize 固定用 Sobel 3×3。
颜色空间:HSV 不万能
cvtColor 转 HSV 后 inRange 阈值在阴影和白平衡漂移下大面积失效;受控光照下才有用,否则应归一化或学习检测。
图像金字塔:不只是缩小
pyrDown 和 buildOpticalFlowPyramid 用分辨率换尺度覆盖;scale factor 和层数要与检测器/光流参数联动。
PnP:外点与初值
solvePnPRansac + EPnP 初值 + iterative refine 是工程默认;共面点用 SOLVEPNP_IPPE,错 flag 会 confident flip。
RANSAC:内点率太低别硬刚
RANSAC 迭代次数随 outlier 比例指数增长;内点率 <30% 时应先改善匹配和归一化,而非把 confidence 调到 0.99999。
SGBM:我先动哪些参数
OpenCV StereoSGBM_create 的 numDisparities 和 blockSize 决定搜索空间与平滑;视差范围不够是 depth 截断最常见根因。
双目校正:极线平行之后
stereoRectify 求 R1,R2,P1,P2 使极线水平对齐;alpha 和 valid ROI 设错时,SGBM 在错的 1D 搜索线上匹配。
光流 LK:小运动假设
calcOpticalFlowPyrLK 假设局部恒定亮度和小位移;大位移靠金字塔,曝光突变破坏亮度恒定,前后向一致性是便宜的外点剔除。
SIFT 与 RootSIFT
SIFT 在 opencv-contrib 的 xfeatures2d 模块;RootSIFT 对 L1 归一化描述子开方,匹配分布更接近欧式空间,几乎是零成本升级。
ORB:快的代价
ORB 用 FAST 角点 + oriented BRIEF,Hamming 匹配极快;代价是光照和大视角下 repeatability 不如 SIFT 或 learned descriptors。
角点:Harris 到 FAST
cornerHarris 可解释但慢,FAST 适合实时;VO 里角点 repeatability 和空间分布比绝对数量更重要。
三角化:基线太短深度会炸
OpenCV triangulatePoints 在归一化坐标下线性三角化;depth 不确定度与视差角成反比,baseline 不足时像素噪声会被放大成米级 depth 误差。
本质矩阵与基础矩阵:别混层
F 在像素平面、E 在归一化相机坐标;有可靠 K 时应估 E 并在归一化坐标上做 RANSAC,混层或漏去畸变会导致高 inlier 的错误位姿。
单应:平面场景的快捷通道
平面场景下 x' ~ Hx 是正确模型;深度差大或 general motion 时 findHomography 仍会高 inlier——要用 F/H 竞争和场景先验检验。
镜头畸变:径向和切向在改什么
OpenCV 用 k1–k6、p1、p2 参数化径向与切向畸变;未校正就做多视图几何时,RANSAC 会在错误模型上给出高 inlier 的错误位姿。
针孔模型与内参:先把像素和射线对齐
内参 K 把像素映射为相机坐标系射线;fx/fy/cx/cy 与标定分辨率不一致时,PnP 和 stereo 会系统性偏,重投影 RMS 仍可能很小。