线结构光视觉传感器/线激光深度传感器标定工具
续集:线结构光视觉传感器/线激光深度传感器标定工具(续)
https://jah10527.github.io/articles/lineLaser.html
线结构光视觉系统有着结构简单、使用灵活、受周围光照环境影响小等一系列特点,在实际中得到广泛的应用。在该技术的使用中,标定是避免不了的一个环节。线结构光的标定过程大概可以分为两个部分:相机标定和线结构光标定。目前相机标定技术比较成熟,尤其是以张正友平面标定法为代表的相机标定方法,得到了广泛的应用和认可。而线结构光的标定方法,目前也有一些标定方法在实际中应用。
本人在学习和工作中对线结构光视觉系统的标定进行了研究和编程实现,目前完成了一个基于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.相机标定按钮代码
% --- 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)==3im=rgb2gray(im);endim = 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));
endfor 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.CountI = imread(images.ImageLocation{k});[J,newOrigin] = undistortImage(I,params,'OutputView', 'same');
% if get(handles.show, 'value')
% figure;
% imshow(J);
% endimwrite(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']);
% endfd = 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未显示在界面上。
线结构光视觉传感器/线激光深度传感器标定工具相关推荐
- matlab 光平面标定代码,线结构光视觉传感器/线激光深度传感器标定工具(matlab)...
线结构光视觉传感器/线激光深度传感器标定工具(matlab) 发布时间:2018-03-13 17:32, 浏览次数:655 , 标签: matlab 线结构光视觉系统有着结构简单.使用灵活.受周围光 ...
- 基于matlab单目视觉焊缝跟踪系统,基于激光线结构光3D视觉的机器人轨迹跟踪方法与应用...
摘要: 本文利用工控机.图像采集卡.工业相机和激光器,设计了激光线结构光3D视觉系统;利用工控机.运动控制卡.伺服驱动器和六轴串联机器人组成机器人运动系统;两者共同构成基于激光线结构光的机器人轨迹跟踪 ...
- 中线提取算法_综述|线结构光中心提取算法研究发展
摘 要: 线结构光扫描是三维重建领域的关键技术.光条纹中心提取算法是决定线结构光三维重建精度以及光条纹轮廓定位准确性的重要因素.本文详细阐述了光条纹中心提取算法的理论基础及发展历程,将现有算法分为三类 ...
- 像素测量工具_结构光视觉传感器的标定方式和测量原理
击上方"新机器视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 结构光视觉的优点: 非接触.信息量大.测精度高.抗干扰能力强. 结构 ...
- 一分钟详解线结构光扫描系统
前言 利用视觉进行测距,大家都知道哪些方案呢?除了常见的传统的双目立体视觉(可以参见<立体视觉动态测量技术>).TOF技术.面结构光技术(可以参见<3D Scanner相机>) ...
- 线结构光三维重建(一)
线结构光三维重建测量系统,是基于三角测量的原理进行三维重建.相机在采集图像过程中,对相机进行内外参标定后,我们可以将图像上的像素点坐标,转为世界坐标进行测量.但由于小孔成像的原理,对于目标距离光心的 ...
- opencv线结构光三维重建
下面是从CSDN下载的一个程序,用到了其他的一些库,大致实现了HALCON示例中的线结构光三维重建的功能,下面是完整代码,具体解释见注释 #include <opencv2/highgui/hi ...
- 线结构光标定详细步骤与实现HALCON
这部分是HALCON官方的一个例子,下面是对这个比较复杂的例子的一些理解,具体的每一句代码都对应相应的作用解释 具体的例子是这个: 此程序演示如何执行校准光片测量系统: 测量系统由区域扫描摄像机和光线 ...
- 线结构光的标定(halcon)
halcon 中有一个例子可以直接完成 线结构光的所有标定: 包括 1.相机内外参数的标定 2.激光平面参数的标定(最小拟合二乘的4个参数) 3.相机和运动模组之间的标定 想想之前用openc ...
最新文章
- QT中使用rubberband橡皮筋等方法进行选中多个物体
- 最好机器学习NLP和python教程
- yum使用时 could not resolve host 报错的解决方法
- backbone js学习笔记之第三篇Model (续)
- 领域驱动设计在马蜂窝优惠中心重构中的实践
- 深度学习人脸识别核心技术—框架和优化目标
- 【高校宿舍管理系统】第三章 Layui整合Axios
- android确定工作日,如何确定某个月的最后一个工作日?
- Linux Cannot assign requested address
- 微信升级外链管理规范,「砍一刀帮我加速」要被禁止了
- 02 matplotlib - 柱状图、直方图、散点图 、饼图
- 【数据结构与算法】专栏系列文章目录
- C# WebAPI 上传文件和图片
- vue实现收起展开面板,让你的页面动态起来
- 计算机考研考的是英语作文,2007年考研英语作文真题及范文
- 自由幻想系统不能提供服务器,系统指南-自由幻想召集令-QQ自由幻想官方网站...
- 优秀案例 | 长江鲲鹏中地数码:打造智慧城市“数字底座”
- linux 进文字界面,CentOS安装后进入时文字界面,不知如何用命令,求解
- 苹果笔记本电脑无法检查更新解决方案
- Net core中使用System.Drawing对上传的图片流进行压缩