线阵相机的标定说明

  • 1 相机内外参数(Intrinsics & Extrinsics)说明
    • 1.1 内参(Intrinsics ) 说明
    • 1.2 外参(Extrinsics)说明
  • 2 使用Halcon标定助手进行相机标定
    • 2.1 使用HALCON标定工具,设置标定板描述文件路径,以及相关参数
    • 2.2 标定设置
      • 2.2.1 Setup
      • 2.2.2 Calibration
      • 2.2.3 Results
      • 2.2.4 Code Generation

1 相机内外参数(Intrinsics & Extrinsics)说明

线阵相机矫正所需参数共17个,其中11个参数为内参,6个参数为外参。这里的内外的意思是指相机坐标系到图像中的点(内参)世界坐标系到相机坐标系(外参)

1.1 内参(Intrinsics ) 说明

线阵相机内参CamParam数量共11个,模型如下:

CamParam:= [Focus, Kappa, Sx, Sy, Cx, Cy, ImageWidth, ImageHeight, Vx, Vy, Vz]

Focus : 镜头焦距;
Kappa: 镜头畸变系数;正:枕形畸变 负:桶状畸变
Sx: 传感器像元宽度;
Sy: 传感器像元高度;
Cx: 表示镜头光轴在像平面坐标上的投影横坐标,一般初始化的时候设置为width/2;
Cy: 表示镜头光轴在像平面坐标上的投影纵坐标,一般初始化的时候设置为0,因为是一条线,所以纵坐标为0;
ImageWidth: 完整图片像素宽度;
ImageHeight: 完整图片像素高度;
Vx : 误差所致。x方向上运动速度,其实就是每拍摄一条线,x方向上的运动距离(宽),相机和运动方向不可能完全垂直,理论上为0最理想。
Vy: y方向上运动速度,其实就是在扫描的时候,多远距离拍摄一条线(高)
Vz: 误差所致。z方向上运动速度,其实就是每拍摄一条线,z方向上走的距离(深度),理论上为0最理想

1.2 外参(Extrinsics)说明

世界坐标系到相机坐标系(外参)。共有6个参数,表示了世界坐标系在相机坐标中的三维姿态。

六个参数分别为x,y,z三个轴的旋转角度和x,y,z三个轴的平移量。
摄像机坐标(xc,yc,zc)到世界坐标(xw,yw,zw),
也就是外在参数模型如下,其中,代表旋转
矩阵和平移向量

2 使用Halcon标定助手进行相机标定

2.1 使用HALCON标定工具,设置标定板描述文件路径,以及相关参数

2.2 标定设置

2.2.1 Setup

->选取合适的标定板文件或者自定义生成的标定板描述文件
->设定标定板厚度
->选取相机模型(线阵-多项式)
->设定像元大小、镜头焦距、运动速度等

2.2.2 Calibration

->取已经拍摄的用于标定的图像或使用相机助手获取标定板图像。
->在所有文件检测均有效后Calibrate按钮将由disable变为enable
->选中一张图像点击Set Reference设置参考文件。
->完成后点击Calibrate
设置参考的作用是什么?设置的是当你标定完成之后,使用相机内参外参进行矫正之后的图片。HALCON会将这个图片上的标定板中心点作为远点坐标,并且这张变换后的图片作为相机垂直照射的平面参考。

下图由于导入的图像中标记提取失败,所以无法标定。必须保证所有图像都能提取到标记。提示检出质量问题时,如果对标定精度要求不是很高也是可以做标定的。此时Calibrate按钮是灰色的。
如果加载的图片找不到标定板,可以在最下方的标定板提取参数中改变参数,一般就能找提取到标定板了。最后点击标定按钮,就可以得到标定的参数了。

删除提取标记失败的55号图像,Calibrate变为高亮,点击即可进行标定。

2.2.3 Results

标定完成后即可获得标定的相机内参和外参结果。点击对应的Save按钮将参数保存到指定位置。

2.2.4 Code Generation

HALCON内代码生成:“*”星号代表注释

* Calibration 01: Code generated by Calibration 01
CameraParameters := ['line_scan_polynomial',0.153733,-114.127,93051.7,-4.24526e+07,-0.0433822,-3.50799e-05,7.04e-06,7.04e-06,3940.36,-0.362735,8192,6000,2.24896e-08,4.16196e-05,1.75223e-07]
CameraPose := [0.0177446,0.110862,0.898555,2.62363,347.663,180.539,0]* Calibration 01: Sample code generated by Calibration 01
* Calibration 01: For demonstration purposes, we use the calibration
* Calibration 01: plate itself as sample object.
* Calibration 01: Therefore, we load the reference image
read_image (Image, 'C:/Users/Public/Documents/MVTec/HALCON-20.11-Steady/examples/images/calib/calib_distorted_01.png')
* Calibration 01: Extract plate data from the image
TmpCtrl_PlateDescription := 'C:/Program Files/MVTec/HALCON-20.11-Steady/calib/caltab_30mm.descr'
TmpCtrl_FindCalObjParNames := ['gap_tolerance','alpha','skip_find_caltab']
TmpCtrl_FindCalObjParValues := [1,1,'false']
* Calibration 01: Create calibration model for managing calibration data
create_calib_data ('calibration_object', 1, 1, CalibHandle)
set_calib_data_cam_param (CalibHandle, 0, [], CameraParameters)
set_calib_data_calib_object (CalibHandle, 0, TmpCtrl_PlateDescription)
find_calib_object (Image, CalibHandle, 0, 0, 0, TmpCtrl_FindCalObjParNames, TmpCtrl_FindCalObjParValues)
get_calib_data_observ_points (CalibHandle, 0, 0, 0, TmpCtrl_MarkRows, TmpCtrl_MarkColumns, TmpCtrl_Ind, CameraPose)
* Calibration 01: Using the calibration plate as test object, the marks actually
* Calibration 01: lie above the corrected measurement plane. Therefore, we 'uncorrect'
* Calibration 01: the plane of measurement by the plate thickness here.
set_origin_pose (CameraPose, 0.0, 0.0, 0.001, CameraPose)
* Calibration 01: **********************************************************
* Calibration 01: Sample Task: Pose Estimation
* Calibration 01: **********************************************************
* Calibration 01: With known camera parameters, one image is enough to
* Calibration 01: determine the new pose
* Calibration 01: **********************************************************
* Calibration 01: Sample Task: Image Rectification
* Calibration 01: **********************************************************
* Calibration 01: Choose the desired width of the visible area in world coordinates [mm]
TmpCtrl_RectificationWidth := 74
* Calibration 01: Convert to [m]
TmpCtrl_RectificationWidth := TmpCtrl_RectificationWidth / 1000.0
* Calibration 01: Adjust origin so the plate is roughly centered
set_origin_pose (CameraPose, -0.5*TmpCtrl_RectificationWidth, -0.4*TmpCtrl_RectificationWidth, 0, TmpCtrl_RectificationPose)
* Calibration 01: Generate the rectification map
gen_image_to_world_plane_map (TmpObj_RectificationMap, CameraParameters, TmpCtrl_RectificationPose, 640, 512, 640, 512, TmpCtrl_RectificationWidth / 640, 'bilinear')
* Calibration 01: Now, images can be rectified using the rectification map
map_image (Image, TmpObj_RectificationMap, TmpObj_RectifiedImage)
stop ()

【机器视觉】线阵相机模型说明以及使用HALCON标定助手对线阵相机进行标定相关推荐

  1. 图像形成(5)球面透视投影和近似相机模型

    文章目录 图像形成(5)球面透视投影和近似相机模型 球面透视投影 近似相机模型 图像形成(5)球面透视投影和近似相机模型 球面透视投影   我们在博文图像形成(3)理想相机模型中描述的透视针孔相机模型 ...

  2. 相机模型——针孔相机

    想到学习下相机模型,是因为最近做的事情涉及到求解相机参数.恢复相机位置等.而在这里开博,主要也是当做学习笔记来用.其中[]表示引用和参考. 在相机模型中,针孔相机是相对简单而常用的模型.简单的说,针孔 ...

  3. 相机模型(内参数,外参数)

    相机成像的过程实际是将真实的三维空间中的三维点映射到成像平面(二维空间)过程,可以简单的使用小孔成像模型来描述该过程,以了解成像过程中三维空间到二位图像空间的变换过程. 本文包含两部分内容,首先介绍小 ...

  4. 机器视觉——单目相机模型(坐标标定以及去畸变)

    单目相机模型: 针孔相机模型的映射关系: 化为矩阵形式: 其中,中间的矩阵被称为相机的内参矩阵K.通常认为,相机的内参在出厂之后是固定的,不会在使用过程中发生变化.有点相机生产厂商会告诉你相机的内参, ...

  5. 相机标定:(1)相机模型

    之前在进行标定时只是简单的会使用,调用OpenCV里边的函数,完成标定即可.并没有做过多深入的理解,今天趁着course学习把标定详细的记录一下,以下完全是个人理解如果有不对的地方欢迎批评指正. 公式 ...

  6. 《Learning OpenCV3》ch18:相机模型与标定

    省赛期间用到双目视觉的时候,只是很粗浅地调用了下API,毕竟初学而且时间紧迫.最近打算跟一个硕士生再做一个相关项目,而且也想用Stereo Vision作为毕业设计,所以很有必要了解一下其中的原理.最 ...

  7. 相机标定(五)—— 相机模型详细介绍

    相机模型 相机与图像的一些基本概念 针孔相机模型 坐标系介绍 世界坐标系 相机坐标系(光心坐标系) 图像坐标系 像素坐标系 成像过程的数学模型 世界坐标系->相机坐标系 相机坐标系–>像平 ...

  8. 相机模型与标定(一)--相机标定概述

    以下内容来自: http://baike.baidu.com/link?url=RAjUg33ftcbDDjE_tFKS80p_azC9REyLOzBTbqqSq5iIIXo0sp20NJk28RW- ...

  9. 计算机视觉学习6_棋盘格_相机模型与参数标定

    文章目录 为什么要进行相机参数标定 相机内参矩阵原理 相机标定方法--Recap: 相机标定 张正友标定法 相机模型 计算单应性矩阵H 计算内参数矩阵 计算外部参数 实验(matlab实现) 为什么要 ...

  10. 一文尽览 | 计算机视觉中的鱼眼相机模型及环视感知任务汇总!

    点击下方卡片,关注"自动驾驶之心"公众号 ADAS巨卷干货,即可获取 点击进入→自动驾驶之心技术交流群 后台回复[ECCV2022]获取ECCV2022所有自动驾驶方向论文! 论文 ...

最新文章

  1. linux 和 windows 上printf 的不同
  2. Fedora 17 PHP编程环境配置
  3. centos配置ftp
  4. spring AOP 之一:spring AOP功能介绍
  5. 抓包工具-charles安装过程
  6. python itchat 无法登录_项目分享|5步教你用Python制作朋友圈个性签名
  7. perl oracle ppm,Perl图形化包管理工具PPM学习使用笔记
  8. 凸优化第二章凸集 2.1 仿射集合和凸集
  9. hdu 1284 dp
  10. Cookie和Session有什么区别?
  11. 计算机大赛教学辅助课件,职业教育:机械类一等奖作品《识读组合体视图教学辅助》PPT课件.ppt...
  12. SQL Server新增字段并添加描述
  13. Elasticsearch安装与分词插件、用户词典、同义词配置等
  14. JavaScript(3)基础
  15. Xposed小白入门,动态修改IMEI实例代码
  16. 《Google Chrome:谷歌浏览器》 --不作恶,但可以恶心你
  17. 分层测试(Layered Testing Approach)
  18. quartz简单入门
  19. 神一样的爱因斯坦,真的和外星人有什么联系?
  20. 【阿里聚安全·安全周刊】App通过超声波信号静默追踪用户 | 图片噪点可骗过Google最顶尖的图像识别AI...

热门文章

  1. HttpClient 4使用方法的几个例子
  2. 计算机二级vf查询,计算机二级《VFP》知识点讲解:查询和视图
  3. 【Revit二次开发】族
  4. wps 将html转为word,用WPS快速将网页内容转换为WORD文档
  5. <EDEM CFD案例01>EDEM2018 + FLUENT19.2 Coupling Interface Compiling
  6. WPS和Office 字体乱码问题
  7. 智能音箱全国产化电子元件推荐方案
  8. 炒冷饭的“象棋人机大战”
  9. 蓝牙低功耗音频技术 -- 1 背景和遗产
  10. mac版的PHP集成环境软件MxSrvs软件