基于AI的視覺(jué)系統(tǒng)自動(dòng)檢測(cè)焊點(diǎn)質(zhì)量_第1頁(yè)
基于AI的視覺(jué)系統(tǒng)自動(dòng)檢測(cè)焊點(diǎn)質(zhì)量_第2頁(yè)
基于AI的視覺(jué)系統(tǒng)自動(dòng)檢測(cè)焊點(diǎn)質(zhì)量_第3頁(yè)
基于AI的視覺(jué)系統(tǒng)自動(dòng)檢測(cè)焊點(diǎn)質(zhì)量_第4頁(yè)
基于AI的視覺(jué)系統(tǒng)自動(dòng)檢測(cè)焊點(diǎn)質(zhì)量_第5頁(yè)
已閱讀5頁(yè),還剩8頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

雙目立體視覺(jué)一直是機(jī)器視覺(jué)研究領(lǐng)域的發(fā)展熱點(diǎn)和難點(diǎn),“熱”是因?yàn)殡p目立體視覺(jué)有著及其廣闊的應(yīng)用前景,且隨著光學(xué)、計(jì)算機(jī)科學(xué)等學(xué)科的不斷發(fā)展,雙目立體技術(shù)將不斷進(jìn)步直到應(yīng)用到人類生活的方方面面?!半y”則是因?yàn)槭艿綌z像機(jī)、鏡頭等硬件設(shè)備及一些相關(guān)算法的限制。一.簡(jiǎn)介雙目立體視覺(jué)是機(jī)器視覺(jué)中的一個(gè)重要分支,自上世紀(jì)60年代中期開創(chuàng)以來(lái),經(jīng)過(guò)幾十年的發(fā)展,如今在機(jī)器人視覺(jué)、航空測(cè)繪、軍事應(yīng)及醫(yī)學(xué)成像、工業(yè)檢測(cè)上應(yīng)用極其廣泛。雙目立體視覺(jué)基于視差原理并利用成像設(shè)備從不同的位置獲取被測(cè)物體的左右兩幅圖像,然后根據(jù)三角測(cè)量原理計(jì)算空間點(diǎn)在二維圖像的位置偏差,最后再利用位置偏差進(jìn)行三維重建來(lái)獲取被測(cè)物體的三維幾何信息(本文不對(duì)雙目立體視覺(jué)的數(shù)學(xué)原理進(jìn)行詳細(xì)介紹)。二.雙目立體視覺(jué)的三大基本算法的原理及其代碼實(shí)現(xiàn)(基于opencv)雙目立體視覺(jué)中常用的基于區(qū)域的局部匹配準(zhǔn)則主要有圖像序列中對(duì)應(yīng)像素差的絕對(duì)值之和SAD(sumofabsolutedifferences)、對(duì)應(yīng)像素差的平方之和SSD(sumofsquareddifferences)及半全局匹配算法SGM(semi—globalmatching)。2.1SAD(sumofabsolutedifferences)的原理匹配算法SAD的基本思想是對(duì)經(jīng)行對(duì)準(zhǔn)后的左右視圖圖像的對(duì)應(yīng)像素塊的對(duì)應(yīng)像素差的絕對(duì)值進(jìn)行求和。其數(shù)學(xué)公式如下:SAD匹配算法的基本流程如下:①輸入兩幅已經(jīng)校正實(shí)現(xiàn)行對(duì)準(zhǔn)的左視圖(Left-Image)及右視圖(Right-Image)。②對(duì)左視圖Left-Image進(jìn)行掃描選定一個(gè)錨點(diǎn)并構(gòu)建一個(gè)類似于卷積核的小窗口。③用此小窗口覆蓋Left-Image,并選擇出小窗口覆蓋區(qū)域的全部像素點(diǎn)④同樣用此小窗口覆蓋Right-Image,并選擇出小窗口覆蓋區(qū)域的全部像素點(diǎn)。⑤Left-Image覆蓋區(qū)域的像素減去Right-Image覆蓋區(qū)域的像素,并求出所有像素點(diǎn)的差的絕對(duì)值之和。⑥移動(dòng)Right-Image的小窗口并重復(fù)④—⑤的操作(注意此處會(huì)設(shè)置一個(gè)搜索范圍,超過(guò)此范圍則跳出)⑦找到這個(gè)范圍內(nèi)SAD值最小的小窗口,此時(shí)便找到了與Left-Image錨點(diǎn)的最佳匹配的像素塊。2.1.1SAD(sumofabsolutedifferences)的基于opencv的C++代碼實(shí)現(xiàn)首先先定義一個(gè)SAD算法的頭文件(SAD_Algorithm.h):#include"iostream"#include"opencv2/opencv.hpp"#include"iomanip"usingnamespacestd;usingnamespacecv;classSAD{public:

SAD():winSize(7),DSR(30){}

SAD(int_winSize,int_DSR):winSize(_winSize),DSR(_DSR){}

MatcomputerSAD(Mat&L,Mat&R);//計(jì)算SADprivate:

intwinSize;//卷積核的尺寸

intDSR;

//視差搜索范圍};MatSAD::computerSAD(Mat&L,Mat&R){

intHeight=L.rows;

intWidth=L.cols;

MatKernel_L(Size(winSize,winSize),CV_8U,Scalar::all(0));

MatKernel_R(Size(winSize,winSize),CV_8U,Scalar::all(0));

MatDisparity(Height,Width,CV_8U,Scalar(0));//視差圖

for(inti=0;i<Width-winSize;i++)

//左圖從DSR開始遍歷

{

for(intj=0;j<Height-winSize;j++)

{

Kernel_L=L(Rect(i,j,winSize,winSize));

MatMM(1,DSR,CV_32F,Scalar(0));

for(intk=0;k<DSR;k++)

{

intx=i-k;

if(x>=0)

{

Kernel_R=R(Rect(x,j,winSize,winSize));

MatDif;

absdiff(Kernel_L,Kernel_R,Dif);//求差的絕對(duì)值之和

ScalarADD=sum(Dif);

floata=ADD[0];

MM.at<float>(k)=a;

}

}

PointminLoc;

minMaxLoc(MM,NULL,NULL,&minLoc,NULL);

intloc=minLoc.x;

//intloc=DSR-loc;

Disparity.at<char>(j,i)=loc*16;

}

doublerate=double(i)/(Width);

cout<<"已完成"<<setprecision(2)<<rate*100<<"%"<<endl;//顯示處理進(jìn)度

}

returnDisparity;}調(diào)用示例:#include"SAD_Algorithm.h"intmain(intargc,char*argv[]){

MatImg_L=imread("Teddy_L.png",0);

//此處調(diào)用的圖像已放入項(xiàng)目文件夾中

MatImg_R=imread("Teddy_R.png",0);

MatDisparity;

//創(chuàng)建視差圖

SADmySAD(7,30);

//給出SAD的參數(shù)

Disparity=mySAD.computerSAD(Img_L,Img_R);

imshow("Teddy_L",Img_L);

imshow("Teddy_R",Img_R);

imshow("Disparity",Disparity);

//顯示視差圖

waitKey();

system("pause");

//按任意鍵退出

return0;}2.1.2SAD算法的運(yùn)行效果可以看出SAD算法雖然運(yùn)行較快,但效果較差。2.2SSD(sumofsquareddifferences)的原理SSD(sumofsquareddifferences)算法大致與SAD(sumofabsolutedifferences)相似。其數(shù)學(xué)公式如下:因SSD匹配算法與SAD匹配算法的過(guò)程及代碼實(shí)現(xiàn)相類似,考慮到篇幅長(zhǎng)度的原因,故SSD算法的基本過(guò)程及代碼實(shí)現(xiàn)在本文中不在贅述,讀者可去自行實(shí)現(xiàn)。2.3SGBM(semi-globalblockmatching)的原理SGM(semi-globalmatching)是一種用于計(jì)算雙目立體視覺(jué)中的disparity的半全局匹配算法。其在opencv中的實(shí)現(xiàn)為SGBM(semi-globalblockmatching)。SGBM的原理:設(shè)置一個(gè)和disparitymap(由每個(gè)像素點(diǎn)的disparity所構(gòu)成)相關(guān)的全局能量函數(shù),使這個(gè)能量函數(shù)最小。原始文獻(xiàn):HeikoHirschmuller.Stereoprocessingbysemiglobalmatchingandmutualinformation.PatternAnalysisandMachineIntelligence,IEEETransactionson,30(2):328–341,2008.其能量函數(shù)如下:D--disparitymap(視差圖)p、q—圖像中的某個(gè)像素Np—像素點(diǎn)Pd相鄰像素點(diǎn)(一般認(rèn)為是8連通)C(P,Dp)--當(dāng)前像素點(diǎn)的disparity為Dp時(shí),該像素點(diǎn)的costP1、P2—懲罰系數(shù),分別適用于當(dāng)像素P相鄰像素中的disparity值與P的disparity差值為1和大于1時(shí)I[]—當(dāng)[]內(nèi)的參數(shù)為真時(shí)返回1,否則返回0SGBM算法的基本流程如下:①預(yù)處理:使用sobel算子對(duì)源圖像進(jìn)行處理,并將經(jīng)sobel算子處理后的圖像映射為新圖像,并得到圖像的梯度信息用于后續(xù)的計(jì)算代價(jià)。②代價(jià)計(jì)算:使用采樣方法對(duì)經(jīng)預(yù)處理得到的圖像梯度信息計(jì)算梯度代價(jià)、使用采樣方法對(duì)源圖像計(jì)算SAD代價(jià)。③動(dòng)態(tài)規(guī)劃:默認(rèn)四條路經(jīng),并對(duì)路徑規(guī)劃的參數(shù)P1,P2進(jìn)行設(shè)置(包括P1、P2、cn(圖像通道數(shù)量)以及SADWindowsize(SAD窗口大小)的設(shè)置)。④后處理:包括唯一性檢測(cè)、亞像素插值、左右一致性檢測(cè)、連通區(qū)域的檢測(cè)。2.3.1SGBM(semi-globalblockmatching)的基于opencv的C++代碼實(shí)現(xiàn)首先先定義一個(gè)SGBM算法的頭文件(SGBM_Algorithm.h):具體參數(shù)見代碼及其注釋(若讀者需優(yōu)化可自行調(diào)整),不再贅述enum{STEREO_BM=0,STEREO_SGBM=1,STEREO_HH=2,STEREO_VAR=3,STEREO_3WAY=4};#include"iostream"#include"opencv2/opencv.hpp"usingnamespacestd;usingnamespacecv;voidcalDispWithSGBM(MatImg_L,MatImg_R,Mat&imgDisparity8U){

SizeimgSize=Img_L.size();

intnumberOfDisparities=((imgSize.width/8)+15)&-16;

Ptr<StereoSGBM>sgbm=StereoSGBM::create(0,16,3);

intcn=Img_L.channels();

//左圖像的通道數(shù)

intSADWindowSize=9;

intsgbmWinSize=SADWindowSize>0?SADWindowSize:3;

sgbm->setMinDisparity(0);

//minDisparity最小視差默認(rèn)為0;

sgbm->setNumDisparities(numberOfDisparities);

//numDisparity視差搜索范圍,其值必須為16的整數(shù)倍;

sgbm->setP1(8*cn*sgbmWinSize*sgbmWinSize);

sgbm->setP2(32*cn*sgbmWinSize*sgbmWinSize);

//一般建議懲罰系數(shù)P1、P2取此兩值,P1、P2控制視差圖的光滑度

//P2越大,視差圖越平滑

sgbm->setDisp12MaxDiff(1);

//左右一致性檢測(cè)最大容許誤差閾值

sgbm->setPreFilterCap(31);

//預(yù)處理濾波器的截?cái)嘀?,預(yù)處理的輸出值僅保留

//[-preFilterCap,preFilterCap]范圍內(nèi)的值,參數(shù)范圍:1-31

sgbm->setUniquenessRatio(10);

//視差唯一性百分比:視差窗口范圍內(nèi)最低代價(jià)是次低代價(jià)的(1+uniquenessRatio/100)倍時(shí)

//最低代價(jià)對(duì)應(yīng)的視差值才是該像素點(diǎn)的視差,否則該像素點(diǎn)的視差為0,不能為負(fù)值,一般去5——15

sgbm->setSpeckleWindowSize(100);

//視差連通區(qū)域像素點(diǎn)個(gè)數(shù)的大?。簩?duì)于每一個(gè)視差點(diǎn),當(dāng)其連通區(qū)域的像素點(diǎn)個(gè)數(shù)小于

//speckleWindowSize時(shí),認(rèn)為該視差值無(wú)效,是噪點(diǎn)。

sgbm->setSpeckleRange(32);

//視差連通條件:在計(jì)算一個(gè)視差點(diǎn)的連通區(qū)域時(shí),當(dāng)下一個(gè)像素點(diǎn)視差變化絕對(duì)值大于

//speckleRange就認(rèn)為下一個(gè)視差像素點(diǎn)和當(dāng)前視差像素點(diǎn)是不連通的。

sgbm->setMode(0);

//模式選擇

sgbm->setBlockSize(sgbmWinSize);

//設(shè)置SAD代價(jià)計(jì)算窗口,一般在3*3到21*21之間

//blockSize(SADWindowSize)越小,也就是匹配代價(jià)計(jì)算的窗口越小,視差圖噪聲越大;

//blockSize越大,視差圖越平滑;

//太大的size容易導(dǎo)致過(guò)平滑,并且誤匹配增多,體現(xiàn)在視差圖中空洞增多//三種模式選擇(HH、SGBM、3WAY)

intalgorithm=STEREO_SGBM;

if(algorithm==STEREO_HH)

sgbm->setMode(StereoSGBM::MODE_HH);

elseif(algorithm==STEREO_SGBM)

sgbm->setMode(StereoSGBM::MODE_SGBM);

elseif(algorithm==STEREO_3WAY)

sgbm->setMode(StereoSGBM::MODE_SGBM_3WAY);

MatimgDisparity16S=Mat(Img_L.rows,Img_L.cols,CV_16S);

sgbm->compute(Img_L,Img_R,imgDisparity16S);

//--DisplayitasaCV_8UC1image:16位有符號(hào)轉(zhuǎn)為8位無(wú)符號(hào)

imgDisparity16S.convertTo(imgDisparity8U,CV_8U,255/(numberOfDisparities*16.));}調(diào)用示例:#include"SGBM_Algorithm.h"intmain(){

MatImg_L=imread("Teddy_L.png",0);

MatImg_R=imread("Teddy_R.png",0);

MatDisparity8U=Mat(Img_L.rows,Img_R.cols,CV_8UC1);//創(chuàng)建一個(gè)Disparity圖像

calDispWithSGBM(Img_L,Img_R,Disparity8U);

imshow("Teddy_L",Img_L);

imshow("Teddy_R",Img_R);

imshow("Disparity",Disparity8U);

waitKey();

system("pause");

//按任意鍵退出

return0;}2.3.2SGBM算法的運(yùn)行效果還順便調(diào)整了SADWindowsize的大小來(lái)給讀者探討并展示當(dāng)設(shè)置不同SADWindowsize大小時(shí)對(duì)Disparity效果圖的影響,其結(jié)果如下(皆為MODE_SGBM模式下):由上述在不同SADWindowsize大小設(shè)置(其他參數(shù)保持不變)的效果圖對(duì)比下我們可得知如下結(jié)論:SADWindowsize過(guò)小時(shí),視差圖的噪聲較多;隨著SADWindowsize的增大,視圖越平滑,但當(dāng)SADWindowsize過(guò)大時(shí),視差圖中的空洞現(xiàn)象會(huì)增加;故在選擇SADWindowsize的大小時(shí),應(yīng)選取合適的大?。ńㄗh選擇SADWindowsize=9)。三.雙目立體視覺(jué)的發(fā)展現(xiàn)狀目前在國(guó)外,雙目立體視覺(jué)技術(shù)已廣泛運(yùn)用于生產(chǎn)生活實(shí)際中,但在我國(guó),雙目立體視覺(jué)技術(shù)仍處在起步階段,仍需要在座的各位發(fā)奮圖強(qiáng)、力爭(zhēng)創(chuàng)新。3.1雙目立體視覺(jué)的發(fā)展方向就雙目立體視覺(jué)的發(fā)展現(xiàn)況和發(fā)展目標(biāo)(達(dá)到類似于人眼的通用雙目立體視覺(jué))仍是路漫漫其修遠(yuǎn)兮,我認(rèn)為進(jìn)一步的發(fā)展方向可以歸納如下:①探索新的更具有通用性的計(jì)算理論和匹配算法結(jié)構(gòu),以解決目前存在的灰度失真、噪聲干擾以及幾何畸變的問(wèn)題。②提高算法的性能,對(duì)算法進(jìn)行優(yōu)化,盡可能向?qū)崟r(shí)效果推進(jìn)。③建立更有效的雙目體視模型能更充分地反映立體視覺(jué)不確定性的本質(zhì)屬性,為匹配提供更多的約束信息,降低立體匹配的難度。④強(qiáng)調(diào)場(chǎng)景與任務(wù)的約束,建立適用于不同場(chǎng)景和任務(wù)的雙目立體視覺(jué)系統(tǒng)的標(biāo)準(zhǔn)和方法。3.2雙目立體視覺(jué)的國(guó)內(nèi)外發(fā)展動(dòng)態(tài)雙目體視目前主要應(yīng)用于四個(gè)領(lǐng)域:機(jī)器人導(dǎo)航、微操作系統(tǒng)的參數(shù)檢測(cè)、三維測(cè)量和虛擬現(xiàn)實(shí)。目前在國(guó)外,日本大阪大學(xué)自適應(yīng)機(jī)械系統(tǒng)研究院研制了一種自適應(yīng)雙目視覺(jué)伺服系統(tǒng),利用雙目體視的原理,如每幅圖像中相對(duì)靜止的三個(gè)標(biāo)志為參考,實(shí)時(shí)計(jì)算目標(biāo)圖像的雅可比短陣,從而預(yù)測(cè)出目標(biāo)下一步運(yùn)動(dòng)方向,實(shí)現(xiàn)了對(duì)動(dòng)方式未知的目標(biāo)的自適應(yīng)跟蹤。該系統(tǒng)僅要求兩幅圖像中都有靜止的參考標(biāo)志,無(wú)需攝像機(jī)參數(shù)。日本奈良科技大學(xué)信息科學(xué)學(xué)院提出了一種基于雙目立體視覺(jué)的增強(qiáng)現(xiàn)實(shí)系統(tǒng)(ar)注冊(cè)方法,通過(guò)動(dòng)態(tài)修正特征點(diǎn)的位置提

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論