专栏首页机器视觉那些事儿【相机标定篇】halcon自标定(3)

【相机标定篇】halcon自标定(3)

“一滴水,用显微镜看,也是一个大世界

在项目中,偶尔会遇到由于产品形状、拍摄位置等原因导致标定板很难放置的情况,此时可以考虑使用halcon自标定算法来标定相机。由于自标定可以在不使用用标定板情况下,进行畸变矫正。所以,极大地方便在设备现场进行调试。


1. 自标定处理流程

自标定原理来源于此论文:“Automatic line-based estimation of radial lens distortion”。

论文下载地址:

链接:https://pan.baidu.com/s/118YDti24nvbnsz2CbOJa1Q 提取码:5t67

从论文中可知自标定的一般流程:轮廓检测、共线线段连接、剔除干扰线、求取畸变参数。如下图所示。

在halcon我们可以对自标定流程梳理为两大步骤:1.检测直线轮廓XLD 2.图像畸变矫正,如下图所示。

2. 自标定相关算子

radial_distortion_self_calibration(Contours : SelectedContours : Width, Height, InlierThreshold, RandSeed, DistortionModel, DistortionCenter, PrincipalPointVar : CameraParam)

名字:径向畸变自标定

描述:此算子通过XLD轮廓数据来估算镜头的畸变参数和畸变中心。其获得的即便参数通过相机内参数CameraParam返回。此算子不能矫正焦距和比例因子,因此不能用于3D测量中。

参数:

Contours :输入用来矫正的轮廓数据

SelectedContours :矫正后的轮廓数据

Width:获取轮廓数据的图像宽度

Height:获取轮廓数据的图像高度

InlierThreshold:分类阈值

RandSeed:随机种子

DistortionModel:畸变模式

DistortionCenter:畸变中心的估算模式

PrincipalPointVar :偏差控制

CameraParam:输出相机内参数

change_radial_distortion_cam_par( : : Mode, CamParamIn, DistortionCoeffs : CamParamOut)

名字:矫正畸变参数

描述:根据指定的径向畸变系数,求取理想无畸变的相机内参。

参数:

Mode:畸变模式

CamParamIn:畸变的相机内部参数

DistortionCoeffs :畸变系数值

CamParamOut:已校正的相机内参

change_radial_distortion_image(Image, Region : ImageRectified : CamParamIn, CamParamOut : )

名字:矫正畸变图像

描述:根据指定图像和指定相加参数来矫正输入图像的畸变

参数:

Image:输入图像

Region :矫正图像的区域

ImageRectified :矫正图像

CamParamIn:输入相机参数

CamParamOut :输出相机参数


3. 实例分析

首先进行边缘检测, 选择包含一定长度,一定数量直线段的XLD轮廓

使用radial_distortion_self_calibration算子进行自标定,

得到相机内参以及用于标定的直线段

利用change_radial_distortion_cam_par 、以及change_radial_distortion_image

进行图像畸变矫正

完整源码如下:

*公众号:机器视觉那些事儿**1. 算法功能:径向畸变自校正*2. 算法思路:*      (1)检测含直线轮廓XLD*      (2)矫正畸变图像
*---------初始化,读图------------dev_update_off ()read_image (Image, 'board/board-01')dev_close_window ()dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)set_display_font (WindowHandle, 16, 'mono', 'true', 'false')dev_display (Image)disp_message (WindowHandle, 'Image with radial distortions', 'window', 0, 0, 'black', 'true')disp_continue_message (WindowHandle, 'black', 'true')stop ()
*----------------(1)检测直线轮廓XLD=----------------* i 利用canny滤波器提取图像边缘edges_sub_pix (Image, Edges, 'canny', 1, 10, 40)* ii 分割直线段以及圆弧线段segment_contours_xld (Edges, SplitEdges, 'lines_circles', 5, 4, 2)* iii 选择足够长的线段用于自标定select_shape_xld (SplitEdges, SelectedEdges, 'contlength', 'and', 30, 100000)dev_display (Image)dev_set_colored (12)dev_display (SelectedEdges)disp_message (WindowHandle, 'Extracted edges', 'window', 0, 0, 'black', 'true')disp_continue_message (WindowHandle, 'black', 'true')stop ()dev_clear_window ()disp_message (WindowHandle, 'Performing self-calibration...', 'window', 0, 0, 'black', 'true')
*----------------(2)矫正畸变图像=----------------* i 相机自标定,根据边缘求取内参radial_distortion_self_calibration (SelectedEdges, CalibrationEdges, 646, 492, 0.08, 42, 'division', 'variable', 0, CamParSingleImage)* ii 获取无畸变相机内参get_domain (Image, Domain)change_radial_distortion_cam_par ('fixed', CamParSingleImage, 0, CamParSingleImageRect)* iii 根据内参,进行图像畸变矫正change_radial_distortion_image (Image, Domain, ImageRectified, CamParSingleImage, CamParSingleImageRect)
*-----------结果显示------------*显示原始图像XLD以及用于矫正图像所需的直线段dev_display (Image)dev_display (CalibrationEdges)disp_message (WindowHandle, 'Edges used for calibration', 'window', 0, 0, 'black', 'true')disp_continue_message (WindowHandle, 'black', 'true')stop ()*显示矫正图像dev_display (ImageRectified)disp_message (WindowHandle, 'Image without radial distortions', 'window', 0, 0, 'black', 'true')disp_continue_message (WindowHandle, 'black', 'true')stop ()

4. 注意事项

  1. halcon的自标定是根据物体边缘的直线,来进行图像矫正,所以需保证图像畸变较大的边缘有足够的直线段;
  2. 实际项目中被检测物若没有理想的直线段,可以使用棋盘格、标准物、菲林片等代替;
  3. 运行内存大于等于4G。

5. 后续步骤

自标定只需要一张图片,即可标定相机内参,后续若需要将像素单位换算至公有制单位,需要使用棋盘格、标准物、菲林片等进行转换,便可应用于测量项目;也可以利用一定网格构建XY坐标系,用于定位项目。所以,相机标定后的应用,会在后续的测量篇以及手眼标定篇涉及,请持续关注。


本文分享自微信公众号 - 机器视觉那些事儿(jiqishijue),作者:threeQing

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-05-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【相机标定篇】Halcon标定助手逐步使用(2)

    最近一直在现场做一个比较重要的项目,也近两个月了,深入自动化行业愈久,愈发觉得此行业的艰辛,也更加希望国家在资源上能更倾向此行业。可能西方国家早已在二战...

    threeQing
  • 【测量篇】(3)标定+定位+1D测量综合实例

    在后台收到信息,莫名其妙被人投诉了,不知触犯了哪些人的利益,本人依然会本着分享交流的精神,共促行业的繁荣。如果您能一路跟过来,halcon视觉入门到提高,完全没...

    threeQing
  • 【相机标定篇】单目相机标定原理(1)

    空间物体呈现的是三维几何位置,相机内的投影图像为二维位置,所以,确定空间物体某点的三维几何位置与其投影图像中对应点的关系,就是标定。

    threeQing
  • 实战 | 相机标定

    版权声明:本文为博主原创文章,未经博主允许不得转载。违者必究。 https://blog.c...

    用户1150922
  • 图像模糊度评价性能提升方法简介

    背景介绍 随着多媒体技术的发展,图像以及视频服务逐渐成为人们获取信息的主要载体。传统上,视频或图像质量的好坏需要人眼去看,并且为了得到一个合适的评价分数,一般需...

    用户1324186
  • CVPR2019 | 港中文&腾讯优图等提出:暗光下的图像增强

    论文地址:http://jiaya.me/papers/photoenhance_cvpr19.pdf

    小白学视觉
  • 反常识!深度神经网络并不是通过形状来识别物体的

    和人类不同,AI物体识别靠的是小的细节,而不是图像的边界,但是总是有办法来弥补这个差别的!

    AI算法与图像处理
  • 线性代数--MIT18.06(一)

    从行的角度来看,三个三元一次方程表示三维空间中的三个平面,如果三个平面相交于一点,那么交点的坐标即为方程组的解。

    fireWang
  • docker监控: cAdvisor

    cAdvisor 是 Google 开源的一款用于展示和分析容器运行状态的可视化工具,通过在主机上运行 cAdvisor 用户可以轻松的获取到当前主机上容器的运...

    张琳兮
  • 2020 活久见:欧美主流 app「熔断」了

    在海外做移动端应用开发,有一家公司是几乎不可避免的:facebook(以下简称 FB)。它打造(并且几乎垄断)了从获客到获利(广告)的一条龙服务,使得你无法抵制...

    tyrchen

扫码关注云+社区

领取腾讯云代金券