資源簡介
線結構光光平面標定,求出光平面在相機坐標系中的相對位置。

代碼片段和文件信息
#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\li
?????文件???????6858??2016-04-22?21:45??光平面標定\StructLightCalibrate\Debug\StructLi.CDB93C0D.tlog\li
?????文件????????710??2016-04-22?21:45??光平面標定\StructLightCalibrate\Debug\StructLi.CDB93C0D.tlog\li
?????文件????????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.xm
?????文件??????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個文件信息
- 上一篇:后臺管理系統原型模板
- 下一篇:一個STM32的USB鼠標例程
評論
共有 條評論