pmd 相机 系统标定

article/2025/9/30 22:04:38

  在图像测量过程以及机器视觉应用中,为确定空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系,必须建立摄像机成像的几何模型,这些几何模型参数就是摄像机参数。在大多数条件下这些参数必须通过实验与计算才能得到,这个求解参数的过程就称之为相机标定。简单来说是从世界坐标系换到图像坐标系的过程,也就是求最终的投影矩阵P的过程。

  无论是在图像测量或者机器视觉应用中,摄像机参数的标定都是非常关键的环节,其标定结果的精度及算法的稳定性直接影响摄像机工作产生结果的准确性。因此,做好摄像机标定是做好后续工作的前提,是提高标定精度是科研工作的重点所在。其标定的目的就是为了相机内参、外参、畸变参数。

  相机标定这方面已经有很多的介绍了,站内有很多详细的介绍,例如张正友标定法,迭代标定法,自标定法等,在了解原理后其实也会回归到使用软件来完成相机的标定,例如使用matlab的标定工具箱,开源的opencv的标定,halcon的标定等等方法,前两个使用棋盘格标定板或者圆点标定板都可以,但halcon只能使用特定的标定板。

  同时,由于相机需要倾斜的对焦在物体上,选择相机时尽可能选择大景深的相机,同时相机的光圈也会影响拍到的图片的正弦性,周围环境的光照等因素也会严重影响标定的精度,建议相机标定前把相机位姿调到相位展开效果好的位姿。

  接下来的系统标定,以单目的系统为例,需要标定的有屏幕和参考平面,需要把参考平面上的物体通过相机坐标系、图像坐标系和世界坐标系的关系转换到同一坐标系下。但由于位姿关系,参考平面的外参较容易获得,但产生条纹图形的LCD不在摄像机直接的视场范围内,需要利用贴上控制点的平面镜完成摄像机与显示器之间的位姿估计,但前提是,平面镜上控制点坐标必须事先通过摄影测量方法测得。摄影测量十分复杂,于是在较为成熟的条纹投影的基础上衍生出了其他较为简单的方法,采用间接的方法,如使用平面镜或者球面镜作为中介进行反射,获得显示器和相机之间的位置参数,可以说大部分的单目系统的标定方法都需要用到平面镜,当然使用方法略有不同,大部分都是使用光束平差法,比如引入另一个显示屏,使用可以滑动的显示屏,使用阶梯镜面替代显示屏移动等等方法,个人认为方法还是较为复杂,个人倾向于使用显示屏显示标定板通过平面镜反射到相机中进行标定。

  由于目前所使用的液晶显示器在物理平面上已经达到了较高的几何精度,择在显示器上投射标定模板代替常用的标定物有了较高的可行性,但需要注意的是标定靶图样尽量不要选择棋盘格形式,因为在 PMD 中,显示屏对于相机是离焦的,离焦程度较大时,会对角点检测算法的精度产生影响,因此需要使用圆点的标定板,寻找图像上的圆心,利用圆心的距离来完成标定,可以使用求解pnp的算法来求解屏幕在相机坐标系下的关于参考平面的镜像旋转平移矩阵,这里说显示屏的镜像的原因是因为相机实际上拍摄的是显示屏在平面反射镜中的像。根据显示屏及其镜像空间位置关于参考平面对称这一关系,可以计算显示屏实际位置并求解每个相机像素所对应的显示屏平面上的点的空间位置。

  同样的,也有基于条纹投影的逆相机法来进行标定的,这种方法不需要标定显示屏空间位置,步骤可以简单概括为以下五步(1):

第一步,相机标定,计算相机内部参数;

第二步,参考平面空间位置标定,计算参考平面所在空间平面的方向向量n0 = (A0 B0 1) ,并获取参考相位ϕ0x 和ϕ0y;

第三步,旋转平面镜10次,获得每次旋转后平面镜所在平面的方向向量ni = (Ai Bi 1),以及其上条纹的相位ϕix 和ϕiy ;

第四步,计算每次转动的平面镜和参考平面镜在相机坐标系的 XC轴和 YC轴方向的夹角,并由此转动平面的梯度值tanθ 和相位差∆ϕ ;

第五步,对于每个像素,通过最小二乘法,并根据 10 组相位梯度值,拟合参 量a(m,n) ,b(m,n)和c(m,n) 。

  接下来对这部分硬件产生的误差进行分析,相机标定误差不在这里进行讨论,只对系统标定误差进行简单分析,先从LCD屏幕讲起,发生在显示屏透明层的折射是限制LCD测量精度的一个重要因素。由于显示屏透明层的厚度为1.0~1.5mm,因此显示图案与观测图案会发生与 观测角度相关的偏移。通过引入折射模型可提高系统测量精度2。同时,还有因为显示器不平整带来的误差以及屏幕本身的精度问题,这些都需要通过软件进行修正,这里也不多赘述,建议放在最后进行优化时研究。毕竟在相位测量偏折术中,标定误差是一类主要的系统误差,将会直接影响从相位恢复物体表面梯度的精度,进而影响重建高度的精度。(2)

  相位测量偏折术系统采用CCD相机获取变形条纹,而CCD相机存在模数(A/D)转换过程,会对输入信号进行采样和量化。量化是将其舍入或截断为有限样本序列,因 此会产生量化误差。A/D转换器的量化效应一般采用信噪比(RSNR)来衡量,同时,系统也存在非线性误差,LCD显示屏和CCD相机的响应函数都是非线性函数,系统的非线性表现为高次谐波的叠加,而理想的系统响应仅含一次谐波和零频分量。(3)

1.基于光学三维成像的镜面物体表面质量检测方法研究 吴雨祥

2.直接相位测量偏折术中显示屏折射效应补偿方法  张泽雨,刘小红,张宗华,高楠,孟召宗

3.相位测量偏折术中高质量条纹的获取  岳慧敏,李 绒,潘志鹏,陈红丽,吴雨祥,刘 永


http://chatgpt.dhexx.cn/article/iCEOrec8.shtml

相关文章

DPDK — Userspace PMD 源码分析

目录 文章目录 目录PMD driver 通过 IGB_UIO 与 UIO 进行交互注册一个 UIO 设备PMD 的应用层实现Interrupt DPDK(中断模式) PMD driver 通过 IGB_UIO 与 UIO 进行交互 IGB_UIO 内核模块的另一个主要功能就是让用于态的 PMD 网卡驱动程序得以与 UIO 进行…

java pmd 安装_PMD-Java代码静态分析工具使用

如今,使用代码分析工具来代替人工进行代码审查,已经是大势所趋了。用于Java代码检测的工具中,不乏许许多多的佼佼者,其中PMD就是其中一款。PMD既可以独立运行,也可以以命令行的形式运行,还可以作为插件在ID…

java pmd 安装_PMD的安装及使用

PMD是一种开源分析Java代码错误的工具。 与其他分析工具不同的是,PMD通过静态分析获知代码错误。也就是说,在不运行Java程序的情况下报告错误。PMD附带了许多可以直接使用的规则,利用这些规则可以找出Java源程序的许多问题。此外,…

java pmd 安装_4. PMD 使用,编译和自定义规则

一 PMD简介 PMD是一款代码静态检查工具,可以检查出很多代码中潜在的bug以及让人感到疑惑的代码,具体大家可以百度下。 二 PMD源代码下载 下载地址: 需要注意的是注意选择branch,一般选择最新的branch;然后可以用git clone下来,或者直接下载zip压缩包。 如下: 从上图也可…

java pmd 插件下载_pmd eclipse插件

PMD是Eclipse上的一款源代码分析插件,与其他分析工具不同的是,PMD通过静态分析获知代码错误。也就是说,它可以在不运行Java程序的情况下报告错误。pmd 支持Java、JavaScript、XML、XSL等,欢迎下载! Eclipse PMD插件更新…

java pmd checkstyle_提高代码质量 CheckStyle FindBugs PMD

注:这是一篇翻译文章,原文:How to improve quality and syntax of your Android code,为了理解连贯,翻译过程中我修改了一些陈述逻辑和顺序,同时也加了一些自己的补充。 在这片文章中,我将从工具…

【C语言】 C语言图形编程 俄罗斯方块 课程设计

程序简介 由纯C语言实现的俄罗斯方块小程序,代码长度700行,使用Turbo C图形库美化了界面,并具俄罗斯方块游戏的所有基本功能。玩家可以通过键盘的“上下左右”键移动“方块”,“空格”去翻转方块,每当方块可以将一行“…

简单c语言图形程序设计,c语言实现一些简单图形的打印

1 #define _CRT_SECURE_NO_WARNINGS 1 因为笔者采用的是VS的编译环境所以有了上面的这一句话 我们都知道平面图形是由一条条线段构成,所以我们就先实现线段的打印 1 //打印自定义长度的线段 2 #include 3 intmain() 4 {5 int i = 0; 6 intn; 7 while (~scanf("%d",&…

C语言图形化编程 【二】

C语言图形编程 二 3 基本贴图3.1 声明一个存储图片的变量3.2 图片的路径3.3 显示图片3.4 透明贴图 4 鼠标操作4.1 声明一个存储鼠标信息的变量4.2 获取鼠标4.3 分类讨论鼠标消息的来源 3 基本贴图 3.1 声明一个存储图片的变量 格式: IMAGE img; //类型 变量名(你要贴的图片的…

基于C语言的图形化编程软件,图形化编程工具

原标题:图形化编程工具 1.产品介绍 唯众图形化编程工具是一款基于拖拽式图形化设计的可视化编程工具库,通过拖拽式图形化编程完成程序设计。作为一种易于掌握的图像化编程环境,是编程初学者学习和掌握程序设计方法的有力工具。用图形化编程方式去理解程序语言,可以让学生更…

C语言:编程打印图形

题目 编程打印以下图形: 代码 #include "stdio.h"void main() {char ch = A;int i,j;for(i=

c语言图形时钟编程,c语言程序+图形编程——打造简易的时钟

全程代码小编就在这里发出来了哈,最终的效果图, // c语言+图形编程 电脑时钟 //包含头文件 #include #include #include void Draw_Dial();//绘制静态的表盘 void Draw_Hand(int hour, int minute, int secend); //绘制表针 //主函数 int main() {initgraph

C语言图形编程--俄罗斯方块制作(一)详解

效果图 用C语言实现俄罗斯方块&#xff0c;需要先解决下面几个问题&#xff1a; 1、如何用C语言绘制图形界面 EasyX图形库(http://www.easyx.cn)即TC的图形库在VC下的移植。 包含库#include <graphics.h> 先初始化图形窗口 initgraph(WINDOW_WIDTH, WINDOW_HIGH) ;WINDOW…

C语言图形代码:三角、金字塔、圣诞树、爱心

在C语言的学习过程中&#xff0c;我们熟练掌握循环以后就可以使用循环编写&#xff0c;我们喜欢的图形代码啦&#xff01; 下面我向大家分别展示四种使用C语言循环编写的代码。 后两种都可以用来给自己的女朋友展示喔 1.三角形 2.金字塔 3.圣诞树 4.爱心 &#xff08;1&#…

linux下c语言图形界面实现,「分享」C语言如何编写图形界面

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 贴吧内经常有人问C语言是不是只能用于字符终端界面开发,不能用于图形界面。大家也都有回答,需要其他的库。MFC,GTK,QT。 本人近期刚用GTK库加上纯C写成了第一个LINUX实用程序。现在与大家分享: 主界面程序gmaxtrix.c #includ…

c语言图形时钟编程,c语言+图形编程——打造浅易的时钟

全程代码小编就在这里发出来了哈 // c语言图形编程 电脑时钟 //包罗头文件 #include #include #include #define PI 3.141592654 void Draw_Dial();//绘制静态的表盘 void Draw_Hand(int hour, int minute, int secend); //绘制表针 //主函数 int main() { initgraph(640, 4…

简单c语言图形程序设计,c语言简单图形编程

c语言编程如何实现图形化? 如果你是说编写用户界面的C语言编程,那就应该学习平台编程.主流平台有windows,linux等. 楼主是领会到C得要点了.C不像JAVA和C#,它们才叫编写应用程序,因为它们的库直接可以编写出程序的应用部分(比如用户界面,调用系统资源等). 但是C语言不能叫做 c语…

C语言图形编程|设置位置

一、对光标位置进行修改 1、通过自定义函数来实现将光标移动到指定位置 void gotoxy(int x,int y) {HANDLE hCon;hCon GetStdHandle(STD_OUTPUT_HANDLE);COORD Pos;Pos.X x;Pos.Y y;SetConsoleCursorPosition(hCon,Pos); } 代码优化: void gotoxy(int x,int y) {COORD P…

C语言图形化编程

画折线图 #include<stdio.h> #include<conio.h> #include<graphics.h> #include<stdlib.h>void hDrawk(char c[]); void vDrawk(char c[]); void Drawfline(int b[]); int xs48,ys50;void hDrawk(char c[]) {int i,j65;line(65,360,565,360);for(i0;i&…

C语言图形化编程 【一】

C语言图形化编程 一 一、绘图窗口1.1 加载头文件1.2 创建一个窗口1.3 关闭窗口1.4 窗口坐标1.5 颜色1.6 设置颜色1.6.1 背景颜色1.6.2 线颜色1.6.3 文字颜色1.6.4 填充颜色 二、基本的绘图2.1 画点函数2.2 画线函数2.3 画矩形函数非填充(空心&#xff09;填充(实心)有边界线无边…