一、单项机标定原因

降低畸变(相差)

测量

二、相机标定求出什么

该方程是求取世界坐标系与像素坐标系之间转换矩阵,本质就是求出相机的内外参数。其中dx和dy为每个像素在图像坐标系(UVO)沿U和V方向的物理尺寸,单位毫米每像素, U0 和 V0 为像素坐标  中心即图像中心(光轴与图像平面的交点)。

三、标定助手

设置标定参数;

尽量选择9到16张图片,且图片覆盖整个视野,Mark点出现在视野各个区域,同时标定板也可以发生倾斜,旋转,注意只要不出现标定点提取失败就可以。点击标定按钮前,选择一张设置位姿。

查看结果:相机内外参数。也可插入代码。

四、畸变校正(不需要外参)

畸变的原因自己去查找,在这里不罗嗦了。畸变如B所示。

过程:

标定助手---->获取相机内外参数------->校正(相机位置不能发生改变)

change_radial_distortion_cam_param()   径向畸变

gen_radial_distorition_map()   形成映射矩阵

map_image()   图像映射

* Calibration 01: Code generated by Calibration 01

ImageFiles := []

ImageFiles[0] := 'E:/项目/Halcon/STUDY/Lesson_13_棋盘格标定/scratch/scratch_calib_01.png'

ImageFiles[1] := 'E:/项目/Halcon/STUDY/Lesson_13_棋盘格标定/scratch/scratch_calib_02.png'

ImageFiles[2] := 'E:/项目/Halcon/STUDY/Lesson_13_棋盘格标定/scratch/scratch_calib_03.png'

ImageFiles[3] := 'E:/项目/Halcon/STUDY/Lesson_13_棋盘格标定/scratch/scratch_calib_04.png'

ImageFiles[4] := 'E:/项目/Halcon/STUDY/Lesson_13_棋盘格标定/scratch/scratch_calib_05.png'

ImageFiles[5] := 'E:/项目/Halcon/STUDY/Lesson_13_棋盘格标定/scratch/scratch_calib_06.png'

ImageFiles[6] := 'E:/项目/Halcon/STUDY/Lesson_13_棋盘格标定/scratch/scratch_calib_07.png'

ImageFiles[7] := 'E:/项目/Halcon/STUDY/Lesson_13_棋盘格标定/scratch/scratch_calib_08.png'

ImageFiles[8] := 'E:/项目/Halcon/STUDY/Lesson_13_棋盘格标定/scratch/scratch_calib_09.png'

ImageFiles[9] := 'E:/欣奕华/项目/Halcon/STUDY/Lesson_13_棋盘格标定/scratch/scratch_calib_10.png'

ImageFiles[10] := 'E:/项目/Halcon/STUDY/Lesson_13_棋盘格标定/scratch/scratch_calib_11.png'

ImageFiles[11] := 'E:/项目/Halcon/STUDY/Lesson_13_棋盘格标定/scratch/scratch_calib_12.png'

dev_close_window()

read_image (Image1, 'E:/项目/Halcon/STUDY/Lesson_13_棋盘格标定/scratch/scratch_calib_01.png')

get_image_size (Image1, Width, Height)

dev_open_window (0, 0, Width, Height, 'black', WindowHandle)

dev_set_line_width (2)

dev_set_draw ('margin')

TmpCtrl_ReferenceIndex := 0

TmpCtrl_PlateDescription := 'E:/项目/Halcon/STUDY/Lesson_13_棋盘格标定/caltab_30mm.descr'

StartParameters := [0.008,0,8.3e-006,8.3e-006,320,240,640,480]

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, 'area_scan_division', StartParameters)

set_calib_data_calib_object (CalibHandle, 0, TmpCtrl_PlateDescription)

* Calibration 01: Collect mark positions and estimated poses for all plates

for Index := 0 to |ImageFiles|-1 by 1

read_image (Image, ImageFiles[Index])

find_calib_object (Image, CalibHandle, 0, 0, Index, TmpCtrl_FindCalObjParNames, TmpCtrl_FindCalObjParValues)

get_calib_data_observ_contours (Contours, CalibHandle, 'marks', 0, 0, Index)

get_calib_data_observ_points (CalibHandle, 0, 0, Index, RCoord, CCoord, Index1, Pose)

dev_set_color ('green')

dev_display (Image)

dev_display (Contours)

disp_cross (WindowHandle, RCoord, CCoord, 6, 0)

dev_set_color ('yellow')

disp_3d_coord_system (WindowHandle, StartParameters, Pose, 0.02)

endfor

* Calibration 01: Perform the actual calibration

calibrate_cameras (CalibHandle, TmpCtrl_Errors)

get_calib_data (CalibHandle, 'camera', 0, 'params', CameraParameters)

get_calib_data (CalibHandle, 'calib_obj_pose', [0, TmpCtrl_ReferenceIndex], 'pose', CameraPose)

* Calibration 01: Adjust origin for plate thickness

set_origin_pose (CameraPose, 0.0, 0.0, 0.001, CameraPose)

* Calibration 01: Clear calibration model when done

clear_calib_data (CalibHandle)

stop ()

CameraParametersDis := CameraParameters

CameraParametersDis[1] := 0

change_radial_distortion_cam_par ('adaptive', CameraParameters, 0, CamParamOut)

gen_radial_distortion_map (Map, CameraParameters, CamParamOut, 'bilinear')

map_image (Image1, Map, ImageMapped)

五、测量

* Measure 01: Code generated by Measure 01

* Measure 01: Initialize calibration

CameraParameters := [0.0186517,-518.695,8.35295e-006,8.3e-006,243.968,254.876,640,480]

CameraPose := [0.0102948,-0.00294296,0.290575,358.426,32.4473,91.0773,0]

* Measure 01: Prepare measurement

AmplitudeThreshold := 15

RoiWidthLen2 := 2

set_system ('int_zooming', 'true')

* Measure 01: Coordinates for line Measure 01 [0]

LineRowStart_Measure_01_0 := 143.25

LineColumnStart_Measure_01_0 := 359.016

LineRowEnd_Measure_01_0 := 143.25

LineColumnEnd_Measure_01_0 := 382.761

* Measure 01: Convert coordinates to rectangle2 type

TmpCtrl_Row := 0.5*(LineRowStart_Measure_01_0+LineRowEnd_Measure_01_0)

TmpCtrl_Column := 0.5*(LineColumnStart_Measure_01_0+LineColumnEnd_Measure_01_0)

TmpCtrl_Dr := LineRowStart_Measure_01_0-LineRowEnd_Measure_01_0

TmpCtrl_Dc := LineColumnEnd_Measure_01_0-LineColumnStart_Measure_01_0

TmpCtrl_Phi := atan2(TmpCtrl_Dr, TmpCtrl_Dc)

TmpCtrl_Len1 := 0.5*sqrt(TmpCtrl_Dr*TmpCtrl_Dr + TmpCtrl_Dc*TmpCtrl_Dc)

TmpCtrl_Len2 := RoiWidthLen2

* Measure 01: Create measure for line Measure 01 [0]

* Measure 01: Attention: This assumes all images have the same size!

gen_measure_rectangle2 (TmpCtrl_Row, TmpCtrl_Column, TmpCtrl_Phi, TmpCtrl_Len1, TmpCtrl_Len2, 640, 480, 'nearest_neighbor', MsrHandle_Measure_01_0)

* Measure 01: ***************************************************************

* Measure 01: * The code which follows is to be executed once / measurement *

* Measure 01: ***************************************************************

* Measure 01: Load image

read_image (Image, 'E:/项目/Halcon/STUDY/Lesson_13_棋盘格标定/scratch/scratch_calib_01.png')

* Measure 01: Execute measurements

measure_pos (Image, MsrHandle_Measure_01_0, 0.4, 15, 'all', 'all', Row_Measure_01_0, Column_Measure_01_0, Amplitude_Measure_01_0, Distance_Measure_01_0)

* Measure 01: Transform to world coordinates

* Measure 01: Calibrate positions for Measure 01 [0]

image_points_to_world_plane (CameraParameters, CameraPose, Row_Measure_01_0, Column_Measure_01_0, 0.001, Column_World_Measure_01_0, Row_World_Measure_01_0)

* Measure 01: Calibrate distances

TmpCtrl_Length := |Row_World_Measure_01_0|

if (TmpCtrl_Length > 0)

tuple_select_range (Row_World_Measure_01_0, 0, TmpCtrl_Length - 2, TmpCtrl_RowFrom)

tuple_select_range (Column_World_Measure_01_0, 0, TmpCtrl_Length - 2, TmpCtrl_ColumnFrom)

tuple_select_range (Row_World_Measure_01_0, 1, TmpCtrl_Length - 1, TmpCtrl_RowTo)

tuple_select_range (Column_World_Measure_01_0, 1, TmpCtrl_Length - 1, TmpCtrl_ColumnTo)

distance_pp (TmpCtrl_RowFrom, TmpCtrl_ColumnFrom, TmpCtrl_RowTo, TmpCtrl_ColumnTo, Distance_World_Measure_01_0)

endif

* Measure 01: Do something with the results

* Measure 01: Clear measure when done

close_measure (MsrHandle_Measure_01_0)

halcon相机标定助手_Halcon 学习笔记---单相机标定(2)相关推荐

  1. halcon python缺陷检测_Halcon学习笔记之缺陷检测(一)

    *surface_scratch.hdev:extraction of surface scratches via local thresholding and morphological post- ...

  2. 【相机标定与三维重建原理及实现】学习笔记1——相机模型数学推导详解

    目录 前言 一.小孔成像模型 二.坐标系的变换 1.世界坐标系到相机坐标系的变换(刚体变换)[xw^→xc^\boldsymbol {\hat{x_{w}}}\rightarrow \boldsymb ...

  3. 1. 相机标定原理(学习笔记)

    相机标定(Camera Calibration)-学习笔记 文章目录 相机标定(Camera Calibration)-学习笔记 一.简介 二.原理 1. 坐标系 *coordinates* 2. 相 ...

  4. 【一文弄懂】张正友标定法-完整学习笔记-从原理到实战

    张正友标定法-完整学习笔记-从原理到实战 文章目录 张正友标定法-完整学习笔记-从原理到实战 (零)前言: 1 为什么需要标定? 2 相机标定的已知条件和待求解是什么? 标定前的已知条件: 待求信息: ...

  5. HALCON 21.11:深度学习笔记---模型(8)

    HALCON 21.11:深度学习笔记---模型(8) HALCON 21.11.0.0中,实现了深度学习方法. 本章阐述了HALCON中深度学习(DL)模型的一般概念和数据处理. 从概念上讲,HAL ...

  6. 设计模式学习笔记——单例(Singleton)模式

    设计模式学习笔记--单例(Singleton)模式 @(设计模式)[设计模式, 单例模式, Singleton, 懒汉式, 饿汉式] 设计模式学习笔记单例Singleton模式 基本介绍 单例案例 类 ...

  7. HALCON 21.11:深度学习笔记---语义分割/边缘提取(12)

    HALCON 21.11:深度学习笔记---语义分割/边缘提取(12) HALCON 21.11.0.0中,实现了深度学习方法. 本章介绍了如何使用基于深度学习的语义分割,包括训练和推理阶段. 通过语 ...

  8. HALCON 21.11:深度学习笔记---对象检测, 实例分割(11)

    HALCON 21.11:深度学习笔记---对象检测, 实例分割(11) HALCON 21.11.0.0中,实现了深度学习方法. 本章介绍了如何使用基于深度学习的对象检测. 通过对象检测,我们希望在 ...

  9. HALCON 21.11:深度学习笔记---分类(10)

    HALCON 21.11:深度学习笔记---分类(10) HALCON 21.11.0.0中,实现了深度学习方法. 本章介绍了如何在训练和推理阶段使用基于深度学习的分类. 基于深度学习的分类是一种对一 ...

最新文章

  1. 大数据虚拟化:VMware正在虚拟化Hadoop
  2. 分布式缓存系统 Memcached CAS协议
  3. petalinux zynq spi_ZYNQ 系列 01 | PL 实现按键控制 LED(1)
  4. www.pythonchanlleges.com
  5. QT学习:基本对话框
  6. oracle导出数据dummy,oracle导出表结构1
  7. 四元数乘法_JPL四元数和Hamilton四元数的区别
  8. epoll关于ET、LT模式和socket非阻塞模式的几个总结
  9. poj 2231 Moo Volume 暴力一定超时啊
  10. Project Office 9.0 for mac(任务项目管理软件)
  11. php+memcached缓存技术实例
  12. 无人驾驶插秧机智能辅助系统_北斗年会 | 智慧农业:插秧“神器”大显身手——雷科防务致力于高精度无人驾驶插秧机前装应用...
  13. AI和计算机会议,CCF推荐人工智能领域的会议和期刊
  14. 瀚高数据库安全配置要求
  15. [0x7FFE1E17E050] ANOMALY: meaningless REX prefix used cmd窗口activate报错
  16. UTF-8与unicode的故事(转自某位我没找到的大牛)
  17. 步步为营Hibernate全攻略(三)剪不断理还乱之:多对多关联映射
  18. Ubuntu18.04安装Nvidia显卡驱动教程
  19. JEECG Excel 工具类
  20. 个性化广告推荐系统及应用

热门文章

  1. 听懂李宗盛的人,未必能听懂毛不易
  2. 《沟通的方法》读后感
  3. 2021-05-04T23:26:32.208+0800 E QUERY [js] Error: listDatabases failed:{ “ok“ : 0,
  4. 机器人 蓝buff 钩_LOL机器人Q增强,能从河道钩走蓝buff,将在S9大放异彩
  5. 源恒软件--掌中财税进入“税务云”时代
  6. python数据结构面试_python面试的3大重点,让你顺利拿到offer
  7. 最新ChatGPT网站源码/支持用户注册付费套餐/支持Ai绘画/支持用户会员套餐/邀请分佣功能/支持后台一键更新/网站后台管理/永久更新
  8. 专题·Lucas定理【including Lucas定理,扩展Lucas
  9. 微服务应用性能分析实战11 资源节点树:通过 Sentinel 无侵入实现流量链生成规则
  10. 基于jsp的教学实验管理系统