当前位置:文档之家› halcon单相机标定详细说明

halcon单相机标定详细说明

halcon单相机标定详细说明
halcon单相机标定详细说明

相机标定

1 相机标定基本原理

1.1 相机成像模型

目前大多数相机模型都是基于针孔成像原理建立的,因为针孔成像原理简单,并且能满足建模的要求。除此之外还有基于应用歪斜光线追踪法和近轴光线追踪法的成像模型[1]。针孔成像虽然已经展示出了相机的成像原理,但是由于针孔成像是理想的物理模型,没有考虑相机本身的尺寸、镜头与相机轴心的偏斜等因素的影响,因此精度很低,不能满足工业机器视觉的要求。为了使相机模型能高精度的反应相机的实际成像过程,需要再针孔成像模型的基础上考虑镜头畸变等的因素。

图1 针孔成像

基于针孔成像原理建立的相机的成像模型,如下图所示。在相机的成像模型中,包含有几个坐标系分别是世界坐标系、相机坐标系、图像坐标系,相机的成像过程的数学模型就是目标点在这几个坐标系中的转化过程。

图2 针孔成像模型

(1)世界坐标系(X w,Y w,Z w),就是现实坐标系,是实际物体在现实世界中的数学描述,是一个三维的坐标空间。

(2)摄像机坐标系(X c, Y c),以针孔相机模型的聚焦中心为原点,以摄像机光学轴线为Z c轴

(3)图像坐标系:分为图像像素坐标系和图像物理坐标系

为了便于数学描述将图像平面移动到针孔与世界坐标系之间。如下图所示。

图3 将相机平面移至针孔与目标物体之间后的模型

1.2 坐标系间转换

从世界坐标系到相机坐标系:

P(X c ,Y c ,Z c )=R(α,β,γ)?P(X w ,Y w ,Z w )+T

每一个世界坐标的对象都可以通过旋转和平移转移到相机坐标系上。将目标点旋转θ角度,等价于将坐标系方向旋转θ。如下图所示,是二维坐标的旋转变换,对于三维坐标而言,旋转中绕某一个轴旋转,原理实际与二维坐标旋转相同。如果,世界坐标分别绕X ,Y 和Z 轴旋转α,β,γ,那么旋转矩阵分别为R (α),R (β),R (γ)

图4 坐标旋转原理

R (α)=[10

00cosα

?sinα0sinαcosα] (1-1)

R (β)=[cosβ

0sinβ0

10?sinβ

0cosβ

] (1-2)

R (γ)=[cosγ

sinγ0?sinγ

cosγ00

01

] (1-3)

总的旋转矩阵就是三者的乘积:R(α,β,γ)=R (α)?R (β)?R(γ)

平移矩阵T =(t x ,t y ,t z ),t x ,t y ,t z 是世界坐标系原点与摄相机坐标系原点之间的差值。

相机坐标系到图像坐标系

X d =f

X c Z c ,Y d =f Y c

Z c

[X

d Y d ]=f Z c [X c Y c

] (1-4)

(1-5)

图5 相机成像坐标变换原理图

图像物理坐标到图像像素坐标系

图形坐标系是一个二维坐标系,又分为图像像素坐标系和图像物理坐标系。图像像素坐标系X f -Y f 是以图像左上角为原点,以图像互为直角的两个边缘为坐标轴,满足右手准则而建立的。图像是由一个个小的像素点组成的,图像像素坐标系的横纵坐标正是以像素点为单位,用来描述图像中每一个像素点在图像中的位置。图像物理坐标系以光轴与像平面交点为圆心建立的,图像物理坐标系的两个坐标轴分别与图像像素坐标系的坐标轴平行,并且方向相同,如图3所示。图像物理坐标系是以毫米为单位的直角坐标系X-Y 。用(X f ,Y f )来描述图像像素坐标系中的点,用(X d ,Y d )来描述图像物理坐标系中的点。图像物理坐标系的原点O 在图像像素坐标系中的坐标为(C x , C y ),用dx ,dy 来表示相邻像素点中心在X 轴方向和Y 轴方向的实际物理距离,则与图像像素坐标系的转化关系为:

{ X f =

X d

dx

+C x Y f =Y d dy +C

y

(1-6)

1.4相机畸变模型

相机畸变主要分为径向畸变和切向畸变,其中径向畸变是由透镜造成的,切向畸变是由成像仪与相机透镜的不平行造成的。

针孔模型是理想透镜的成像模型,但是实际中相机的透镜不可能是理想的模型,透镜形状的非理想特征造成像点会沿径向发生畸变。一个像点沿径向内缩叫负畸变,或桶形畸变沿径向外延叫正畸变,或枕形畸变。这种崎变相对于光轴严格对称的,也是畸变的主要分量[2]。 (X u ,Y u )为矫正后的坐标,(X d ,Y d )是受到镜头失真影响而偏移的像平面坐标,径向径向畸变模型:

X u =X d +X d (k 1r 2+k 1r 4+?) Y u =Y d +Y d (k 1r 2+k 1r 4+?) (1-7) (1-8)

其中k 1,k 2,?为径向畸变系数,r =√X d 2+Y d 2

,一般只需要考虑一阶或二阶就可以满足要求。

切向畸变模型:

X u =X d +P 1X d (3X d 2+Y d 2)+2P 2X d Y d +O[(X d ,Y d )4] Y u =Y d +P 2X d (3X d 2+Y d 2)+2P 1X d Y d +O[(X d ,Y d )4]

(1-9) (1-10) 其中P 1和P 2为切向畸变影响系数。

图7 径向畸变

图8 切向畸变

图6 图像像素坐标系和图像物理坐标系

1.5需要标定的参数

外部参数

由前面可知,摄像机的外部参数是用来描述摄像机坐标系与世界坐标系的关系,它表明摄像机在世界坐标系中的位置和方位,可用的旋转矩阵和平移向量来表示,如式一所示。其中由于为单位正交矩阵,必须满足个正交约束,故实质上旋转矩阵只有三个独立参数,加上平移向量的三个参数,故一共有个独立的外部参数。

内部参数

内部参数只与摄像机内部结构有关,而与摄像机位置参数无关,主要包括图像主点坐标(c x,c y),单个像元的高宽s x,s y,摄像机的有效焦距f和透镜的畸变失真系数k等。

摄像机的内部参数有时也可以从制造商提供的说明书中查到,但是其精确性不能满足要求,仅可作为参考。实际应用中需要对它们进行标定。主点坐标(c x,c y),理论上主点坐标一般位于图像中心处,但实际上由于摄像机制作和使用摄像机的镜头可转动和拆卸等原因,使得面阵安装并不能保证以透镜光轴为中心,且图像采集数字化窗口的中心不一定与光学中心重合,这就使得主点不一定在图像的帧存中心,故需要标定,,的值。

单个像元的高宽s x,s y,该数据可以在制造商提供的技术文档中查到,但是该数据不是完全准确的。单个像元的高宽理论上应该是相等的,但是由于制造的误差,两者不可能完全相等,因此需要根据实际情况对其进行修正。

透镜的畸变失真系数前面讲到理想的透镜成像才满足线性关系,实际上透镜存在多种非线性畸变,需要根据实际情况对它们进行修正。

1.6计算方法

张正友标定法、Tsai两步标定法。

参考文献:

1宋旗桂. 应用歪斜光线追踪法及近轴光线追踪法于照相机校正[D]. 台湾: 国立成功大学, 2007.

2 邹凤娇. 摄像机标定及相关技术研究[D]. 成都:四川大学,硕士学位论文,2005.

1.7目前设备中采用过的标定方法

1、目前在RFID设备、LCR设备中标定都只采用一张,忽略相机畸变。通过图像处理,提取标定板圆心的间距除以像素值得到。该方法得到像素X方向和Y方向采用同一距离,忽略其误差。

2、Halcon的三维标定,是halcon默认的标定方法,消除径向畸变和视角畸变,在XYZ

图9 Halcon三维标定采集图像示例

3、Halcon的二维标定,只在XY平面内平移和旋转标定板,采集18张图像,减小Z的影响提高标定精度

实验数据:

图像坐标X方向像素物理距离图像坐标Y方向像素物理距离

方法一15.5618um 15.5618um

方法二15.7575um 15.7308um

方法三

采用方法一每个像素距离与方法二有0.2um的差距,当距离较小时,这个误差可能表现的并不明显,在目前的设备中基本能满足要求。

根据方法二知道X方向与Y方向像素物理差值是0.027um。

存在的问题:

1、目前标定板相对视野范围显得有点大,会降低标定的精度。

考虑自己制作标定板,打印出来,但是遇到问题是,打印出来标定板大小与我设计的标定板大小有些许差距,可能是由于文件格式转换过程中导致像素改变使打印的大小出现偏差。

2、因尽量减小光圈,提高景深,提升标定精度。

后期采图时,尽量减小光圈。

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

2.1 标定描述

机器视觉本质就是通过图像来获取三维世界的信息,然后基于该信息进行相应的图像处理手段,从中获取我们想要的信息。标定的过程实际是建立图像世界与三维世界位姿的关系,只有准确地建立了该关系,才能从图像准确得知三维世界的真实状态。但是镜头在拍摄物体时存在成像的畸变,镜头成像的畸变导致图像不能完全地反映真实的世界,对图像的后续处理会产生干扰。尤其对于定位和检测,需要更高精度的矫正。镜头成像的畸变分为径向畸变和切向畸变,相对切向畸变而言,径向畸变对图像影响较大,而径向畸变分为枕形畸变(Pincushion Distortion)和桶形畸变(Barrel Distortion),如图3所示。因此,相机标定要矫

正镜头的畸变,然后获取相机的内部参数和外部参数,建立起图像与三维世界的联系。

图3 枕形畸变与桶形畸变

一个成功的标定,至少需要一个知道其精确尺寸的标定板。在标定前需要采集不同姿态的标定板图像,确保每张图像都完整的包含了标定板。标定图像的质量,很大程度上决定了标定是否能成功

2.2 标定板

标定的方法从原理上主要分为三大类:线性标定、非线性标定和二次标定。使用的标定板有棋盘格也有原点阵列,如图4所示。

(a)棋盘格(b)原点阵列

图4 标定板

但是,halcon并非必须使用其特制的标定板才能进行相机标定,但是如果要使用Halcon 的标定算子进行标定,则必须使用Halcon特定的标定板,否则就需要自己去写标定板和特征点提取的算法了。Halcon的标定板如图5所示,黑色的边框中有阵列分布的原点,在边框的左上角有个小三角用来确定其旋转的位置。

以30*30mm的标定板为例:

黑色原点:7*7

边框长度:30*30mm

内边框长度:28.125mm*28.125mm

黑色原点半径:0.9375mm

原点中心间距:3.75mm

裁剪宽度:30.75*30.75mm

图5 halcon标定板

标定板制作:

Halcon的安装后的文件中含有部分型号标定板的描述文件,但是由于实际应用中的标定板尺寸与系统描述文件不一致,因此需要定制相应的描述文件。

Halcon中用gen_caltab(::XNum,YNum,MarkDist,DiameterRatio,CalTabDescrFile,CalTabPSFile:) 算子来制作一个标定板

XNum 每行黑色标志圆点的数量。

YNum 每列黑色标志圆点的数量。

MarkDist 两个就近黑色圆点中心之间的距离。单位是meter

DiameterRatio 黑色圆点直径与两圆点中心距离的比值。

CalTabDescrFile 标定板描述文件的文件路径(.descr)

CalTabPSFile 标定板图像文件的文件路径(.ps),其中,.descr文件为标定板描述文件,.ps文件为标定板图形文件,可以用photoshop(PS)打开。在实际应用中使用的标定板都是采用光刻工艺制作而成,精度能达到1um,自己制作的标定板则精度很低。

标定板选取:

标定板大小一般选取为相机视野大小的1/3左右是合适的。

2.3相机标定流程

标定流程:

图6标定流程图

2.4 标定注意事项

标定图像采集注意点:

1. 标定板材质:光源在标定板前,可选陶瓷标定板;光源在后可选玻璃标定板,避免出现标定板反光的情况;

2. 标定板图像最好10幅以上,但是标定图像也并非越多越好,一般不超过20幅;

3. 标定图像采集过程中,相机的光圈不能发生改变,否则相机会被重新标定;

4. 图像覆盖标定板四角,标定板四个角要完全在图像内,标定板应该被放置在视野中间、边缘、四个角点处,还应使标定板适当的被旋转和倾斜;

(a) (b)

(c) (d)

(e) (f)

图7 标定图像采集示例

5.图像灰度值差100以上;

2.5使用halcon标定助手标定过程:

Step1: 打开标定助手,设定描述文件,标定板厚度,相机类型、焦距等参数。

Step2:加载图像,可以实时采集,也可以采集好后再一起标定,建立先采图后标定。

2.5 写标定

采用Halcon标定助手生成的代码只能获取相机的内外参数,对于实际应用还需要进一步处理,完成的标定代码是更加复杂的,包含内外参数的获取、将图像坐标转换到世界坐标、像素实际物理距离、生成用于矫正的Map图像、将畸变图像矫正。

Halcon相机标定代码:

*相机标定程序,包括相机内参与外参的获取、单个像素物理距离=实际距离/物理距离

********************************设定相机参数********************************* dev_close_window()

read_image (Image, 'scratch/scratch_calib_01.png')

get_image_size(Image, Width, Height)

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

dev_set_draw ('margin')

dev_set_line_width (1)

*创建标定数据(标定类型,相机数量,标定板数量,标定板模型句柄)

create_calib_data('calibration_object', 1, 1, CalibDataID)

*相机初始参数

StartCameraParam:=[0.012,0,0.0000055,0.0000055,Width/2, Height/2,Width, Height]

*设定相机参数

set_calib_data_cam_param (CalibDataID, 0, 'area_scan_division', StartCameraParam)

*指定标定描述文件

set_calib_data_calib_object(CalibDataID, 0, 'caltab_30mm.descr')

*****************************读取含标定板的图像****************************

for i:=1 to 12 by 1

read_image( Image,'scratch/scratch_calib_'+i$'02d'+'.png') //i$'02d'整数i转化为字符串

*找到标定区域

find_caltab(Image, CaltabRagion,'caltab_30mm.descr', 3, 112, 5)

*find_calib_object()

dev_set_color('green')

dev_display (CaltabRagion)

*参数解释(包含标定板的图像,标定板描述文件,相机初始参数,初始提取轮廓阈值128,轮廓阈值减小步长10,提取黑点轮廓滤波器参数0.9,黑圆点最小轮廓*长度15,黑圆点最大直径100,圆心坐标,预估外参)

find_marks_and_pose(Image, CaltabRagion, 'caltab_30mm.descr', StartCameraParam, 128, 10, 18, 0.9, 15, 100, RCoord, CCoord, StartPose)

*StartPose为粗略得到的外参(即位姿)

dev_set_color('red')

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

*将标定数据保存在标定模型中

set_calib_data_observ_points(CalibDataID, 0, 0, i, RCoord, CCoord, 'all', StartPose)

*stop()

endfor

********************************标定相机************************************** *标定相机,注意calibrate_cameras与camera_calibration的区别

calibrate_cameras(CalibDataID, Error)

**取相机内外参数

get_calib_data(CalibDataID, 'camera', 0, 'params', CamParam)

get_calib_data (CalibDataID, 'calib_obj_pose', [0,1], 'pose', PoseCalib)

*********************保存相机内参,且该函数只能保存内参********************** write_cam_par (CamParam, 'camparam.dat')

***********************************矫正图像径向畸变*************************** read_image (SnapImage, 'scratch/scratch_calib_01.png')

get_image_size(SnapImage, Width1, Height1)

*赋值相机内参(带畸变),标定得到的数据

CamParIn := [0.012354, -1184.63, 5.53477e-006, 5.5e-006, 244.859, 254.739, 640, 480] CarParamVirtualFixed:=CamParIn

CarParamVirtualFixed[1]:=0

*转化为无畸变内参,采用adaptive模式

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

*生成map

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

*write_image (Map, 'tiff', 0, MapFile)

map_image(SnapImage, Map, ImageMapped)

*******************************计算像素距离********************************* read_image (DistImage, 'scratch/scratch_calib_01.png')

get_image_size (DistImage, Width2, Height2)

*赋值相机内参(带畸变),标定得到的数据

* CamParIn := [0.012354, -1184.63, 5.53477e-006, 5.5e-006, 244.859, 254.739, 640, 480]

* CarParamVirtualFixed:=CamParIn

* CarParamVirtualFixed[1]:=0

*转化为无畸变内参,采用adaptive模式

* change_radial_distortion_cam_par ('adaptive', CamParIn, 0, CarParamVirtualFixed)

*生成map

* gen_radial_distortion_map (DistMap, CamParIn, CarParamVirtualFixed, 'bilinear')

* map_image(DistImage, DistMap, ImageMapped)

*矫正后再测量

*选取两个像素点

Image_X1:=100

Image_Y1:=100

Distance_XY:=500

Image_X2:=Image_X1 + Distance_XY

Image_Y2:=Image_Y1 + Distance_XY

*考虑标定板厚度的影响

set_origin_pose( PoseCalib, 0, 0, 0.001, PoseNewOrigin)

*将像素坐标转化为世界坐标(单位m)

image_points_to_world_plane(CamParam, PoseNewOrigin, Image_Y1, Image_X1, 'm', World_X1, World_Y1)

image_points_to_world_plane(CamParam, PoseNewOrigin, Image_Y2 ,Image_X2, 'm', World_X2, World_Y2)

*计算世界坐标距离

distance_pp(World_Y1, World_X1, World_Y2, World_X2, DistanceWorld)

*计算像素坐标

distance_pp(Image_X1, Image_Y1, Image_X2, Image_Y2, DistanceImage)

*每毫米世界坐标距=距离对应的像素点个数

DistanceOneMilimeter:=DistanceImage/DistanceWorld

*每个像素对应的世界坐标距离

DistanceOnePixel:=DistanceWorld/DistanceImage

*调整世界坐标至中心偏移量

OffSetX:=(Width/2)*DistanceOnePixel

OffSetY:=(Height/2)*DistanceOnePixel

*******************************消除采集图像畸变*****************************

*真实图片测距

*读取图像,实际过程应该改为采集图像

read_image (ImagePerspective, 'scratch/scratch_perspective.png')

map_image(ImagePerspective, Map, ImageMapped1)

dev_display(ImageMapped1)

*调整相机外参

tuple_replace (PoseNewOrigin, 5, PoseCalib[5], PoseCalibRot)

*设定世界坐标

set_origin_pose( PoseCalibRot, -OffSetX, -OffSetY, 0, PoseNewOriginFinal)

*image_to_world_plane(ImagePerspective, ImageWorld, CamParam, PoseNewOriginFinal, Width, Height, DistanceOnePixel, 'bilinear')

*生成map,消除径向畸变与视角畸变

gen_image_to_world_plane_map (Map1, CamParam, PoseNewOriginFinal, Width, Height, Width, Height, DistanceOnePixel, 'bilinear')

*矫正图像

map_image (ImagePerspective, Map1, ImageMapped2)

***************************计算距离***************************

dev_set_draw ('fill')

fast_threshold(ImageMapped2, Region, 20,80, 20)

fill_up(Region, RegionFillUp)

erosion_rectangle1(RegionFillUp, RegionErosion,20, 20)

reduce_domain(ImageMapped2, RegionErosion, ImageReduced)

var_threshold (ImageReduced, Region1, 5,5, 0.2, 5, 'light')

dilation_circle(Region1, RegionDilation, 3.5)

connection(RegionDilation, ConnectedRegions)

select_shape(ConnectedRegions, SelectedRegions, 'area', 'and', 1400,2000)

skeleton(SelectedRegions, Skeleton)

gen_contours_skeleton_xld(Skeleton, Contours, 1, 'filter')

length_xld(Contours, Length)

Legth:=Length*DistanceOnePixel

write_string(WindowHandle, '细线真实长度为:

相机标定不仅需要获取获取相机内参,而且需要将像素距离转化为世界坐标距离,得到单个像素的实际物理距离。

遇到的问题总结:

1)使用image_points_to_world_plane时,由于未将单位设定为‘m’,导致使用算子

gen_image_to_world_plane_map时,不能正确得生成映射图像,因为该算子默认的单位是‘m’。最后转换得到的实际物理距离的单位也是‘m’。

2)gen_radial_distortion_map该算子只能矫正径向畸变,而gen_image_to_world_plane_map

不仅能矫正径向畸变而且可以矫正视角的畸变,使图像绕着坐标轴旋转。

3)calibrate_cameras与camera_calibrate的区别,应该尽量使用calibrate_cameras,使用该

算子可以很方便的修改相机的等的参数,而且halcon中所有的例程都使用的该算子。

camera_calibrate一次标定完成,不需要设定相机等的参数。

刘腾

2016年7月14日星期四

liutengpop@https://www.doczj.com/doc/8c7402065.html,

halcon相机标定和测量示例

Halcon单相机标定和测量示例相机标定有很多方式:九点标定法、棋盘格标定法、圆形阵列标定法;本次采用圆形阵列标定法。 1Halcon相机标定 1.1标定板描述文件编制 此次相机标定采用的是网购的标定板(直接在万能的某宝搜halcon标定板),如图1。采购的时候卖家会提供标定板的相应参数,如图2。 图1标定板 图 2 标定板参数

用halcon标定助手标定的时候需要用到标定板的描述文件,此文件可以用gen_caltab算子自己编制。如下为函数说明:gen_caltab( : : XNum, YNum, MarkDist, DiameterRatio, CalPlateDescr, CalPlatePSFile : ) 函数说明:创建一个标定文件和相应的脚本文件。 函数参数: Xnum:输入X方向标记(圆点)的数量,Xnum>1; Ynum:输入Y方向标记(圆点)的数量,Ynum>1; MarkDist:标记圆圆心间距离,单位“m”;(我看过一个资料翻译为标记点大小,差点被坑死) DiameterRatio:两标记点距离和标记直径的比值,默认:0.5。0

注释的HALCON的标定校正程序

注释的HALCON的程序 时间:2015-11-12 13:25:58阅读:4评论:0收藏:0[点我收藏+]标签:des si代码it la sp文件数据ha *关闭窗口 dev_close_window () dev_close_window () *打开指定大小、颜色背景的窗口 dev_open_window (0, 0, 768/2, 576/2, ‘black‘, WindowHandle1) dev_update_pc (‘off‘) dev_update_window (‘off‘) dev_update_var (‘off‘) dev_update_time (‘off‘) dev_set_draw (‘margin‘) dev_set_line_width (3) * * Calibrate the camera.(标定相机)步骤一 * * 标定板描述文件 CaltabName := ‘caltab_big.descr‘ * make sure that the file ‘CaltabDescrName‘ is in the current directory, * the HALCONROOT/calib directory, or use an absolut path

*初始相机参数:焦距、畸变系数Kappa,Sx,Sy,Cx,Cy,ImageWidth,ImageHeight StartCamPar := [0.008,0,0.0000086,0.0000086,384,288,768,576] *物体在空间坐标系中的位姿数组 NStartPose := [] *行角点数组 NRow := [] *列角点数组 NCol := [] *X、Y、Z从标定表文件获取计算值 caltab_points (CaltabName, X, Y, Z) *创建空的图像元组 gen_empty_obj (Images) *图像的数目 NumImages := 10 *接下来for循环,依次读取、处理NumImages张图像 for I := 1 to NumImages by 1 *读取图像:Image得到图像数据 read_image (Image, ‘calib/calib-3d-coord-‘+I$‘02d‘) *将单个Image加入元组Images中 concat_obj (Images, Image, Images) *显示Image dev_display (Image) *在图像中找到标定板的区域:图像,标定板描述文件,滤波核大小,二值化值

Halcon标定文件资料地生成及标定板规格

Halcon标定文件的生成 Halcon标定文件的生成 图一 Halcon标定文件的生成,需要有以下几个步骤: 1.创建一个标定数据模板,由create_calib_data算来完成。 2.指定相机的类型,初始化相机内部参数,由set_calib_data_cam_param算子来完成。 3.指定标定板的描述文件,由set_calib_data_calib_object算子完成。 4.收集观察数据,有算子set_calib_data_observ_points完成。也就是收集标定板上圆点的中心坐标,跟各个校正板的位置姿态。 5.配置校正过程。由算子set_calib_data完成。 6.将数据整合进行标定计算。calibrate_cameras 7.获得标定参数。get_calib_data 8.记录标定参数,write_cam_par

StartCamPar := [0.016, 0, 0.0000074, 0.0000074, 326, 247, 652, 494] 解释一下这个数组的意思。 面阵相机有14或18个参数(根据想相机的畸变模式),对于线阵相机有17个参数。这些参数可以分开为内部相机参数、外部相机参数。 面阵相机(division模式): Focus(焦距):远焦镜头镜头焦距的长度 Kappa:扭曲系数 Sx,Sy:两像素间距 Cx,Cy:中心点坐标 Whith,Height:图像的宽高 面阵相机(polynomia模式): Focus(焦距):远焦镜头镜头焦距的长度 K1, K2, K3, P1,P2:扭曲系数 Sx,Sy:两像素间距 Cx,Cy:中心点坐标 Whith,Height:图像的宽高 线阵相机不做具体介绍 Halcon标定板规格 2011-12-23 12:56 68人阅读评论(1) 收藏举报

halcon单摄像机标定

In the reference manual,operator signatures are visualized in the following way: operator ( iconic input : iconic output : control input : control output ) 在HALCON所有算子中,变量皆是如上格式,即:图像输入:图像输出:控制输入:控制输出,其中四个参数任意一个可以为空。控制输入量可以是变量、常量、表达式,控制输出以及图像输入和输入必须是变量,以存入算子计算结果中。 1.caltab_points:从标定板中读取marks中心坐标,该坐标值是标定板坐标系统里的坐标值,该坐标系统以标定板为参照,向右为X正,下为Y正,垂直标定板向下为Z正。该算子控制输出为标定板中心3D坐标。 2.create_calib_data:创建Halcon标定数据模型。输出 一个输出数据模型句柄。 3.set_calib_data_cam_param:设定相机标定数据模型中设置相机参数的原始值和类型。设置索引,类型,以及相机的原始内参数等。 4.set_calib_data_calib_object:在标定模型中设定标定对象。设定标定对象句柄索引,标定板坐标点储存地址。 5.find_caltab:分割出图像中的标准标定板区域。输出为标准的标定区域,控制 6.find_marks_and_pose:抽取标定点并计算相机的内参数。输出MARKS 坐标数组,以及估算的相机外参数。 即标定板在相机坐标系中的位姿,由3个平移量和3个旋转量构成。 7.set_calib_data_observ_points( : : CalibDataID, CameraId x, CalibObjIdx,CalibObjPoseIdx, Row, Column, Index, Pose : ) 收集算子6的标定数据,将标定数据储存在标定数据模型中。输入控制分别为标定数据模型句柄,相机索引,标定板索引,位姿索引,行列坐标,位姿。

halcon单相机标定详细说明

相机标定 1 相机标定基本原理 1.1 相机成像模型 目前大多数相机模型都是基于针孔成像原理建立的,因为针孔成像原理简单,并且能满足建模的要求。除此之外还有基于应用歪斜光线追踪法和近轴光线追踪法的成像模型[1]。针孔成像虽然已经展示出了相机的成像原理,但是由于针孔成像是理想的物理模型,没有考虑相机本身的尺寸、镜头与相机轴心的偏斜等因素的影响,因此精度很低,不能满足工业机器视觉的要求。为了使相机模型能高精度的反应相机的实际成像过程,需要再针孔成像模型的基础上考虑镜头畸变等的因素。 图1 针孔成像 基于针孔成像原理建立的相机的成像模型,如下图所示。在相机的成像模型中,包含有几个坐标系分别是世界坐标系、相机坐标系、图像坐标系,相机的成像过程的数学模型就是目标点在这几个坐标系中的转化过程。 图2 针孔成像模型 (1)世界坐标系(X w,Y w,Z w),就是现实坐标系,是实际物体在现实世界中的数学描述,是一个三维的坐标空间。 (2)摄像机坐标系(X c, Y c),以针孔相机模型的聚焦中心为原点,以摄像机光学轴线为Z c轴 (3)图像坐标系:分为图像像素坐标系和图像物理坐标系 为了便于数学描述将图像平面移动到针孔与世界坐标系之间。如下图所示。

图3 将相机平面移至针孔与目标物体之间后的模型 1.2 坐标系间转换 从世界坐标系到相机坐标系: P(X c ,Y c ,Z c )=R(α,β,γ)?P(X w ,Y w ,Z w )+T 每一个世界坐标的对象都可以通过旋转和平移转移到相机坐标系上。将目标点旋转θ角度,等价于将坐标系方向旋转θ。如下图所示,是二维坐标的旋转变换,对于三维坐标而言,旋转中绕某一个轴旋转,原理实际与二维坐标旋转相同。如果,世界坐标分别绕X ,Y 和Z 轴旋转α,β,γ,那么旋转矩阵分别为R (α),R (β),R (γ) 图4 坐标旋转原理 R (α)=[10 00cosα ?sinα0sinαcosα] (1-1) R (β)=[cosβ 0sinβ0 10?sinβ 0cosβ ] (1-2)

Halcon学习(20)摄像机标定常用函数(一)

Halcon学习(二十)摄像机标定常用函数(一) 在HALCON所有算子中,变量皆是如上格式,即:图像输入:图像输出:控制输入:控制输出,其中四个参数任意一个可以为空。控制输入量可以是变量、常量、表达式,控制输出以及图像输入和输入必须是变量,以存入算子计算结果中。 1.caltab_points:从标定板中读取marks中心坐标,该坐标值是标定板坐标系统里的坐标值,该坐标系统以标定板为参照,向右为X正,下为Y正,垂直标定板向下为Z正。该算子控制输出为标定板中心3D坐标。 2.create_calib_data:创建Halcon标定数据模型。输出一个输出数据模型句柄。 3.set_calib_data_cam_param:设定相机标定数据模型中设置相机参数的原始值和类型。设置索引,类型,以及相机的原始内参数等。 4.set_calib_data_calib_object:在标定模型中设定标定对象。设定标定对象句柄索引,标定板坐标点储存地址。 5.find_caltab:分割出图像中的标准标定板区域。输出为标准的标定区域,控制 6.find_marks_and_pose:抽取标定点并计算相机的内参数。输出MARKS坐标数组,以及估算的相机外参数。 即标定板在相机坐标系中的位姿,由3个平移量和3个旋转量构成。 7.set_calib_data_observ_points( : : CalibDataID, CameraIdx, CalibObjIdx,CalibObjPoseIdx, Row, Column, Index, Pose : ) 收集算子6的标定数据,将标定数据储存在标定数据模型中。输入控制分别为标定数据模型句柄,相机索引,标定板索引,位姿索引,行列坐标,位姿。 8.calibrate_cameras( : : CalibDataID : Error) 标定一台或多台相机,依据CalibDataID中的数据。控制输出平均误差。 9.get_calib_data( : : CalibDataID, ItemType, ItemIdx, DataName : DataValue) 获得标定数据。 依靠索引号和数据名称来返回输出的数据值。可查询与模型相关的数据,与相机相关的数据(包括相机的内外参数等),与标定对象相关的数据,与标定对象的姿态相关的数据。控制输出是要查询的标定数据。 如:get_calib_data (CalibDataID, 'camera', 0, 'params', CamParam) //查询相机的位姿 get_calib_data (CalibDataID, 'calib_obj_pose', [0, NumImage], 'pose', Pose) //查询标定板位姿10.write_cam_par( : : CameraParam, CamParFile : ) 记录相机的内参数,输入控制为内参数,输出控制为 存取相机内参数的文件名。 11.set_origin_pose( : : PoseIn, DX, DY, DZ : PoseNewOrigin) 设置新的坐标原点,控制输入为原始的位姿和沿着世界坐标系的三个坐标轴的平移量,控制输出为新的位姿。

Halcon学习(十八)如何制作标定板

MarkDist 的距离。 两个就近黑色圆点中心之间Halcon 学习(十八)如何制作标定板 下面我具体介绍一下,如何制作halcon 的标准标定板方法一:用halcon 软件自动生成的.ps 文件来制作标定板。 这个也是最简单有效的方法。 打开halcon 的HDevelop 软件,调用算子: gen_caltab( : : XNum,YNum,MarkDist,DiameterRatio,CalTabDescrFile,CalTa bPSFile : ) XNum 每行黑色标志圆点的数量。 YNum 每列黑色标志圆点的数量。

DiameterRatio 黑色圆点半径与圆点中心距离的比值。 CalTabDescrFile 标定板描述文件的文件路径(.descr)。 CalTabPSFile 标定板图像文件的文件路径 (.ps),如图1 然后复位(F2),点击运行(F5)通过软件Gsview打开,按1:1 比例打印,OK ! 备注一个30*30 的标准标定板的halcon 源代码。gen_caltab (7,7,0.00375,0.5,'F:/halcon 程序 /gencaltab/30_30.descr','F:/halcon 程序/gencaltab/40_40.ps')规格的标定板的规格 黑色圆点列数:7

黑色圆点行数:7 黑色圆点列数:7

外边框长度:30mm*30mm 内边框长度:28.125mm*28.125mm 即:黑色边框线宽为一个圆点半径(0.9375) 黑色圆点半径:0.9375mm 圆点中心间距: 3.75mm 裁剪宽度:30.75mm*30.75mm 即:由黑色 边框向外延伸0.375mm 边角:由黑色外边框向内缩进一个中心边 距的长度 方法二:用halcon 软件自动生成的.descr 文件来制作标定板。打开halcon 的HDevelop 软件,调用算子: gen_caltab 生成一个.descr 的文件,用写字板打开(注意要用写字板,记事本打开会有一些数据不可见,一般windowsXP

简述基于HALCON的四目标定方法

简述基于HALCON的四目标定方法 摘要针对目前双目視觉标定技术中存在的不能覆盖目标整个视野和匹配过程中误差较大的情况而采用精度更高的四目标定技术对目标进行标定、图像采集继而三维重建。实验结果表明:该方法能够利用HALCON内丰富的算子进行精准,快速标定。突破了很多标定实验都需要依靠双目视觉标定技术而带来的一些问题,为以后的标定实验多了一个可参考方法。 关键词多目立体视觉;三维重建;HALCON标定 前言 近年来,随着计算机视觉技术的快速发展以及人们获取物体三维外形表面在诸多领域日益广泛的应用需求。本文基于视觉领域公认的性能最好的视觉软件HALCON提出了一种四目标定的方法,并验证了结果的准确性,利用该方法可以更精确的对目标进行标定。 1 双目视觉系统原理以及标定原理 1.1 双目视觉原理 双目立体视觉[1-2]是立体视觉的一种基本形式,它的原理是基于双目视差原理[2]并利用相机设备从不同的位置获取被测物体的两幅图像,通过计算图像对应点的位之间的位置偏差来获取三维几何信息的方法。 双目立体视觉原理图如图(1)所示: 1.2 标定原理 在计算机视觉的应用和图像测量中,为了确定空间中的物体表面某一个点的几何三维位置与其图像对应点之间的相互关系,我们必须建立相机成像的几何模型,这些几何模型参数就是相机参数[3]。但是大多数条件下这些参数必须通过实验和计算才能得到,所以这个求解参数的过程就叫作相机的标定。 2 四目视觉扫描仪的设计方法 2.1 标定流程 利用HALCON里面完善的视觉集成开发环境和标准的视觉计算法[3],从而可以快速地对相机进行标定。用四个相机同时对标定板进行标定,必须保证标定板能够同时出现在四幅图像中。标定主要分为4个步骤:①建立四目相机的标定数据模型;②获取并筛选出合适的图片;③把四目相机的测试数据添加到数据模型中;④执行标定

Halcon标定板规格

Halcon標定板規格 圖一: 30*30 規格的標定板的規格 黑色圓點行數:7 黑色圓點列數:7 外邊框長度:30mm*30mm 內邊框長度:28.125mm*28.125mm 即:黑色邊框線寬為一個圓點半徑(0.9375)黑色圓點半徑:0.9375mm 圓點中心間距: 3.75mm 裁剪寬度:30.75mm*30.75mm 即:由黑色邊框向外延伸0.375mm 邊角:由黑色外邊框向內縮進一個中心邊距的長度 40*40 規格的標定板的規格 黑色圓點行數:7 黑色圓點列數:7 外邊框長度:40mm*40mm 內邊框長度:37.5mm*37.5mm 即:黑色邊框線寬為一個圓點半徑(0.125) 黑色圓點半徑:0.125mm 圓點中心間距:5mm 裁剪寬度:21mm*21mm 即:由黑色邊框向外延伸0.5mm 邊角:由黑色外邊框向內縮進一個中心邊距的長度 50*50 規格的標定板的規格 黑色圓點行數:7 黑色圓點列數:7 外邊框長度:50mm*50mm

內邊框長度:46.875mm*46.875mm 即:黑色邊框線寬為一個圓點半徑(1.5625)黑色圓點半徑: 1.5625mm 圓點中心間距: 6.25mm 裁剪寬度:51.25mm*51.25mm 即:由黑色邊框向外延伸0.625mm 邊角:由黑色外邊框向內縮進一個中心邊距的長度 60*60 規格的標定板的規格 黑色圓點行數:7 黑色圓點列數:7 外邊框長度:60mm*60mm 內邊框長度:56.25mm*56.25mm 即:黑色邊框線寬為一個圓點半徑(1.875) 黑色圓點半徑: 1.875mm 圓點中心間距:7.5mm 裁剪寬度:61.5mm*61.5mm 即:由黑色邊框向外延伸0.75mm 邊角:由黑色外邊框向內縮進一個中心邊距的長度

Halcon学习(二十二)摄像机标定(函数详解)

Halcon学习(二十二)摄像机标定(函数详解) TmpCtrl_AllMarkRows := [] TmpCtrl_AllMarkColumns := [] TmpCtrl_StartPoses := [] TmpCtrl_ReferenceIndex := 0 StartParameters := [0.008,0,5.2e-006,5.2e-006,640,512,1280,1024] for Index := 0 to |ImageFiles|-1 by 1 read_image (Image, ImageFiles[Index]) find_caltab (Image, TmpObj_PlateRegion, 'E:/calibration_description/caltab_123mm.descr', 3, 112, 5) find_marks_and_pose (Image, TmpObj_PlateRegion, 'E:/calibration_description/caltab_123mm.descr', StartParameters, 128, 10, 18, 0.9, 15, 100, TmpCtrl_MarkRows, TmpCtrl_MarkColumns, TmpCtrl_EstimatedPose) TmpCtrl_AllMarkRows := [TmpCtrl_AllMarkRows, TmpCtrl_MarkRows] TmpCtrl_AllMarkColumns := [TmpCtrl_AllMarkColumns, TmpCtrl_MarkColumns] TmpCtrl_StartPoses := [TmpCtrl_StartPoses, TmpCtrl_EstimatedPose]

halcon知识点

1.无论读入什么图像,读入图像显示效果明显和原始图像不一致,哪怕是从相机读入的图像,也是明显颜色差异。什么原因引起? 初步诊断是,显示的时候调用的颜色查找表存在异常不是default,而是其它选项。此时可以通过查阅相关参数,调用set_system解决,也可以在编辑-》参数选择-》颜色查找表进行更改。 2.裁剪图像;从图像上截取某段图像进行保存。如何实现该操作? 首先应该知道,region不具有单独构成图像的要素,他没有灰度值。有用过opencv的应该知道ROI(感兴趣区域),设置好它后,对图像的大部分操作就转为图像的一个矩形区域内进行。类似的,halcon有domain概念。首先设置好一个矩形区,然后使用reduce_domain(是一个矩形区域)后,再使用 crop_domain就裁剪出图像。 3.读入bmp,或tiff图像显示该图不是bmp文件或不能读。原因是什么? 这个常有新手询问,画图,图像管理器都能打开,又或者是相机采集完直接存到硬盘。Halcon读取图像在windows下面到最后是调用windows库函数实现读图功能。咱不清楚到底是怎么调用的。对于图像格式,在读图函数F1说明很细。基本bmp如果文件头不是bw还是bm(百度百科bmp格式查找,编写此处时无网络,后续可能忘记),就读不进来。其他规格欢迎补充。解决办法,如果是相机采集,就在内存直接转换(参见halcon到里面的halcon和bitmap互转);如果是采完的图片,大部分通过画图工具转换为24位bmp格式,即可解决。 4.读入avi文件报错。Halcon通过directshow或另一个格式解析视频,正常来说应该可以读入市面大部分视频,实际测试发现只能读入最标准的avi文件格式。如果需要临时处理,需要下格式工厂等工具转化为最标准的avi文件格式(论坛叶诺有发帖说明)。 5. Region或xld筛选。 Halcon提供了丰富的region和xld筛选方法。Region可以使用 select_shape_xld,选择出符合要求的区域,如果不能满足还可以通过类似

Halcon学习教程之单相机标定

在HALCON所有算子中,变量皆是如上格式,即:图像输入:图像输出:控制输入:控制输出。机器视觉-汪工: 其中四个参数任意一个可以为空。 控制输入可以是变量、常量、表达式; 控制输出以及图像输入和输出必须是变量。 1.caltab_points:从标定板中读取marks中心坐标,该坐标值是标定板坐标系统里的坐标值,该坐标系统以标定板为参照,向右为X正,下为Y正,垂直标定板向下为Z正。该算子控制输出为标定板中心3D坐标。 2.create_calib_data:创建Halcon标定数据模型。输出一个输出数据模型句柄。 3.set_calib_data_cam_param:设定相机标定数据模型中设置相机参数的原始值和类型。设置索引,类型,以及相机的原始内参数等。 4.set_calib_data_calib_object:在标定模型中设定标定对象。设定标定对象句柄索引,标定板坐标点储存地址。 5.find_caltab:分割出图像中的标准标定板区域。输出为标准的标定区域,控制 6.find_marks_and_pose:抽取标定点并计算相机的内参数。输出MARKS坐标数组,以及估算的相机外参数。

即标定板在相机坐标系中的位姿,由3个平移量和3个旋转量构成。 7.set_calib_data_observ_points(::CalibDataID,CameraIdx, CalibObjIdx,CalibObjPoseIdx,Row,Column,Index,Pose:) 收集算子6的标定数据,将标定数据储存在标定数据模型中。输入控制分别为标定数据模型句柄,相机索引,标定板索引,位姿索引,行列坐标,位姿。 8.calibrate_cameras(::CalibDataID:Error)标定一台或多台相机,依据CalibDataID 中的数据。控制输出平均误差。 9.get_calib_data(::CalibDataID,ItemType,ItemIdx,DataName:DataValue)获得标定数据。 依靠索引号和数据名称来返回输出的数据值。可查询与模型相关的数据,与相机相关的数据(包括相机的内外参数等),与标定对象相关的数据,与标定对象的姿态相关的数据。控制输出是要查询的标定数据。 如: get_calib_data(CalibDataID,'camera',0,'params',CamParam)//查询相机的位姿get_calib_data(CalibDataID,'calib_obj_pose',[0,NumImage],'pose',Pose)//查询标定板位姿 10.write_cam_par(::CameraParam,CamParFile:)记录相机的内参数,输入控制为内参数,输出控制为 存取相机内参数的文件名。 11.set_origin_pose(::PoseIn,DX,DY,DZ:PoseNewOrigin)

Halcon学习(十八)如何制作标定板

Halcon学习(十八)如何制作标定板 下面我具体介绍一下,如何制作halcon的标准标定板方法一:用halcon软件自动生成的.ps文件来制作标定板。 这个也是最简单有效的方法。 打开halcon 的HDevelop软件,调用算子: gen_caltab( : : XNum,YNum,MarkDist,DiameterRatio,CalTabDescrFile,CalTa bPSFile : ) XNum 每行黑色标志圆点的数量。YNum 每列黑色标志圆点的数量。 MarkDist 两个就近黑色圆点中心之间的距离。

DiameterRatio 黑色圆点半径与圆点中心距离的比值。 CalTabDescrFile 标定板描述文件的文件路径(.descr)。 CalTabPSFile 标定板图像文件的文件路径(.ps),如图1 然后复位(F2),点击运行(F5)通过软件Gsview打开,按1:1比例打印,OK! 备注一个30*30的标准标定板的halcon源代码。 gen_caltab(7,7,0.00375,0.5,'F:/halcon程序 /gencaltab/30_30.descr','F:/halcon程序/gencaltab/40_40.ps') 规格的标定板的规格 黑色圆点行数:7 黑色圆点列数:7

外边框长度:30mm*30mm 内边框长度:28.125mm*28.125mm 即:黑色边框线宽为一个圆点半径(0.9375) 黑色圆点半径:0.9375mm 圆点中心间距: 3.75mm 裁剪宽度:30.75mm*30.75mm 即:由黑色边框向外延伸0.375mm 边角:由黑色外边框向内缩进一个中心边距的长度 方法二:用halcon软件自动生成的.descr文件来制作标定板。 打开halcon 的HDevelop软件,调用算子: gen_caltab生成一个.descr的文件,用写字板打开(注意要用写字板,记事本打开会有一些数据不可见,一般windowsXP

Halcon算子笔记3_相机标定+矫正图像

Map_image.hdev: 矫正图像 *关闭窗口 dev_close_window () dev_close_window () *打开指定大小、颜色背景的窗口 dev_open_window (0, 0, 768/2, 576/2, 'black', WindowHandle1) dev_update_pc ('off') dev_update_window ('off') dev_update_var ('off') dev_update_time ('off') dev_set_draw ('margin') dev_set_line_width (3) * * Calibrate the camera.(标定相机)步骤一 * * 标定板描述文件 CaltabName := 'caltab_big.descr' * make sure that the file 'CaltabDescrName' is in the current directory, * the HALCONROOT/calib directory, or use an absolut path *初始相机参数:焦距、畸变系数Kappa,Sx,Sy,Cx,Cy,ImageWidth,ImageHeight StartCamPar := [0.008,0,0.0000086,0.0000086,384,288,768,576] *物体在空间坐标系中的位姿数组 NStartPose := [] *行角点数组 NRow := [] *列角点数组 NCol := [] *X、Y、Z从标定表文件获取计算值 caltab_points (CaltabName, X, Y, Z) *创建空的图像元组 gen_empty_obj (Images) *图像的数目 NumImages := 10 *接下来for循环,依次读取、处理NumImages张图像 for I := 1 to NumImages by 1 *读取图像:Image得到图像数据 read_image (Image, 'calib/calib-3d-coord-'+I$'02d') *将单个Image加入元组Images中 concat_obj (Images, Image, Images) *显示Image dev_display (Image) *在图像中找到标定板的区域:图像,标定板描述文件,滤波核大小,二值化值 find_caltab (Image, Caltab, CaltabName, 3, 112, 5)

Halcon标定文件的生成

Halcon标定文件的生成 2011-12-29 21:48 58人阅读评论(0) 收藏举报 Halcon标定文件的生成 图一 Halcon标定文件的生成,需要有以下几个步骤: 1.创建一个标定数据模板,由create_calib_data算来完成。 2.指定相机的类型,初始化相机内部参数,由set_calib_data_cam_param算子来完成。 3.指定标定板的描述文件,由set_calib_data_calib_object算子完成。 4.收集观察数据,有算子set_calib_data_observ_points完成。也就是收集标定板上圆点的中心坐标,跟各个校正板的位置姿态。 5.配置校正过程。由算子set_calib_data完成。 6.将数据整合进行标定计算。calibrate_cameras 7.获得标定参数。get_calib_data 8.记录标定参数,write_cam_par

StartCamPar := [0.016, 0, 0.0000074, 0.0000074, 326, 247, 652, 494] 解释一下这个数组的意思。 面阵相机有14或18个参数(根据想相机的畸变模式),对于线阵相机有17个参数。这些参数可以分开为内部相机参数、外部相机参数。 面阵相机(division模式): Focus(焦距):远焦镜头镜头焦距的长度 Kappa:扭曲系数 Sx,Sy:两像素间距 Cx,Cy:中心点坐标 Whith,Height:图像的宽高 面阵相机(polynomia模式): Focus(焦距):远焦镜头镜头焦距的长度 K1, K2, K3, P1,P2:扭曲系数 Sx,Sy:两像素间距 Cx,Cy:中心点坐标 Whith,Height:图像的宽高 线阵相机不做具体介绍 Halcon标定板规格 2011-12-23 12:56 68人阅读评论(1) 收藏举报

halcon标定详解

*创建标定板 gen_caltab(7,7,0.008,0.5,'48_48mm.descr','48_48mm.ps') *=======标定内参 dev_close_window () dev_open_window (0, 0, 652, 494, 'black', WindowHandle) dev_update_off () dev_set_draw ('margin') dev_set_line_width (3) OpSystem := environment('OS') set_display_font (WindowHandle, 14, 'mono', 'true', 'false') *标定相机 StartCamPar := [0.0,0.0,0.0000299,0.0000299,4896/2,3264/2,4896,3264] create_calib_data ('calibration_object', 1, 1, CalibDataID) set_calib_data_cam_param (CalibDataID, 0, 'area_scan_telecentric_divi sion', StartCamPar) set_calib_data_calib_object (CalibDataID, 0, '48_48mm.descr') * Note, we do not use the image from which the pose of the measuremen t plane can be derived for index := 1 to 13 by 1 read_image (Image, '标定20/' + index + '.png') get_image_size(Image, Width, Height) dev_display (Image) find_calib_object (Image, CalibDataID, 0, 0, index, [], []) get_calib_data_observ_contours (Caltab, CalibDataID, 'caltab', 0, 0, index) dev_set_color ('green') dev_display (Caltab) endfor calibrate_cameras (CalibDataID, Error) get_calib_data (CalibDataID, 'camera', 0, 'params', CamParam) get_calib_data (CalibDataID, 'calib_obj_pose', [0,1], 'pose', PoseCal ib) *输出计算的相机内参 write_cam_par (CamParam, 'camera_parameters.dat') Message:= '相机内参已经写入文件中' disp_message (WindowHandle, Message, 'window', 12, 12, 'red', 'false ')

HALCON形状匹配总结

HALCON形状匹配总结 Halcon有三种模板匹配方法:即Component-Based、Gray-Value-Based、Shaped_based,分别是基于组件(或成分、元素)的匹配,基于灰度值的匹配和基于形状的匹配,此外还有变形匹配和三维模型匹配也是分属于前面的大类 本文只对形状匹配做简要说明和补充: Shape_Based匹配方法: 上图介绍的是形状匹配做法的一般流程及模板制作的两种 方法。 先要补充点知识:形状匹配常见的有四种情况一般形状匹配模板shape_model、线性变形匹配模板 planar_deformable_model、局部可变形模板 local_deformable_model、和比例缩放模板Scale_model 第一种是不支持投影变形的模板匹配,但是速度是最高的,第二种和第四种是支持投影变形的匹配,第三种则是支持局部变形的匹配。 一般形状匹配模板是最常用的,模板的形状和大小一经制作完毕便不再改变,在查找模板的过程中,只会改变模板的方向和位置等来匹配目标图像中的图像。这个方法查找速度很快,但是当目标图像中与模板对应的图像存在比例放大缩小

或是投影变形如倾斜等,均会影响查找结果。涉及到的算子通常为create_shape_model 和find_shape_model 线性变形匹配模板planar_deformable_model是指模板在行列方向上可以进行适当的缩放。行列方向上可以分别独立的进行一个适当的缩放变形来匹配。主要参数有行列方向查找缩放比例、图像金字塔、行列方向匹配分数(指可接受的匹配分数,大于这个值就接受,小于它就舍弃)、设置超找的角度、已经超找结果后得到的位置和匹配分数 线性变形匹配又分为两种:带标定的可变形模板匹配和不带标定的可变形模板匹配。涉及到的算子有: 不带标定的模板:创建和查找模板算子 create_planar_uncalib_deformable_model和 find_planar_uncalib_deformable_model 带标定模板的匹配:先读入摄像机内参和外参 read_cam_par 和read_pose 创建和查找模板算子create_planar_calib_deformable_model和 find_planar_calib_deformable_model 局部变形模板是指在一张图上查找模板的时候,可以改变模板的尺寸,来查找图像上具有局部变形的模板。例如包装纸袋上图案查找。参数和线性变形额差不多 算子如下:create_local_deformable_model和 find_local_deformable_model

相关主题
文本预览
相关文档 最新文档