侵权投诉

为什么要进行单相机标定

新机器视觉 2021-09-02 09:45 次阅读

为什么要进行单相机标定?

广义:畸变矫正和一维和二维测量

畸变矫正:

在几何光学和阴极射线管(CRT)显示中。畸变是对直线投影的一种偏移。简单来说直线投影是场景内的一条直线投影到图片上也保持为一条直线。那畸变简单来说就是一条直线投影到图片上不能保持为一条直线了。这是一种光学畸变(optical aberration)。畸变是一种相差,可能由于摄像机镜头导致,会对拍摄的物体的形状产生变化,影响测量。

我自己对畸变矫正的理解就是,当相机进行标定时,虽然标定板也产生了畸变,但是标定板(圆形)的准确数据我们已经告诉了halcon,比如,圆的排列方式、直径、中心距等。

通过加载多张标定板图片,halcon可以通过函数求出镜头里发生畸变的标定板与未发生畸变的标定板之间的映射关系,也就是相机本身的内参(拍摄有畸变)和矫正之后无畸变内参之间的映射关系,将这种映射关系作用到拍摄时发生畸变的物体当中,就完成了畸变校正。。

步骤:

1)通过标定求出相机内参。

2)通过有畸变的内参求出无畸变的内参。用chage_radial_distortion_cam_par()函数完成。

3)求出有畸变的内参和无畸变的内参之间的映射关系。用

gen_radial_distortion_map()函数

4)将上边的映射关系作用到产生畸变的物体当中,完成畸变校正

一维和二维的测量

图片上的尺寸是像素距离,标定后,可以求出像素距离与物理空间距离的换算关系,从而计算出实际的物理尺寸。

狭义:求解相机的内参和外参以及畸变参数,得到二维平面像素坐标和三维世界坐标的关系,从而进行三维重建。

相机内参:相机的固有属性,在进行畸变校正时需要用到相机的内参。

相机外参:物体在经过透镜成像之后,实际上是经过了旋转和平移,而外参就是告诉我们物体成像后经过了那种旋转和平移,相机的外参包括平移矢量和旋转矩阵。

畸变参数:采用理想针孔模型,由于通过针孔的光线少,摄像机曝光太慢,在实际使用中均采用透镜,可以使图像生成迅速,但代价是引入了畸变。有两种畸变对投影图像影响较大:径向畸变和切向畸变。

相机的畸变和内参是相机本身的固有特性,标定一次即可一直使用。但由于相机本身并非理想的小孔成像模型以及计算误差,采用不同的图片进行标定时得到的结果都有差异。一般重投影误差很小的话,标定结果均可用。

二、标定流程

实现的原理是根据相机的像元尺寸、焦距和标定板的描述文件(.descr)来找到显示的标定板图像上面的标志点,从而确定标定板实际输入的参数(Distance、Diameter等)和这些参数对应的图像像素大小的关系,完成标定。

标定步骤:

1)使用gen_caltab算子生成一个标定文件

标定前需要生成一个.descr的描述文件,也就是世界坐标系与像素坐标系的关系,当我们下一次做别的项目时,只需要调用描述文件,即可完成标定过程。

生成标记文件的算子:gen_caltab (7, x方向的标记数;

7, y方向的标记数;

0.0075, 标记点圆心之间的距离,单位:米;

0.5, 标记点直径与标记点圆心之间距离的比值;

‘C:/Users/Administrator/Desktop/caltab.descr’,标定板的描述文件的保 存路径;

‘caltab.ps’,描述标定板的一些信息,打印标定板时会用到)

2)打开标定助手,加载标定文件,设置相机参数(单个像元宽高(问相机厂商或看手册),相机焦距)

3)实时获取各个角度、位置的标定板图片(9-16张左右),并选择其中一种图片设置参考位姿,然后标定。

可以看到相机的参数:

4)保存相机内、外参,下次使用测量助手直接调用内外参文件。

单独说一下如何进行畸变校正,可以接上面的第三步之后:生成标定数据(相机内、外参)代码,从而进行畸变校正

*相机内参

CameraParameters := [0.0375147,-270.806,8.30152e-006,8.3e-006,647.48,520.914,1280,960]

*相机位姿,即外参(旋转矩阵+平移矢量)

CameraPose := [-0.0091626,-0.00625214,0.700967,2.46926,358.933,179.443,0]

*1、校正径向畸变,得到新的相机内参

change_radial_distortion_cam_par (‘adaptive’, CameraParameters, 0, CamParamOut)

stop ()

Image Acquisition 02: Code generated by Image Acquisition 02

open_framegrabber (‘GigEVision’, 0, 0, 0, 0, 0, 0, ‘default’, -1, ‘default’, -1, ‘false’, ‘default’, ‘CAMERA_QBY_DM’, 0, -1, AcqHandle)

grab_image_start (AcqHandle, -1)

while (true)

grab_image_async (Image, AcqHandle, -1)

*2、对发生径向畸变的图像生成投影映射,图像的映射数据存在第一个参数中

gen_radial_distortion_map (Map, CameraParameters, CamParamOut, ‘bilinear’)

*3、对图像进行畸变校正

map_image (Image, Map, ImageMapped)

endwhile

close_framegrabber (AcqHandle)

注意:相机标定之后,相机焦距、上下位置不能再动,否则需要重新标定。

—版权声明—

仅用于学术分享,版权属于原作者

若有侵权,请联系微信号删除或修改!

编辑:jq

原文标题:halcon单相机标定和畸变矫正程序

文章出处:【微信号:vision263com,微信公众号:新机器视觉】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
分享:

评论

相关推荐

激光熔覆的主要工艺参数(CRT激光焊接系统)

激光熔覆的工艺参数主要有激光功率、光斑直径、熔覆速度、离焦量、送粉速度、扫描速度、预热温度等。这些参....
的头像 何工 发表于 10-28 18:09 4次 阅读
激光熔覆的主要工艺参数(CRT激光焊接系统)

使用Vivado仿真器进行混合语言仿真的一些要点

Vivado 仿真器支持混合语言项目文件及混合语言仿真。这有助于您在 VHDL 设计中包含 Veri....
的头像 FPGA开发圈 发表于 10-28 16:24 69次 阅读

STM32标准库和HAL库有什么不同 我们怎么用

摘要:通常 新手在入门STM32的时候,首先都要先选择一种要用的开发方式,不同的开发方式会导致你编程....
的头像 硬件攻城狮 发表于 10-28 15:38 78次 阅读
STM32标准库和HAL库有什么不同 我们怎么用

如何对stm32的SPI进行测试呢

如何对stm32的SPI进行测试呢?其过程是怎样的?...
发表于 10-28 08:29 0次 阅读

如何去实现基于STM32L0的简单Bootloader呢

如何去实现基于STM32L0的简单Bootloader呢?怎么实现呢?...
发表于 10-28 06:07 0次 阅读

python提供的68个内置函数详解

  内置函数就是Python给你提供的,拿来直接用的函数,比如print.,input等。 截止到p....
的头像 数据分析与开发 发表于 10-27 09:14 64次 阅读

NVIC中断优先级管理简介

如何对NVIC中断管理函数进行配置? 中断优先级设置的步骤有哪些? ...
发表于 10-27 06:59 0次 阅读

static的作用是什么

文章目录关键字static的作用是什么?“引用”与指针的区别是什么?.h头文件中的ifndef/define/endif 的作用?描述实时系统的基本...
发表于 10-27 06:22 0次 阅读

浅析C++基础语法梳理之网络编程中Socket

Socket Linux Socket 编程(不限 Linux) Socket 中的 read()、....
的头像 C语言编程学习基地 发表于 10-26 10:10 237次 阅读
浅析C++基础语法梳理之网络编程中Socket

Go语言sync包中的锁都在什么场景下用

Go 语言 sync 包中的锁都在什么场景下用?怎么用?本文对 sync 包内的锁做了梳理。 今天谈....
的头像 马哥Linux运维 发表于 10-26 09:35 147次 阅读

怎样通过串口通信去控制LED灯亮和灭呢

怎样通过串口通信去控制LED灯亮和灭呢?有什么方法吗?...
发表于 10-26 06:39 0次 阅读

STM32 LL库的使用方法是什么

LL库有哪些应用?LL驱动程序功能有哪些?LL库的使用方法是什么?...
发表于 10-26 06:31 0次 阅读

怎样去解决stm32调试(debug)无法进入main函数的问题

怎样去解决stm32调试(debug)无法进入main函数的问题?...
发表于 10-26 06:23 0次 阅读

解析过冲与相位裕量

负反馈因其可以稳定增益、减小失真、扩展带宽、变换阻抗等功能而在电子、控制等诸多领域发挥着重大作用。小....
的头像 电子元件技术圈 发表于 10-25 11:32 229次 阅读
解析过冲与相位裕量

请问一下STM32是怎样去读取引脚电平的函数的

请问一下STM32是怎样去读取引脚电平的函数的?...
发表于 10-25 07:53 0次 阅读

怎样用printf 函数和getchar 函数去简化STM32串口数据的传输呢

printf 函数和getchar 函数有何功能? 怎样用printf 函数和getchar 函数去简化STM32串口数据的传输呢? ...
发表于 10-22 07:49 0次 阅读

怎样去设计一种基于单片机的智能窗帘呢

怎样去设计一种基于单片机的智能窗帘呢?怎样去编写其主函数代码呢?...
发表于 10-22 07:29 0次 阅读

详细介绍go语言中的闭包的实现

什么是闭包? 什么场景下会用闭包 ? 本文对 go 语言中的闭包做了详细介绍。 闭包是由函数及其相关....
的头像 马哥Linux运维 发表于 10-20 16:18 296次 阅读

简述Python加速运行小窍门

Python 是一种脚本语言,相比 C/C++ 这样的编译语言,在效率和性能方面存在一些不足。但是,....
的头像 Linux爱好者 发表于 10-20 15:28 1112次 阅读

简述ElasticSearch的实现

1.近实时搜索 1.1 实时与近实时 实时搜索(Real-time Search)很好理解,对于一个....
的头像 马哥Linux运维 发表于 10-20 14:45 305次 阅读

Python协程与JavaScript协程的对比及经验技巧

前言以前没怎么接触前端,对 JavaScript 的异步操作不了解,现在有了点了解。一查发现 Pyt....
的头像 马哥Linux运维 发表于 10-20 14:30 244次 阅读

新手入门,最佳练手三脚架推荐

黄金十月,细雨带风透着一丝丝温柔的凉意,最适合背上行囊四海飘荡,去向往的地方尽倾爱慕之意,带上你的相....
发表于 10-20 09:57 25次 阅读
新手入门,最佳练手三脚架推荐

简述图像梯度的基本原理

当用均值滤波器降低图像噪声的时候,会带来图像模糊的副作用。我们当然希望看到的是清晰图像。那么,清晰图....
的头像 新机器视觉 发表于 10-19 16:22 209次 阅读
简述图像梯度的基本原理

一文了解Cortex-M中断向量表对齐原则

来源 | 痞子衡嵌入式 一、Cortex-M中断向量表对齐原则   中断向量表就是一个集中保存系统全....
的头像 strongerHuang 发表于 10-19 11:06 298次 阅读
一文了解Cortex-M中断向量表对齐原则

关于Python18个你不知道的高效编程技巧

初识Python语言,觉得python满足了我上学时候对编程语言的所有要求。python语言的高效编....
的头像 马哥Linux运维 发表于 10-15 11:23 316次 阅读

动态内存分配的注意事项及本质是什么

C语言中比较重要的就是指针,它可以用来链表操作,谈到链表,很多时候为此分配内存采用动态分配而不是静态....
的头像 C语言编程学习基地 发表于 10-13 15:37 317次 阅读
动态内存分配的注意事项及本质是什么

ACL2021的跨视觉语言模态论文之跨视觉语言模态任务与方法

来自:复旦DISC 引言 本次分享我们将介绍三篇来自ACL2021的跨视觉语言模态的论文。这三篇文章....
的头像 深度学习自然语言处理 发表于 10-13 10:48 299次 阅读
ACL2021的跨视觉语言模态论文之跨视觉语言模态任务与方法

一文详解虚函数及其相关知识点

本期是C++基础语法分享的第七节,今天给大家来分享一下: (1)虚析构函数; (2)纯虚函数; (3....
的头像 C语言编程学习基地 发表于 10-13 10:14 270次 阅读

浅析布料颜色识别检测

来源 | 中科蓝海 检测需求 1、识别布料颜色,并且进行排序(由深到浅); 2、检测速度:30m/m....
的头像 新机器视觉 发表于 10-13 09:38 157次 阅读
浅析布料颜色识别检测

什么是MicroPython 它能做什么有什么局限

随着Python成为主流的编程语言,MicroPython在嵌入式系统领域也越来越热门起来,尤其是大....
的头像 电子森林 发表于 10-12 11:44 335次 阅读

如何在Colab中使用SQL

如今,编码测试在数据科学面试过程中几乎是标准的。 作为一名数据科学招聘经理,我发现一个20-30分钟....
的头像 智能感知与物联网技术研究所 发表于 10-12 09:39 241次 阅读
如何在Colab中使用SQL

Python的时间处理模块中处理日期与时间的全面总结

Python的时间处理模块在日常的使用中用的较多,但是使用的时候基本上都是要查资料,还是有些麻烦的,....
的头像 马哥Linux运维 发表于 10-12 09:24 261次 阅读
Python的时间处理模块中处理日期与时间的全面总结

C语言中驱动法编程的代码案例

数据压倒一切。如果选择了正确的数据结构并把一切组织的井井有条,正确的算法就不言自明。编程的核心是数据....
的头像 硬件攻城狮 发表于 10-12 09:21 279次 阅读

一本教你怎么写出让同事无法维护的代码

‍对,你没看错,本文就是教你怎么写出让同事无法维护的代码。一、程序命名 容易输入的变量名 。比如:F....
的头像 Linux爱好者 发表于 10-11 15:45 222次 阅读

探究关于数字电路的一些基础知识

1.常用门电路图 2.逻辑代数的基本定理----化简时比较好用 反演定理:对于任意一个逻辑式 Y,若....
的头像 FPGA设计论坛 发表于 10-11 15:04 393次 阅读
探究关于数字电路的一些基础知识

开发一个鸿蒙版仿苹果计算器教程.附代码

众所周知鸿蒙 JS 框架是非常轻量级的 MVVM 模式。通过使用和 Vue2 相似的属性劫持技术实现....
的头像 HarmonyOS技术社区 发表于 10-11 14:17 307次 阅读
开发一个鸿蒙版仿苹果计算器教程.附代码

Linux内核热补丁安全隐患的探索

Linux 内核热补丁可以修复正在运行的 linux 内核,是一种维持线上稳定性不可缺少的措施,现在....
的头像 Linux阅码场 发表于 10-11 11:54 254次 阅读
Linux内核热补丁安全隐患的探索

SystemVerilog语言介绍汇总

作者:limanjihe  https://blog.csdn.net/limanjihe/arti....
的头像 FPGA之家 发表于 10-11 10:35 282次 阅读

剖析verilog2005的骚操作之对数函数

小技巧分享: verilog下取对数其实可用$clog2这个系统函数,和自己找代码里面写入funct....
的头像 玩儿转FPGA 发表于 10-09 15:29 348次 阅读
剖析verilog2005的骚操作之对数函数

C语言指针作为形参怎么改变其指向的地址

就是一个函数的输入参数是一个指针,该函数需要改变该指针指向的地址,如: 现在有一个全局数组b,现在需....
的头像 嵌入式ARM 发表于 10-09 11:54 2335次 阅读

脉冲发生器的分类及特点

脉冲发生器是用来发生信号的系统,产生所需参数的电测试信号仪器。按其信号波形分为四大类。 正弦信号发生....
的头像 ss 发表于 10-02 17:59 262次 阅读

Myricom NIC和MVA与虹科EVT相机配合优势

本文详细介绍了将Myricom NIC和MVA与虹科EVT相机配合使用的优势,MVA获得显着优势的方....
的头像 广州虹科电子科技有限公司 发表于 09-30 18:02 1195次 阅读

如何用walsh码完成多用户的扩频

那么如何用walsh码完成多用户的扩频呢?用了以后效果会有哪些改变呢?这也是后续需要展示的程序以及理....
的头像 通信工程师专辑 发表于 09-30 17:17 264次 阅读

C++中的资源泄露问题

在Modern C++之前,C++无疑是个更容易写出坑的语言,无论从开发效率,和易坑性,让很多新手望....
的头像 Linux爱好者 发表于 09-30 17:03 297次 阅读

C++输入和输出的真实面目

C++输入和输出 在C++里std::cin、std::cout、std::cerr和std::en....
的头像 Android编程精选 发表于 09-29 15:22 247次 阅读

在C++中如何用虚函数实现多态

01 — C++虚函数探索 C++是一门面向对象语言,在C++里运行时多态是由虚函数和纯虚函数实现的....
的头像 Android编程精选 发表于 09-29 14:18 267次 阅读

系统调用具体是如何实现的

系统调用就是调用操作系统提供的一系列内核功能函数,因为内核总是对用户程序持不信任的态度,一些核心功能....
的头像 Linux阅码场 发表于 09-29 11:10 297次 阅读

高光谱视频相机具有哪些功能特点

高光谱成像技术是基于非常多窄波段的影像数据技术,它将成像技术与光谱技术相结合,探测目标的二维几何空间....
发表于 09-27 10:26 85次 阅读

剖析C语言中scanf函数常见问题

在写C代码时难免对一些知识点不熟悉,导致犯错,今天分享几点小知识给大家。 空白符问题        ....
的头像 STM32嵌入式开发 发表于 09-24 16:45 314次 阅读

Crypto算法库使用技巧之基于STM32 AES GCM应用提示

引言 X-CUBE-CRYPTOLIB 是基于 STM32 的 Crypto 算法库,支持对称密钥、....
的头像 STM32单片机 发表于 09-24 14:23 859次 阅读

OpenHarmony HDF传感器模型框架介绍与传感器驱动开发指导

作者介绍 刘飞虎(kevin),担任OpenHarmony社区SIG_DriverFramework....
的头像 OpenAtom OpenHarmony 发表于 09-24 11:21 342次 阅读
OpenHarmony HDF传感器模型框架介绍与传感器驱动开发指导

一篇让你看懂数字信号模拟信号

数电模电是电子信息类专业的专业基础课。但是由于比较难,所以很多人学的并不是很好,今天阿斌就来带大家先....
的头像 硬件攻城狮 发表于 09-24 10:57 4205次 阅读
一篇让你看懂数字信号模拟信号

照妖镜纳米“相机”:让反应历程无处遁形 分子级实时监测

在新材料的研发制备过程中,观察其形成的完整化学试验过程至关重要,无论是中间过程形成的不稳定的化合物还....
的头像 脑极体 发表于 09-24 09:09 3438次 阅读

GoPro Hero10 Black运动相机的详细介绍

音圈马达助力的GoPro Hero10 运动相机发布啦。GoPro就是我们所说的运动相机,现在的生活....
发表于 09-23 15:11 499次 阅读

C++中const以及this指针的使用

const 作用 修饰变量,说明该变量不可以被改变; 修饰指针,分为指向常量的指针(pointer ....
的头像 C语言编程学习基地 发表于 09-23 11:39 312次 阅读

苹果13相机有缩小功能吗

在电影模式下,在拍摄视频时,可以预测被摄体进入帧的时间,自动调焦,还可以在拍摄后改变焦点,调整模糊效....
的头像 倩倩 发表于 09-23 10:10 569次 阅读

如何在在RISCV中使用DSP指令

1.概述 DSP有相关的专业芯片,能够专门实现计算功能,相比于通用处理器,DSP芯片专门用于计算,可....
的头像 嵌入式IoT 发表于 09-22 14:28 3925次 阅读

浅析离散时间信号与系统

理论必须结合实际!因此在2018年就有了第六部分的讲解,目的就是让同学们看到学到的理论知识怎么在计算....
的头像 通信工程师专辑 发表于 09-22 11:30 911次 阅读
浅析离散时间信号与系统

51单片机的启动代码究竟里面写了什么

在我们使用kei c51创建一个51单片机项目时,会有如下图所示的提示:   keil创建新项目时,....
的头像 strongerHuang 发表于 09-22 10:15 341次 阅读
51单片机的启动代码究竟里面写了什么

介绍3种方法跨时钟域处理方法

跨时钟域处理是FPGA设计中经常遇到的问题,而如何处理好跨时钟域间的数据,可以说是每个FPGA初学者....
的头像 FPGA设计论坛 发表于 09-18 11:33 2232次 阅读
介绍3种方法跨时钟域处理方法