• <noscript id="ecgc0"><kbd id="ecgc0"></kbd></noscript>
    <menu id="ecgc0"></menu>
  • <tt id="ecgc0"></tt>

    OpenCV:norm-范數求解函數

    距離的界說是一個寬泛的概念,只要知足非負、自反、三角不等式就可以稱之為距離。

    范數是一種強化了的距離概念,它在界說上比距離多了一條數乘的運算法例。有時辰為了便于理解,我們可以把范數看成距離來理解。

    在數學上,范數包羅標的目的量范數和矩陣范數,標的目的量范數表征標的目的量空間中標的目的量的巨細,矩陣范數表征矩陣引起轉變的巨細。

    一種非嚴密的詮釋就是,對應標的目的量范數,標的目的量空間中的標的目的量都是有巨細的,這個巨細若何懷抱,就是用范數來懷抱的,分歧的范數都可以來懷抱這個巨細,就比如米和尺都可以來懷抱遠近一樣;對于矩陣范數,學過線性代數,我們知道,經由過程運算AX=B,可以將標的目的量X轉變為B,矩陣范數就是來懷抱這個轉變巨細的。

    本文本家兒要介紹:

    OpenCV矩陣暗示形式,

    范數界說;

    范數性質;

    OpenCV三種范數格局;

    應用實例;

    數學概念;

    東西/原料

    • opencv 2410

    方式/步調

    1. 1

      OpenCV中矩陣暗示形式:

      CV_8UC1:一個8位無符號整型單通道矩陣,

      CV_32FC2:一個32位浮點型雙通道矩陣,

       

      CV_8UC1           CV_8SC1          CV_16UC1        CV_16SC1

      CV_8UC2           CV_8SC2          CV_16UC2        CV_16SC2

      CV_8UC3           CV_8SC3          CV_16UC3        CV_16SC3

      CV_8UC4           CV_8SC4          CV_16UC4        CV_16SC4

       

      CV_32SC1          CV_32FC1         CV_64FC1

      CV_32SC2          CV_32FC2         CV_64FC2

      CV_32SC3          CV_32FC3         CV_64FC3

      CV_32SC4          CV_32FC4         CV_64FC4

      通道暗示每個點能存放幾多個數,近似于RGB彩色圖中的每個像素點有三個值,即三通道。

      圖像中的深度暗示每個值由幾多位來存儲,是一個精度問題,

      一般圖像是8bit(位)的,則深度是8。

    2. 2

      范數的界說║x║:

      設,知足

      ①正心猿意馬性:║x║≥0,║x║=0 if x=0

      ②齊次性:║cx║=│c│║x║,

      ③三角不等式:║x+y║≤║x║+║y║

      則稱Cn中界說了標的目的量范數,║x║為標的目的量x的范數.

    3. 3

      范數的性質:

      標的目的量范數是標的目的量的一種具有特別性質的實值函數。

      常用標的目的量范數有,令x=( x1, x2, … ,xn)T

      1-范數:║x║1=│x1│+│x2│+…+│xn│//標的目的量中的絕對值乞降

      2-范數:║x║2=(│x1│2+│x2│2+…+│xn│2)^1/2  //歐幾里得距離

      ∞-范數:║x║∞=max(│x1│,│x2│, … ,│xn│)  //標的目的量中的max

    4. 4

      OpenCV:norm范數求解函數

      三種格局:

      ①double norm(InputArray src1,

      int normType=NORM_L2,

      InputArray mask=noArray() )

      ②double norm(InputArray src1,

      InputArray src2,

      int normType=NORM_L2,

      InputArray mask=noArray())

      ③double norm(const SparseMat& src, int normType)

    5. 5

      應用實例:用于評估相機標心猿意馬的表里參質量

      法式如下:

      cout << "每幅圖像的標心猿意馬誤差:" << endl; 

      for (int i = 0; i<image_count; i++) 

          vector<Point3f> tempPointSet = object_Points[i];

          /*object_Points是圖像棋盤格角點宿世界坐標的容器,其是三通道的XYZ,此中Z通道為0。棋盤格以左上角為原點,方塊巨細是12mm和12mm*/ 

      /*依據攝像機表里參數,對空間的三維點進行重投影計較;

      tempPointSet為12mm*12mm的棋盤格標心猿意馬板角點宿世界坐標,

      image_points2是重投影后的圖像像素角點坐標*/

       

      projectPoints(tempPointSet,

      rotation_vectors[i],

      translation_vectors[i],

      intrinsic_matrix,

      distortion_coeffs,

      image_points2);

           

      /*圖像亞像素角點坐標tempImagePoint */ 

      /*image_points2和tempImagePoint進行誤差計較,評估出其表里參的質量*/

          vector<Point2f> tempImagePoint = corners_Seq[i]; 

         

       

      //界說雙通道的Mat矩陣,每個點暗示兩個數據,別離為棋盤格角點的x和y// 

          Mat tempImagePointMat = Mat(1, tempImagePoint.size(), CV_32FC2);  

          Mat image_points2Mat = Mat(1, image_points2.size(), CV_32FC2);   

          for (int j = 0; j < tempImagePoint.size(); j++) 

          { 

              image_points2Mat.at<Vec2f>(0, j) = Vec2f(image_points2[j].x, image_points2[j].y);  //兩個通道賦值

              tempImagePointMat.at<Vec2f>(0, j) = Vec2f(tempImagePoint[j].x, tempImagePoint[j].y); 

          } 

          err = norm(image_points2Mat, tempImagePointMat, NORM_L2);//2范數 

          total_err += err /= point_counts[i]; 

          cout << "第" << i + 1 << "幅圖像的平均誤差:" << err << "像素" << endl; 

      cout << "總體平均誤差:" << total_err / image_count << "像素" << endl; 

      cout << "評價完當作!" << endl; 

       

      【注】:OpenCV的norm函數是將兩個通道分隔計較(X1-X2)^2的值,然后同一乞降,開根號;即2范數;

    6. 6

      數學概念(彌補)

      例如:

      Mat common_point1 = Mat(1, 3, CV_32FC2); 

      Mat cur_point1 = Mat(1, 3, CV_32FC2); 

      for (size_t i = 0; i < 3; i++) 

          common_point1.at<Vec2f>(0, i) = Vec2f(6, 5); 

          cur_point1.at<Vec2f>(0, i) = Vec2f(4,4); 

      err = norm(common_point1, cur_point1, NORM_L2); 

      printf("err為 : %f個像素 \n", err); 

      成果為:sqrt((6-4)^2+(5-4)^2+(6-4)^2+(5-4)^2+(6-4)^2+(5-4)^2)=3.87

    注重事項

    • 【注】: 問題:為什么不將圖像像素坐標經由過程表里參轉換為宿世界物理坐標?
    • 這是因為當把圖像像素坐標轉換為宿世界坐標時,是一條射線,無法還原出深度Z;
    • 發表于 2018-04-11 00:00
    • 閱讀 ( 4162 )
    • 分類:其他類型

    你可能感興趣的文章

    相關問題

    0 條評論

    請先 登錄 后評論
    聯系我們:uytrv@hotmail.com 問答工具
  • <noscript id="ecgc0"><kbd id="ecgc0"></kbd></noscript>
    <menu id="ecgc0"></menu>
  • <tt id="ecgc0"></tt>
    久久久久精品国产麻豆