<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文範例為大家分享了OpenCV實現相機標定的具體程式碼,供大家參考,具體內容如下
現代科技加持下的相機已經成為製造精密設計巧妙的消費品,相機的光學結構也比誕生之初複雜了許多
典型單反相機光學結構:
在眾多相機模型中,針孔相機又稱投影相機模型是相對簡單而常用的模型。簡單的說,針孔相機模型就是把相機簡化成單純的小孔成像,可想而知,這種簡化對於精度要求高的情況或者特殊鏡頭的相機是不適用的。
小孔成像原理:
單純的小孔成像模型中沒有考慮鏡頭,現實條件下,由一片或多片透鏡組成的鏡頭才能讓利用了小孔成像原理的相機成像清晰的同時保持畫面亮度。所以我們需要向模型引入透鏡。
透鏡成像原理:
但是,新的問題也隨之而來:虛焦、畸變
一般我們稱之為徑向畸變,即光線在院裡透鏡中的地方比靠近中心的地方更加彎曲。徑向畸變又分為中短焦距、近距離的桶形畸變和長焦距、遠距離會出現的枕形畸變。
我們約定三個座標系
1、世界座標系矩陣:X
2、攝像機座標系:Xc,
3、影象(畫素)座標系:x
4、相機矩陣:P
將三維空間中一點,過該點取一平面與畫素平面平行,該平面就是像平面。設該三位點P,齊次座標為X。投影為影象點P’,平面座標x。
針孔相機模型:
在針孔相機模型中,畫素座標和像座標之間的關係:
λx = PX
其中,λ是三位點的逆深度。P為相機矩陣,可以分解為:
P = R[K|t]
R 是描述照相機方向的旋轉矩陣,t 是描述照相機中心位置的三維平移向量,內標定矩陣K 描述照相機的投影性質。標定矩陣僅和照相機自身的情況有關,通常可以寫成:
焦距f是像在平面到畫素平面中心的距離。s是傾斜引數,α是縱橫比例引數。
在畫素陣列在感測器上沒有偏斜且畫素是正方形的時候,可以設 s = 0,α = 1。標定矩陣可以簡化為:
實驗圖片如下:
程式碼如下:
import cv2 import numpy as np import glob # 找棋盤格角點 # 閾值 criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001) #棋盤格模板規格 w = 7 #內角點個數,內角點是和其他格子連著的點 h = 7 # 世界座標系中的棋盤格點,例如(0,0,0), (1,0,0), (2,0,0) ....,(8,5,0),去掉Z座標,記為二維矩陣 objp = np.zeros((w*h,3), np.float32) objp[:,:2] = np.mgrid[0:w,0:h].T.reshape(-1,2) # 儲存棋盤格角點的世界座標和影象座標對 objpoints = [] # 在世界座標系中的三維點 imgpoints = [] # 在影象平面的二維點 images = glob.glob('picture/*.jpg') for fname in images: img = cv2.imread(fname) gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) # 找到棋盤格角點 # 棋盤影象(8位元灰度或彩色影象) 棋盤尺寸 存放角點的位置 ret, corners = cv2.findChessboardCorners(gray, (w,h),None) # 如果找到足夠點對,將其儲存起來 if ret == True: # 角點精確檢測 # 輸入影象 角點初始座標 搜尋視窗為2*winsize+1 死區 求角點的迭代終止條件 cv2.cornerSubPix(gray,corners,(11,11),(-1,-1),criteria) objpoints.append(objp) imgpoints.append(corners) # 將角點在影象上顯示 cv2.drawChessboardCorners(img, (w,h), corners, ret) cv2.imshow('findCorners',img) cv2.waitKey(1000) cv2.destroyAllWindows() #標定、去畸變 # 輸入:世界座標系裡的位置 畫素座標 影象的畫素尺寸大小 3*3矩陣,相機內引數矩陣 畸變矩陣 # 輸出:標定結果 相機的內引數矩陣 畸變係數 旋轉矩陣 平移向量 ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, gray.shape[::-1], None, None) # mtx:內引數矩陣 # dist:畸變係數 # rvecs:旋轉向量 (外引數) # tvecs :平移向量 (外引數) print (("ret:"),ret) print (("mtx:n"),mtx) # 內引數矩陣 print (("dist:n"),dist) # 畸變係數 distortion cofficients = (k_1,k_2,p_1,p_2,k_3) print (("rvecs:n"),rvecs) # 旋轉向量 # 外引數 print (("tvecs:n"),tvecs) # 平移向量 # 外引數 # 去畸變 img2 = cv2.imread('picture/6.jpg') h,w = img2.shape[:2] # 我們已經得到了相機內參和畸變係數,在將影象去畸變之前, # 我們還可以使用cv.getOptimalNewCameraMatrix()優化內引數和畸變係數, # 通過設定自由自由比例因子alpha。當alpha設為0的時候, # 將會返回一個剪裁過的將去畸變後不想要的畫素去掉的內引數和畸變係數; # 當alpha設為1的時候,將會返回一個包含額外黑色畫素點的內引數和畸變係數,並返回一個ROI用於將其剪裁掉 newcameramtx, roi=cv2.getOptimalNewCameraMatrix(mtx,dist,(w,h),0,(w,h)) # 自由比例引數 dst = cv2.undistort(img2, mtx, dist, None, newcameramtx) # 根據前面ROI區域裁剪圖片 x,y,w,h = roi dst = dst[y:y+h, x:x+w] cv2.imwrite('calibresult.jpg',dst) # 反投影誤差 # 通過反投影誤差,我們可以來評估結果的好壞。越接近0,說明結果越理想。 # 通過之前計算的內引數矩陣、畸變係數、旋轉矩陣和平移向量,使用cv2.projectPoints()計算三維點到二維影象的投影, # 然後計算反投影得到的點與影象上檢測到的點的誤差,最後計算一個對於所有標定影象的平均誤差,這個值就是反投影誤差。 total_error = 0 for i in range(len(objpoints)): imgpoints2, _ = cv2.projectPoints(objpoints[i], rvecs[i], tvecs[i], mtx, dist) error = cv2.norm(imgpoints[i],imgpoints2, cv2.NORM_L2)/len(imgpoints2) total_error += error print (("total error: "), total_error/len(objpoints))
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45