相機標定(3)---基於halcon的面陣相機標定
halcon標定可以參考halcon提供的例子程式3d_coordinates.hdev
1、攝像機外參:決定攝像機座標與世界座標系之間相對位置關係。
其中Pw為世界座標,Pc是攝像機座標,他們之間關係為
Pc = RPw + T
式中,T= (Tx,Ty,Tz),是平移向量,R = R(α,β,γ)是旋轉矩陣,分別是繞攝像機座標系z軸旋轉角度為γ,繞y軸旋轉角度為β,繞x軸旋轉角度為α。6個引數組成(α,β,γ,Tx,Ty,Tz)為攝像機外參。
2、攝像機內參:確定攝像機從三維空間到二維影象的投影關係。
針孔攝像機模型為6個引數(f,κ,Sx,Sy,Cx,Cy);遠心攝像機模型為5個引數(f,Sx,Sy,Cx,Cy)。
線陣攝像機為9個引數(f,κ,Sx,Sy,Cx,Cy,width.highth)。
其中,f為焦距;
κ表示徑向畸變數級,如果κ為負值,畸變為桶型畸變,如果為正值,那畸變為枕型畸變。
Sx,Sy是縮放比例因子。對針孔攝像機來講,表示影象感測器上水平和垂直方向上相鄰畫素之間的距離;
對於遠心攝像機模型,表示畫素在世界座標系中的尺寸。
Cx,Cy是影象的主點。對針孔攝像機來講,這個點是投影中心在成像平面上的垂直投影,同時也是徑向
畸變的中心 。
對於遠心攝像機模型,只表示畸變的中心 。
Vx,Vy,Vz:線陣攝像機必須與被拍攝物體之間有相對移動才能拍攝到一幅有用的影象。這是運動向量。
sx和sy是相鄰像元的水平和垂直距離
3、標定板為正方形,尺寸大小為要照射區域寬度的1/3,如像區為100*80mm,那麼標定板為30*30mm。其中標定板按照D:\Program Files\HALCON-10.0\calib(具體的視個人安裝位置所定)來用CAD畫圖。下面是自制標定板的網址。
4、按照下面網址步驟進行標定
5、具體實施步驟
標定的目的是確定相機的內參和外參。
第一步:
依照halcon標定板描述檔案(字尾名是.descr)尺寸製作標定板。一般標定板大小是照射區域的1/3,每個標定孔的畫素不能少於10個。
第二步:
先定義內參的初始值。
StartCamPar:=[0.006,0,6e-6,6e-6,Width*0.5,Height*0.5,Width,Height]
依次是[焦距,畸變,畫素尺寸寬,畫素尺寸高,中心點座標寬,中心點座標高,圖片尺寸]
第三步:通過標定助手實現標定
把記憶體儲存成檔案,通過標定助手完成。
write_cam_par (StartCamPar, 'E:/Halcon例子/攝像機標定/標定.dat')
匯入自己剛才儲存的引數 |
選擇正確的描述檔案 |
然後可以標定了
利用相機不斷採集標定 |
為使得圖片標定完成,調節下面這些引數。具體引數意義見翻譯的find_caltab、find_marks_and_pose這兩個引數。
標定要是有問題會提示警告,如果沒有問題,標定板在每個位置每個標定孔都能識別出來。標定需要轉化十幾副圖片來準確確定內參和外參。檢視結果
相機外參顯示在這塊 |
相機內參會顯示在這塊 |
點選儲存可以把內參和外參儲存成檔案。
接著可以入下圖插入程式碼。
插入程式碼,插入整個標定過程 |
第四步:使用程式實現相機標定
create_calib_data ('calibration_object', 1, 1, CalibModelID)
set_calib_data_cam_param (CalibModelID, 0, 'area_scan_division', StartCamPar)
set_calib_data_calib_object (CalibModelID, 0, 'caltab_100mm.descr')
先定義一個標定模版控制代碼。接著開啟相機取圖或者直接讀檔案裡的圖,開始標定。
通過find_caltab找到標定板位置,然後通過find_marks_and_pose確定標定點座標和相機外參RCoord, CCoord, StartPose。
通過set_calib_data_observ_points把讀取的標定點座標與描述檔案比較結合相機外參,不斷修正相機標定模版CalibModelID。
calibrate_cameras (CalibModelID, ErrorsDiv)
get_calib_data (CalibModelID, 'camera', 0, 'params', CamParam)
標定相機,讀取相機的引數給CamParam(內參)。
第五步:轉化成世界座標
image_points_to_world_plane (CamParam, StartPose, Row, Col, 'mm', X1, Y1)
把圖片中的Row, Col點們轉化到世界座標值X1, Y1
通過下面計算兩點距離
distance_pp (X1[0:4], Y1[0:4], X1[1:5], Y1[1:5], Distance)
可以通過image_to_world_plane來轉化圖片
第六步:確定原點(沒有實驗,待驗證)
標定時換很多位置放置標定板其實是為了內參標定的更準確,外參只要一張標定板圖就可以確定了。因此,換各個角度標定內參,最後一個位置把標定板放在自己想要的座標原點位置再標定一次,那麼轉換成世界座標後,座標原點就是標定板中心點,標定板上的小黑角在第三象限,依次右手為Y軸,X軸。(注:標定板防止的平面Z最好與使用的平面平行。Z軸正方向為垂直平面向下。
然後,考慮標定板的厚度0.75mm,重新設定原點,光Z改變了(下面函式單位為m)。
set_origin_pose (Pose, 0, 0, 0.00075, NewPose)
下面是標定時halcon引數:
相關推薦
相機標定(3)---基於halcon的面陣相機標定
halcon標定可以參考halcon提供的例子程式3d_coordinates.hdev 1、攝像機外參:決定攝像機座標與世界座標系之間相對位置關係。 其中Pw為世界座標,Pc是攝像機座標,他們之間關係為 Pc
機器視覺相機如何選擇?機器視覺中線陣、面陣相機的區別有哪些
一、線陣相機 線陣主要應用於工業、醫療、科研與安全領域的圖象處理。在機器視覺領域中,線陣工業相機是一類特殊的視覺機器。與面陣工業相機相比,它的感測器只有一行感光元素,因此使高掃描頻率和高解析度成為可能。線陣工業相機的典型應用領域是檢測連續的材料,例如金屬、塑料、紙和
基於HALCON的全景攝像機標定及應用研究
現有全景攝像機標定演算法中,場景的先驗知識在很多情況下難以準確獲取。提出了一種基於HALCON的雙曲面折反射全景攝像機標定演算法。通過攝像機或者標定板的相互移動來獲取不同位置的標定板影象;通過HALCON預處理後提取角點座標;通過最小二乘法求解標定點投影方程的展開係數得到
面陣和線掃工業相機選型
一. 面陣相機和鏡頭選型 已知:被檢測物體大小為A*B,要求能夠分辨小於C,工作距為D 解答: 1. 計算短邊對應的畫素數 E = B/C,相機長邊和短邊的畫素數都要大於E; 2. 像元尺寸 = 物體短邊尺寸B / 所選相機的短邊畫素數; 3. 放大倍率 = 所選相機
基於Matlab的立體相機標定StereoCalibration與目標三維座標定位
1.Matlab關於立體相機標定與目標三維座標定位的流程 環境:Matlab r2015b 找到 APPS-->Stereo Camera Calibrator-->Add Image, 此時會提示左右攝像頭拍攝的棋盤格標定圖片輸入路徑(Folder for i
線陣相機鏡頭和光源選型
二次元 部分 機器 而且 明顯 固定 現場 也有 穿透 關於線線相機、鏡頭、光源的選型,歡迎來電探討線掃描系統的搭建與選型 隨著機器視覺的大規模普及與工業流水線速度、精度的提高,線掃描系統越來越被視覺工程師和最終用戶所認可。 首先,我對線掃描系統做一個大
線陣相機知識彙總
個人分類: 計算機視覺 線陣相機顧名思義就是取像是成線性的。 它的感測器是成線型的。 舉個例子: 比如面陣相機的解析度是640*480就是說這個相機橫向有640個像元,縱向有480個像元。 而線陣相機解析度只體現在橫向,比如2048畫素的線陣相機就是說橫向有2048個像元,縱向大多
android平臺下OpenGL ES 3.0使用GLSurfaceView對相機Camera預覽實時處理
OpenGL ES 3.0學習實踐 android平臺下OpenGL ES 3.0從零開始 android平臺下OpenGL ES 3.0繪製純色背景 android平臺下OpenGL ES 3.0繪製圓點、直線和三角形 android平臺下OpenGL E
android平臺下OpenGL ES 3.0使用TextureView對相機Camera預覽實時處理
OpenGL ES 3.0學習實踐 android平臺下OpenGL ES 3.0從零開始 android平臺下OpenGL ES 3.0繪製純色背景 android平臺下OpenGL ES 3.0繪製圓點、直線和三角形 android平臺下OpenGL E
怎樣選擇線陣相機,線陣鏡頭,線陣光源
隨著機器視覺的大規模普及與工業流水線速度、精度的提高,線掃描系統越來越被視覺工程師和終端使用者所認可。 首先,我對線掃描系統做一個大致的介紹。線掃描系統用於被測物體和相機之間有相對運動的場合,通過線掃描相機高速採集,每次採集完一條線後正好運動到下一個單位長度,繼續下
基於物理的的相機(一):曝光
Moving Frostbite to Physically Based Rendering中講了Frostbite引擎的基於物理的整套管線流程,其中就包括物理相機 世界中的部分物體亮度是很高的,比如光源,相機的亮度範圍也是有限,就需要將世界的亮度重新對映到相機的亮度範圍,
為什麼要使用線陣相機?
參考:https://wenku.baidu.com/view/b201cdf96bec0975f465e2b5.html 數字相機成像原理 光線透過鏡頭投射到感光元件表層,以CCD為例,CCD結構中每個畫素就像一個個小桶,光線像雨滴撒入各個小桶,通過設定曝光時間,相機在一定的曝光時間中,“
中科藍海 ZKCP400B-1390 高精度寬幅線陣相機的優點
文物燒錄經常出現問題,就是文物要妥善保管,不能破壞文物的完整性整體性,這樣很容易導致燒錄結果不清晰、掃描內容不完整、整體效果差。中科藍海專門研製的ZKCP400B-1390寬幅線陣相機應用而生。 ZKCP400B-1390寬幅線陣相機採用CMOS技術,採用一列內建的LED發光二極體照明,直
超寬幅線陣相機 中科藍海 大型玻璃、皮革、PCB等測量
超寬幅線陣相機 ZKCP400B-1390系列 應用領域 嵌入ZKCP400B-1390系列寬幅面線陣相機的可實現大幅面零畸變高解析度成像,廣泛應用於印刷製品、書畫文物、大型玻璃、糧食色選、LCD面板檢測、PCB檢測、鋼鐵檢測、菸草行業、紡織行業、板材傢俱、帳篷、帆船、潛水衣、服裝
基於GPU的多相機拼接全景技術
全景視訊拼接關鍵技術 一、原理介紹 影象拼接(Image Stitching)是一種利用實景影象組成全景空間的技術,它將多幅影象拼接成一幅大尺度影象或360度全景圖,影象拼接技術涉及到計算機視覺、計算機圖形學、數字影象處理以及一些數學工具等技術。影象拼接其基本步
傳統的人手描點?臨摹?對於大型樣板無從下手?救星來了,超寬幅線陣相機
中科藍海超寬幅線陣相機——採用CMOS技術的線性掃描相機 布料、皮革、鞋樣等等以前用人手去描點、去畫,現在直接放上去即可。以前阿拉伯人袖子裁剪和搭配顏色,中國設計師不理解,把他們的衣服買回來,把線頭拆瞭然後照著抄尺寸,像美術師在臨摹一樣,現在我們裁剪後放上去,過一下,下切割機切割,直接出
攝像機標定01_面陣攝像機(Camera Calibration)
面陣攝像機的攝像機模型 機器視覺應用中常用的兩種鏡頭:普通鏡頭和遠心鏡頭。 使用普通鏡頭時,世界座標系到影象座標系的投影為透視投影。普通鏡頭與針孔攝像機實現的投影方式相同,因此將攝像機與普通鏡頭的組合成為針孔攝像機模型。 使用遠心鏡頭時,世界座標系到影象座
相機標定 matlab opencv ROS三種方法標定步驟(1)
一 、 理解攝像機模型,網上有很多講解的十分詳細,在這裡我只是記錄我的整合出來的資料和我的部分理解 計算機視覺領域中常見的三個座標系:影象座標系,相機座標系,世界座標系,實際上就是要用矩陣來表 示各個座標系下的轉換,首先在影象座標系下與相機座標系的關係
圖片處理——基於openCV實現美顏相機
今天是2017年最後一晚,希望大家元旦前夕玩得開心,準備迎接2018全新的一年,活出程式設計師的態度。 最近發現有些女孩在朋友圈發的自拍照膚白貌美,甚至頭上魔幻般地長出貓耳朵、貓鼻子、
Basler|基於OpenCV的Basler相機採集影象程式
採用Basler4.0SDK編寫,利用Event機制在回撥函式中生成灰度影象 回撥函式中影象生成程式碼,利用CCD中獲取的無符號字元型陣列轉變成 Mat型別 Mat grab( siz, CV_8UC1, ptrGrabResult->GetBuffer(),