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

魚眼相機標定以及OpenCV實現


在另一篇文章中我已經寫過有關普通相機模型及其OpenCV標定實現,這篇文章將主要關注魚眼相機模型及其OpenCV標定實現。 
先看一張魚眼相機拍攝出來的結果:

這里寫圖片描述

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

魚眼相機模型

魚眼相機的內參模型依然可以表示為: 

fx000fy0cxcy1

這與普通鏡頭的成像模型沒有區別。兩者之間的區別主要體現在畸變系數,魚眼相機的畸變系數為{k1,k2,k3,k4},畸變系數不同,就導致魚眼相機的投影關系也發生了變化,主要變化發生在考慮畸變情況下的投影關系轉化: 
設(X,Y,Z)為空間中一個三維點,它在成像平面內的成像坐標為(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實現魚眼相機標定

利用opencv實現魚眼相機的標定和普通相機標定的標定流程基本一致,具體流程如下:

  1. 檢測角點 
    cv::findChessboardCorners(InputArray image, Size patternSize, OutputArray corners, int 
    flags=CALIB_CB_ADAPTIVE_THRESH+CALIB_CB_NORMALIZE_IMAGE}
     
    獲得棋盤標定板的角點位置,使用 
    cornerSubPix(InputArray image, InputOutputArray corners, Size winSize, Size zeroZone, 
    TermCriteria criteria)
    獲取角點更精細的檢測結果
  2. 初始化標定板上角點的三維坐標
  3. 開始標定 
    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 分別表示內參矩陣和畸變系數向量,在定義時要定義為double型,這里推薦使用Matx33d和Vec4d數據類型,更為方便簡單。objectPoints,imagePoints可以是float型,也可以是double型,但是再stereorectify中需要時double型。flags的可選項有很多,其中需要注意的是必須要指定CALIB_FIX_SKEW,代表求解時假設內參中fx=fy
    4.評定誤差(可選項)

        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);
            }
        }
        /************************************************************************
        攝像機定標
        *************************************************************************/
        vector<vector<Point3f>>  object_Points;        /****  保存定標板上角點的三維坐標   ****/

        Mat image_points = Mat(1, count, CV_32FC2, Scalar::all(0));  /*****   保存提取的所有角點   *****/
        vector<int>  point_counts;                                                         
        /* 初始化定標板上角點的三維坐標 */
        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++)
                {
                    /* 假設定標板放在世界坐標系中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);
        }
        /* 開始定標 */
        Size image_size = image_Seq[0].size();
        cv::Matx33d intrinsic_matrix;    /*****    攝像機內參數矩陣    ****/
        cv::Vec4d distortion_coeffs;     /* 攝像機的4個畸變系數:k1,k2,k3,k4*/
        std::vector<cv::Vec3d> rotation_vectors;                           /* 每幅圖像的旋轉向量 */
        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));

    標定結果: 
    這里寫圖片描述


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


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   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>
            亚洲国产高清aⅴ视频| 久久综合伊人77777尤物| 欧美成人精品| 免费观看亚洲视频大全| 亚洲理伦在线| 亚洲美女视频| 国产精品美女主播在线观看纯欲| 99精品免费视频| 亚洲精品一级| 国产精品每日更新| 久久久久久久久伊人| 久久久久.com| 亚洲另类自拍| 在线一区二区日韩| 国产欧美一区二区精品性色| 久久久国产成人精品| 久久在线免费视频| 一本色道久久精品| 欧美一区观看| 亚洲精品免费电影| 国产精品99久久99久久久二8| 国产欧美不卡| 亚洲国产婷婷综合在线精品| 国产精品ⅴa在线观看h| 久久亚洲综合色| 欧美精品自拍偷拍动漫精品| 性欧美videos另类喷潮| 久久深夜福利免费观看| av成人激情| 欧美一区二区三区在线看| 亚洲理论在线| 欧美中文字幕精品| 中文亚洲字幕| 久久天天躁夜夜躁狠狠躁2022| 99视频精品在线| 久久久精品国产99久久精品芒果| 99av国产精品欲麻豆| 欧美一二区视频| 亚洲一区免费网站| 欧美国产日本在线| 噜噜噜噜噜久久久久久91| 欧美日韩在线高清| 欧美激情91| 国产在线播精品第三| 在线一区观看| 中文亚洲免费| 欧美大香线蕉线伊人久久国产精品| 性色av一区二区三区在线观看| 欧美mv日韩mv国产网站| 久久久久久久久久久一区| 国产精品久久国产愉拍 | 国产在线精品成人一区二区三区 | 久久精品成人一区二区三区蜜臀 | 免费亚洲一区| 久久精品综合网| 国产精品免费一区二区三区观看 | 亚洲一区二区在线视频| 鲁大师成人一区二区三区| 久久精品亚洲精品国产欧美kt∨| 欧美视频中文一区二区三区在线观看| 免费毛片一区二区三区久久久| 国产欧美日韩精品丝袜高跟鞋 | 欧美主播一区二区三区美女 久久精品人| 乱码第一页成人| 免费成人黄色片| 国产一区二区三区高清| 午夜免费日韩视频| 欧美主播一区二区三区| 国产日韩欧美麻豆| 亚洲欧美日本视频在线观看| 午夜一区二区三视频在线观看| 欧美三级特黄| 亚洲伊人一本大道中文字幕| 亚洲自拍偷拍视频| 国产精品日韩一区| 亚洲先锋成人| 欧美一区国产一区| 国产在线精品成人一区二区三区 | 久久国产天堂福利天堂| 久久久久一区二区三区四区| 国产亚洲精品aa午夜观看| 欧美在线视频一区二区三区| 久久久五月婷婷| 激情综合色丁香一区二区| 久久美女性网| 亚洲精品黄色| 香蕉精品999视频一区二区 | 久久夜色精品国产亚洲aⅴ| 牛人盗摄一区二区三区视频| 亚洲精品国产精品国自产观看| 欧美国产亚洲视频| 一区二区日韩伦理片| 欧美在线高清| 亚洲福利视频一区二区| 欧美日韩国产a| 亚洲一区欧美激情| 美女日韩在线中文字幕| 亚洲精品一区二区三区四区高清| 欧美人在线视频| 午夜影视日本亚洲欧洲精品| 欧美成年人视频网站| 99精品国产热久久91蜜凸| 国产精品久久久| 久热国产精品| 这里只有精品在线播放| 免费美女久久99| 亚洲专区国产精品| 黄色一区二区三区四区| 欧美日精品一区视频| 久久爱另类一区二区小说| 亚洲激情不卡| 久久精品人人做人人综合| 亚洲精品乱码久久久久| 国产欧美视频在线观看| 欧美激情第六页| 久久黄色级2电影| 宅男噜噜噜66一区二区66| 欧美顶级少妇做爰| 久久精品99久久香蕉国产色戒| 99精品热视频只有精品10| 国产一区二区三区在线免费观看| 欧美日韩八区| 欧美a级一区| 久久精品av麻豆的观看方式| av成人免费在线观看| 欧美国产日韩a欧美在线观看| 欧美一区二区三区在线观看| 99国产精品久久久久老师| 激情成人亚洲| 国产亚洲第一区| 国产精品亚洲综合一区在线观看| 欧美精品18+| 久久综合一区二区| 久久国产精品久久久| 亚洲夜间福利| 夜夜嗨av一区二区三区四区 | 毛片基地黄久久久久久天堂| 亚洲欧美激情四射在线日| 亚洲人成在线观看一区二区| 在线日韩欧美视频| 激情六月婷婷久久| 国产亚洲精品久久久久婷婷瑜伽| 国产精品国产三级国产普通话99 | 欧美日韩伦理在线免费| 免费h精品视频在线播放| 久久这里只有| 久久一区国产| 久久在线视频| 蜜臀久久99精品久久久画质超高清| 久久国产精品亚洲77777| 欧美一区二区三区四区在线观看地址 | 91久久精品国产| 亚洲人成网站777色婷婷| 亚洲国产欧美一区二区三区久久| 一区二区在线观看视频| 国产永久精品大片wwwapp| 国内外成人免费激情在线视频网站| 国产精品久久久久毛片软件 | 国产热re99久久6国产精品| 国产酒店精品激情| 国产农村妇女精品一区二区 | 欧美大片在线看| 欧美国产日本高清在线| 欧美日韩一区二区三| 国产精品高潮呻吟| 国产专区一区| 亚洲精品日韩一| 亚洲一区二区三区777| 性刺激综合网| 男女av一区三区二区色多| 亚洲第一主播视频| 亚洲最新合集| 久久久午夜视频| 欧美激情一区二区三区蜜桃视频 | 国产区亚洲区欧美区| 在线观看一区二区精品视频| 亚洲乱码久久| 久久99在线观看| 欧美高清在线精品一区| 夜夜嗨av色综合久久久综合网| 亚洲欧美卡通另类91av| 久久夜精品va视频免费观看| 欧美日韩亚洲91| 国自产拍偷拍福利精品免费一| 亚洲精品乱码久久久久久蜜桃麻豆| 亚洲四色影视在线观看| 久久久久久久久久久久久久一区 | 欧美激情在线观看| 亚洲午夜在线观看| 牛牛国产精品| 国产欧美在线视频| 一本色道久久88综合亚洲精品ⅰ| 久久gogo国模裸体人体| 91久久精品网| 久久精品夜夜夜夜久久| 国产精品第三页| 亚洲美女中出| 久久久噜噜噜久久中文字幕色伊伊 | 欲色影视综合吧| 亚洲欧美日本精品|