1. 程式人生 > >相機標定 matlab opencv ROS三種方法標定步驟(1)

相機標定 matlab opencv ROS三種方法標定步驟(1)

 一 、 理解攝像機模型,網上有很多講解的十分詳細,在這裡我只是記錄我的整合出來的資料和我的部分理解

        計算機視覺領域中常見的三個座標系:影象座標系,相機座標系,世界座標系,實際上就是要用矩陣來表

        示各個座標系下的轉換,首先在影象座標系下與相機座標系的關係

                                                

         可得出   Xcam=x/dx+x0,    Ycam=y/dy+y0  表示為矩陣形式

                                        Xcam           1/dx   0      x0          x

                                        Ycam      =    0     1/dy   y0    *    y

                                           1               0     0        1           1

  相機座標系與影象座標系的關係是

 

既有可以寫成  

我們知道相機座標系與世界座標系的關係是

表達成矩陣表示為

    可以推匯出

         (這裡面的Xc ,Yc,Zc 也就是上面的X Y Z )其中  

           K= 就為相機的內參     R  T  為相機的外參(好難編輯)

接下來就是說明一下使用MATLAB  Opencv ,以及ROS環境下的Opencv進行相機校準

  相機的標定主要有兩種方法     :攝像頭標定方法和攝像頭自標定方法,典型的有:(1)Tsai(傳統的標定方法)  (2)張正友(介於傳統與自標定方法之間)張正友標定法由於很簡單

所以得到廣泛 的應用,張正友標定法的步驟:

           1、列印一張模板並貼在一個平面上;
           2、從不同角度拍攝若干張模板影象;
           3、檢測出影象中的特徵點;
           4、求出攝像機的外引數(單應性矩陣)和內參數(最大似然估計) ;
           5、求出畸變係數;          

            6、優化求精。

 二、對於在matlab中進行相機標定是一件非常簡單的事,因為在matlab官方網站,以及matlab中文論壇上都是有教程的,只需要找到標定模板就可以了,

                    matlab中文論壇的學習網址   http://www.ilovematlab.cn/thread-267670-1-1.html

2.1   首先我們得準備軟體matlab,安裝matlab就按照網上的教程既可以安裝成功了,不過安裝過程可能遇到一些軟體破解的一些問題,如果安裝不上,

        那就果斷的換安裝的軟體版本, 其次就是準備標定魔板,我是直  接用A3的紙列印了標準的棋盤方格,自己百度一下標定棋盤網上有很多圖紙可供下載,

       http://wiki.ros.org/camera_calibration/Tutorials/MonocularCalibration?action=AttachFile&do=view&target=check-108.pdf

      我使用的就是check-108,其中108代表的是每個小方格的邊長為108mm,使用A3的紙張列印,後來測量一下每個黑白方格的邊長為35mm,

2.2  材料和軟體都準備好了,我們在準備攝像頭,我們有四個選擇:(1)手機拍照 我們就標定手機的攝像頭,(2)筆記本自帶的攝像頭,(3)使用帶USB的的攝像頭(4)網上提供的模板

     2.2.1 手機攝像頭標定,最好的方法是將手機固定,然後移動標定模板,改變模板的遠近位置,以及翻轉角度等等,如下圖

             這裡面是我把標定模板給固定,改變手機的位置,這就導致拍出來的照騙有些事不能用的(可以試試),就會明白為什麼會不能進行標定了,

 

  這只是展示其中四張照片,當然拍下來的至少要20張不一樣的照片,現在開始使用MATLAB進行標定了,

 2.2.2當我們想標定筆記本的攝像頭或者我自己外界一個攝像頭的時候,就需要使用一個軟體去獲取攝像頭的照騙,使用 Ecap軟體就可以開啟攝像頭,並且捕捉照騙

可以捕獲很多不同角度的關於標定模板的圖片,至少需要20張,緊接著開啟matlab,在命令列輸入

   >> cameraCalibrator    出現:

 

    之後可以新增“add images”,然後選擇我的模板的方格大小,預設是25mm   改為與實際模板一致的邊長是35mm

            

也可以直接新增網上所提供的標定模板,

         

此標定模板為6*4   108mm 新增完選擇“”calibrate“”有

   

右邊出現一下統計圖,左下角就是每個圖片相對攝像頭的遠近和角度,點選儲存calibration.mat檔案,點選“Export camera parameters”出現標定的結果

到此MATLAB的相機標定就完成了

(雖然我寫的很幸苦,但是我也只是想記錄下我的實驗過程,中間也遇到很多問題,這都是解決後的結果本來是1,2,3放在一起的

  但是因為篇幅太長,只好將其分為三段,中間也丟失過好幾次,然後又重新寫,大神們看見就當是在看笑話,一笑了之即可,

  我知道這其中沒有什麼創新可言,真實慚愧,謝謝)

版權所有,轉載請註明出處

如果您覺得看完有所收穫,歡迎掃一掃,可以資助一分,幾分money,不在乎多少(我也是跟網上的大神們學的),不想掙錢娶媳婦的程式設計師不是好程式設計師,謝謝

         

相關推薦

相機標定 matlab opencv ROS方法標定步驟1

 一 、 理解攝像機模型,網上有很多講解的十分詳細,在這裡我只是記錄我的整合出來的資料和我的部分理解         計算機視覺領域中常見的三個座標系:影象座標系,相機座標系,世界座標系,實際上就是要用矩陣來表         示各個座標系下的轉換,首先在影象座標系下與相機座標系的關係            

C語言創建符號常量的方法;printf和scanf()函數

c1、#indefine pi 3.1415926形式的宏定義2、const int MONTHS=12;這使得MONTHS成為一個只讀值。3、enum 枚舉類型4、printf()和scanf()函數使我們能夠與程序通信,他們被稱為輸入/輸出函數,(I/O函數)5、字符串、浮點數輸出的類型及介紹:實例程序:

unity3d 遊戲物件消失方法的區別enabled/Destroy/active

gameObject.renderer.enabled //是控制一個物體是否在螢幕上渲染或顯示 而物體實際還是存在的 只是想當於隱身 而物體本身的碰撞體還依然存在的 GameObject.Destroy() //表示移除物體或物體上的元件 代表銷燬該物體 實際

解析xml的4方法詳解

項目 目標 源碼 更多 news 大量 優秀 大型 頻繁 http://blog.csdn.net/jzhf2012/article/details/8532873 1. 介紹 1)DOM(JAXP Crimson解析器) DOM是用與平臺和語言無關的方式表

億級PV請求的負載均衡技術

直接 轉發 指向 nfs admin ip地址 cnblogs 當前 求和 http://www.360doc.com/content/17/1126/23/50145453_707419125.shtml 目錄 DNS輪詢 LVS負載均衡 DR模式 NAT

原生js選項卡效果滑動

window solid nts html opacity ont cor rip show 第二種:鼠標移入切換效果實現 <!DOCTYPE html> <html> <head> <meta charset

python全棧開發基礎【第二十一篇】互斥鎖以及進程之間的通信方式IPC以及生產者個消費者模型

ipc 例子 清空 ase 多個進程 art 並且 star als 一、互斥鎖 進程之間數據隔離,但是共享一套文件系統,因而可以通過文件來實現進程直接的通信,但問題是必須自己加鎖處理。 註意:加鎖的目的是為了保證多個進程修改同一塊數據時,同一時間只能有一個修改,即串行的修

Python selenium —— 一定要會用selenium的等待,等待方式解讀

我們 嚴重 -s ber 約定 fire locate ror nbsp 發現太多人不會用等待了,博主今天實在是忍不住要給大家講講等待的必要性。 很多人在群裏問,這個下拉框定位不到、那個彈出框定位不到…各種定位不到,其實大多數情況下就是兩種問題:1 有frame,2 沒有加

json的反序列方式轉載

JSON(JavaScript Object Notation),在實際的開發中非常常用,甚至一個json就可以儲存所有需要的信心呢。     物件:一個物件以花括號"{"開始,並以"}"結束,json儲存使用key:value形式,每一個鍵後 有一個冒號

非線性優化-幾優化方法的比較1

我們每個人都會在我們的生活或者工作中遇到各種各樣的最優化問題,比如每個企業和個人都要考慮的一個問題“在一定成本下,如何使利潤最大化”等。最優化方法是一種數學方法,它是研究在給定約束之下如何尋求某些因素(的量),以使某一(或某些)指標達到最優的一些學科的總稱。隨著學習的深入,博

matlab和c++混合程式設計---matlab和vs的環境配置問題及方法步驟轉載

matlab和c++混合程式設計---方法和步驟 matlab和c++混合程式設計---matlab和vs的環境配置問題 摘要:Matlab具有很強的數值計算和分析等能力,而C/C++是目前最為流行的高階程式設計語言,兩者互補結合的混合程式設計在科學研究和工程實踐中具有非常重要的意義。從Matlab呼叫C

Spring學習之Spring裝配機制:顯示裝配bean

  今天我們介紹一下Spring三種裝配機制中的另外兩種裝配方式:JavaConfig和XML配置,這兩種方式區別於自動化裝配方式都屬於顯示裝配。 1、Java程式碼裝配bean 首先,我們通過在Config類中使用@Bean註解來宣告bean; @Bean註

Python學習【第20篇】:互斥鎖以及進程之間的通信方式IPC以及生產者個消費者模型

數量 release value body pan sin 回收 dom 之前 python並發編程之多進程1-----------互斥鎖與進程間的通信 一、互斥鎖 進程之間數據隔離,但是共享一套文件系統,因而可以通過文件來實現進程直接的通信,但問題

vmware網路模式配置轉載

虛擬機器系統安裝的是Linux系統 首先,在本機上檢視所有網路配置連線,使用命令:ipconfig Microsoft Windows [版本 6.1.7600]版權所有 (c) 2009 Microsoft Corporation。保留所有權利。 C:\Users\Administrator>ip

最安全最方便最容易上手的以太坊ETH錢包

1. MyEtherWalletMyEtherWallet 作為一個輕錢包,上手難道不大,無需下載,在直接在網頁上就可以完成所有的操作。在MyEtherWallet上生成的私鑰由使用者自我保管,平臺方並無備份。優勢:方便快捷,連網即可發起交易劣勢:2. imToken移動端錢

Java中httpClient中的超時設定小結

在Apache的HttpClient包中,有三個設定超時的地方: /* 從連線池中取連線的超時時間*/ ConnManagerParams.setTimeout(params, 1000); /*連線超時*/ HttpConnectionParams.s

CSS—對齊方式align

HTML程式碼 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>對其</title>

Matlab並行程式設計方法及理解1

轉載(有微弱改動)至:美女Rachel-Zhang的部落格:http://blog.csdn.net/abcjennifer/article/details/17610705;http://blog.csdn.net/abcjennifer/article/details/

C#/.NET整數的強制型別轉換int、Convert.ToInt32、int.Parse()的區別總結

1.(int) 適合簡單資料型別之間的轉換,C#的預設整型是int32(不支援bool型)。 2. int.Parse(string sParameter) 是個建構函式,引數型別只支援string型別,Parse就是把String型別轉換成int,char,doubl

聊聊Dataguard的保護模式實驗

保護模式(Protection Mode),分別為:最大保護(Maximum Protection)、最大可用(Maximum Availability)和最大效能(Maximum performance)。在實際應用場景下,我們需要根據不同的業務場景和資料可用性需求,來設定