九點標定在圖像測量過程以及機器視覺應用中,為確定空間物體表面某點的三維幾何位置與其在圖像中對應點之間的相互關系,九點標定是點的仿射變換,只是圖像行列、和坐標XY的仿射關系,也就是矩陣關系。從只有XY2個坐標軸來看,只有二個方向,所以只能適用于2D,并不是真正的手眼標定。
在大多數條件下這些參數必須通過實驗與計算才能得到,其標定結果的精度及算法的穩定性直接影響相機工作產生結果的準確性。因此,做好相機標定是做好后續工作的前提,提高標定精度是科研工作的重點所在。
1. 操作簡單,方便快捷;
2. 計算簡單,計算量少;
3. 對操作者水平要求不高,只懂二維仿射變換即可。
4. 幾乎適用于所有2D平面的工業測量與視覺定位。
缺點:
1. 像素精度低,受人為操作影響較大;
2. 不能校正畸變與校正斜拍;
3. 不能求出相機的內參與外參;
4. 像素精度稍低,低于手眼標定的像素精度;
5. 只合適用于2D,不適用于3D。
使用九點標定時,影響機械精度的因素:
1. 相機傾斜發生變化;
2. 工作距離發生變化;
3. 測量物體厚度或變??;
4. 用于標定點的數量;
5. 鏡頭發生畸變;
6. 像素精度不夠。
l 第一步:制作9個點,相機采圖的時候能全部拍到即可。一般以會3X3的行列相等去制作。
1.在圖像上找到9個圓的中心坐標。(二值化提取區域后排序獲得區域行列坐標/使用模板匹配后排序獲得行列坐標)
2.會用到的一些算子:
rgb1_to_gray (Image, GrayImage) RGB圖轉灰度圖
mirror_image (GrayImage, ImageMirror, 'row') 圖像鏡像,就是把9個點的序號按照自己習慣的方式在圖像上顯示。
illuminate (ImageMirror1, ImageIlluminate, 101, 101, 0.5) 圖像亮度(灰度)不均勻時,使用這個算子平均一下圖像灰度值。
scale_image (ImageIlluminate, ImageScaled, 42.5, -4080) 縮放圖像,使黑白更分明。
binary_threshold (ImageScaled, Region, 'max_separability', 'dark', UsedThreshold) 二值化提取黑或提取白
connection (Region, ConnectedRegions) 連通域斷開。
sort_region (ConnectedRegions, SortedRegions, 'character', 'true', 'row') 區域排序。
area_center (SortedRegions, Area, Row, Column) 獲取區域的面積與重心行列。
l 第二步:保持9個圓點不動,使用機械手的作業工具對準9個圓的圓心位置,并保存好機械手坐標。然后把9個點的坐標按照圓的序號在生成一個一維數組變量。(一定要對好序號,就是第一步中排序后的序號和數組元素一一對應)
l 第三步:使用圖像行列的圓心和機械手的一維數組變量,生成一個矩陣關系。
vector_to_hom_mat2d (Row, Column, X, Y, HomMat2D) HomMat2D就是我們要的這個矩陣。
write_tuple (HomMat2D, HomMatFile) 保存矩陣使用
read_tuple (HomMatFile, HomMat2D1) 讀取矩陣使用
l 第四步:使用相機去識別一個或多個新的物體,并得到mark行列坐標,通過讀取步驟三保存的矩陣,求出mark點的機械坐標。
affine_trans_point_2d (HomMat2D, Row1, Column1, Rx, Ry) 矩陣轉換,把行列坐標轉換為RxRy。
l 第五步:補償偏差,即當前拍照位置與標定拍照位置的偏差。
RxNew := Rx + (當前拍照X坐標 – 標定拍照時X坐標)
RyNew := Ry + (當前拍照Y坐標 – 標定拍歸時Y坐標)
l 第六步:3項重點注意事項:
1. 切記鏡像mirror_image。前后一定要保持圖片一致。
2. 行列坐標和XY坐標,前后要保持一致。
3. 圓的序號,行列序號一定要和定位XY序號保持一致。