对于相机采集的图片,会由于相机本身和透镜的影响产生形变,通常需要对相机进行标定,获取相机的内参或内外参,然后矫正其畸变。相机畸变主要分为径向畸变和切向畸变,其中径向畸变是由透镜造成的,切向畸变是由成像仪与相机透镜的不平行造成的。

针孔模型是理想透镜的成像模型,但是实际中相机的透镜不可能是理想的模型,透镜形状的非理想特征造成像点会沿径向发生畸变。一个像点沿径向内缩叫负畸变,或桶形畸变沿径向外延叫正畸变,或枕形畸变。这种崎变相对于光轴严格对称的,也是畸变的主要分量。

图1径向畸变                                                               图2切向畸变

其中,(X,Y,Z)为世界坐标系中的实际点坐标,(u,v)为图像坐标系统的像素坐标,A为相机内参,f像素单元的焦距,c图像像素中心点。

(1-2)

1.1halcon相机标定

1.1.1标定助手及相机参数设置

打开halcon标定助手,加载标定板文件,选择相机类型,设置相机参数,然后加载相机采集的标定图像,如下图所示,图像中全部标定点能够检测出,即采集的相机已经设置好,然后生成代码。

图4 halcon标定助手

标定板生成:

标定板文件的生成分为.descr和.cpd的文件,不同格式文件需使用不同函数进行生成。如,

*生成的是27*31,标定点直径0.0075mm的.cpd标定板(精度高标定板)

create_caltab (27, 31, 0.0075, [13, 6, 6, 20, 20], [15, 6, 24, 6, 24], 'light_on_dark', 'D:/calplate.cpd', 'caltab.ps')

*生成的是7*7,标定点之间距离0.1m,直径0.5的.descr标定板

gen_caltab( 7, 7, 0.1, 0.5, 'D:/caltab.descr', 'caltab.ps')

加载标定图像:

图5加载标定图像

如图5所示,加载标定图像后,状态为确定时,表示标定图像可用于进行标定,然后通过标定助手直接生成标定代码即可。

如图6所示,加载标定图像后,状态为检测出品质问题,此原因大多是照片质量问题,例如光照、对焦、曝光等,需按照halcon标定注意事项的内容拍摄照片。一般照片检测出品质问题也可以进行相机标定。

加载标定板图像会出现“标志点提取失败”,出现此原因的需要根据标定界面下的状态栏查找halcon错误信息,例”inconsistent....(image mirrored? )”,则需要查找相应原因(实际标定板(透明)与标定板文件图片的可能有镜像区别,将实际标定板翻转即可,多试)。此不可进行相机标定。

图6相机标定问题

相机初始参数设置:

例如,

*(f, k, cell width, cell height, cx, cy, width, height)k为畸变系数

StartParameters := [0.029,0,4.3e-006,4.3e-006,2592,1728,5184,3456]

*(f, k1, k2, k3, p1, p2, cell width, cell height, cx, cy, width, height)k1,k2,k3径向畸变, p1,p2为切向畸变

StartParameters := [0.029,0,0,0,0,0,4.3e-006,4.3e-006,2592,1728,5184,3456]

其中,相机初始参数根据相机模型的不同而不同,若相机模型为area(division),则相机参数为7个,若area(多项式),则相机参数12个。

1.1.2 标定程序

利用标定助手生成代码,然后执行结果,分析其正确性,若需要将其生成为C/C++程序,可通过halcon界面的‘文件’项‘导出’成.cpp文件。

图7halcon生成C程序Halcon标定程序

*Calibration 01: Code generated by Calibration 01

*读入某个文件夹下的所有标定图像

list_files ('D:/halconvc/img', ['files','follow_links'], ImageFiles)

tuple_regexp_select (ImageFiles, ['\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm

|ppm|pbm|xwd|ima|hobj)$','ignore_case'], ImageFiles)

*初始标定参数设置及定义标定板文件

TmpCtrl_ReferenceIndex := 0

TmpCtrl_PlateDescription := 'D:/calib/calplate.cpd'

StartParameters := [0.029,0,0,0,0,0,4.3e-006,4.3e-006,2592,1728,5184,3456]

TmpCtrl_FindCalObjParNames := 'sigma'

TmpCtrl_FindCalObjParValues := 1

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

set_calib_data_calib_object (CalibHandle, 0, TmpCtrl_PlateDescription)

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

gen_empty_obj (Images)

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

read_image (Image, ImageFiles[Index])

concat_obj(Images,Image,Images)

*提取图像Images中标定板上的圆形标志来确定标定板的有效区域

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

endfor

* Calibration 01: Perform the actual calibration

calibrate_cameras (CalibHandle, TmpCtrl_Errors)

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

*将内外参保存到磁盘

write_cam_par(CameraParam,'D:/halconvc/campar.dat')

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

set_origin_pose (CameraPose, 0, 0, 0.01, CameraPose)

write_pose(CameraPose,'D:/halconvc/campos.dat')

stop()

*另外读取内外参文件的函数

read_cam_par ('D:/halconvc/campar.dat', CameraParam)

read_pose ('D:/halconvc/campos.dat', CameraPose)

1.2图像矫正

Halcon中图像矫正,接上述程序,以下介绍两种方法。

①使用内外参,即相机内参和位资*  goal: rectify images

*  first determine parameters such that the entire image content is visible

*  -> transform image boundary into world plane, determine smallest

*     rectangle around it

*当设备固定后,位资是唯一的

select_obj(images,image,1)

get_image_pointer1(Image, Pointer, Type, Width, Height)

gen_rectangle1 (ImageRect, 0, 0, Height-1, Width-1)

gen_contour_region_xld (ImageRect, ImageBorder, 'border')

contour_to_world_plane_xld(ImageBorder, ImageBorderWCS, CameraParam,

CameraPose, 1)

smallest_rectangle1_xld (ImageBorderWCS, MinY, MinX, MaxY, MaxX)

set_origin_pose(CameraPose, MinX, MinY, 0.01, PoseForEntireImage)

image_points_to_world_plane(CameraParam,PoseForEntireImage,[Height/2, Height/2, Height/2+1], [Width/2, Width/2+1, Width/2], 1, WorldPixelX, WorldPixelY)

distance_pp(WorldPixelY[0], WorldPixelX[0], WorldPixelY[1], WorldPixelX[1],

WorldLength1)

distance_pp(WorldPixelY[0], WorldPixelX[0], WorldPixelY[2], WorldPixelX[2],

WorldLength2)

ScaleForSimilarPixelSize := (WorldLength1+WorldLength2)/2

*  -> determine output image size such that entire input image fits into it

ExtentX := MaxX-MinX

ExtentY := MaxY-MinY

WidthRectifiedImage := ExtentX/ScaleForSimilarPixelSize

HeightRectifiedImage := ExtentY/ScaleForSimilarPixelSize

*  create mapping with the determined parachuangjia

*创建一个投射图,其描述图像平面与坐标轴系统中平面Z为零之间的映射

gen_image_to_world_plane_map(Map, CameraParam, PoseForEntireImage, Width, Height, WidthRectifiedImage, HeightRectifiedImage, \

ScaleForSimilarPixelSize, 'bilinear')

clear_calib_data (CalibHandle)

* Map the images

for I :=  1 to |ImageFiles| by 1

select_obj (Images, Img, I)

map_image (Img, Map, ImageMapped)

write_image (ImageMapped, 'jpg', 0, 'D:/halconvc/picture/'+I)

Endfor

②仅使用内参read_image (Image,'D:/halconvc/img/IMG_00.JPG')

read_cam_par('D:/halconvc/campar.dat',CameraParam)

CarParamVirtualFixed:=CameraParam

*对于area(diversion)相机模型(7个参数)

change_radial_distortion_cam_par('adaptive',CameraParam,0,CarParamVirtualFixed)

*对于area(多项式)相机模型(12个参数)

change_radial_distortion_cam_par('adaptive',CameraParam,[0,0,0,0,0],CarParamVirtualFixed)

*上述相机模型选一种后进行下面的map_image

*创建一个投射图,其描述图像与其相应正在改变的径向畸变,而对于12个参数的畸变包括径向和切向畸变

gen_radial_distortion_map(Map,CameraParam,CarParamVirtualFixed,'bilinear')

map_image(Image,Map,ImageMapped)

————————————————

版权声明:本文为CSDN博主「ab1271173712」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

#转载请注明出处 www.skcircle.com 《少有人走的路》勇哥的工业自动化技术网站。如果需要本贴图片源码等资源,请向勇哥索取。

halcon相机标定助手_halcon相机标定和图像矫正相关推荐

  1. halcon相机标定助手_Halcon 学习笔记---单相机标定(2)

    一.单项机标定原因 降低畸变(相差) 测量 二.相机标定求出什么 该方程是求取世界坐标系与像素坐标系之间转换矩阵,本质就是求出相机的内外参数.其中dx和dy为每个像素在图像坐标系(UVO)沿U和V方向 ...

  2. 机器视觉--使用halcon标定助手进行相机标定

    一.点击选项卡:---助手--创建新的calibration,可以设置自己的摄相机参数. 二.选择描述文件,cpd文件,就是选择你所需要的标定板的尺寸样式. 如果没有你想使用的标定板,可以通过生成标定 ...

  3. halcon相机标定助手_halcon标定助手 使用笔记

    本文是勇哥很早的时候写的一篇,如果想知道更多的信息,请参阅勇哥另一篇更详细的文章: "安装"面板中: 描述文件要选择你手里的halcon标定板的对应的描述文件. 例如笔者手中是30 ...

  4. halcon相机标定助手_HALCON高级篇:单个相机的尺寸测量

    用单个相机在指定平面上的尺寸测量 在HALCON中很容易从图像中获得在世界坐标中的非变形测量.一般情况下,如果相同的物体在同一时刻,在不同的空间位置下,用相机拍摄两个或更多的图像,才能完成这样的测量任 ...

  5. Halcon 圆形标定板标定基本流程-标定助手操作

    Halcon 圆形标定板基本流程 1. 认识标定板: 2. 生成标定板的描述文件 3. 开始标定 4. 采集标定板的图像 5. 得到相机内外参 1. 认识标定板: 这个标定板的规格是 7×7: 标定板 ...

  6. halcon相机标定助手_使用Halcon助手来制作标定数据

    http://blog.csdn.net/hust1900/article/details/8687784 1打开halcon标定助手 2.标定任务一栏,选择位姿和所有参数(此为默认情况):标定板一栏 ...

  7. Halcon例程(基于多个标定图的单目相机标定)详解—— Camera_calibration_multi_image.hdev

    一.前言 在我的工业相机专栏里已经将相机标定涉及到的理论部分讲解完毕,为什么要标定以及标定要求出什么参数呢,用一个Halcon 例程来帮助理解. 这个例程是比较经典的标定程序,基本将标定过程讲的比较清 ...

  8. Halcon单相机标定—标定板标定和自标定 线扫相机标定

    一.标定板标定 13.0 ************************************************************************************* * ...

  9. HALCON 20.11:如何处理标定助手品质问题

    HALCON 20.11:如何处理标定助手品质问题 在"品质问题"选项下,您可以得到每个图像的评估,其中包括缺陷图像特征描述以及问题严重程度的质量分数百分比.结果为0%表示图像特征 ...

最新文章

  1. OSError: exception: access violation writing and reading
  2. iovec结构体定义及使用
  3. 什么是Java内存模型中的happens-before
  4. 修改python默认的编码方式
  5. PCA算法中样本方差和协方差的无偏估计与n-1的由来
  6. 《Python入门到精通》文件操作
  7. 火星首座NFT虚拟房屋以超过50万美元价格售出
  8. Java头文件找出循环依赖_Node.js 如何找出循环依赖的文件?如何解决循环依赖问题?...
  9. 手机连接电脑wifi上网_手机设置无线路由器方法教你一分钟学会WIFI上网(无需电脑)...
  10. pyqt5-两个窗口之间相互显示隐藏
  11. 大数据处理与分析---课程总结
  12. 【Webex】加入会议是无法正常加入!提示“下载会议组件时无法获取正确的参数。 请联系技术支持以获取帮助。...
  13. 浅谈学习的深度和广度
  14. 蜂鸟数据Trochil:论述制定策略的两种主要方法:市场假设和瑞士法郎案例研究-构建更好的策略1
  15. 零基础自学新概念英语的方法
  16. CF1463-A. Dungeon
  17. 2021综述:一般目标检测中的遮挡处理
  18. API接口名称(item_get - 根据ID取商品详情)[item_search,item_get,item_search_shop等]
  19. HAUT 1261 地狱飞龙
  20. JDK的解压安装 - CentOS(结尾附视频)

热门文章

  1. 特朗普纽约投资项目售价8.5亿
  2. GO WEB IRIS入门 安装iris
  3. 指定位置签到-百度地图
  4. ChinaSkills技能大赛网络系统管理Debian模块(样题一)||Client配置
  5. 计算机科学与技术在国内外的形势,计算机科学与技术就业形势分析
  6. Unity3D-Baked Lightmapping 示例学习
  7. 判断是否为USD格式
  8. 是时候废除“网络君主制”啦?认识 Usenet ~
  9. 记账本系统的功能结构图
  10. 你真会进制的转换吗?进制之间的快速转换方法(我的转换很快,你忍一下)