资源简介

线结构光光平面标定,求出光平面在相机坐标系中的相对位置。

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 
#include 
#include  //文件输入输出流搜索
#include 
#include 
#include “opencv2/core/core_c.h“
#include “opencv/cv.h“
#include “opencv2/highgui/highgui.hpp“

using namespace cv;
using namespace std;

float f = 12.0f; //相机焦距,单位:mm
float dx; //像元x方向长度
float dy; //像元y方向长度
CvMat * intrinsic;
CvMat * distortion;

//————————结构光标定使用的变量——————————
vector cline; //保存单幅图像的角点线,每幅图5条
float struct_line[4];  //存储单条结构光直线
IplImage* chess_image;
IplImage* chess;
IplImage* light_image;
IplImage* light;
IplImage* show_corner;

int number_image = 1;//原来是32
char filename[300];
char* adrSrcChessImage = “SrcImage//c%d.jpg“;                //源图像文件夹地址
char* adrSrcLightImage = “SrcImage//cc%d.jpg“;                //源图l文件夹地址
float d = 1.76f;                               //棋盘格物理尺寸。,单位mm or cm???
CvSize board_size = cvSize(5 3);                       //棋盘规格width*height内角点的个数
int board_width = board_size.width;
int board_height = board_size.height;
int total_per_image = board_width*board_height;
//亚像素角点检测需要的参数
int iterations = 100;               //迭代次数
double accuracy = 0.01;              //收敛精度
int successes = 0;


char* adrDstImage = “DstImage//%d.bmp“;         //畸变校正后的图像文件夹地址
char* adrTempImage = “TempImage//%d.bmp“;       //过程图像文件夹地址

CvPoint2D32f * image_points_buf = new CvPoint2D32f[total_per_image];        //单张图像的角点,图像坐标

CvMat * image_points = cvCreateMat(number_image*total_per_image 2 CV_32FC1);  //图像坐标系
CvMat * object_points = cvCreateMat(number_image*total_per_image 3 CV_32FC1); //世界坐标系
CvMat * point_counts = cvCreateMat(number_image 1 CV_32SC1);         //每张图像的角点数量

FILE* fp = fopen(“DataResult.txt“ “w+“);      //保存数据的txt文件地址
FILE* fpInfo = fopen(“Information.txt“ “w+“);   //保存异常信息  ‘w+读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
FILE* fpTest = fopen(“LightErrorTest.txt“ “w+“);//保存异常信息

float planeLight[4];                             //光平面。
vector point_c; //存储所有图像的交点的摄像机坐标

vector testline;

/*
结构光平面标定设计分析:
步骤:
1.为标定方便,便于提取结构光平面,采用特制标定板。
2.根据相机标定得到的畸变系数,对图像进行畸变校正。
3.求取结构光直线方程(l1)(图像像素坐标系)。
4.求取标定板角点坐标(单位:像素;坐标系:图像像素坐标系)。
5.对每行的三个角点进行直线拟合,得到角点线方程(l2)(图像像素坐标系)。
6.由角点线方程(l2)和结构光直线方程(l1)求取交点(p)的图像像素坐标坐标
7.根据相机标定得到的内参,将三个角点(a,b,c)和一个交点(p)的图像像素坐标映射为 相机坐标(AcBcCc) Pc(归一化到图像平面上的,深度都取为实际焦距f不是标准的)(单位:mm)。
8.据此分别求得向量的夹角a1(角BOC)、a2(角AOC)以及a3(角COP)的值。(A B C P是相机坐标系下的实际坐标)
9.由角a1/a2/a3和A、B、C两两之间的距离d,求得|OP|的值。//用到棋盘格距离
10.再由向量OPc的方向,即可得到p点的相机坐标P。
11.分别对每一行角点线重复第5~10步,可在一副标定图上求得结构光光线上的多个点的相机坐标(x y z),
12.对多个空间点拟合成一条相机坐标系的空间直线 / 存储所有点
13.分别对每一幅结构光标定图重复第2~12步,得到结构光平面上的多个直线方程 / 存储所有点
14.对多个直线方程进行拟合,得到结构光平面方程 / 对13步得到的所有点进行平面拟合,得到结构光平面方程
15.结构光平面标定完成(在相机坐标系)。
*/


/*
结构光提取中心线:
需进行中值滤波,二值化,开运算
再提取中心线,得到直线方程
*/



//矫正图像
void adjustImage(IplImage *showint a)
{
//矫正畸变,测试效果。
IplImage * mapx = cvCreateImage(cvGetSize(show) IPL_DEPTH_32F

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      14309  2016-04-22 15:49  光平面标定\StructLightCalibrate\c1.JPG

     文件         58  2016-04-22 21:45  光平面标定\StructLightCalibrate\DataResult.txt

     文件     616959  2016-04-22 21:45  光平面标定\StructLightCalibrate\Debug\main.obj

     文件        830  2016-04-22 21:45  光平面标定\StructLightCalibrate\Debug\StructLi.CDB93C0D.tlog\cl.command.1.tlog

     文件      41212  2016-04-22 21:45  光平面标定\StructLightCalibrate\Debug\StructLi.CDB93C0D.tlog\CL.read.1.tlog

     文件        732  2016-04-22 21:45  光平面标定\StructLightCalibrate\Debug\StructLi.CDB93C0D.tlog\CL.write.1.tlog

     文件       3040  2016-04-22 21:45  光平面标定\StructLightCalibrate\Debug\StructLi.CDB93C0D.tlog\link.command.1.tlog

     文件       6858  2016-04-22 21:45  光平面标定\StructLightCalibrate\Debug\StructLi.CDB93C0D.tlog\link.read.1.tlog

     文件        710  2016-04-22 21:45  光平面标定\StructLightCalibrate\Debug\StructLi.CDB93C0D.tlog\link.write.1.tlog

     文件        188  2016-04-22 21:45  光平面标定\StructLightCalibrate\Debug\StructLi.CDB93C0D.tlog\StructLightCalibrate.lastbuildstate

     文件       7635  2016-04-22 21:45  光平面标定\StructLightCalibrate\Debug\StructLightCalibrate.log

     文件    1240064  2016-04-22 21:45  光平面标定\StructLightCalibrate\Debug\vc120.idb

     文件    1691648  2016-04-22 21:45  光平面标定\StructLightCalibrate\Debug\vc120.pdb

     文件         92  2016-04-22 21:45  光平面标定\StructLightCalibrate\Information.txt

     文件          0  2016-04-22 21:45  光平面标定\StructLightCalibrate\LightErrorTest.txt

     文件        243  2016-04-22 21:45  光平面标定\StructLightCalibrate\LightPlaneABCD.xml

     文件      20380  2016-04-22 23:06  光平面标定\StructLightCalibrate\main.cpp

     文件      49433  2016-04-22 20:01  光平面标定\StructLightCalibrate\SrcImage\a1.jpg

     文件       4121  2016-04-20 22:20  光平面标定\StructLightCalibrate\StructLightCalibrate.vcxproj

     文件        945  2016-04-20 22:19  光平面标定\StructLightCalibrate\StructLightCalibrate.vcxproj.filters

     文件    1772182  2016-04-22 21:45  光平面标定\StructLightCalibrate\TempImage\1.bmp

     文件    1772182  2016-04-22 21:45  光平面标定\StructLightCalibrate\TempImage\拟合的角点直线1.bmp

     文件    1772182  2016-04-22 21:45  光平面标定\StructLightCalibrate\TempImage\拟合的角点直线2.bmp

     文件    1772182  2016-04-22 21:45  光平面标定\StructLightCalibrate\TempImage\拟合的角点直线3.bmp

     文件    1772182  2016-04-22 21:45  光平面标定\StructLightCalibrate\TempImage\拟合的角点直线4.bmp

     文件    1772182  2016-04-22 21:45  光平面标定\StructLightCalibrate\TempImage\拟合的角点直线5.bmp

     文件          6  2019-06-30 11:51  光平面标定\说明.txt

     目录          0  2016-04-22 21:45  光平面标定\StructLightCalibrate\Debug\StructLi.CDB93C0D.tlog

     目录          0  2016-04-22 21:45  光平面标定\StructLightCalibrate\Debug

     目录          0  2016-04-27 19:09  光平面标定\StructLightCalibrate\DstImage

............此处省略7个文件信息

评论

共有 条评论