as you seen,在一些场景下,比如交通监控、道路参数获取、港口码头监控等,需要将相机架设在高处,此时,鉴于复杂的场景环境,基于传统的相机标定方法--即铺设标定板,利用张正友或者Tsai标定方法进行标定,是不现实的。(通俗的说:总不能在马路上摆个标定板,告诉来往的车辆:你等一下,我拍二十张照片你再走,哦,不行,这个角度不行,那个棋盘格角点虚焦了要重拍,你再等一下,估计没标定完,也会被群殴或者被交警抓起来了)。所以,需要开发一套适用于复杂场景的、不需要任何辅助合作目标(比如标定物)的标定方案。


首先,需要准备以下基础知识:

1、科普一下正交消失点的概念。

消失点的概念搞视觉的应该都懂,就是两条平行的直线经透视变换会相交成一点。入门知识,在此不展开。在本方案中,正是用到了三个方向、正交的消失点。

struct VashingPoints

{

cv::Point2d vp1;

cv::Point2d vp2;

cv::Point2d vp3;

};

VP1表示第一个VP,车辆运动方向。

VP2表示第二个VP,地平面中垂直于车辆运动方向,即与VP1垂直。

VP3表示第三个VP,垂直于地平面。

2、需要回顾一下相机的成像模型,即小孔成像原理。入门知识,在此不展开。


下面,贴一下VP1及VP2的检测流程

VP1检测流程--手写版,viso没激活

对VP2的检测使用菱形空间的概念。 假设许多车辆边缘与第二个VP重合开始,它们在积累空间投票。

使用背景边缘模型检测移动车辆上的边缘。

模型每帧都会更新,以处理阴影和其他缓慢的变化。

背景模型用B1 = H1初始化,然后用公式(1)更新Bt,其中平滑系数接近1,此处a = 0.95。

Bt=αBt-1 +(1-α)Ht                   公式(1)

Keys:a:<第一个消失点用于约束第二个消失点的位置>

b:<边缘检测采用canny边缘检测算法>

c:采用<级联霍夫变换>及平行空间理论

d:必须满足以下筛选条件:

1、必须由Canny边缘检测器检测。

2、该点属于背景的置信度必须低于预定值阈值(t2),即属于前景(移动车辆)。

3、梯度的大小必须高于预定阈值t1。

4、梯度的方向不能与VP1方向一致,也不得垂直于基线。

5、假设场景近似水平,具有公差水平(±45°)。


求解内参代码

cv::Mat TrafficCalibrationFromVP::getIntrinsicMat(cv::Point2d vp1, cv::Point2d vp2, cv::Point2d pp)
{CalibrationInfos calinfos;calinfos.focal = double(sqrt(-(vp1 - pp).dot(vp2 - pp)));//叉乘:.crosscalinfos.IntrinsicMat = (Mat_<double>(3, 3) << calinfos.focal, 0, pp.x, 0, calinfos.focal, pp.y, 0, 0, 1);return calinfos.IntrinsicMat;
}

求解vp3代码

void TrafficCalibrationFromVP::getVP3(cv::Point2d vp1, cv::Point2d vp2, cv::Point2d pp,double focal, cv::Point2d& vp3)
{cv::Point3d V1world(vp1.x, vp1.y, focal);cv::Point3d V2world(vp2.x, vp2.y, focal);cv::Point3d PPworld(pp.x, pp.y, 0);cv::Point3d V3world = (V1world - PPworld).cross(V2world - PPworld);vp3.x = V3world.x / V3world.z*focal+pp.x;vp3.y = V3world.y / V3world.z*focal+pp.y;//cout << vp3 << endl;
}

未完待更新……

基于消失点的相机自动标定相关推荐

  1. 基于消失点的相机自标定(2)

    点云PCL免费知识星球,点云论文速读. 标题:Camera calibration using two or three vanishing points 作者:Radu Orghidan∗, Joa ...

  2. 基于消失点的相机自标定

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 标题:Camera calibration using two or three vanishing ...

  3. 基于消失点的相机自标定(1)

    点云PCL免费知识星球,点云论文速读. 标题:Camera calibration using two or three vanishing points 作者:Radu Orghidan∗, Joa ...

  4. 【相机标定基于消失点的外参标定】

    [相机标定&基于消失点的外参标定] 文章一:Camera calibration using two or three vanishing points 文章二:Online Extrinsi ...

  5. EPSON机器人固定下相机自动标定及下相机纠偏抓取程序

    Function VisionCalib_FIXEDUP '固定下相机自动标定     Integer i     Double X_Distance, Y_Distance     X_Distan ...

  6. 激光雷达和相机的标定计算软件

    激光雷达和相机的标定计算软件 功能简介 一.主界面 1.图标 2.界面 二.功能区介绍 1.文件区 2.交互区 3.配置区 三.软件获取 功能简介   基于激光雷达和相机的标定计算软件可以利用不同的计 ...

  7. 【自动驾驶】27.相机畸变_相机内参标定 整理

    本文整理了很多有关相机畸变博客的相关内容,都附上的原文地址,也纠正了一些其他博客的错误. 下面两张截图来自高翔博士的<视觉SLAM十四讲>书中内容. 有关添加畸变矫正以及去畸变的详细过程, ...

  8. 基于Matlab-采用张正友标定法对双目相机进行标定

    一.工作环境 操作系统:Win10 开发环境: Matlab 2019b(需要摄像头驱动包) 相机:USB双目相机,支持UVC标准协议 1.安装摄像头驱动包(OS Generic Video Inte ...

  9. 基于python的相机标定(采用圆形标定板图片)

    基于python的相机标定(采用圆形标定板图片) 系列文章目录 与黑白棋盘格差别主要在于寻找角点的函数,只需将第一章内第二段代码 ret, corners1 = cv.findChessboardCo ...

最新文章

  1. [转]Create Custom Exception Filter in ASP.NET Core
  2. 每周论文清单:知识图谱,文本匹配,图像翻译,视频对象分割
  3. Springboot-RabbitMq 参数配置详解
  4. Linux下动态库使用小结
  5. visual studio 2019 未能在命名空间“System.IO.Ports”中找到类型名“SerialPort”
  6. sqlplus怎样将名次显示在表的后面_数据透视表-01 3种分析方法比拼,助你步入透视表的知识宝殿...
  7. 【Nginx那些事】Nginx 配置文件说明
  8. response php,HttpResponse.php
  9. 如何设置电脑自动锁屏_Apple ID密码忘了怎么重置?丨如何让面容和指纹解锁立马失效?...
  10. 55)函数指针和其意义
  11. rust物资刷新机制_rust资源刷新 | 手游网游页游攻略大全
  12. 三、亚马逊产品定价其实就这么简单,一个公式解决
  13. 程序员的进化 - 在拉勾1024程序员节上的演讲
  14. SpringBoot中使用Redis保存对象或集合
  15. 文件操作——打开关闭、顺序读写、随机读写
  16. SSM根据上传文件获取视频文件时长
  17. js 实现一个简单的存钱/取钱/查询/退出等操作的ATM功能.
  18. FileZilla使用代理
  19. 进击吧!Pythonista(6/100)
  20. 恢复officescan控制台密码

热门文章

  1. Blob的所有Type类型
  2. 等保2.0.等保对象知多少
  3. 图数据库(七):Neo4j中Cypher语言where关键字
  4. 2020IDEA如何设置自动换行
  5. Docsify使用指南,使用Typora+Docsify打造最强、最轻量级的个人团队文档,及免费和开源且低成本文档工具
  6. 华为云服务器 网站 要备案吗6,云服务器网站需要备案吗
  7. Ubuntu 16.04 MongoDB数据库备份与恢复
  8. python爱因斯坦的问题_基于Python3的趣味数学问题
  9. 电话号码正则表达式 代码 javascript+html,JS正则表达式判断11位手机号码
  10. 在JSP2.0中使用EL表达式语言