精华内容
下载资源
问答
  • 加州理工大学matlab相机标定工具箱,程序注解。注解详细介绍了工具箱的变成原理,对于初学者理解工具箱十分有用
  • matlab标定程序使用的测试图片 棋盘状图片 tif格式
  • 所谓手眼标定是统一视觉系统和机器人的坐标系,从而可以使视觉系统所确定的物体位姿可以转换到机器人坐标系下,由机械臂完成对物体的作业。 最常见的手眼系统包括Eye-to-Hand和Eye-in-Hand两种。在Eye-to-Hand手眼...
  • 使用matlab随意建立一个机器人,设定好相机坐标系和标定板坐标系。然后采集不同位姿下,机器人末端在基坐标的位姿T_b_t,标定板坐标系在相机坐标系下的位姿T_c_cal。然后计算相机坐标系相对于机器人基础的位姿。
  • 标定相机的参数导出Excel文件和TXT两种格式的程序
  • Douskos V.等牛人基于通用的Bonguet 相机标定工具箱改进编写的matlab相机标定程序,不用像原来的工具箱那样需要手动提取角点,这个软件有现成的界面,且开源,20幅左右的图片标定只需要12s。
  • 计算机视觉的基本任务之一是从摄像机获取的图像信息出发计算三维空间中物体的几何信息,并由此重建和识别物体。这两者之间的关系就是由摄像机的几何成像模型来决定,...这里提供了张正友和Tasi的两种标定方法的源程序
  • 陀螺仪标定matlab程序

    2018-05-29 10:36:57
    使用最小二乘拟合对陀螺仪的零偏、标度因数和三轴不重合误差进行标定,很基础的算法。使用最小二乘拟合对陀螺仪的零偏、标度因数和三轴不重合误差进行标定,很基础的算法。
  • MATLAB标定工具箱使用(转载自大神)

    千次阅读 2018-12-21 11:23:11
     matlab标定工具箱的使用说明的中文翻译 python双目拍照程序如下: # -*- coding: utf-8 -*- import cv2 import time AUTO = True # 自动拍照,或手动按s键拍照 INTERVAL = 2 # 自动拍照间隔 cv2....

    一、前言

    首先,需要声明的是,本文转载自大神dreamharding。链接见 https://blog.csdn.net/dreamharding/article/details/53700166

    也可参考https://blog.csdn.net/hyacinthkiss/article/details/41317087文章、https://blog.csdn.net/zhouqianq/article/details/78580173文章,可以互相结合印证

    自动标定:https://blog.csdn.net/yanli33/article/details/60478023

    https://wenku.baidu.com/view/89200f7ff90f76c660371a84.html是Matlab摄像机标定工具箱的使用说明

    之前看过这样一段话,大概是说尽量matlab用手动标定,自动标定的误差较大,但是自动标定十分步骤十分简单。

     

    二、单目标定

    1、配置标定工具箱

     标定工具箱的英文说明文档,里面可以下载标定的图片:http://www.vision.caltech.edu/bouguetj/calib_doc/htmls/own_calib.html

    我用的是中文版,所以点添加文件夹即可。

     原博主是然后打开MATLAB点击File->Set Path->Add Floder添加插件目录,在save一下,

    将当前文件夹设置成待标定图片的文件夹,我这里是在桌面新建一个文件夹放置图片,所以Current Folder设置如下

     

    2,开始进行单目标定

    1、MATLAB命令行窗口输入calib_gui,弹出工具框

    2、选择第一个Standard,弹出如下界面Camera Calibration Toolbox(以下简称标定界面)

    3、现在开始左摄像头标定,选择第一个Images names后,MATLAB命令行窗口会提示你输入图片的basename以及各格式,这里图片保存的文件名如第二张图左侧所示为left01,left02,所以提示的basename行写left,按Enter键提示输入图片格式,这里为jpg,在按回车键读入做摄像头的棋盘图

    这里读入的图片就不显示了。

    4、然后点击标定界面上的Extract grid corners,MATLAB命令界面显示然后一路回车键下去最后如下

    5、最后会跳出第一幅图棋盘图,然后按顺时针或逆时针旋转顺序进行点击棋盘格最外面的四个角点

     6、选好角点后命令界面会提示要你输入棋盘方格的实际边长,这里网上图片的是30X30,单位mm

    7、回车键后会显示角点检测结果图

    8、继续命令行窗口回车键下去,弹出第二张棋盘图(同时也会弹出Figure3图片有着蓝色边框包围的角点图,这里不作显示),选择四个外围角点,如此反复下去检测完13张棋盘图。

     

    三、下面一部分可以跳过

    PS:这里插一段,这一段只是为了演示步骤不是必须的

    在上述进行角点检测时有时会出现检测的角点与棋盘纸角点不是很接近,这里我选择了将其中一张图最大化窗口便于看到角点的偏差,事实上最小化窗口时这种偏差看不出来,而且偏差也是可以容忍的,以下是偏差图

    如上图所示(如最外围角点),其实个人觉得这样已经可以了毕竟我是放大看的,好了不废话继续。其实在之前检测完前一张图片,准备敲回车键进行下一张检测时,如果对上一张不满意正如上图所示,我们可以在命令行窗口看到这样一句话“Need of an initial guess for distortion? ([]=no, other=yes)”这里输入1,会提示你输入一个校正系数kc

    如上所示,这里填的是-0.3,注意,kc的范围是-1~1。,是畸变矫正因子,输入数值之后回车显示校正后的角点检测

    如果觉得行了,在命令行窗口语句“Satisfied with distortion? ([]=no, other=yes)”后面输入1再回车进行下一张图角点检测,如果觉得不行那么在语句后面直接回车重新输入一个kc值。

    检测完成后点击标定界面Calibration进行摄像头标定,命令行窗口结果如下

    标定结束后可以通过标定界面按钮进行可视化的观察,这里主要说下误差图的查看,点击Analyse error

    发现绿色的点误差不理想,此时可以鼠标点击其中绿色点,命令行窗口会显示如下信息

    由上可知是第三幅图,如果想看第三幅的整体误差,可以点击标定界面的Reproject on images,在命令行输入3即可。

    PS:这里也再插一段
    接着上面所述绿色点误差较大,X和Y方向的标注差为0.52529和0.22933,此时我们可以重新计算角点,方法是点击Recomp.corners,命令行窗口会提示你输入窗口的大小语句“wintx ([] = 5) = ”还记得之前角点检测一路回车下去的步骤吗?其实那么也有这个语句不过我们回车选了默认值5,这里我们可以输入一个更大或更小的值,比如我输入9

    输入两次数字9后,一直回车,然后在点击Calibration重新进行摄像头标定,结果如下

    与前面相比error小了,误差也小了结果图了如下所示

    PS:Recomp.corners重新计算这一步之前在一篇博文看说这一步骤并不推荐,具体原因忘了,所以在选择角点时尽量靠近,省的误差较大,这一步能不用就不用吧。

     

    四、单目标定数据的保存。

    左摄像头标定结果出来后,点击Save,这时结果文件默认保存在之前放置标定图片的新建文件夹下面,默认文件名为Calib_Results.m,将其改为Calib_Results_left.mat(双目标定用到)。至此左摄像头标定结束,右摄像头标定过程与左一样,只是将Basename改为right,格式仍为jpg,然后回车回车,最后保存为Calib_Results_right.mat。
     

    五、双目标定

    下面开始双目立体标定。

    1、命令行输入stereo_gui,弹出立体标定界面,选择第一个Load

    2、如果之前左右摄像头结果你是按照之前的文件名保存的,那么直接在命令行以下两行后面两次回车,否则就在后面输入你保存的文件名,注意下这里加载文件时如果出错了,那么直接重新点击Load就行了。

    3、此时已经出现一个双目标定结果,不管在点击立体标定界面的Run,最后标定结果如下,下图中?为正负号

    4、至此双目标定结束,下面就是讲结果写成xml文件供Opencv调用了。xml文件生成方法:先建一个txt文档,将下面语句复制进去

    Intrinsics_Camera_Left.xml:

    <?xml version="1.0"?>  
    <opencv_storage>  
    <Intrinsics_Camera_Left type_id="opencv-matrix">  
      <rows>3</rows>  
      <cols>3</cols>  
      <dt>d</dt>  
      <data>  
      534.02373   0.         341.01149   
      0.          533.86709   233.26555   
      0.          0.         1.  
    </data>  
    </Intrinsics_Camera_Left>  
    </opencv_storage>
    

    Distortion_Camera_Left.xml:

    <?xml version="1.0"?>  
    <opencv_storage>  
    <Distortion type_id="opencv-matrix">  
      <rows>5</rows>  
      <cols>1</cols>  
      <dt>d</dt>  
      <data>  
        -0.28668   0.10398   0.00171   -0.00063  0.00000  
    </data>  
    </Distortion>  
    </opencv_storage>   
    

    Intrinsics_Camera_Right.xml:

    <?xml version="1.0"?>  
    <opencv_storage>  
    <Intrinsics_Camera_Right type_id="opencv-matrix">  
      <rows>3</rows>  
      <cols>3</cols>  
      <dt>d</dt>  
      <data>  
      537.82796   0.          321.73805   
      0.          537.87268   249.47070   
      0.          0.          1.  
      </data>  
    </Intrinsics_Camera_Right>  
    </opencv_storage> 
    

     Distortion_Camera_Right.xml:

    <?xml version="1.0"?>  
    <opencv_storage>  
    <Distortion type_id="opencv-matrix">  
      <rows>5</rows>  
      <cols>1</cols>  
      <dt>d</dt>  
      <data>  
        -0.29416   0.13839   -0.00009   0.00061  0.00000  
    </data>  
    </Distortion>  
    </opencv_storage>   
    

    RotRodrigues.xml:

    <?xml version="1.0"?>  
    <opencv_storage>  
    <RotRodrigues type_id="opencv-matrix">  
      <rows>3</rows>  
      <cols>1</cols>  
      <dt>d</dt>  
      <data>  
       0.00918   0.01162  -0.00369  
    </data>  
    </RotRodrigues>  
    </opencv_storage> 
    

    Translation.xml:

    <?xml version="1.0"?>  
    <opencv_storage>  
    <Translation type_id="opencv-matrix">  
      <rows>3</rows>  
      <cols>1</cols>  
      <dt>d</dt>  
      <data>  
       -83.09797   0.95964  1.09394  
    </data>  
    </Translation>  
    </opencv_storage> 
    

    将上述语句复制到txt中,然后直接修改后缀为xml即可,以上数值都是MATLAB立体标定结果内容,自己复制后只需将数字对应改成自己的标定结果就行。 

     

    六、拍照程序如下:C++编程,

    也可以用python进行双目拍照。

    #include "stdafx.h"  
    #include <opencv2/opencv.hpp>    
    #include <iostream>    
    using namespace std;    
      
    char* name_l = (char*)malloc(sizeof(char)*200);  
    char* name_r = (char*)malloc(sizeof(char)*200);  
    int main()    
    {    
        int i=0;  
        IplImage *img0 , *img1;    
        cvNamedWindow("camera_left");    
        cvNamedWindow("camera_right");    
        CvCapture* cap_left= cvCreateCameraCapture(2);     //这里我的摄像头ID是2,1,也有可能是1,0
        CvCapture* cap_right= cvCreateCameraCapture(1);    
        while(1)    
        {    
            img0 = cvQueryFrame(cap_left);
            img1 = cvQueryFrame(cap_right);  
            if( !img0 || !img1)  
            {    
                cout << "camera0 error" << endl;    
                break;    
            }    
            cvShowImage("camera_left", img0);    
            cvShowImage("camera_right", img1);    
            char c = cvWaitKey(33);    
            if(c == 27)     
                break;    
            if(c == 32)  
            {  
                i++;  
                sprintf(name_l, "leftPic%d.jpg", i);  
                sprintf(name_r, "rightPic%d.jpg", i);  
                cvSaveImage(name_l, img0);  
                cvSaveImage(name_r, img1);  
            }  
        }   
        cvReleaseCapture(&cap_left);    
        cvReleaseCapture(&cap_right);    
        cvDestroyWindow("camera_left");    
        cvDestroyWindow("camera_right");    
        return 0;    
    } 
    

    最后,附加链接1、https://www.cnblogs.com/star91/p/6012425.html 里面很详细标定步骤与原理;

               链接2、https://blog.csdn.net/jkhere/article/details/8784865 matlab标定工具箱的使用说明的中文翻译

    python双目拍照程序如下:

    # -*- coding: utf-8 -*-
    import cv2
    import time
    
    AUTO = True  # 自动拍照,或手动按s键拍照
    INTERVAL = 2 # 自动拍照间隔
    
    cv2.namedWindow("left")
    cv2.namedWindow("right")
    cv2.moveWindow("left", 0, 0)
    cv2.moveWindow("right", 400, 0)
    left_camera = cv2.VideoCapture(0)
    right_camera = cv2.VideoCapture(1)
    
    counter = 0
    utc = time.time()
    pattern = (12, 8) # 棋盘格尺寸
    folder = "./snapshot/" # 拍照文件目录
    
    def shot(pos, frame):
        global counter
        path = folder + pos + "_" + str(counter) + ".jpg"
    
        cv2.imwrite(path, frame)
        print("snapshot saved into: " + path)
    
    while True:
        ret, left_frame = left_camera.read()
        ret, right_frame = right_camera.read()
    
        cv2.imshow("left", left_frame)
        cv2.imshow("right", right_frame)
    
        now = time.time()
        if AUTO and now - utc >= INTERVAL:
            shot("left", left_frame)
            shot("right", right_frame)
            counter += 1
            utc = now
    
        key = cv2.waitKey(1)
        if key == ord("q"):
            break
        elif key == ord("s"):
            shot("left", left_frame)
            shot("right", right_frame)
            counter += 1
    
    left_camera.release()
    right_camera.release()
    cv2.destroyWindow("left")
    cv2.destroyWindow("right")

     

    展开全文
  • 【实例简介】自编张正友标定程序,图像角点信息获取需自行解决(不包含角点检测程序)!【实例截图】【核心代码】46cf73e5-6f80-4b94-90db-5395c2b32b9a└── zhang's calibration├── cameraCali│ ├── CAMcal....

    【实例简介】

    自编张正友标定程序,图像角点信息获取需自行解决(不包含角点检测程序)!

    【实例截图】

    【核心代码】

    46cf73e5-6f80-4b94-90db-5395c2b32b9a

    └── zhang's calibration

    ├── cameraCali

    │   ├── CAMcal.exe

    │   ├── ipla6.dll

    │   ├── ipl.dll

    │   ├── pattern.pdf

    │   ├── pattern.ps

    │   ├── ReadMe.doc

    │   ├── ReadMe.txt

    │   └── test_images

    │   ├── 4x4.JPG

    │   ├── 4x4_rect.jpg

    │   ├── calib_data.mat

    │   ├── Calib_Results.m

    │   ├── Calib_Results.mat

    │   ├── caliresult.txt1

    │   ├── caliresult.txt2

    │   ├── caliresult.txt3

    │   ├── caliresult.txt4

    │   ├── caliresult.txt5

    │   ├── caliresult.txt6

    │   ├── caliresult.txt7

    │   ├── olym.cal

    │   ├── olym.points

    │   ├── olympus 003.jpg

    │   ├── olympus 004.jpg

    │   ├── olympus 005.jpg

    │   ├── olympus 006.jpg

    │   ├── olympus 007.jpg

    │   ├── olympus 008.jpg

    │   ├── olympus 009.jpg

    │   ├── olympus 00_rect3.bmp

    │   ├── olympus 00_rect4.bmp

    │   ├── olympus 00_rect5.bmp

    │   ├── olympus 00_rect6.bmp

    │   ├── olympus 00_rect7.bmp

    │   ├── olympus 00_rect8.bmp

    │   ├── olympus 00_rect9.bmp

    │   ├── olympus 010.jpg

    │   ├── olympus 011.jpg

    │   └── olympus 012.jpg

    ├── Flexible camera calibration by viewing a plane from unknownorientations.pdf

    └── zhang

    ├── a flexible new technique for camera calibration.pdf

    ├── A Flexible New Technique for Camera Calibration(Zhang).pdf

    └── zhang

    ├── data1.txt

    ├── data2.txt

    ├── data3.txt

    ├── data4.txt

    ├── data5.txt

    ├── homography2d1.m

    ├── Model.txt

    ├── normalise2dpts.m

    ├── read me.txt

    ├── simon_HHH.m

    ├── simon_H.m

    ├── test.m

    └── Zhang.m

    5 directories, 54 files

    展开全文
  • 最近做科研用到手眼系统标定,在网上搜索方法无果,于是自己亲自编写手眼标定程序,经验证,具有较高精度。 1.用Matlab进行相机标定; 2.将机器人末端位姿存储在res(res是存储与采集图像对应的机器人末端位姿旋转...
  • DLT和Tsai两步法标定相机的Matlab代码 里面附带验证程序,里面有两个Function,一个DLT,所谓的直接线性变换法。另一个是Tsai的RAC,即径向约束一致法。 My_Dlt是用于验证两个子程序
  • 张正友相机棋盘标定法的matlab的实现代码,不包括图像棋盘角点检测部分
  • 最近做科研用到手眼系统标定,在网上搜索方法无果,于是自己亲自编写手眼标定程序,经验证,具有较高精度。
  • 经典手眼标定算法matlab代码,程序作者为 Christian Wengert 。工具箱包含的主要算法有Tsai-Lenz算法、NAVY算法(Park)、INRIA算法(Horaud)以及对偶四元数手眼定标算法
  • /*获取kinect原始图片序列并依时间保存,以100张为单位,获取的图片可用于kinect标定*/#include "kinect.h"#include #include #include #include #include using namespace cv;using namespace std;// 安全释放指针...

    /*

    获取kinect原始图片序列并依时间保存,以100张为单位,获取的图片可用于kinect标定

    */

    #include "kinect.h"

    #include

    #include

    #include

    #include

    #include

    using namespace cv;

    using namespace std;

    // 安全释放指针

    template

    inline void SafeRelease(Interface *& pInterfaceToRelease)

    {

    if (pInterfaceToRelease != NULL)

    {

    pInterfaceToRelease->Release();

    pInterfaceToRelease = NULL;

    }

    }

    // 保存所需数据的结构体

    struct eachFrame

    {

    string depth_name;

    string rgb_name;

    cv::Mat tmp_itD1;

    cv::Mat tmp_itRGB1;

    };

    int main()

    {

    // 创建保存目录

    CreateDirectory(L".//images", NULL);

    // 获取Kinect设备

    IKinectSensor* m_pKinectSensor;

    ICoordinateMapper* m_pCoordinateMapper;

    CameraIntrinsics* m_pCameraIntrinsics = new CameraIntrinsics();

    HRESULT hr;

    hr = GetDefaultKinectSensor(&m_pKinectSensor);

    if (FAILED(hr))

    {

    return hr;

    }

    IMultiSourceFrameReader* m_pMultiFrameReader;

    IBodyFrameSource* m_pBodyFrameSource;

    IBodyFrameReader* m_pBodyFrameReader;

    if (m_pKinectSensor)

    {

    hr = m_pKinectSensor->Open();

    Sleep(1000);

    if (SUCCEEDED(hr))

    {

    m_pKinectSensor->get_BodyFrameSource(&m_pBodyFrameSource);

    // 获取多数据源到读取器

    hr = m_pKinectSensor->OpenMultiSourceFrameReader(

    FrameSourceTypes::FrameSourceTypes_Color |

    FrameSourceTypes::FrameSourceTypes_Infrared |

    FrameSourceTypes::FrameSourceTypes_Depth,

    &m_pMultiFrameReader);

    }

    }

    if (SUCCEEDED(hr))

    {

    hr = m_pKinectSensor->get_CoordinateMapper(&m_pCoordinateMapper);

    }

    if (!m_pKinectSensor || FAILED(hr))

    {

    return E_FAIL;

    }

    // 获取深度相机内参并打印

    if (SUCCEEDED(hr))

    {

    hr = m_pCoordinateMapper->GetDepthCameraIntrinsics(m_pCameraIntrinsics);

    }

    if (SUCCEEDED(hr))

    {

    cout << "FocalLengthX : " << m_pCameraIntrinsics->FocalLengthX << endl;

    cout << "FocalLengthY : " << m_pCameraIntrinsics->FocalLengthY << endl;

    cout << "PrincipalPointX : " << m_pCameraIntrinsics->PrincipalPointX << endl;

    cout << "PrincipalPointY : " << m_pCameraIntrinsics->PrincipalPointY << endl;

    cout << "RadialDistortionFourthOrder : " << m_pCameraIntrinsics->RadialDistortionFourthOrder << endl;

    cout << "RadialDistortionSecondOrder : " << m_pCameraIntrinsics->RadialDistortionSecondOrder << endl;

    cout << "RadialDistortionSixthOrder : " << m_pCameraIntrinsics->RadialDistortionSixthOrder << endl;

    }

    // 三个数据帧及引用

    IDepthFrameReference* m_pDepthFrameReference;

    IColorFrameReference* m_pColorFrameReference;

    IInfraredFrameReference* m_pInfraredFrameReference;

    IInfraredFrame* m_pInfraredFrame;

    IDepthFrame* m_pDepthFrame;

    IColorFrame* m_pColorFrame;

    // 四个个图片格式

    Mat i_rgb(1080, 1920, CV_8UC4); //注意:这里必须为4通道的图,Kinect的数据只能以Bgra格式传出

    Mat i_depth(424, 512, CV_8UC1);

    Mat i_depth_raw(424, 512, CV_16UC1);

    Mat i_ir(424, 512, CV_16UC1);

    UINT16 *depthData = new UINT16[424 * 512];

    UINT16 *irData = new UINT16[424 * 512];

    IMultiSourceFrame* m_pMultiFrame = nullptr;

    DepthSpacePoint* m_pDepthCoordinates;

    ColorSpacePoint* m_pColorCoordinates;

    CameraSpacePoint* m_pCameraCoordinates;

    m_pDepthCoordinates = new DepthSpacePoint[1920 * 1080];

    m_pColorCoordinates = new ColorSpacePoint[512 * 424];

    m_pCameraCoordinates = new CameraSpacePoint[512 * 424];

    clock_t start_time;

    vector framvec;

    SYSTEMTIME sys;

    size_t framecount = 0;

    while (true)

    {

    if (framecount == 0)

    {

    start_time = clock();

    }

    eachFrame thisframe;

    char depth_name[200] = { '\0' };

    char rgb_name[200] = { '\0' };

    // 获取新的一个多源数据帧

    hr = m_pMultiFrameReader->AcquireLatestFrame(&m_pMultiFrame);

    按照时间来保存

    //GetLocalTime(&sys);

    //sprintf(depth_name, "%s%4d%02d%02d%02d_%02d_%02d_%03d%s", "images//depth_", sys.wYear, sys.wMonth, sys.wDay, sys.wHour, sys.wMinute, sys.wSecond, sys.wMilliseconds, ".png");//保存图片名

    //sprintf(rgb_name, "%s%4d%02d%02d%02d_%02d_%02d_%03d%s", "images//rgb_", sys.wYear, sys.wMonth, sys.wDay, sys.wHour, sys.wMinute, sys.wSecond, sys.wMilliseconds, ".png");//保存图片名

    // 按照序号来保存

    GetLocalTime(&sys);

    sprintf(depth_name, "%s%d%s", "images//depth_", framecount, ".tif");//保存图片名

    sprintf(rgb_name, "%s%d%s", "images//rgb_", framecount, ".jpg");//保存图片名

    if (FAILED(hr) || !m_pMultiFrame)

    {

    //cout << "!!!" << endl;

    continue;

    }

    // 从多源数据帧中分离出彩色数据,深度数据和红外数据

    if (SUCCEEDED(hr))

    hr = m_pMultiFrame->get_ColorFrameReference(&m_pColorFrameReference);

    if (SUCCEEDED(hr))

    hr = m_pColorFrameReference->AcquireFrame(&m_pColorFrame);

    if (SUCCEEDED(hr))

    hr = m_pMultiFrame->get_DepthFrameReference(&m_pDepthFrameReference);

    if (SUCCEEDED(hr))

    hr = m_pDepthFrameReference->AcquireFrame(&m_pDepthFrame);

    if (SUCCEEDED(hr))

    hr = m_pMultiFrame->get_InfraredFrameReference(&m_pInfraredFrameReference);

    if (SUCCEEDED(hr))

    hr = m_pInfraredFrameReference->AcquireFrame(&m_pInfraredFrame);

    // color拷贝到图片中

    UINT nColorBufferSize = 1920 * 1080 * 4;

    if (SUCCEEDED(hr))

    hr = m_pColorFrame->CopyConvertedFrameDataToArray(nColorBufferSize, i_rgb.data, ColorImageFormat::ColorImageFormat_Bgra);

    // depth拷贝到图片中

    if (SUCCEEDED(hr))

    {

    hr = m_pDepthFrame->CopyFrameDataToArray(424 * 512, depthData);

    hr = m_pDepthFrame->CopyFrameDataToArray(424 * 512, reinterpret_cast(i_depth_raw.data));

    for (int i = 0; i < 512 * 424; i++)

    {

    // 0-255深度图,为了显示明显,只取深度数据的低8位

    BYTE intensity = static_cast(depthData[i] % 256);

    reinterpret_cast(i_depth.data)[i] = intensity;

    }

    // 实际是16位unsigned int数据

    //hr = m_pDepthFrame->CopyFrameDataToArray(424 * 512, reinterpret_cast(i_depth.data));

    }

    // ir拷贝到图片中

    if (SUCCEEDED(hr))

    {

    hr = m_pInfraredFrame->CopyFrameDataToArray(424 * 512, irData);

    hr = m_pInfraredFrame->CopyFrameDataToArray(424 * 512, reinterpret_cast(i_ir.data));

    }

    // 深度图映射到彩色图上

    if (SUCCEEDED(hr))

    {

    HRESULT hr = m_pCoordinateMapper->MapDepthFrameToColorSpace(512 * 424, depthData, 512 * 424, m_pColorCoordinates); // 注意这里的彩色点数要写成424*512,至于为什么。。。可能是为了代表下一个参数colorSpacePoints的大小

    }

    Mat i_depthToRgb(424, 512, CV_8UC4);

    if (SUCCEEDED(hr))

    {

    for (int i = 0; i < 424 * 512; i++)

    {

    ColorSpacePoint p = m_pColorCoordinates[i];

    if (p.X != -std::numeric_limits::infinity() && p.Y != -std::numeric_limits::infinity())

    {

    int colorX = static_cast(p.X + 0.5f);

    int colorY = static_cast(p.Y + 0.5f);

    if ((colorX >= 0 && colorX < 1920) && (colorY >= 0 && colorY < 1080))

    {

    i_depthToRgb.data[i * 4] = i_rgb.data[(colorY * 1920 + colorX) * 4];

    i_depthToRgb.data[i * 4 + 1] = i_rgb.data[(colorY * 1920 + colorX) * 4 + 1];

    i_depthToRgb.data[i * 4 + 2] = i_rgb.data[(colorY * 1920 + colorX) * 4 + 2];

    i_depthToRgb.data[i * 4 + 3] = i_rgb.data[(colorY * 1920 + colorX) * 4 + 3];

    }

    }

    }

    }

    thisframe.depth_name = depth_name;

    thisframe.rgb_name = rgb_name;

    //thisframe.tmp_itD1 = i_depth_raw.clone();

    thisframe.tmp_itD1 = i_ir.clone();

    //thisframe.tmp_itRGB1 = i_depthToRgb.clone();

    thisframe.tmp_itRGB1 = i_rgb.clone();

    framvec.push_back(thisframe);

    // 释放资源

    SafeRelease(m_pColorFrame);

    SafeRelease(m_pDepthFrame);

    SafeRelease(m_pInfraredFrame);

    SafeRelease(m_pColorFrameReference);

    SafeRelease(m_pDepthFrameReference);

    SafeRelease(m_pInfraredFrameReference);

    SafeRelease(m_pMultiFrame);

    framecount++;

    if (100 == framecount)

    {

    clock_t end_time = clock();

    float time = (end_time - start_time) / CLOCKS_PER_SEC;

    //save

    for (int i = 0; i < framvec.size(); i++)

    {

    imwrite(framvec[i].depth_name, framvec[i].tmp_itD1);

    imwrite(framvec[i].rgb_name, framvec[i].tmp_itRGB1);

    }

    framvec.clear();

    std::cout << "fps: " << framecount / time << std::endl;

    framecount = 0;

    }

    }

    // 关闭窗口,设备

    cv::destroyAllWindows();

    SafeRelease(m_pCoordinateMapper);

    m_pKinectSensor->Close();

    std::system("pause");

    return 0;

    }

    展开全文
  • 本人自己编的 模版也在里面 但是其中主点坐标的y坐标有点不稳定 希望大家帮我看一下 完全能运行
  • 陀螺比例因子的matlab标定程序与说明书。
  • 一款摄像头的双目测距程序,包含了标定用图以及标定数据,使用Matlab标定工具箱标定 包含两种像素的不同代码及标定图片与结果 运行 当想使用摄像头拍照时,请使用 python cap.py 当拍照完成后,使用MATLAB工具箱标定...
  • matlab相机标定程序

    2021-04-18 04:57:20
    压缩包 : TOOLBOX_calib.rar 列表TOOLBOX_calib/add_suppress.mTOOLBOX_calib/affine.mTOOLBOX_calib/align_structures.mTOOLBOX_calib/analyse_error.mTOOLBOX_calib/anisdiff.mTOOLBOX_calib/apply_distortion....

    压缩包 : TOOLBOX_calib.rar 列表

    TOOLBOX_calib/add_suppress.m

    TOOLBOX_calib/affine.m

    TOOLBOX_calib/align_structures.m

    TOOLBOX_calib/analyse_error.m

    TOOLBOX_calib/anisdiff.m

    TOOLBOX_calib/apply_distortion.m

    TOOLBOX_calib/apply_distortion2.m

    TOOLBOX_calib/apply_fisheye_distortion.m

    TOOLBOX_calib/calib.m

    TOOLBOX_calib/calibration_pattern/pattern.eps

    TOOLBOX_calib/calibration_pattern/pattern.pdf

    TOOLBOX_calib/calib_gui.m

    TOOLBOX_calib/calib_gui_fisheye.m

    TOOLBOX_calib/calib_gui_normal.m

    TOOLBOX_calib/calib_gui_no_read.m

    TOOLBOX_calib/calib_stereo.m

    TOOLBOX_calib/cam_proj_calib.m

    TOOLBOX_calib/cam_proj_calib_optim.m

    TOOLBOX_calib/cam_proj_extract_param.m

    TOOLBOX_calib/centercirclefinder.m

    TOOLBOX_calib/check_active_images.m

    TOOLBOX_calib/check_convergence.m

    TOOLBOX_calib/check_directory.m

    TOOLBOX_calib/check_extracted_images.m

    TOOLBOX_calib/clearwin.m

    TOOLBOX_calib/clear_windows.m

    TOOLBOX_calib/click_calib.m

    TOOLBOX_calib/click_calib_fisheye_no_read.m

    TOOLBOX_calib/click_calib_no_read.m

    TOOLBOX_calib/click_ima_calib.m

    TOOLBOX_calib/click_ima_calib3D.m

    TOOLBOX_calib/click_ima_calib_fisheye_no_read.m

    TOOLBOX_calib/click_ima_calib_no_read.m

    TOOLBOX_calib/click_stereo.m

    TOOLBOX_calib/combine_calib.m

    TOOLBOX_calib/compose_motion.m

    TOOLBOX_calib/Compute3D.m

    TOOLBOX_calib/ComputeStripes.m

    TOOLBOX_calib/compute_collineation.m

    TOOLBOX_calib/compute_epipole.m

    TOOLBOX_calib/compute_extrinsic.m

    TOOLBOX_calib/compute_extrinsic_init.m

    TOOLBOX_calib/compute_extrinsic_init_fisheye.m

    TOOLBOX_calib/compute_extrinsic_refine.m

    TOOLBOX_calib/compute_extrinsic_refine2.m

    TOOLBOX_calib/compute_extrinsic_refine_fisheye.m

    TOOLBOX_calib/compute_homography.m

    TOOLBOX_calib/comp_distortion.m

    TOOLBOX_calib/comp_distortion2.m

    TOOLBOX_calib/comp_distortion_oulu.m

    TOOLBOX_calib/comp_error_calib.m

    TOOLBOX_calib/comp_error_calib_fisheye.m

    TOOLBOX_calib/comp_ext_calib.m

    TOOLBOX_calib/comp_ext_calib_fisheye.m

    TOOLBOX_calib/comp_fisheye_distortion.m

    TOOLBOX_calib/cornerfinder.m

    TOOLBOX_calib/cornerfinder2.m

    TOOLBOX_calib/cornerfinder_saddle_point.m

    TOOLBOX_calib/count_squares.m

    TOOLBOX_calib/count_squares_distorted.m

    TOOLBOX_calib/count_squares_fisheye_distorted.m

    TOOLBOX_calib/dAB.m

    TOOLBOX_calib/data_calib.m

    TOOLBOX_calib/data_calib_no_read.m

    TOOLBOX_calib/Distor2Calib.m

    TOOLBOX_calib/downsample.m

    TOOLBOX_calib/edgefinder.m

    TOOLBOX_calib/eliminate_boundary.m

    TOOLBOX_calib/error_analysis.m

    TOOLBOX_calib/error_cam_proj.m

    TOOLBOX_calib/error_cam_proj2.m

    TOOLBOX_calib/error_cam_proj3.m

    TOOLBOX_calib/error_depth.m

    TOOLBOX_calib/error_depth_list.m

    TOOLBOX_calib/export_calib_data.m

    TOOLBOX_calib/extract_distortion_data.m

    TOOLBOX_calib/extract_grid.m

    TOOLBOX_calib/extract_grid_manual.m

    TOOLBOX_calib/extract_parameters.m

    TOOLBOX_calib/extract_parameters3D.m

    TOOLBOX_calib/extract_parameters_fisheye.m

    TOOLBOX_calib/extrinsic_computation.m

    TOOLBOX_calib/ext_calib.m

    TOOLBOX_calib/ext_calib2.m

    TOOLBOX_calib/ext_calib_stereo.m

    TOOLBOX_calib/fixallvariables.m

    TOOLBOX_calib/fixvariable.m

    TOOLBOX_calib/fov.m

    TOOLBOX_calib/ginput2.m

    TOOLBOX_calib/ginput3.m

    TOOLBOX_calib/ginput4.m

    TOOLBOX_calib/go_calib_optim.m

    TOOLBOX_calib/go_calib_optim_fisheye_no_read.m

    TOOLBOX_calib/go_calib_optim_iter.m

    TOOLBOX_calib/go_calib_optim_iter_fisheye.m

    TOOLBOX_calib/go_calib_optim_iter_weak.m

    TOOLBOX_calib/go_calib_optim_no_read.m

    TOOLBOX_calib/go_calib_stereo.m

    TOOLBOX_calib/ima_read_calib.m

    TOOLBOX_calib/ima_read_calib_no_read.m

    TOOLBOX_calib/init_intrinsic_param.m

    TOOLBOX_calib/init_intrinsic_param_fisheye.m

    TOOLBOX_calib/inverse_motion.m

    TOOLBOX_calib/is3D.m

    TOOLBOX_calib/loading_calib.m

    TOOLBOX_calib/loading_stereo_calib.m

    TOOLBOX_calib/loadinr.m

    TOOLBOX_calib/loadpgm.m

    TOOLBOX_calib/loadppm.m

    TOOLBOX_calib/load_image.m

    TOOLBOX_calib/load_stereo_calib_files.m

    TOOLBOX_calib/manual_corner_extraction.m

    TOOLBOX_calib/manual_corner_extraction_no_read.m

    TOOLBOX_calib/mean_std_robust.m

    TOOLBOX_calib/merge_calibration_sets.m

    TOOLBOX_calib/merge_two_datasets.m

    TOOLBOX_calib/Meshing.m

    TOOLBOX_calib/mosaic.m

    TOOLBOX_calib/mosaic_no_read.m

    TOOLBOX_calib/normalize.m

    TOOLBOX_calib/normalize2.m

    TOOLBOX_calib/normalize_pixel.m

    TOOLBOX_calib/normalize_pixel_fisheye.m

    TOOLBOX_calib/pattern.eps

    TOOLBOX_calib/pgmread.m

    TOOLBOX_calib/point_distribution.m

    TOOLBOX_calib/project2_oulu.m

    TOOLBOX_calib/projectedGrid.m

    TOOLBOX_calib/projector_calib.m

    TOOLBOX_calib/projector_ima_corners.m

    TOOLBOX_calib/projector_marker.m

    TOOLBOX_calib/project_points.m

    TOOLBOX_calib/project_points2.m

    TOOLBOX_calib/project_points3.m

    TOOLBOX_calib/project_points_fisheye.m

    TOOLBOX_calib/project_points_weak.m

    TOOLBOX_calib/README.txt

    TOOLBOX_calib/readras.m

    TOOLBOX_calib/recomp_corner_calib.m

    TOOLBOX_calib/recomp_corner_calib_fisheye_no_read.m

    TOOLBOX_calib/recomp_corner_calib_no_read.m

    TOOLBOX_calib/recomp_corner_calib_saddle_points.m

    TOOLBOX_calib/rect.m

    TOOLBOX_calib/Rectangle2Square.m

    TOOLBOX_calib/rectify_stereo_pair.m

    TOOLBOX_calib/rect_index.m

    TOOLBOX_calib/reproject_calib.m

    TOOLBOX_calib/reproject_calib_no_read.m

    TOOLBOX_calib/rigid_motion.m

    TOOLBOX_calib/rodrigues.m

    TOOLBOX_calib/rotation.m

    TOOLBOX_calib/run_error_analysis.m

    TOOLBOX_calib/saveinr.m

    TOOLBOX_calib/savepgm

    展开全文
  • 机器人手眼标定Matlab程序。做科研用到手眼系统标定,经验证,具有较高精度。
  • matlab相机标定源码

    2012-12-05 10:04:31
    matlab标定工具箱源代码和使用实例 计算相机参数矩阵、径向畸变参数和切向畸变参数
  • 修改:标定不用修改……matlab内置的已经很强大了,而且没有必要用python和c++再做一遍,因此考虑的方法为——matlab标定后,参数导入到opencv中使用,这也是应用到python的一个原因。 一、matlab标定工具箱 matlab...
  • 应用matlab程序做标定和三维...问题2:在matlab标定程序里面指定了方格的大小:squareSize = 108; % millimeters(我猜应该是每个方格的长度,好像不是面积)解决:修改为我打印的标定板的方格大小:squareSize =...
  • 关于IMU惯导标定matlab实现,为学习大作业。程序中使用了六位置法进行标定,数据格式为加速度计和陀螺仪输出数据,经过数据筛选进行标定
  • 新版的matlab自带标定工具包,为做标定的同学提供了很大方便。对于通常的图像,我们调用matlab工具包中的camera calibrator和 stereo camera calibrator可以从棋盘格图像中提取到正确的角点,如下所示: 在实际标定...
  • 征文 | 从高考,到程序员 深度学习与TensorFlow入门一课搞定!...matlab calibration toolbox -- matlab标定工具的使用方法--去畸变和双目校正 转自:http://blog.csdn.net/wangxiaokun671903/article/de
  • 自编matlab程序+matlab标定助手程序+标定板图像 两种方法进行结果对比 自编程序可以直接运行

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,505
精华内容 1,002
关键字:

matlab标定程序

matlab 订阅