线结构光视觉传感器/线激光深度传感器标定工具(matlab)

发布时间:2018-03-13 17:32,

浏览次数:655

, 标签:

matlab

线结构光视觉系统有着结构简单、使用灵活、受周围光照环境影响小等一系列特点,在实际中得到广泛的应用。在该技术的使用中,标定是避免不了的一个环节。线结构光的标定过程大概可以分为两个部分:相机标定和线结构光标定。目前相机标定技术比较成熟,尤其是以张正友平面标定法为代表的相机标定方法,得到了广泛的应用和认可。而线结构光的标定方法,目前也有一些标定方法在实际中应用。

本人在学习和工作中对线结构光视觉系统的标定进行了研究和编程实现,目前完成了一个基于matlab

2015a的线结构光标定程序。该程序只需要使用一块棋盘格标定板即可完成线结构光视觉系统的标定。下面是该标定软件的具体使用过程。

首先选择用于标定的图片所在的文件夹,然后点击标定按钮,软件将会自动完成相机标定和线结构光标定,并把标定结果存于txt文件中。

相机参数

[456.835948  0  319.163600

0  455.503272  224.297494

0  0  1]

畸变系数

[-0.428655 0.240668 0.000222 -0.000840 -0.074862]

平均重投影误差

0.148146pixel

线结构光参数

[0.996652  0.009722  0.081176  135.203206]

附源码地址(.p文件)

http://download.csdn.net/detail/j10527/9694703

部分代码:

1.相机标定按钮代码

[plain] view plain  copy

* % --- Executes on button press in camera_calibration.

* function camera_calibration_Callback(hObject, eventdata, handles)

* % hObject    handle to camera_calibration (see GCBO)

* % eventdata  reserved - to be defined in a future version of MATLAB

* % handles    structure with handles and user data (see GUIDATA)

*

* disp 'Camera calibration begin...';

* images = imageSet(get(handles.dir_cam, 'String'));

* % images = imageSet('robart');

* imageFileNames = images.ImageLocation;

* for k = 1:length(imageFileNames)

*     im = imread(imageFileNames{k});

*     if size(im,3)==3

*         im=rgb2gray(im);

*     end

*     im = imadjust(im);

*     imwrite(im,imageFileNames{k});

* end

* % Detect calibration pattern.

* [imagePoints, boardSize] = detectCheckerboardPoints(imageFileNames);

*

* % Generate world coordinates of the corners of the squares.

* % squareSize = 10; % millimeters

* squareSize = str2num(get(handles.square_size, 'String'));

* worldPoints = generateCheckerboardPoints(boardSize, squareSize);

*

* % Calibrate the camera.

* [params, ~, ~] = estimateCameraParameters(imagePoints, worldPoints, ...

*

'EstimateTangentialDistortion', true, 'NumRadialDistortionCoefficients', 3);

*

* if get(handles.show, 'value')

*     figure;subplot(2,1,1);

*     showReprojectionErrors(params);

* end

* for k = 1:size(imagePoints,3)

* %     im = imread(imageFileNames{k});

* %     im = rgb2gray(im);

* %     J = undistortImage(im, params);

* %     imwrite(J,['undistorted_calib/im' num2str(k) '.jpg']);

*     err(k) = norm(mean(abs(params.ReprojectionErrors(:,:,k)),1));

* end

*

* for k = 1:round(size(imagePoints,3)*0.3)

*     [~,ind]=max(err);

*     err(ind)=[];

*     imagePoints(:,:,ind)=[];

* end

*

* % [imagePoints, boardSize] = detectCheckerboardPoints(imageFileNames);

*

* % Calibrate the camera.

* [params, ~, ~] = estimateCameraParameters(imagePoints, worldPoints, ...

*

'EstimateTangentialDistortion', true, 'NumRadialDistortionCoefficients', 3);

* if get(handles.show, 'value')

*     subplot(2,1,2);

*     showReprojectionErrors(params);

*     figure;

*     showExtrinsics(params, 'CameraCentric');

* end

* dir_str = get(handles.dir_str, 'String');

* images = imageSet(dir_str);

* system('mkdir undistorted_stripe');

* delete undistorted_stripe/*

* for k = 1:images.Count

*     I = imread(images.ImageLocation{k});

*     [J,newOrigin] = undistortImage(I,params,'OutputView', 'same');

* %     if get(handles.show, 'value')

* %     figure;

* %     imshow(J);

* %     end

*     imwrite(J,['undistorted_stripe/im_stripe' num2str(k) '.jpg']);

* end

*

* % images = imageSet('pics_raw/');

* % for k = 1:images.Count

* %     I = imread(images.ImageLocation{k});

* %     [J,newOrigin] = undistortImage(I,params,'OutputView', 'same');

* %     figure;

* %     imshow(J);

* %     imwrite(J,['pics/im_' num2str(k) '.jpg']);

* % end

*

* fd = fopen('cam_paras.txt', 'w+');

*

*

fprintf(fd, '%f %f %f %f\n', params.IntrinsicMatrix(1), params.IntrinsicMatrix(3), ...

*     params.IntrinsicMatrix(5), params.IntrinsicMatrix(6));

*

fprintf(fd, '%f %f %f %f %f\n', params.RadialDistortion(1), params.RadialDistortion(2),...

*

params.TangentialDistortion(1), params.TangentialDistortion(2), params.RadialDistortion(3));

* fprintf(fd, '%f\n', params.MeanReprojectionError(1));

* fclose(fd);

* disp 'Camera calibration done.';

* disp 'Camera calibration results were saved in cam_paras.txt.';

stripe_paras.txt文件按照如下代码保存的:

基于qt5和opencv3的新版本可执行文件,下载地址

https://github.com/jah10527/laserLineToolkit

上面只显示了Z坐标,X,Y未显示在界面上。

转:http://blog.csdn.net/J10527/article/details/51636214

matlab 光平面标定代码,线结构光视觉传感器/线激光深度传感器标定工具(matlab)...相关推荐

  1. 线结构光视觉传感器/线激光深度传感器标定工具

    续集:线结构光视觉传感器/线激光深度传感器标定工具(续) https://jah10527.github.io/articles/lineLaser.html 线结构光视觉系统有着结构简单.使用灵活. ...

  2. 线结构光标定详细步骤与实现HALCON

    这部分是HALCON官方的一个例子,下面是对这个比较复杂的例子的一些理解,具体的每一句代码都对应相应的作用解释 具体的例子是这个: 此程序演示如何执行校准光片测量系统: 测量系统由区域扫描摄像机和光线 ...

  3. 基于matlab单目视觉焊缝跟踪系统,基于激光线结构光3D视觉的机器人轨迹跟踪方法与应用...

    摘要: 本文利用工控机.图像采集卡.工业相机和激光器,设计了激光线结构光3D视觉系统;利用工控机.运动控制卡.伺服驱动器和六轴串联机器人组成机器人运动系统;两者共同构成基于激光线结构光的机器人轨迹跟踪 ...

  4. 线结构光的标定(halcon)

    halcon 中有一个例子可以直接完成 线结构光的所有标定: 包括     1.相机内外参数的标定 2.激光平面参数的标定(最小拟合二乘的4个参数) 3.相机和运动模组之间的标定 想想之前用openc ...

  5. opencv线结构光三维重建

    下面是从CSDN下载的一个程序,用到了其他的一些库,大致实现了HALCON示例中的线结构光三维重建的功能,下面是完整代码,具体解释见注释 #include <opencv2/highgui/hi ...

  6. 线结构光三维重建(一)

     线结构光三维重建测量系统,是基于三角测量的原理进行三维重建.相机在采集图像过程中,对相机进行内外参标定后,我们可以将图像上的像素点坐标,转为世界坐标进行测量.但由于小孔成像的原理,对于目标距离光心的 ...

  7. 线结构光三维重建法兰盘

    线结构光三维重建可以得到法兰盘的三维点云图,进一步的,我们可以对螺纹处的点云数据进行分析,本节主要记录线结构光三维重建的主要步骤及一些问题. 一.光平面方程 1.标定板位置不变,拍摄有激光和无激光两张 ...

  8. 机器视觉学习系列一:线结构光三维测量重建

    项目背景: 项目用于工业零件的公差检测,主要是针对缝隙和高低差两种公差,具体应用领域如汽车.飞机的蒙皮对接检测,当然,对于别的公差改变一些代码,也是可以做到的: 技术方案: 采用线结构光进行三维重建, ...

  9. 【理解】线结构光成像模型

    最近由于课题需要,要接触到线结构光成像模型的理解,网上找了博客没有写的很详细,找到了一篇写的很好的论文,在这先记录下,以供大家学习参考: 1.先理解一下模型是如何建立的 模型主要涉及两个坐标系: 物体 ...

最新文章

  1. 阿里云面向企业效率的云上产品全解析——云呼叫中心
  2. 深入理解JavaScript系列(4):立即调用的函数表达式
  3. linux rm命令
  4. 浙江大学远程教育学院计算机考试,浙江大学远程教育学院机试题 Windows操作题(共15分,若有做错请酌情 ....docx...
  5. 浅谈JVM(一) ClassLoader的双亲委派和沙箱机制
  6. CodeForces 841B (B) 博弈
  7. 【火炉炼AI】机器学习006-用决策树回归器构建房价评估模型
  8. 如何使用PowerShell创建简单SQL Server数据库登录对话框
  9. 区块链开发公司:区块链技术如何改变个人数据安全
  10. 这九年来都在干嘛-兄弟连IT教育
  11. 11个思维导图知识点整理帮你决胜考研(基础课和计算机专业课)| 寻找C站宝藏
  12. 了解最新升级手持式频谱仪版本和各项性能
  13. git 删除历史记录
  14. 【计算机基础】思维导图
  15. java的I/O流,开发教学第二章作业
  16. XTOOL EZ500全系统的诊断和特殊功能超越Xtool EZ400 EZ300 Xtool PAD
  17. iHRM 人力资源管理系统_第7章 POI报表的入门
  18. 哈啰电动车“智慧门店”设想,经销商们买账吗?
  19. 济南少儿学国画培训班
  20. 几款开源的ETL工具及ELT初探

热门文章

  1. labview曲线拟合讲解_LABVIEW简介与曲线拟合应用程序初步设计.pptx
  2. 20210726 java基础复习
  3. 数控恒流源电路简单讲解
  4. java播放wav文件没声音_java播放wav文件,该如何处理
  5. 网课查题极速响应系统-公众号查题
  6. 计算机游戏中屏幕上显示的,计算机显示器选择弧形屏幕还是直接屏幕?主游戏...
  7. MATLAB冒号用法
  8. 网站收录量如何提高?
  9. 开发企业官网就用这个基于SpringBoot的CMS系统,真香
  10. recovery之刷机脚本自定义(解决刷zip文件时出现Status 6错误)