当前位置: 首页 > java >正文

HALCON相机标定

相机标定简介:

        首先,相机会产生畸变,即实际图像和拍摄图像不一致,可以是凸性也可以是凹性形变,相机标定的过程就是将畸变图像还原为原始图像,并将图像中的像素坐标转换为世界坐标。

形如:相机内参 CameraParameters 和相机外参 CameraPose

CameraParameters := ['area_scan_division',0.000775057,-131550,6.66883e-07,6.67e-07,796.074,594.063,1600,1200]
CameraPose := [0.000732489,0.0324252,0.533711,359.244,357.29,0.365181,0]

1.标定板生成

用gen_caltab算子来制作一个标定板,具体见深入理解halcon相机标定_halcon标定-CSDN博客
gen_caltab( : : XNum, YNum, MarkDist, DiameterRatio, CalPlateDescr, CalPlatePSFile : )

2.标定板摆放

标定板数量9-16张为宜,标定板占标定图像1/3到1/4,可以偏离标定板所在平面一定角度。

3.怎么用halcon进行相机内外参标定?

连接好相机后,打开相机驱动软件看相机是否正确连接,再更改设置里的网络和internet中IP4地址和掩码为驱动软件上显示的相应内容。

 打开halcon窗口的image acquisition,自动检测,连接设备,实时显示图像。

也可通过相机驱动软件进行拍摄存储,拍摄图像存放置指定文件夹。

通过上述操作得到标定描述文件后,打开halcon的celarbation窗口:查询相机所属型号的焦距、像元。

进一步,选标定==>图像文件==>加载存储的图像

 标志失败原因:1)打光不好,过亮、过暗

                           2)对焦不清晰

                           3)标定板的对比度不够(>128)

去除标志失败点图像,适当移除部分品质不好的图像,选定方向较正的图像作为参考位姿,点击标定。

得到生成结果

进一步,代码生成,

可在halcon代码里看到生成的相机内外参数

示例代码如下:

CameraParameters := ['area_scan_division',0.000733146,-131210,6.66914e-07,6.67e-07,794.794,595.823,1600,1200]
CameraPose := [0.00132212,0.0316434,0.504834,359.297,357.443,0.364191,0]read_image (Image, 'C:/ProgramData/Galaxy/userdata/top_camera/Pic_20250415192151821.bmp')rgb1_to_gray (Image, GrayImage)
threshold (GrayImage, Regions, 4, 100)
connection (Regions, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and',300,1000.5)
select_shape (SelectedRegions, SelectedRegions, 'column', 'and', 525.7, 960)
area_center (SelectedRegions, Area, Row, Column)at_colum := [Column[0],Column[1]]
at_row := [ Row[0],Row[1]]gen_contour_polygon_xld (Contour,at_row , at_colum)
image_points_to_world_plane (CameraParameters, CameraPose, at_row,at_colum, 'mm', X, Y)
x1 := X[0]
x2 := X[1]
y1 := Y[0]
y2 := Y[1]
distance_pp (x1, y1, x2, y2, Distance)
stop ()

 

 

http://www.xdnf.cn/news/14516.html

相关文章:

  • Laravel框架的发展前景与Composer的核心作用-优雅草卓伊凡
  • 微信小程序:实现左侧菜单、右侧内容、表单、新增按钮等组件封装
  • 蜻蜓Q系统的技术演进:从Laravel 6到Laravel 8的升级之路-优雅草卓伊凡
  • web3 浏览器注入 (如 MetaMask)
  • 如何获取 vscode 的 vsix 离线插件安装包
  • jmeter学习
  • JETBRAINS IDE 开发环境自定义设置快捷键
  • MySQL存储引擎深度解析:InnoDB、MyISAM、MEMORY 与 ARCHIVE 的全面对比与选型建议
  • FPGA基础 -- Verilog行为级建模之alawys语句
  • 【深度学习】卷积神经网络(CNN):计算机视觉的革命性引擎
  • 最新期刊影响因子,基本包含全部期刊
  • OpenStack入门体验
  • Oracle 详细解析及与 MySQL 的核心区别
  • AI时代的质量显得更为重要
  • 自动打电话软件设计与实现
  • 支持selenium的chrome driver更新到137.0.7151.119
  • 一站式用AI编程神奇Cursor/Trae(VScode环境)开发运行Scala应用
  • 《Effective Python》第九章 并发与并行——使用 Queue 实现并发重构
  • 【力扣 中等 C】2. 两数相加
  • 机器学习常用评估指标
  • win10/win11 快速隐藏/显示桌面图标
  • 亚矩阵云手机+Whatnot:直播电商的自动化增长引擎
  • Redis 持久化机制详解:RDB、AOF 原理与面试最佳实践(RDB篇)
  • SSL安全证书:数字时代的网络安全基石
  • 如何在 MX Linux 上安装 Blender CAD 软件
  • 学生成绩管理系统
  • 4. 时间序列预测的自回归和自动方法
  • 【MySQL】MySQL 数据库操作与设计
  • 使用 Java + WebSocket 实现简单实时双人协同 pk 答题
  • 【matlab】图片转视频