青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

魚眼相機(jī)標(biāo)定以及OpenCV實(shí)現(xiàn)


在另一篇文章中我已經(jīng)寫過有關(guān)普通相機(jī)模型及其OpenCV標(biāo)定實(shí)現(xiàn),這篇文章將主要關(guān)注魚眼相機(jī)模型及其OpenCV標(biāo)定實(shí)現(xiàn)。 
先看一張魚眼相機(jī)拍攝出來的結(jié)果:

這里寫圖片描述

從圖中可以看出很明顯的畸變。對魚眼相機(jī)標(biāo)定,有時(shí)候也可以用普通相機(jī)的標(biāo)定方法對其進(jìn)行標(biāo)定,但是卻不能保證去畸變后的效果是最好的。因此對于Gopro等魚眼鏡頭拍攝出來的圖像去畸變,最好的方法就是采用魚眼相機(jī)標(biāo)定方法進(jìn)行標(biāo)定。

魚眼相機(jī)模型

魚眼相機(jī)的內(nèi)參模型依然可以表示為: 

fx000fy0cxcy1

這與普通鏡頭的成像模型沒有區(qū)別。兩者之間的區(qū)別主要體現(xiàn)在畸變系數(shù),魚眼相機(jī)的畸變系數(shù)為{k1,k2,k3,k4},畸變系數(shù)不同,就導(dǎo)致魚眼相機(jī)的投影關(guān)系也發(fā)生了變化,主要變化發(fā)生在考慮畸變情況下的投影關(guān)系轉(zhuǎn)化: 
設(shè)(X,Y,Z)為空間中一個(gè)三維點(diǎn),它在成像平面內(nèi)的成像坐標(biāo)為(u,v),在考慮畸變的情況下, 
xcyczc=RXYZ+T

a=xc/zc,b=yc/zc 
r2=a2+b2 
θ=atan(r) 
θ=θ(1+k1θ2+k2θ4+k3θ6+k4θ8) 
x=(θ/r)xc 
y=(θ/r)yc 
u=fxx+cx 
v=fyy+cy

OpenCV實(shí)現(xiàn)魚眼相機(jī)標(biāo)定

利用opencv實(shí)現(xiàn)魚眼相機(jī)的標(biāo)定和普通相機(jī)標(biāo)定的標(biāo)定流程基本一致,具體流程如下:

  1. 檢測角點(diǎn) 
    cv::findChessboardCorners(InputArray image, Size patternSize, OutputArray corners, int 
    flags=CALIB_CB_ADAPTIVE_THRESH+CALIB_CB_NORMALIZE_IMAGE}
     
    獲得棋盤標(biāo)定板的角點(diǎn)位置,使用 
    cornerSubPix(InputArray image, InputOutputArray corners, Size winSize, Size zeroZone, 
    TermCriteria criteria)
    獲取角點(diǎn)更精細(xì)的檢測結(jié)果
  2. 初始化標(biāo)定板上角點(diǎn)的三維坐標(biāo)
  3. 開始標(biāo)定 
    double fisheye::calibrate(InputArrayOfArrays objectPoints, InputArrayOfArrays imagePoints, 
    const Size& image_size, InputOutputArray K, InputOutputArray D, 
    OutputArrayOfArrays rvecs, OutputArrayOfArrays tvecs, int flags=0, 
    TermCriteria criteria=TermCriteria(TermCriteria::COUNT + TermCriteria:: 
    EPS, 100, DBL_EPSILON))
     
    注意:K,D 分別表示內(nèi)參矩陣和畸變系數(shù)向量,在定義時(shí)要定義為double型,這里推薦使用Matx33d和Vec4d數(shù)據(jù)類型,更為方便簡單。objectPoints,imagePoints可以是float型,也可以是double型,但是再stereorectify中需要時(shí)double型。flags的可選項(xiàng)有很多,其中需要注意的是必須要指定CALIB_FIX_SKEW,代表求解時(shí)假設(shè)內(nèi)參中fx=fy
    4.評定誤差(可選項(xiàng))

        for (int i = 0; i != image_count; i++)
        {
            cout << "Frame #" << i + 1 << "..." << endl;
            string image_Name;
            stringstream stream;
            stream << (i + startNum);
            stream >> image_Name;
            image_Name = path_ChessboardImage + image_Name + ".jpg";
            cv::Mat image = imread(image_Name);
            Mat image_gray;
            cvtColor(image, image_gray, CV_RGB2GRAY);
            vector<Point2f> corners;                   
            bool patternFound = findChessboardCorners(image_gray, board_size, corners,
                CALIB_CB_ADAPTIVE_THRESH + CALIB_CB_NORMALIZE_IMAGE + CALIB_CB_FAST_CHECK);
            if (!patternFound || fullcornersNum != corners.size())
            {
                cout << "can not find chessboard corners!\n";
                continue;
            }
            else
            {
                cornerSubPix(image_gray, corners, Size(11, 11), Size(-1, -1), TermCriteria(CV_TERMCRIT_EPS + CV_TERMCRIT_ITER, 30, 0.1));
                count = count + corners.size();
                corners_Seq.push_back(corners);
                successImageNum = successImageNum + 1;
                image_Seq.push_back(image);
            }
        }
        /************************************************************************
        攝像機(jī)定標(biāo)
        *************************************************************************/
        vector<vector<Point3f>>  object_Points;        /****  保存定標(biāo)板上角點(diǎn)的三維坐標(biāo)   ****/

        Mat image_points = Mat(1, count, CV_32FC2, Scalar::all(0));  /*****   保存提取的所有角點(diǎn)   *****/
        vector<int>  point_counts;                                                         
        /* 初始化定標(biāo)板上角點(diǎn)的三維坐標(biāo) */
        for (int t = 0; t<successImageNum; t++)
        {
            vector<Point3f> tempPointSet;
            for (int i = 0; i<board_size.height; i++)
            {
                for (int j = 0; j<board_size.width; j++)
                {
                    /* 假設(shè)定標(biāo)板放在世界坐標(biāo)系中z=0的平面上 */
                    Point3f tempPoint;
                    tempPoint.x = i*square_size.width;
                    tempPoint.y = j*square_size.height;
                    tempPoint.z = 0;
                    tempPointSet.push_back(tempPoint);
                }
            }
            object_Points.push_back(tempPointSet);
        }
        for (int i = 0; i< successImageNum; i++)
        {
            point_counts.push_back(board_size.width*board_size.height);
        }
        /* 開始定標(biāo) */
        Size image_size = image_Seq[0].size();
        cv::Matx33d intrinsic_matrix;    /*****    攝像機(jī)內(nèi)參數(shù)矩陣    ****/
        cv::Vec4d distortion_coeffs;     /* 攝像機(jī)的4個(gè)畸變系數(shù):k1,k2,k3,k4*/
        std::vector<cv::Vec3d> rotation_vectors;                           /* 每幅圖像的旋轉(zhuǎn)向量 */
        std::vector<cv::Vec3d> translation_vectors;                        /* 每幅圖像的平移向量 */
        int flags = 0;
        flags |= cv::fisheye::CALIB_RECOMPUTE_EXTRINSIC;
        flags |= cv::fisheye::CALIB_CHECK_COND;
        flags |= cv::fisheye::CALIB_FIX_SKEW;
        fisheye::calibrate(object_Points, corners_Seq, image_size, intrinsic_matrix, distortion_coeffs, rotation_vectors, translation_vectors, flags, cv::TermCriteria(3, 20, 1e-6));

    標(biāo)定結(jié)果: 
    這里寫圖片描述


posted on 2017-11-16 09:55 zmj 閱讀(3173) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲资源在线观看| 欧美一二三区在线观看| 欧美日本高清| 久久久久高清| 久久综合狠狠综合久久综青草| 一区二区三区 在线观看视频| 亚洲第一主播视频| 亚洲福利电影| 欧美黄免费看| 欧美色另类天堂2015| 欧美日韩精品高清| 欧美日韩在线电影| 国产精品一区二区在线观看不卡| 欧美色视频在线| 欧美视频在线一区| 国产亚洲激情在线| 一区二区三区在线看| 亚洲国语精品自产拍在线观看| 在线播放日韩专区| 亚洲国产中文字幕在线观看| 亚洲私人影院在线观看| 亚洲性线免费观看视频成熟| 亚洲国产精品成人va在线观看| 最新日韩av| 亚洲深夜影院| 欧美成人蜜桃| 亚洲男人影院| 午夜精品久久久99热福利| 亚洲精品视频免费| 午夜精品一区二区三区在线 | 国内精品久久久久久久影视蜜臀 | 久久精品日产第一区二区| 久久综合999| 亚洲女人av| 蜜桃av噜噜一区二区三区| 欧美日韩一区二区欧美激情 | 久久亚裔精品欧美| 亚洲美女中出| 欧美亚洲一区| 欧美经典一区二区三区| 国产精品综合色区在线观看| 91久久精品www人人做人人爽| 欧美一区二区三区的| 欧美高清免费| 久久精品一本| 国产精品美女www爽爽爽视频| 在线观看国产精品网站| 亚欧成人在线| 亚洲人成在线播放| 免费成人毛片| 国产综合av| 午夜一区二区三区不卡视频| 日韩视频一区二区在线观看| 久久精品视频免费播放| 国产欧美日韩亚州综合| 9i看片成人免费高清| 久久日韩粉嫩一区二区三区| 亚洲欧美日韩国产一区二区三区| 欧美成人免费在线| 亚洲精品久久久久久下一站| 久久精品一本| 亚洲一区自拍| 国产欧美日韩激情| 亚洲一区免费网站| 亚洲一区自拍| 国产精品久久久久久超碰| 最新成人av网站| 欧美成人免费全部观看天天性色| 午夜精品久久久久久久久久久久| 国产欧美日韩在线视频| 在线亚洲免费视频| 亚洲肉体裸体xxxx137| 欧美精品一区二区三区在线播放| 亚洲高清影视| 亚洲精品国产欧美| 欧美xart系列在线观看| …久久精品99久久香蕉国产| 亚洲高清不卡av| 国产乱肥老妇国产一区二| 一区二区三区色| 亚洲视频综合| 国产精品乱子乱xxxx| 性欧美1819sex性高清| 国产日韩av在线播放| 先锋影音网一区二区| 性欧美办公室18xxxxhd| 国产视频观看一区| 一本色道久久99精品综合| 亚洲一区二区三区在线视频| 国产麻豆一精品一av一免费| 久久综合中文字幕| 模特精品裸拍一区| 一区在线观看| 欧美jizz19hd性欧美| 欧美11—12娇小xxxx| 一区二区视频欧美| 亚洲美女中文字幕| 国产欧美91| 亚洲国产美女精品久久久久∴| 免费在线观看成人av| 欧美亚洲免费在线| 久久网站免费| 国模私拍视频一区| 亚洲精品日本| 国产一区久久久| 亚洲视频免费| 在线免费观看日韩欧美| 午夜日韩在线观看| 亚洲国产精品美女| 新狼窝色av性久久久久久| 欧美在线视频一区| 亚洲毛片在线看| 久久aⅴ国产紧身牛仔裤| 亚洲高清激情| 久久成人羞羞网站| 亚洲图片欧洲图片av| 日韩视频一区二区| 亚洲欧洲精品一区二区精品久久久| av成人免费在线观看| 日韩视频免费看| 香蕉久久a毛片| 亚洲欧美在线免费| 欧美激情一区| 久久综合久久综合这里只有精品| 欧美日韩xxxxx| 久色婷婷小香蕉久久| 国产日韩精品在线观看| 亚洲精品视频二区| 在线午夜精品自拍| 欧美成在线观看| 西西人体一区二区| 国产农村妇女精品一二区| 亚洲三级电影全部在线观看高清| 亚洲日本免费电影| 久久久精品一区二区三区| 久久久国产精品一区| 欧美视频在线观看| 亚洲精品久久嫩草网站秘色| 亚洲免费一在线| 一区二区三区.www| 乱中年女人伦av一区二区| 国产精品第一区| 黄色成人精品网站| 亚洲欧美视频一区二区三区| 亚洲区国产区| 免费不卡在线视频| 美女露胸一区二区三区| 欧美日韩在线一二三| 91久久精品一区| 亚洲黄色尤物视频| 久久综合一区二区| 久久综合九色综合欧美狠狠| 在线观看日韩精品| 午夜国产精品视频| 新67194成人永久网站| 在线观看成人av电影| 久久全国免费视频| 欧美福利影院| 亚洲精品国产精品乱码不99| 欧美精品自拍| 一本到12不卡视频在线dvd| 国产精品成人一区二区网站软件| 亚洲国产乱码最新视频| 亚洲另类自拍| 国产精品美女久久久| 99re视频这里只有精品| 一区二区三区**美女毛片| 欧美性猛交视频| 久久精品国产一区二区电影 | 欧美人与性动交cc0o| 亚洲欧洲综合另类| 亚洲成人在线观看视频| 欧美成人亚洲成人| 日韩亚洲视频在线| 玖玖在线精品| 亚洲精品美女在线观看| 国产精品久久久久毛片软件| 亚洲欧美在线磁力| 在线观看国产欧美| 欧美精品久久久久久久免费观看 | 亚洲欧美伊人| 免费亚洲网站| 国产午夜精品久久久久久久| 欧美日本韩国一区二区三区| 夜夜嗨av一区二区三区| 久久影视精品| 91久久久一线二线三线品牌| 国产精品青草久久久久福利99| 欧美淫片网站| 欧美亚洲在线| 亚洲免费视频成人| 精品二区视频| 国产亚洲视频在线观看| 久久久精品2019中文字幕神马| 亚洲图片欧美日产| 鲁大师成人一区二区三区| 午夜欧美不卡精品aaaaa| 影音先锋久久久| 欧美肥婆在线| 久久久午夜电影|