工業(yè)機(jī)器人傳感器:視覺傳感器:視覺傳感器的標(biāo)定方法_第1頁
工業(yè)機(jī)器人傳感器:視覺傳感器:視覺傳感器的標(biāo)定方法_第2頁
工業(yè)機(jī)器人傳感器:視覺傳感器:視覺傳感器的標(biāo)定方法_第3頁
工業(yè)機(jī)器人傳感器:視覺傳感器:視覺傳感器的標(biāo)定方法_第4頁
工業(yè)機(jī)器人傳感器:視覺傳感器:視覺傳感器的標(biāo)定方法_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

工業(yè)機(jī)器人傳感器:視覺傳感器:視覺傳感器的標(biāo)定方法1視覺傳感器概述1.1視覺傳感器的工作原理視覺傳感器,作為工業(yè)機(jī)器人的眼睛,其工作原理基于光電效應(yīng)和圖像處理技術(shù)。它們通過捕捉環(huán)境中的光線,將其轉(zhuǎn)換為電信號(hào),再通過圖像處理算法分析這些信號(hào),從而識(shí)別物體的形狀、顏色、位置等信息。這一過程可以分為以下幾個(gè)步驟:光線捕捉:視覺傳感器中的鏡頭將光線聚焦到圖像傳感器上,如CCD(電荷耦合器件)或CMOS(互補(bǔ)金屬氧化物半導(dǎo)體)傳感器。光電轉(zhuǎn)換:圖像傳感器將捕捉到的光線轉(zhuǎn)換為電信號(hào)。信號(hào)處理:電信號(hào)被轉(zhuǎn)換為數(shù)字圖像,然后通過圖像處理算法進(jìn)行分析。特征提取:算法識(shí)別圖像中的關(guān)鍵特征,如邊緣、紋理、顏色等。決策與輸出:基于提取的特征,視覺傳感器做出判斷,如物體識(shí)別、尺寸測量等,并將結(jié)果輸出給工業(yè)機(jī)器人控制系統(tǒng)。1.1.1示例:使用Python和OpenCV進(jìn)行圖像處理importcv2

importnumpyasnp

#讀取圖像

image=cv2.imread('example.jpg')

#轉(zhuǎn)換為灰度圖像

gray=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)

#應(yīng)用邊緣檢測

edges=cv2.Canny(gray,100,200)

#顯示結(jié)果

cv2.imshow('Edges',edges)

cv2.waitKey(0)

cv2.destroyAllWindows()這段代碼展示了如何使用Python的OpenCV庫從彩色圖像中提取邊緣特征。首先,讀取一個(gè)圖像文件,然后將其轉(zhuǎn)換為灰度圖像,這是因?yàn)檫吘墮z測算法在灰度圖像上效果更好。接著,使用Canny邊緣檢測算法找到圖像中的邊緣,并將結(jié)果顯示出來。1.2視覺傳感器在工業(yè)機(jī)器人中的應(yīng)用視覺傳感器在工業(yè)機(jī)器人中的應(yīng)用廣泛,它們能夠幫助機(jī)器人實(shí)現(xiàn)自動(dòng)化和智能化,具體應(yīng)用包括:物體識(shí)別與分類:通過視覺傳感器,機(jī)器人可以識(shí)別生產(chǎn)線上的不同物體,根據(jù)其形狀、顏色或紋理進(jìn)行分類。位置與尺寸測量:視覺傳感器可以精確測量物體的位置和尺寸,這對于裝配、包裝等需要高精度操作的場景至關(guān)重要。質(zhì)量檢測:在制造過程中,視覺傳感器可以用于檢測產(chǎn)品的缺陷,如裂紋、劃痕等,確保產(chǎn)品質(zhì)量。環(huán)境感知:機(jī)器人通過視覺傳感器感知周圍環(huán)境,避免與障礙物碰撞,實(shí)現(xiàn)安全導(dǎo)航。人機(jī)協(xié)作:在人機(jī)協(xié)作場景中,視覺傳感器可以幫助機(jī)器人識(shí)別和理解人類的行為,確保安全和效率。1.2.1示例:使用視覺傳感器進(jìn)行物體識(shí)別importcv2

fromtensorflow.keras.modelsimportload_model

#加載預(yù)訓(xùn)練的物體識(shí)別模型

model=load_model('object_recognition_model.h5')

#讀取圖像

image=cv2.imread('object.jpg')

#圖像預(yù)處理

image=cv2.resize(image,(224,224))

image=image/255.0

image=np.expand_dims(image,axis=0)

#使用模型進(jìn)行預(yù)測

predictions=model.predict(image)

#輸出預(yù)測結(jié)果

print("Predictedclass:",np.argmax(predictions))在這個(gè)例子中,我們使用一個(gè)預(yù)訓(xùn)練的深度學(xué)習(xí)模型(如基于卷積神經(jīng)網(wǎng)絡(luò)的模型)來識(shí)別圖像中的物體。首先,加載模型,然后讀取一個(gè)物體的圖像,對其進(jìn)行預(yù)處理,包括調(diào)整大小和歸一化像素值。接著,使用模型對預(yù)處理后的圖像進(jìn)行預(yù)測,輸出預(yù)測的類別。這展示了視覺傳感器如何與深度學(xué)習(xí)技術(shù)結(jié)合,實(shí)現(xiàn)物體的自動(dòng)識(shí)別。通過上述內(nèi)容,我們了解了視覺傳感器的工作原理以及它們在工業(yè)機(jī)器人中的關(guān)鍵應(yīng)用。視覺傳感器不僅能夠捕捉和分析圖像,還能夠通過與圖像處理算法和深度學(xué)習(xí)模型的結(jié)合,實(shí)現(xiàn)復(fù)雜任務(wù)的自動(dòng)化處理,極大地提高了工業(yè)機(jī)器人的智能水平和操作精度。2視覺傳感器標(biāo)定的重要性2.1提高機(jī)器人精度在工業(yè)自動(dòng)化領(lǐng)域,視覺傳感器作為機(jī)器人的眼睛,其準(zhǔn)確性直接影響到機(jī)器人的操作精度。標(biāo)定是確保視覺傳感器與機(jī)器人系統(tǒng)之間正確協(xié)調(diào)的關(guān)鍵步驟。通過標(biāo)定,可以校正傳感器的幾何畸變,提高圖像的準(zhǔn)確性,從而提升機(jī)器人在定位、識(shí)別和抓取任務(wù)中的精度。2.1.1標(biāo)定原理標(biāo)定過程通常涉及使用已知幾何形狀的標(biāo)定板,如棋盤格,來確定相機(jī)的內(nèi)部參數(shù)(如焦距、主點(diǎn)位置)和外部參數(shù)(如相機(jī)相對于世界坐標(biāo)系的位置和姿態(tài))。這些參數(shù)對于將圖像坐標(biāo)轉(zhuǎn)換為機(jī)器人坐標(biāo)系中的實(shí)際位置至關(guān)重要。2.1.2標(biāo)定流程準(zhǔn)備標(biāo)定板:選擇一個(gè)具有已知尺寸和布局的標(biāo)定板,如棋盤格。采集圖像:在不同位置和角度下拍攝標(biāo)定板的多幅圖像。特征檢測:使用圖像處理算法檢測標(biāo)定板上的特征點(diǎn),如棋盤格的角點(diǎn)。參數(shù)估計(jì):基于檢測到的特征點(diǎn),使用數(shù)學(xué)模型估計(jì)相機(jī)的內(nèi)外參數(shù)。誤差評估:通過比較標(biāo)定后的圖像與實(shí)際位置的差異,評估標(biāo)定的準(zhǔn)確性。應(yīng)用標(biāo)定:將標(biāo)定參數(shù)應(yīng)用于視覺系統(tǒng),以提高圖像處理的精度。2.1.3代碼示例以下是一個(gè)使用Python和OpenCV進(jìn)行相機(jī)標(biāo)定的簡單示例:importnumpyasnp

importcv2

importglob

#標(biāo)定板的尺寸

CHECKERBOARD=(6,9)

criteria=(cv2.TERM_CRITERIA_EPS+cv2.TERM_CRITERIA_MAX_ITER,30,0.001)

#世界坐標(biāo)系中的標(biāo)定板角點(diǎn)

objp=np.zeros((CHECKERBOARD[0]*CHECKERBOARD[1],3),np.float32)

objp[:,:2]=np.mgrid[0:CHECKERBOARD[0],0:CHECKERBOARD[1]].T.reshape(-1,2)

#存儲(chǔ)所有圖像中的角點(diǎn)

objpoints=[]#在世界坐標(biāo)系中的3D點(diǎn)

imgpoints=[]#在圖像平面的2D點(diǎn)

#讀取所有標(biāo)定圖像

images=glob.glob('calibration_images/*.jpg')

forfnameinimages:

img=cv2.imread(fname)

gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

#尋找棋盤格角點(diǎn)

ret,corners=cv2.findChessboardCorners(gray,CHECKERBOARD,None)

#如果找到足夠點(diǎn),增加對象點(diǎn)、圖像點(diǎn)(經(jīng)過亞像素角點(diǎn)檢測細(xì)化)

ifret==True:

objpoints.append(objp)

corners2=cv2.cornerSubPix(gray,corners,(11,11),(-1,-1),criteria)

imgpoints.append(corners2)

#繪制并顯示角點(diǎn)

img=cv2.drawChessboardCorners(img,CHECKERBOARD,corners2,ret)

cv2.imshow('img',img)

cv2.waitKey(500)

cv2.destroyAllWindows()

#標(biāo)定相機(jī)

ret,mtx,dist,rvecs,tvecs=cv2.calibrateCamera(objpoints,imgpoints,gray.shape[::-1],None,None)

#打印相機(jī)矩陣和畸變系數(shù)

print("Cameramatrix:\n")

print(mtx)

print("Distortioncoefficients:\n")

print(dist)2.1.4解釋此代碼示例展示了如何使用OpenCV庫進(jìn)行相機(jī)標(biāo)定。首先,定義了標(biāo)定板的尺寸和特征點(diǎn)的檢測標(biāo)準(zhǔn)。然后,從一系列標(biāo)定圖像中讀取并轉(zhuǎn)換為灰度圖像,以檢測棋盤格的角點(diǎn)。通過findChessboardCorners函數(shù)找到角點(diǎn)后,使用cornerSubPix函數(shù)進(jìn)行亞像素級別的角點(diǎn)檢測,以提高精度。最后,調(diào)用calibrateCamera函數(shù)來估計(jì)相機(jī)的內(nèi)外參數(shù),并打印出相機(jī)矩陣和畸變系數(shù)。2.2確保視覺系統(tǒng)可靠性視覺傳感器的標(biāo)定不僅提高了精度,還確保了視覺系統(tǒng)的可靠性。標(biāo)定可以校正由于環(huán)境變化、相機(jī)老化或安裝誤差導(dǎo)致的圖像畸變,從而保證在各種條件下視覺系統(tǒng)的穩(wěn)定性和準(zhǔn)確性。2.2.1標(biāo)定的可靠性標(biāo)定的可靠性取決于多個(gè)因素,包括標(biāo)定板的精度、圖像采集的質(zhì)量、標(biāo)定算法的穩(wěn)健性以及標(biāo)定參數(shù)的誤差評估。一個(gè)可靠的標(biāo)定過程應(yīng)該能夠適應(yīng)不同的工作環(huán)境,并在長時(shí)間運(yùn)行后仍然保持高精度。2.2.2動(dòng)態(tài)標(biāo)定在某些情況下,如機(jī)器人工作環(huán)境變化較大或需要在不同位置進(jìn)行操作時(shí),可能需要進(jìn)行動(dòng)態(tài)標(biāo)定。動(dòng)態(tài)標(biāo)定是指在機(jī)器人工作過程中實(shí)時(shí)調(diào)整標(biāo)定參數(shù),以適應(yīng)環(huán)境變化。這通常涉及到更復(fù)雜的算法和實(shí)時(shí)數(shù)據(jù)處理能力。2.2.3代碼示例動(dòng)態(tài)標(biāo)定可能涉及更復(fù)雜的算法,以下是一個(gè)簡化示例,展示如何在每次機(jī)器人操作前進(jìn)行快速標(biāo)定,以適應(yīng)環(huán)境變化:defdynamic_calibration(image_path):

img=cv2.imread(image_path)

gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

#尋找棋盤格角點(diǎn)

ret,corners=cv2.findChessboardCorners(gray,CHECKERBOARD,None)

ifret==True:

#更新標(biāo)定參數(shù)

corners2=cv2.cornerSubPix(gray,corners,(11,11),(-1,-1),criteria)

imgpoints.append(corners2)

#重新標(biāo)定相機(jī)

ret,mtx,dist,rvecs,tvecs=cv2.calibrateCamera(objpoints,imgpoints,gray.shape[::-1],None,None)

#打印更新后的相機(jī)矩陣和畸變系數(shù)

print("UpdatedCameramatrix:\n")

print(mtx)

print("UpdatedDistortioncoefficients:\n")

print(dist)

returnmtx,dist

else:

print("Calibrationfailed,checktheimage.")

returnNone,None

#在每次機(jī)器人操作前調(diào)用此函數(shù)進(jìn)行動(dòng)態(tài)標(biāo)定

mtx,dist=dynamic_calibration('current_image.jpg')2.2.4解釋此代碼示例展示了如何在每次機(jī)器人操作前進(jìn)行動(dòng)態(tài)標(biāo)定。通過讀取當(dāng)前環(huán)境下的圖像,檢測棋盤格角點(diǎn),并使用這些角點(diǎn)更新標(biāo)定參數(shù)。這樣,即使在環(huán)境條件變化時(shí),視覺系統(tǒng)也能保持高精度和可靠性。通過以上原理和代碼示例的介紹,我們可以看到視覺傳感器標(biāo)定對于提高工業(yè)機(jī)器人精度和確保視覺系統(tǒng)可靠性的重要性。標(biāo)定過程不僅需要精確的硬件和算法,還需要對環(huán)境變化的適應(yīng)能力,以確保在各種條件下都能實(shí)現(xiàn)準(zhǔn)確的視覺定位和識(shí)別。3視覺傳感器標(biāo)定的基本概念3.1標(biāo)定板介紹標(biāo)定板是視覺傳感器標(biāo)定過程中不可或缺的工具,用于提供已知幾何信息的參考。標(biāo)定板通常由一系列均勻分布的特征點(diǎn)組成,這些特征點(diǎn)可以是棋盤格、圓點(diǎn)陣列或任意其他具有明確幾何結(jié)構(gòu)的圖案。標(biāo)定板的尺寸、特征點(diǎn)的大小和間距都是已知的,這使得相機(jī)能夠通過識(shí)別這些特征點(diǎn)來計(jì)算其內(nèi)部參數(shù)和外部參數(shù)。3.1.1示例:棋盤格標(biāo)定板假設(shè)我們使用一個(gè)棋盤格標(biāo)定板,其尺寸為9x6,每個(gè)方格的邊長為30mm。在標(biāo)定過程中,我們需要從不同角度和距離拍攝標(biāo)定板的多張圖像,以確保標(biāo)定的準(zhǔn)確性。importnumpyasnp

importcv2

importglob

#棋盤格的尺寸

pattern_size=(9,6)

#方格的邊長

square_size=30.0

#生成棋盤格的3D坐標(biāo)

pattern_points=np.zeros((d(pattern_size),3),np.float32)

pattern_points[:,:2]=np.indices(pattern_size).T.reshape(-1,2)

pattern_points*=square_size

#獲取所有棋盤格圖像的文件名

images=glob.glob('calibration_images/*.jpg')

#存儲(chǔ)所有棋盤格角點(diǎn)的3D和2D坐標(biāo)

object_points=[]#3D點(diǎn)

image_points=[]#2D點(diǎn)

forfninimages:

img=cv2.imread(fn)

gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

#尋找棋盤格角點(diǎn)

found,corners=cv2.findChessboardCorners(gray,pattern_size)

iffound:

term=(cv2.TERM_CRITERIA_EPS+cv2.TERM_CRITERIA_COUNT,30,0.1)

cv2.cornerSubPix(gray,corners,(5,5),(-1,-1),term)

#將3D點(diǎn)和2D點(diǎn)添加到列表中

object_points.append(pattern_points)

image_points.append(corners)3.2內(nèi)參與外參解釋在視覺傳感器標(biāo)定中,內(nèi)參和外參是兩個(gè)關(guān)鍵概念,它們分別描述了相機(jī)的內(nèi)部屬性和相機(jī)相對于世界坐標(biāo)系的位置和方向。3.2.1內(nèi)參內(nèi)參主要包括焦距、主點(diǎn)位置和畸變系數(shù)。焦距和主點(diǎn)位置用于描述相機(jī)的光學(xué)特性,而畸變系數(shù)則用于校正圖像中的非線性畸變。3.2.2示例:計(jì)算內(nèi)參使用OpenCV的calibrateCamera函數(shù),我們可以從標(biāo)定板的圖像中計(jì)算出相機(jī)的內(nèi)參。#計(jì)算相機(jī)內(nèi)參

ret,camera_matrix,dist_coeffs,rvecs,tvecs=cv2.calibrateCamera(object_points,image_points,gray.shape[::-1],None,None)

#打印相機(jī)內(nèi)參

print("CameraMatrix:\n",camera_matrix)

print("\nDistortionCoefficients:\n",dist_coeffs)3.2.3外參外參描述了相機(jī)相對于世界坐標(biāo)系的位置和方向,通常包括旋轉(zhuǎn)向量和平移向量。旋轉(zhuǎn)向量描述了相機(jī)的旋轉(zhuǎn)角度,而平移向量描述了相機(jī)的平移距離。3.2.4示例:計(jì)算外參同樣使用calibrateCamera函數(shù),我們可以得到每張圖像的旋轉(zhuǎn)向量和平移向量,這些向量描述了相機(jī)在拍攝該圖像時(shí)相對于標(biāo)定板的位置和方向。#選擇一張圖像來計(jì)算外參

img=cv2.imread('calibration_images/image1.jpg')

gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

#尋找棋盤格角點(diǎn)

found,corners=cv2.findChessboardCorners(gray,pattern_size)

iffound:

term=(cv2.TERM_CRITERIA_EPS+cv2.TERM_CRITERIA_COUNT,30,0.1)

cv2.cornerSubPix(gray,corners,(5,5),(-1,-1),term)

#計(jì)算外參

rvec,tvec,_=cv2.solvePnP(pattern_points,corners,camera_matrix,dist_coeffs)

#打印旋轉(zhuǎn)向量和平移向量

print("RotationVector:\n",rvec)

print("\nTranslationVector:\n",tvec)通過上述代碼,我們不僅能夠計(jì)算出相機(jī)的內(nèi)參,還能夠計(jì)算出每張圖像的外參,從而全面了解相機(jī)的幾何特性。這些參數(shù)對于后續(xù)的圖像處理和機(jī)器人定位至關(guān)重要,能夠幫助我們更準(zhǔn)確地理解和操作視覺信息。4視覺傳感器標(biāo)定流程4.1準(zhǔn)備標(biāo)定工具在開始視覺傳感器的標(biāo)定之前,首先需要準(zhǔn)備一些標(biāo)定工具。這些工具包括:標(biāo)定板:通常是一個(gè)帶有已知幾何特征的平面板,如棋盤格。標(biāo)定板的尺寸和特征點(diǎn)的坐標(biāo)需要精確測量。相機(jī):用于采集標(biāo)定板圖像的視覺傳感器。圖像處理軟件:用于處理采集到的圖像數(shù)據(jù),提取特征點(diǎn)。標(biāo)定算法:如OpenCV中的相機(jī)標(biāo)定算法,用于計(jì)算相機(jī)的內(nèi)參和外參。4.2采集圖像數(shù)據(jù)采集圖像數(shù)據(jù)是標(biāo)定過程中的關(guān)鍵步驟。需要從不同角度和距離拍攝標(biāo)定板的多幅圖像,以確保標(biāo)定的準(zhǔn)確性。importcv2

importnumpyasnp

#初始化標(biāo)定板的特征點(diǎn)坐標(biāo)

objp=np.zeros((6*7,3),np.float32)

objp[:,:2]=np.mgrid[0:7,0:6].T.reshape(-1,2)

#存儲(chǔ)所有圖像的特征點(diǎn)坐標(biāo)

objpoints=[]#在世界坐標(biāo)系中的特征點(diǎn)

imgpoints=[]#在圖像坐標(biāo)系中的特征點(diǎn)

#讀取圖像列表

images=['calib1.png','calib2.png','calib3.png','calib4.png','calib5.png']

forfnameinimages:

img=cv2.imread(fname)

gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

#嘗試找到棋盤格的角點(diǎn)

ret,corners=cv2.findChessboardCorners(gray,(7,6),None)

#如果找到了足夠的角點(diǎn),將其添加到對象點(diǎn)和圖像點(diǎn)列表中

ifret==True:

objpoints.append(objp)

imgpoints.append(corners)4.3計(jì)算內(nèi)參矩陣內(nèi)參矩陣包含了相機(jī)的焦距、主點(diǎn)位置等信息。OpenCV提供了calibrateCamera函數(shù)來計(jì)算這些參數(shù)。#使用OpenCV計(jì)算內(nèi)參矩陣

ret,mtx,dist,rvecs,tvecs=cv2.calibrateCamera(objpoints,imgpoints,gray.shape[::-1],None,None)

#打印內(nèi)參矩陣

print("內(nèi)參矩陣:\n",mtx)

#打印畸變系數(shù)

print("畸變系數(shù):\n",dist)4.4計(jì)算外參矩陣外參矩陣描述了相機(jī)相對于世界坐標(biāo)系的位置和姿態(tài)。在標(biāo)定過程中,每幅圖像的外參矩陣都會(huì)被計(jì)算出來。#選擇一幅圖像來計(jì)算其外參矩陣

img=cv2.imread('calib1.png')

gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

#獲取該圖像的特征點(diǎn)

ret,corners=cv2.findChessboardCorners(gray,(7,6),None)

#如果找到了足夠的角點(diǎn),計(jì)算外參矩陣

ifret==True:

rvec,tvec,_=cv2.solvePnP(objp,corners,mtx,dist)

print("旋轉(zhuǎn)向量:\n",rvec)

print("平移向量:\n",tvec)4.5評估標(biāo)定結(jié)果標(biāo)定結(jié)果的評估通常包括計(jì)算重投影誤差和檢查畸變校正效果。#計(jì)算重投影誤差

mean_error=0

foriinrange(len(objpoints)):

imgpoints2,_=jectPoints(objpoints[i],rvecs[i],tvecs[i],mtx,dist)

error=cv2.norm(imgpoints[i],imgpoints2,cv2.NORM_L2)/len(imgpoints2)

mean_error+=error

print("總平均重投影誤差:",mean_error/len(objpoints))

#畸變校正效果檢查

img=cv2.imread('calib1.png')

h,w=img.shape[:2]

newcameramtx,roi=cv2.getOptimalNewCameraMatrix(mtx,dist,(w,h),1,(w,h))

#校正圖像

dst=cv2.undistort(img,mtx,dist,None,newcameramtx)

#裁剪圖像

x,y,w,h=roi

dst=dst[y:y+h,x:x+w]

cv2.imwrite('calibresult.png',dst)通過上述步驟,我們可以完成視覺傳感器的標(biāo)定,得到相機(jī)的內(nèi)參和外參矩陣,以及評估標(biāo)定結(jié)果的準(zhǔn)確性。這為后續(xù)的視覺應(yīng)用,如物體識(shí)別、定位和跟蹤,提供了基礎(chǔ)。5視覺傳感器標(biāo)定的常見方法5.1棋盤格標(biāo)定法5.1.1原理棋盤格標(biāo)定法是視覺傳感器標(biāo)定中最常用的方法之一。它基于一個(gè)已知幾何尺寸的棋盤格圖案,通過在不同位置和角度拍攝該圖案,收集一系列圖像,然后利用這些圖像中的角點(diǎn)信息來計(jì)算相機(jī)的內(nèi)參和外參。內(nèi)參包括焦距、主點(diǎn)位置和徑向畸變系數(shù)等,而外參則涉及相機(jī)在世界坐標(biāo)系中的位置和姿態(tài)。5.1.2內(nèi)容角點(diǎn)檢測在棋盤格標(biāo)定法中,首先需要檢測圖像中的角點(diǎn)。OpenCV提供了一個(gè)強(qiáng)大的角點(diǎn)檢測功能,可以自動(dòng)識(shí)別棋盤格的角點(diǎn)位置。內(nèi)參計(jì)算一旦檢測到角點(diǎn),就可以使用這些點(diǎn)來計(jì)算相機(jī)的內(nèi)參。OpenCV的calibrateCamera函數(shù)可以完成這一任務(wù),它需要角點(diǎn)在圖像中的位置和在世界坐標(biāo)系中的位置作為輸入。示例代碼importnumpyasnp

importcv2

importglob

#棋盤格的尺寸

pattern_size=(7,7)

#世界坐標(biāo)系中角點(diǎn)的位置

objp=np.zeros((pattern_size[0]*pattern_size[1],3),np.float32)

objp[:,:2]=np.mgrid[0:pattern_size[0],0:pattern_size[1]].T.reshape(-1,2)

#存儲(chǔ)所有角點(diǎn)在世界坐標(biāo)系和圖像坐標(biāo)系中的位置

objpoints=[]#世界坐標(biāo)系中的角點(diǎn)位置

imgpoints=[]#圖像坐標(biāo)系中的角點(diǎn)位置

#加載所有棋盤格圖像

images=glob.glob('calibration_images/*.jpg')

forfnameinimages:

img=cv2.imread(fname)

gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

#嘗試檢測角點(diǎn)

ret,corners=cv2.findChessboardCorners(gray,pattern_size,None)

#如果角點(diǎn)檢測成功,添加到列表中

ifret==True:

objpoints.append(objp)

imgpoints.append(corners)

#在圖像上繪制角點(diǎn)

cv2.drawChessboardCorners(img,pattern_size,corners,ret)

cv2.imshow('img',img)

cv2.waitKey(500)

cv2.destroyAllWindows()

#計(jì)算相機(jī)內(nèi)參

ret,mtx,dist,rvecs,tvecs=cv2.calibrateCamera(objpoints,imgpoints,gray.shape[::-1],None,None)5.1.3解釋上述代碼首先定義了棋盤格的尺寸和角點(diǎn)在世界坐標(biāo)系中的位置。然后,它加載所有用于標(biāo)定的棋盤格圖像,并在每張圖像上嘗試檢測角點(diǎn)。如果角點(diǎn)檢測成功,這些角點(diǎn)的位置將被添加到objpoints和imgpoints列表中。最后,使用calibrateCamera函數(shù)計(jì)算相機(jī)的內(nèi)參。5.2圓點(diǎn)陣列標(biāo)定法5.2.1原理圓點(diǎn)陣列標(biāo)定法與棋盤格標(biāo)定法類似,但使用的是圓點(diǎn)陣列而不是棋盤格。這種方法在某些情況下可能更有效,尤其是在需要高精度標(biāo)定或棋盤格檢測困難的情況下。5.2.2內(nèi)容圓點(diǎn)檢測OpenCV也提供了檢測圓點(diǎn)陣列的功能,通過findCirclesGrid函數(shù)來識(shí)別圓點(diǎn)的位置。內(nèi)參計(jì)算檢測到圓點(diǎn)后,可以使用與棋盤格標(biāo)定法相同的方法來計(jì)算相機(jī)的內(nèi)參。示例代碼importnumpyasnp

importcv2

importglob

#圓點(diǎn)陣列的尺寸

pattern_size=(7,7)

#世界坐標(biāo)系中圓點(diǎn)的位置

objp=np.zeros((pattern_size[0]*pattern_size[1],3),np.float32)

objp[:,:2]=np.mgrid[0:pattern_size[0],0:pattern_size[1]].T.reshape(-1,2)

#存儲(chǔ)所有圓點(diǎn)在世界坐標(biāo)系和圖像坐標(biāo)系中的位置

objpoints=[]#世界坐標(biāo)系中的圓點(diǎn)位置

imgpoints=[]#圖像坐標(biāo)系中的圓點(diǎn)位置

#加載所有圓點(diǎn)陣列圖像

images=glob.glob('calibration_images/*.jpg')

forfnameinimages:

img=cv2.imread(fname)

gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

#嘗試檢測圓點(diǎn)

ret,corners=cv2.findCirclesGrid(gray,pattern_size,None)

#如果圓點(diǎn)檢測成功,添加到列表中

ifret==True:

objpoints.append(objp)

imgpoints.append(corners)

#在圖像上繪制圓點(diǎn)

cv2.drawChessboardCorners(img,pattern_size,corners,ret)

cv2.imshow('img',img)

cv2.waitKey(500)

cv2.destroyAllWindows()

#計(jì)算相機(jī)內(nèi)參

ret,mtx,dist,rvecs,tvecs=cv2.calibrateCamera(objpoints,imgpoints,gray.shape[::-1],None,None)5.2.3解釋這段代碼與棋盤格標(biāo)定法的代碼非常相似,主要的區(qū)別在于使用findCirclesGrid函數(shù)來檢測圓點(diǎn)陣列的角點(diǎn)。檢測到的圓點(diǎn)位置同樣用于計(jì)算相機(jī)的內(nèi)參。5.3自標(biāo)定方法5.3.1原理自標(biāo)定方法是一種不需要已知標(biāo)定圖案尺寸的標(biāo)定技術(shù)。它通過分析相機(jī)在不同位置拍攝的圖像,利用圖像間的幾何關(guān)系來估計(jì)相機(jī)參數(shù)。這種方法在動(dòng)態(tài)環(huán)境或無法使用標(biāo)準(zhǔn)標(biāo)定圖案的情況下非常有用。5.3.2內(nèi)容特征點(diǎn)匹配自標(biāo)定方法首先需要在不同圖像中找到相同的特征點(diǎn),并進(jìn)行匹配。相機(jī)參數(shù)估計(jì)通過分析匹配的特征點(diǎn)在不同圖像中的位置,可以估計(jì)相機(jī)的參數(shù),包括內(nèi)參和外參。示例代碼importnumpyasnp

importcv2

frommatplotlibimportpyplotasplt

#加載圖像

img1=cv2.imread('image1.jpg',0)#queryImage

img2=cv2.imread('image2.jpg',0)#trainImage

#初始化ORB特征檢測器

orb=cv2.ORB_create()

#找到關(guān)鍵點(diǎn)和描述符

kp1,des1=orb.detectAndCompute(img1,None)

kp2,des2=orb.detectAndCompute(img2,None)

#創(chuàng)建BFMatcher對象

bf=cv2.BFMatcher(cv2.NORM_HAMMING,crossCheck=True)

#匹配描述符

matches=bf.match(des1,des2)

#按距離排序

matches=sorted(matches,key=lambdax:x.distance)

#繪制前10個(gè)匹配

img3=cv2.drawMatches(img1,kp1,img2,kp2,matches[:10],None,flags=2)

plt.imshow(img3),plt.show()

#使用匹配的關(guān)鍵點(diǎn)進(jìn)行自標(biāo)定

src_pts=np.float32([kp1[m.queryIdx].ptforminmatches]).reshape(-1,1,2)

dst_pts=np.float32([kp2[m.trainIdx].ptforminmatches]).reshape(-1,1,2)

M,mask=cv2.findHomography(src_pts,dst_pts,cv2.RANSAC,5.0)5.3.3解釋這段代碼使用了ORB特征檢測器來找到圖像中的關(guān)鍵點(diǎn),并使用BFMatcher進(jìn)行特征點(diǎn)匹配。匹配的關(guān)鍵點(diǎn)用于估計(jì)兩幅圖像之間的單應(yīng)性矩陣,這是自標(biāo)定方法中的一個(gè)關(guān)鍵步驟。然而,完整的自標(biāo)定過程涉及到更復(fù)雜的數(shù)學(xué)和算法,通常需要處理多幅圖像,并使用更高級的算法來估計(jì)相機(jī)參數(shù)。以上三種方法是工業(yè)機(jī)器人視覺傳感器標(biāo)定中常見的技術(shù),每種方法都有其適用場景和優(yōu)缺點(diǎn)。選擇合適的方法取決于具體的應(yīng)用需求和可用的標(biāo)定資源。6視覺傳感器標(biāo)定的實(shí)踐案例6.1工業(yè)機(jī)器人裝配線視覺標(biāo)定6.1.1引言在工業(yè)機(jī)器人裝配線中,視覺傳感器的標(biāo)定是確保機(jī)器人精確操作的關(guān)鍵步驟。標(biāo)定過程涉及校準(zhǔn)相機(jī)參數(shù),以實(shí)現(xiàn)從圖像像素到真實(shí)世界坐標(biāo)的準(zhǔn)確轉(zhuǎn)換。本節(jié)將詳細(xì)介紹工業(yè)機(jī)器人裝配線視覺標(biāo)定的原理與實(shí)踐,包括相機(jī)內(nèi)參和外參的標(biāo)定方法。6.1.2相機(jī)內(nèi)參標(biāo)定相機(jī)內(nèi)參標(biāo)定主要涉及確定相機(jī)的焦距、主點(diǎn)位置和畸變系數(shù)。這些參數(shù)對于糾正圖像畸變和實(shí)現(xiàn)像素到真實(shí)坐標(biāo)轉(zhuǎn)換至關(guān)重要。標(biāo)定工具OpenCV:一個(gè)廣泛使用的計(jì)算機(jī)視覺庫,提供了相機(jī)標(biāo)定的函數(shù)。棋盤格:作為標(biāo)定圖案,用于識(shí)別相機(jī)的內(nèi)參。標(biāo)定步驟準(zhǔn)備棋盤格:確保棋盤格的尺寸和網(wǎng)格大小已知。拍攝多張棋盤格圖像:從不同角度和距離拍攝,確保棋盤格的每個(gè)角點(diǎn)都被清晰識(shí)別。識(shí)別角點(diǎn):使用OpenCV的findChessboardCorners函數(shù)識(shí)別棋盤格的角點(diǎn)。標(biāo)定相機(jī):調(diào)用calibrateCamera函數(shù),輸入角點(diǎn)的圖像坐標(biāo)和真實(shí)坐標(biāo),計(jì)算相機(jī)內(nèi)參。代碼示例importnumpyasnp

importcv2

importglob

#棋盤格的尺寸

CHECKERBOARD=(6,9)

criteria=(cv2.TERM_CRITERIA_EPS+cv2.TERM_CRITERIA_MAX_ITER,30,0.001)

#世界坐標(biāo)系中的棋盤格角點(diǎn)

objp=np.zeros((1,CHECKERBOARD[0]*CHECKERBOARD[1],3),np.float32)

objp[0,:,:2]=np.mgrid[0:CHECKERBOARD[0],0:CHECKERBOARD[1]].T.reshape(-1,2)

#存儲(chǔ)所有圖像的角點(diǎn)

objpoints=[]#在世界坐標(biāo)系中的角點(diǎn)

imgpoints=[]#在圖像坐標(biāo)系中的角點(diǎn)

#讀取所有棋盤格圖像

images=glob.glob('calibration_images/*.jpg')

forfnameinimages:

img=cv2.imread(fname)

gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

#尋找棋盤格角點(diǎn)

ret,corners=cv2.findChessboardCorners(gray,CHECKERBOARD,None)

#如果找到足夠角點(diǎn),則增加數(shù)據(jù)點(diǎn)

ifret==True:

objpoints.append(objp)

cv2.cornerSubPix(gray,corners,(11,11),(-1,-1),criteria)

imgpoints.append(corners)

#繪制并顯示角點(diǎn)

cv2.drawChessboardCorners(img,CHECKERBOARD,corners,ret)

cv2.imshow('img',img)

cv2.waitKey(500)

cv2.destroyAllWindows()

#標(biāo)定相機(jī)

ret,mtx,dist,rvecs,tvecs=cv2.calibrateCamera(objpoints,imgpoints,gray.shape[::-1],None,None)

#打印相機(jī)內(nèi)參

print("Cameramatrix:\n")

print(mtx)

print("dist:\n")

print(dist)6.1.3相機(jī)外參標(biāo)定相機(jī)外參標(biāo)定涉及確定相機(jī)相對于機(jī)器人基座坐標(biāo)系的位置和姿態(tài)。這通常通過在機(jī)器人工作空間內(nèi)放置已知坐標(biāo)點(diǎn)并拍攝圖像來實(shí)現(xiàn)。標(biāo)定步驟放置標(biāo)定點(diǎn):在機(jī)器人工作空間內(nèi)放置多個(gè)已知坐標(biāo)點(diǎn)。拍攝圖像:從不同位置拍攝包含標(biāo)定點(diǎn)的圖像。識(shí)別標(biāo)定點(diǎn):使用圖像處理技術(shù)識(shí)別標(biāo)定點(diǎn)的位置。計(jì)算外參:使用已知的標(biāo)定點(diǎn)真實(shí)坐標(biāo)和圖像坐標(biāo),計(jì)算相機(jī)相對于機(jī)器人基座的位姿。代碼示例#假設(shè)已知的標(biāo)定點(diǎn)真實(shí)坐標(biāo)

world_points=np.array([[0,0,0],[1,0,0],[0,1,0],[1,1,0]],dtype=np.float32)

#從圖像中識(shí)別的標(biāo)定點(diǎn)坐標(biāo)

image_points=np.array([[[100,100]],[[200,100]],[[100,200]],[[200,200]]],dtype=np.float32)

#使用OpenCV計(jì)算相機(jī)外參

_,rvec,tvec,_=cv2.solvePnPRansac(world_points,image_points,mtx,dist)

#打印相機(jī)外參

print("Rotationvector:\n")

print(rvec)

print("Translationvector:\n")

print(tvec)6.2機(jī)器人抓取系統(tǒng)視覺標(biāo)定6.2.1引言機(jī)器人抓取系統(tǒng)中的視覺標(biāo)定,旨在確保機(jī)器人能夠準(zhǔn)確識(shí)別和定位物體,從而實(shí)現(xiàn)精確抓取。標(biāo)定過程不僅包括相機(jī)內(nèi)參的校準(zhǔn),還涉及相機(jī)與機(jī)器人手眼協(xié)調(diào)的標(biāo)定。6.2.2相機(jī)與機(jī)器人手眼協(xié)調(diào)標(biāo)定手眼協(xié)調(diào)標(biāo)定是確定相機(jī)相對于機(jī)器人末端執(zhí)行器位置和姿態(tài)的過程。這通常通過在機(jī)器人末端執(zhí)行器上安裝標(biāo)定圖案,并讓機(jī)器人在不同位置抓取該圖案來實(shí)現(xiàn)。標(biāo)定步驟安裝標(biāo)定圖案:在機(jī)器人末端執(zhí)行器上固定一個(gè)標(biāo)定圖案,如棋盤格。機(jī)器人抓取:讓機(jī)器人在不同位置抓取標(biāo)定圖案,同時(shí)記錄機(jī)器人末端執(zhí)行器的位置和姿態(tài)。圖像處理:處理抓取時(shí)拍攝的圖像,識(shí)別標(biāo)定圖案的角點(diǎn)。計(jì)算手眼標(biāo)定參數(shù):使用機(jī)器人末端執(zhí)行器的位置、姿態(tài)和圖像中角點(diǎn)的坐標(biāo),計(jì)算相機(jī)與末端執(zhí)行器的相對位姿。代碼示例#假設(shè)已知的機(jī)器人末端執(zhí)行器位置和姿態(tài)

robot_positions=np.array([[0,0,0],[1,0,0],[0,1,0],[1,1,0]],dtype=np.float32)

#從圖像中識(shí)別的標(biāo)定點(diǎn)坐標(biāo)

image_points=np.array([[[100,100]],[[200,100]],[[100,200]],[[200,200]]],dtype=np.float32)

#使用OpenCV計(jì)算手眼標(biāo)定參數(shù)

_,rvec,tvec,_=cv2.solvePnPRansac(world_points,image_points,mtx,dist)

#轉(zhuǎn)換旋轉(zhuǎn)向量為旋轉(zhuǎn)矩陣

R,_=cv2.Rodrigues(rvec)

#打印手眼標(biāo)定參數(shù)

print("Rotationmatrix:\n")

print(R)

print("Translationvector:\n")

print(tvec)6.2.3結(jié)論通過上述步驟,我們可以有效地對工業(yè)機(jī)器人裝配線和抓取系統(tǒng)中的視覺傳感器進(jìn)行標(biāo)定,確保機(jī)器人能夠準(zhǔn)確地感知和操作其工作環(huán)境。標(biāo)定過程不僅提高了機(jī)器人的操作精度,還為實(shí)現(xiàn)自動(dòng)化和智能化的工業(yè)生產(chǎn)奠定了基礎(chǔ)。7視覺傳感器標(biāo)定的注意事項(xiàng)7.1環(huán)境光照控制在進(jìn)行視覺傳感器標(biāo)定時(shí),環(huán)境光照的控制至關(guān)重要。光照強(qiáng)度、方向和顏色的變化都會(huì)影響到圖像的采集質(zhì)量,進(jìn)而影響標(biāo)定的準(zhǔn)確性。為了確保標(biāo)定過程的穩(wěn)定性和重復(fù)性,以下幾點(diǎn)需特別注意:光照強(qiáng)度:應(yīng)保持光照強(qiáng)度恒定,避免因光線過強(qiáng)或過弱導(dǎo)致圖像曝光不足或過度曝光。使用可調(diào)節(jié)的光源,如LED燈,可以有效控制光照強(qiáng)度。光照方向:確保光源方向與視覺傳感器的視角垂直,避免產(chǎn)生陰影或反光,影響圖像質(zhì)量。使用漫反射光源可以減少直接反光的影響。顏色一致性:在標(biāo)定過程中,應(yīng)確保環(huán)境光的顏色一致性,避免色溫變化導(dǎo)致圖像顏色失真。使用色溫可調(diào)的光源,如三基色燈,可以幫助保持顏色的一致性。7.2標(biāo)定板放置角度標(biāo)定板的放置角度直接影響到視覺傳感器的標(biāo)定結(jié)果。標(biāo)定板應(yīng)放置在視覺傳感器的視野中心,且與傳感器的視角垂直,以確保標(biāo)定的準(zhǔn)確性。以下幾點(diǎn)是關(guān)于標(biāo)定板放置角度的注意事項(xiàng):垂直對準(zhǔn):標(biāo)定板應(yīng)與視覺傳感器的視角垂直,避免因角度偏差導(dǎo)致的圖像畸變。使用水平儀或角度測量工具可以幫助精確調(diào)整標(biāo)定板的角度。視野中心:標(biāo)定板應(yīng)放置在視覺傳感器的視野中心,確保標(biāo)定點(diǎn)分布均勻,提高標(biāo)定的精度。通過調(diào)整標(biāo)定板的位置,使其在圖像中占據(jù)中心位置。穩(wěn)定性:標(biāo)定板在標(biāo)定過程中應(yīng)保持穩(wěn)定,避免因移動(dòng)或振動(dòng)導(dǎo)致的圖像模糊。使用穩(wěn)固的支架或固定裝置可以提高標(biāo)定板的穩(wěn)定性。7.3圖像采集質(zhì)量圖像采集質(zhì)量是視覺傳感器標(biāo)定成功的關(guān)鍵。高質(zhì)量的圖像可以提供更準(zhǔn)確的特征點(diǎn)檢測和匹配,從而提高標(biāo)定的精度。以下幾點(diǎn)是關(guān)于圖像采集質(zhì)量的注意事項(xiàng):分辨率:確保視覺傳感器的分辨率足夠高,以捕捉標(biāo)定板上的細(xì)節(jié)。高分辨率的圖像可以提供更多的信息,有助于提高標(biāo)定精度。噪聲控制:減少圖像噪聲,提高圖像的清晰度。使用圖像處理算法,如中值濾波或高斯濾波,可以有效降低圖像噪聲。特征點(diǎn)檢測:確保圖像中可以準(zhǔn)確檢測到標(biāo)定板上的特征點(diǎn)。使用特征點(diǎn)檢測算法,如Harris角點(diǎn)檢測或SIFT特征點(diǎn)檢測,可以提高特征點(diǎn)檢測的準(zhǔn)確性。7.3.1示例:使用OpenCV進(jìn)行圖像噪聲控制importcv2

importnumpyasnp

#讀取圖像

image=cv2.imread('calibration_image.jpg',0)

#應(yīng)用中值濾波

median_filtered=cv2.medianBlur(image,5)

#應(yīng)用高斯濾波

gaussian_filtered=cv2.GaussianBlur(image,(5,5),0)

#顯示原圖和濾波后的圖像

cv2.imshow('OriginalImage',image)

cv2.imshow('MedianFiltered',median_filtered)

cv2.imshow('GaussianFiltered',gaussian_filtered)

#等待按鍵并關(guān)閉窗口

cv2.waitKey(0)

cv2.destroyAllWindows()7.3.2示例解釋在上述代碼中,我們首先使用cv2.imread函數(shù)讀取標(biāo)定圖像。然后,我們分別應(yīng)用中值濾波和高斯濾波來減少圖像噪聲。中值濾波通過替換像素值為鄰域內(nèi)的中值來減少噪聲,而高斯濾波則通過應(yīng)用高斯核來平滑圖像,同時(shí)保留邊緣信息。最后,我們使用cv2.imshow函數(shù)顯示原圖和濾波后的圖像,以便直觀地比較濾波效果。通過控制環(huán)境光照、精確調(diào)整標(biāo)定板角度和提高圖像采集質(zhì)量,可以顯著提高視覺傳感器標(biāo)定的精度和可靠性。這些注意事項(xiàng)是進(jìn)行視覺傳感器標(biāo)定時(shí)不可忽視的關(guān)鍵因素。8視覺傳感器標(biāo)定的未來趨勢8.1自動(dòng)化標(biāo)定技術(shù)在工業(yè)機(jī)器人領(lǐng)域,視覺傳感器的標(biāo)定是確保機(jī)器人精確操作的關(guān)鍵步驟。傳統(tǒng)的標(biāo)定方法往往需要人工參與,進(jìn)行復(fù)雜的測量和調(diào)整,這不僅耗時(shí),而且容易引入人為誤差。隨著技術(shù)的發(fā)展,自動(dòng)化標(biāo)定技術(shù)正逐漸成為主流,它利用算法自動(dòng)完成標(biāo)定過程,提高了效率和準(zhǔn)確性。8.1.1原理自動(dòng)化標(biāo)定技術(shù)基于計(jì)算機(jī)視覺原理,通過在視覺傳感器的視野中放置已知幾何形狀和尺寸的標(biāo)定板,算法可以自動(dòng)識(shí)別標(biāo)定板上的特征點(diǎn),如角點(diǎn)或圓心,然后通過數(shù)學(xué)模型計(jì)算出傳感器的內(nèi)參和外參。內(nèi)參包括焦距、主點(diǎn)位置和畸變系數(shù),外參則涉及傳感器相對于世界坐標(biāo)系的位置和姿態(tài)。8.1.2內(nèi)容標(biāo)定板設(shè)計(jì):標(biāo)定板通常設(shè)計(jì)為具有固定圖案的平面板,如棋盤格或圓環(huán)圖案,以便算法能夠可靠地檢測特征點(diǎn)。特征點(diǎn)檢測:使用如Harris角點(diǎn)檢測、SIFT或SURF等算法來自動(dòng)識(shí)別標(biāo)定板上的特征點(diǎn)。數(shù)學(xué)模型建立:通過最小二乘法等優(yōu)化算法,基于檢測到的特征點(diǎn)和已知的標(biāo)定板幾何信息,建立數(shù)學(xué)模型來求解傳感器的參數(shù)。參數(shù)優(yōu)化:利用迭代算法,如Levenberg-Marquardt算法,對模型參數(shù)進(jìn)行優(yōu)化,以提高標(biāo)定精度。8.1.3示例以下是一個(gè)使用Python和OpenCV進(jìn)行自動(dòng)化標(biāo)定的簡單示例:importnumpyasnp

importcv2

importglob

#標(biāo)定板的尺寸

CHECKERBOARD=(6,9)

criteria=(cv2.TERM_CRITERIA_EPS+cv2.TERM_CRITERIA_MAX_ITER,30,0.001)

#世界坐標(biāo)系中的標(biāo)定板角點(diǎn)

objp=np.zeros((CHECKERBOARD[0]*CHECKERBOARD[1],3),np.float32)

objp[:,:2]=np.mgrid[0:CHECKERBOARD[0],0:CHECKERBOARD[1]].T.reshape(-1,2)

#存儲(chǔ)所有圖像中檢測到的角點(diǎn)

objpoints=[]#在世界坐標(biāo)系中的3D點(diǎn)

imgpoints=[]#在圖像平面的2D點(diǎn)

#讀取所有標(biāo)定圖像

images=glob.glob('calibration_images/*.jpg')

forfnameinimages:

img=cv2.imread(fname)

gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

#嘗試檢測角點(diǎn)

ret,corners=cv2.findChessboardCorners(gray,CHECKERBOARD,None)

ifret==True:

objpoints.append(objp)

corners2=cv2.cornerSubPix(gray,corners,(11,11),(-1,-1),criteria)

imgpoints.append(corners2)

#可視化角點(diǎn)

cv2.drawChessboardCorners(img,CHECKERBOARD,corners2,ret)

cv2.imshow('img',img)

cv2.waitKey(500)

cv2.destroyAllWindows()

#標(biāo)定相機(jī)

ret,mtx,d

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論