0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

真實(shí)場景的雙目立體匹配獲取深度圖詳解

新機(jī)器視覺 ? 來源:博客園 ? 作者:一度逍遙 ? 2020-08-28 15:26 ? 次閱讀

雙目立體匹配一直是雙目視覺的研究熱點(diǎn),雙目相機(jī)拍攝同一場景的左、右兩幅視點(diǎn)圖像,運(yùn)用立體匹配匹配算法獲取視差圖,進(jìn)而獲取深度圖。而深度圖的應(yīng)用范圍非常廣泛,由于其能夠記錄場景中物體距離攝像機(jī)的距離,可以用以測量、三維重建、以及虛擬視點(diǎn)的合成等。

之前有兩篇博客簡要講過OpenCV3.4中的兩種立體匹配算法效果比較。以及利用視差圖合成新視點(diǎn)。里面用到的匹配圖像對(duì)是OpenCV自帶校正好的圖像對(duì)。而目前大多數(shù)立體匹配算法使用的都是標(biāo)準(zhǔn)測試平臺(tái)提供的標(biāo)準(zhǔn)圖像對(duì),比如著名的有如下兩個(gè):
MiddleBury

KITTI

但是對(duì)于想自己嘗試拍攝雙目圖片進(jìn)行立體匹配獲取深度圖,進(jìn)行三維重建等操作的童鞋來講,要做的工作是比使用校正好的標(biāo)準(zhǔn)測試圖像對(duì)要多的。因此博主覺得有必要從用雙目相機(jī)拍攝圖像開始,捋一捋這整個(gè)流程。

主要分四個(gè)部分講解:

攝像機(jī)標(biāo)定(包括內(nèi)參和外參)

雙目圖像的校正(包括畸變校正和立體校正)

立體匹配算法獲取視差圖,以及深度圖

利用視差圖,或者深度圖進(jìn)行虛擬視點(diǎn)的合成

注:如果沒有雙目相機(jī),可以使用單個(gè)相機(jī)平行移動(dòng)拍攝,外參可以通過攝像機(jī)自標(biāo)定算出。我用自己的手機(jī)拍攝,拍攝移動(dòng)時(shí)盡量保證平行移動(dòng)。

一、攝像機(jī)標(biāo)定

1.內(nèi)參標(biāo)定

攝像機(jī)內(nèi)參反映的是攝像機(jī)坐標(biāo)系到圖像坐標(biāo)系之間的投影關(guān)系。攝像機(jī)內(nèi)參的標(biāo)定使用張正友標(biāo)定法,簡單易操作,具體原理請(qǐng)拜讀張正友的大作《A Flexible New Technique for Camera Calibration》。當(dāng)然網(wǎng)上也會(huì)有很多資料可供查閱,MATLAB 有專門的攝像機(jī)標(biāo)定工具包,OpenCV封裝好的攝像機(jī)標(biāo)定API等。使用OpenCV進(jìn)行攝像機(jī)標(biāo)定的可以參考我的第一篇博客:http://www.cnblogs.com/riddick/p/6696858.html。里面提供有張正友標(biāo)定法OpenCV實(shí)現(xiàn)的源代碼git地址,僅供參考。

攝像機(jī)的內(nèi)參包括,fx, fy, cx, cy,以及畸變系數(shù)[k1,k2,p1,p2,k3],詳細(xì)就不贅述。我用手機(jī)對(duì)著電腦拍攝各個(gè)角度的棋盤格圖像,棋盤格圖像如圖所示:

使用OpenCV3.4+VS2015對(duì)手機(jī)進(jìn)行內(nèi)參標(biāo)定。標(biāo)定結(jié)果如下,手機(jī)鏡頭不是魚眼鏡頭,因此使用普通相機(jī)模型標(biāo)定即可:

圖像分辨率為:3968 x 2976。上面標(biāo)定結(jié)果順序依次為fx, fy, cx, cy, k1, k2, p1, p2, k3, 保存到文件中供后續(xù)使用。

2.外參標(biāo)定

攝像機(jī)外參反映的是攝像機(jī)坐標(biāo)系和世界坐標(biāo)系之間的旋轉(zhuǎn)R和平移T關(guān)系。如果兩個(gè)相機(jī)的內(nèi)參均已知,并且知道各自與世界坐標(biāo)系之間的R1、T1和R2,T2,就可以算出這兩個(gè)相機(jī)之間的Rotation和Translation,也就找到了從一個(gè)相機(jī)坐標(biāo)系到另一個(gè)相機(jī)坐標(biāo)系之間的位置轉(zhuǎn)換關(guān)系。攝像機(jī)外參標(biāo)定也可以使用標(biāo)定板,只是保證左、右兩個(gè)相機(jī)同時(shí)拍攝同一個(gè)標(biāo)定板的圖像。外參一旦標(biāo)定好,兩個(gè)相機(jī)的結(jié)構(gòu)就要保持固定,否則外參就會(huì)發(fā)生變化,需要重新進(jìn)行外參標(biāo)定。

那么手機(jī)怎么保證拍攝同一個(gè)標(biāo)定板圖像并能夠保持相對(duì)位置不變,這個(gè)是很難做到的,因?yàn)楹罄m(xù)用來拍攝實(shí)際測試圖像時(shí),手機(jī)的位置肯定會(huì)發(fā)生變化。因此我使用外參自標(biāo)定的方法,在拍攝實(shí)際場景的兩張圖像時(shí),進(jìn)行攝像機(jī)的外參自標(biāo)定,從而獲取當(dāng)時(shí)兩個(gè)攝像機(jī)位置之間的Rotation和Translation。

比如:我拍攝這樣兩幅圖像,以后用來進(jìn)行立體匹配和虛擬視點(diǎn)合成的實(shí)驗(yàn)。

① 利用攝像機(jī)內(nèi)參進(jìn)行畸變校正,手機(jī)的畸變程度都很小,校正后的兩幅圖如下:

② 將上面兩幅畸變校正后的圖作為輸入,使用OpenCV中的光流法提取匹配特征點(diǎn)對(duì),pts1和pts2,在圖像中畫出如下:

③ 利用特征點(diǎn)對(duì)pts1和pts2,以及內(nèi)參矩陣camK,解算出本質(zhì)矩陣E:

cv::Mat E = cv::findEssentialMat(tmpPts1, tmpPts2,camK, CV_RANSAC);

④ 利用本質(zhì)矩陣E解算出兩個(gè)攝像機(jī)之間的Rotation和Translation,也就是兩個(gè)攝像機(jī)之間的外參。以下是OpenCV中API函數(shù)實(shí)現(xiàn)的,具體請(qǐng)參見API文檔:

cv::Mat R1, R2; cv::decomposeEssentialMat(E, R1, R2, t); R = R1.clone(); t = -t.clone();

二、雙目圖像的校正

1. 畸變校正

畸變校正前面已經(jīng)介紹過,利用畸變系數(shù)進(jìn)行畸變校正即可,下面說一下立體校正。

2. 立體校正

① 得到兩個(gè)攝像機(jī)之間的 Rotation和Translation之后,要用下面的API對(duì)兩幅圖像進(jìn)行立體對(duì)極線校正,這就需要算出兩個(gè)相機(jī)做對(duì)極線校正需要的R和T,用R1,T1, R2, T2表示,以及透視投影矩陣P1,P2:

cv::stereoRectify(camK, D, camK, D, imgL.size(), R, -R*t,R1, R2, P1, P2, Q);

② 得到上述參數(shù)后,就可以使用下面的API進(jìn)行對(duì)極線校正操作了,并將校正結(jié)果保存到本地:

cv::Rect(0, 0, 3, 3)),D, R1, P1(cv::Rect(0, 0, 3, 3)), imgL.size(), CV_32FC1,mapx, mapy);cv::remap(imgL, recImgL, mapx, mapy, CV_INTER_LINEAR); cv::imwrite("data/recConyL.png", recImgL); cv::Rect(0, 0, 3, 3)),D, R2, P2(cv::Rect(0, 0, 3, 3)), imgL.size(), CV_32FC1,mapx, mapy);cv::remap(imgR, recImgR, mapx, mapy, CV_INTER_LINEAR); cv::imwrite("data/recConyR.png", recImgR);

對(duì)極線校正結(jié)果如下所示,查看對(duì)極線校正結(jié)果是否準(zhǔn)確,可以通過觀察若干對(duì)應(yīng)點(diǎn)是否在同一行上粗略估計(jì)得出:

三、立體匹配

1. SGBM算法獲取視差圖

立體校正后的左右兩幅圖像得到后,匹配點(diǎn)是在同一行上的,可以使用OpenCV中的BM算法或者SGBM算法計(jì)算視差圖。由于SGBM算法的表現(xiàn)要遠(yuǎn)遠(yuǎn)優(yōu)于BM算法,因此采用SGBM算法獲取視差圖。SGBM中的參數(shù)設(shè)置如下:

int numberOfDisparities = ((imgSize.width / 8)+ 15) & -16; cv::Ptr sgbm = cv::create(0, 16, 3); sgbm->setPreFilterCap(32); int SADWindowSize = 9; int sgbmWinSize = SADWindowSize > 0 ? SADWindowSize: 3; sgbm->setBlockSize(sgbmWinSize); int cn = imgL.channels(); sgbm->setP1(8 * cn*sgbmWinSize*sgbmWinSize); sgbm->setP2(32 * cn*sgbmWinSize*sgbmWinSize);sgbm->setMinDisparity(0); sgbm->setNumDisparities(numberOfDisparities);sgbm->setUniquenessRatio(10); sgbm->setSpeckleWindowSize(100); sgbm->setSpeckleRange(32); sgbm->setDisp12MaxDiff(1); int alg = STEREO_SGBM; if (alg == STEREO_HH) sgbm->setMode(cv::MODE_HH); else if (alg == STEREO_SGBM) sgbm->setMode(cv::MODE_SGBM); else if (alg == STEREO_3WAY) sgbm->setMode(cv::MODE_SGBM_3WAY);sgbm->compute(imgL, imgR, disp);

默認(rèn)計(jì)算出的是左視差圖,如果需要計(jì)算右視差圖,則將上面加粗的三條語句替換為下面前三條語句。由于視差值計(jì)算出來為負(fù)值,disp類型為16SC1,因此需要取絕對(duì)值,然后保存:

sgbm->setMinDisparity(-numberOfDisparities); sgbm->setNumDisparities(numberOfDisparities); sgbm->compute(imgR, imgL, disp);disp = abs(disp);

SGBM算法得到的左、右視差圖如下,左視差圖的數(shù)據(jù)類型為CV_16UC1,右視差圖的數(shù)據(jù)類型為CV_16SC1(SGBM中視差圖中不可靠的視差值設(shè)置為最小視差(mindisp-1)*16。因此在此例中,左視差圖中不可靠視差值設(shè)置為-16,截?cái)嘀禐?;右視差圖中不可靠視差值設(shè)置為(-numberOfDisparities-1)*16,取絕對(duì)值后為(numberOfDisparities+1)*16,所以兩幅圖會(huì)有較大差別):

左視差圖(不可靠視差值為0) 右視差圖(不可靠視差值為 (numberOfDisparities+1)*16)

如果將右視差圖不可靠視差值也設(shè)置為0,則如下:

至此,左視差圖和右視差圖遙相呼應(yīng)。

2. 視差圖空洞填充

視差圖中視差值不可靠的視差大多數(shù)是由于遮擋引起,或者光照不均勻引起。既然牛逼如SGBM也覺得不可靠,那與其留著做個(gè)空洞,倒不如用附近可靠的視差值填充一下。

空洞填充也有很多方法,在這里我檢測出空洞區(qū)域,然后用附近可靠視差值的均值進(jìn)行填充。填充后的視差圖如下:

填充后左視差圖 填充后右視差圖

3. 視差圖轉(zhuǎn)換為深度圖

視差的單位是像素(pixel),深度的單位往往是毫米(mm)表示。而根據(jù)平行雙目視覺的幾何關(guān)系(此處不再畫圖推導(dǎo),很簡單),可以得到下面的視差與深度的轉(zhuǎn)換公式:

depth = ( f * baseline) / disp

上式中,depth表示深度圖;f表示歸一化的焦距,也就是內(nèi)參中的fx;baseline是兩個(gè)相機(jī)光心之間的距離,稱作基線距離;disp是視差值。等式后面的均已知,深度值即可算出。

在上面我們用SGBM算法獲取了視差圖,接下來轉(zhuǎn)換為深度圖,函數(shù)代碼如下:

/* 函數(shù)作用:視差圖轉(zhuǎn)深度圖 輸入: dispMap ----視差圖,8位單通道,CV_8UC1 K ----內(nèi)參矩陣,float類型 輸出: depthMap ----深度圖,16位無符號(hào)單通道,CV_16UC1 */void disp2Depth(cv::Mat dispMap, cv::Mat &depthMap, cv::Mat K) { int type = dispMap.type(); float fx = K.at(0, 0); float fy = K.at(1, 1); float cx = K.at(0, 2); float cy = K.at(1, 2); float baseline = 65; //基線距離65mm if (type == CV_8U) { const float PI = 3.14159265358; int height = dispMap.rows; int width = dispMap.cols; uchar* dispData = (uchar*)dispMap.data; ushort* depthData = (ushort*)depthMap.data; for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { int id = i*width + j; if (!dispData[id]) continue; //防止0除depthData[id] = ushort( (float)fx *baseline / ((float)dispData[id]) ); } } } else { cout << "please confirm dispImg's type!" << endl; cv::waitKey(0); } }

注:png的圖像格式可以保存16位無符號(hào)精度,即保存范圍為0-65535,如果是mm為單位,則最大能表示約65米的深度,足夠了。

上面代碼中我設(shè)置深度圖的精度為CV_16UC1,也就是ushort類型,將baseline設(shè)置為65mm,轉(zhuǎn)換后保存為png格式即可。如果保存為jpg或者bmp等圖像格式,會(huì)將數(shù)據(jù)截?cái)酁?-255。所以保存深度圖,png格式是理想的選擇。(如果不是為了獲取精確的深度圖,可以將baseline設(shè)置為1,這樣獲取的是相對(duì)深度圖,深度值也是相對(duì)的深度值)

轉(zhuǎn)換后的深度圖如下:

左深度圖 右深度圖

空洞填充后的深度圖,如下:

左深度圖(空洞填充后) 右深度圖(空洞填充后)

視差圖到深度圖完成。

注:視差圖和深度圖中均有計(jì)算不正確的點(diǎn),此文意在介紹整個(gè)流程,不特別注重算法的優(yōu)化,如有大神望不吝賜教。

附:視差圖和深度圖的空洞填充

步驟如下:

① 以視差圖dispImg為例。計(jì)算圖像的積分圖integral,并保存對(duì)應(yīng)積分圖中每個(gè)積分值處所有累加的像素點(diǎn)個(gè)數(shù)n(空洞處的像素點(diǎn)不計(jì)入n中,因?yàn)榭斩刺幭袼刂禐?,對(duì)積分值沒有任何作用,反而會(huì)平滑圖像)。

② 采用多層次均值濾波。首先以一個(gè)較大的初始窗口去做均值濾波(積分圖實(shí)現(xiàn)均值濾波就不多做介紹了,可以參考我之前的一篇博客),將大區(qū)域的空洞賦值。然后下次濾波時(shí),將窗口尺寸縮小為原來的一半,利用原來的積分圖再次濾波,給較小的空洞賦值(覆蓋原來的值);依次類推,直至窗口大小變?yōu)?x3,此時(shí)停止濾波,得到最終結(jié)果。

③ 多層次濾波考慮的是對(duì)于初始較大的空洞區(qū)域,需要參考更多的鄰域值,如果采用較小的濾波窗口,不能夠完全填充,而如果全部采用較大的窗口,則圖像會(huì)被嚴(yán)重平滑。因此根據(jù)空洞的大小,不斷調(diào)整濾波窗口。先用大窗口給所有空洞賦值,然后利用逐漸變成小窗口濾波覆蓋原來的值,這樣既能保證空洞能被填充上,也能保證圖像不會(huì)被過度平滑。

空洞填充的函數(shù)代碼如下,僅供參考:

1 void insertDepth32f(cv::Mat& depth) 2 { 3 const int width = depth.cols; 4 const int height = depth.rows; 5 float* data = (float*)depth.data; 6 cv::Mat integralMap = cv::zeros(height,width, CV_64F); 7 cv::Mat ptsMap = cv::zeros(height, width,CV_32S); 8 double* integral = (double*)integralMap.data; 9 int* ptsIntegral = (int*)ptsMap.data; 10 memset(integral, 0, sizeof(double) * width *height); 11 memset(ptsIntegral, 0, sizeof(int) * width *height); 12 for (int i = 0; i < height; ++i) 13 { 14 int id1 = i * width; 15 for (int j = 0; j < width; ++j) 16 { 17 int id2 = id1 + j; 18 if (data[id2] > 1e-3) 19 { 20 integral[id2] = data[id2]; 21 ptsIntegral[id2] = 1; 22 } 23 } 24 } 25 // 積分區(qū)間 26 for (int i = 0; i < height; ++i) 27 { 28 int id1 = i * width; 29 for (int j = 1; j < width; ++j) 30 { 31 int id2 = id1 + j; 32 integral[id2] += integral[id2 - 1]; 33 ptsIntegral[id2] += ptsIntegral[id2 - 1]; 34 } 35 } 36 for (int i = 1; i < height; ++i) 37 { 38 int id1 = i * width; 39 for (int j = 0; j < width; ++j) 40 { 41 int id2 = id1 + j; 42 integral[id2] += integral[id2 - width]; 43 ptsIntegral[id2] += ptsIntegral[id2 - width]; 44 } 45 } 46 int wnd; 47 double dWnd = 2; 48 while (dWnd > 1) 49 { 50 wnd = int(dWnd); 51 dWnd /= 2; 52 for (int i = 0; i < height; ++i) 53 { 54 int id1 = i * width; 55 for (int j = 0; j < width; ++j) 56 { 57 int id2 = id1 + j; 58 int left = j - wnd - 1; 59 int right = j + wnd; 60 int top = i - wnd - 1; 61 int bot = i + wnd; 62 left = max(0, left); 63 right = min(right, width - 1); 64 top = max(0, top); 65 bot = min(bot, height - 1); 66 int dx = right - left; 67 int dy = (bot - top) * width; 68 int idLeftTop = top * width + left; 69 int idRightTop = idLeftTop + dx; 70 int idLeftBot = idLeftTop + dy; 71 int idRightBot = idLeftBot + dx; 72 int ptsCnt = ptsIntegral[idRightBot]+ ptsIntegral[idLeftTop] - (ptsIntegral[idLeftBot] +ptsIntegral[idRightTop]); 73 double sumGray = integral[idRightBot]+ integral[idLeftTop] - (integral[idLeftBot] + integral[idRightTop]); 74 if (ptsCnt <= 0) 75 { 76 continue; 77 } 78 data[id2] = float(sumGray / ptsCnt); 79 } 80 } 81 int s = wnd / 2 * 2 + 1; 82 if (s > 201) 83 { 84 s = 201; 85 } 86 cv::GaussianBlur(depth, depth, cv::Size(s, s), s, s); 87 } 88 }

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 攝像機(jī)
    +關(guān)注

    關(guān)注

    3

    文章

    1540

    瀏覽量

    59593
  • 圖像
    +關(guān)注

    關(guān)注

    2

    文章

    1075

    瀏覽量

    40278
  • OpenCV
    +關(guān)注

    關(guān)注

    29

    文章

    622

    瀏覽量

    41091

原文標(biāo)題:真實(shí)場景的雙目立體匹配(Stereo Matching)獲取深度圖詳解

文章出處:【微信號(hào):vision263com,微信公眾號(hào):新機(jī)器視覺】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    可存儲(chǔ)500張人臉的雙目3D人臉識(shí)別模塊

    。HLK-FM888是一款紅外+可見光雙目人臉識(shí)別算法模組,內(nèi)嵌雙目3D活體檢測算法和基于大數(shù)據(jù)訓(xùn)練的深度神經(jīng)網(wǎng)絡(luò)動(dòng)態(tài)可見光識(shí)別算法,搭載高像素的攝像頭,在增強(qiáng)對(duì)環(huán)境光線的適應(yīng)性和
    的頭像 發(fā)表于 07-28 08:39 ?269次閱讀
    可存儲(chǔ)500張人臉的<b class='flag-5'>雙目</b>3D人臉識(shí)別模塊

    深度學(xué)習(xí)模型有哪些應(yīng)用場景

    深度學(xué)習(xí)模型作為人工智能領(lǐng)域的重要分支,已經(jīng)在多個(gè)應(yīng)用場景中展現(xiàn)出其巨大的潛力和價(jià)值。這些應(yīng)用不僅改變了我們的日常生活,還推動(dòng)了科技進(jìn)步和產(chǎn)業(yè)升級(jí)。以下將詳細(xì)探討深度學(xué)習(xí)模型的20個(gè)主要應(yīng)用
    的頭像 發(fā)表于 07-16 18:25 ?720次閱讀

    利用深度循環(huán)神經(jīng)網(wǎng)絡(luò)對(duì)心電降噪

    具體的軟硬件實(shí)現(xiàn)點(diǎn)擊 http://mcu-ai.com/ MCU-AI技術(shù)網(wǎng)頁_MCU-AI 我們提出了一種利用由長短期記憶 (LSTM) 單元構(gòu)建的深度循環(huán)神經(jīng)網(wǎng)絡(luò)來降 噪心電信號(hào) (ECG
    發(fā)表于 05-15 14:42

    使用圖像處理庫OpenCV從攝像頭獲取數(shù)據(jù)并在PyQt5上顯示出來

    OpenCV能夠處理圖像、視頻、深度圖像等各種類型的視覺數(shù)據(jù)
    的頭像 發(fā)表于 01-05 17:32 ?1791次閱讀
    使用圖像處理庫OpenCV從攝像頭<b class='flag-5'>獲取</b>數(shù)據(jù)并在PyQt5上顯示出來

    雙目立體視覺是什么樣的技術(shù)?

    雙眼視物時(shí),主觀上可產(chǎn)生被視物體的厚度以及空間的深度或距離等感覺,稱為立體視覺(stereopsis)。其主要原因是同一被視物體在兩眼視網(wǎng)膜上的像并不完全相同,左眼從左方看到物體的左側(cè)面較多,而右眼則從右方看到物體的右側(cè)面較多。
    的頭像 發(fā)表于 12-28 17:08 ?866次閱讀
    <b class='flag-5'>雙目</b><b class='flag-5'>立體</b>視覺是什么樣的技術(shù)?

    LabVIEW開發(fā)自動(dòng)駕駛的雙目測距系統(tǒng)

    最高的區(qū)域來開始匹配。這個(gè)過程在金字塔級(jí)別中逐步進(jìn)行,以提高匹配速度和準(zhǔn)確性。 實(shí)驗(yàn)結(jié)果表明,基于LabVIEW的雙目測距系統(tǒng)在不同場景下均能夠?qū)崿F(xiàn)高精度的距離測量。相似度
    發(fā)表于 12-19 18:02

    單目深度估計(jì)開源方案分享

    可以看一下單目深度估計(jì)效果,這個(gè)深度圖的分辨率是真的高,物體邊界分割的非常干凈!這里也推薦工坊推出的新課程《單目深度估計(jì)方法:算法梳理與代碼實(shí)現(xiàn)》。
    的頭像 發(fā)表于 12-17 10:01 ?675次閱讀
    單目<b class='flag-5'>深度</b>估計(jì)開源方案分享

    OpenCV邊緣模板匹配算法原理詳解

    ,悲喜交加,充分感受到了理想與現(xiàn)實(shí)的距離,不過沒關(guān)系,這里介紹一種新的模板匹配算法,主要是基于圖像邊緣梯度,它對(duì)圖像光照與像素遷移都有很強(qiáng)的抗干擾能力,據(jù)說Halcon的模板匹配就是基于此的加速版本,在工業(yè)應(yīng)用場景中已經(jīng)得到廣泛
    的頭像 發(fā)表于 12-07 10:56 ?1104次閱讀
    OpenCV邊緣模板<b class='flag-5'>匹配</b>算法原理<b class='flag-5'>詳解</b>

    雙目測寬儀高質(zhì)量生產(chǎn)利器 測寬儀價(jià)格

    雙目測寬儀是基于機(jī)器視覺原理及模擬人的雙眼進(jìn)行寬度尺寸自動(dòng)測量的儀器,是一種高度自動(dòng)化的工業(yè)實(shí)時(shí)在線寬度檢測儀表。 雙目測寬儀是一種智能化的全自動(dòng)工業(yè)在線實(shí)時(shí)寬度檢測設(shè)備,兩個(gè)工業(yè)相機(jī)就像人的雙眼
    發(fā)表于 12-04 17:10

    雙目影像密集匹配算法的綜合分析

    自適應(yīng)權(quán)重法是推動(dòng)局部密集匹配算法發(fā)展的關(guān)鍵。自2006年Yoon等[53]首次提出可以在匹配質(zhì)量與全局匹配算法相媲美的局部匹配方法后,局部匹配
    的頭像 發(fā)表于 11-27 10:29 ?1376次閱讀
    <b class='flag-5'>雙目</b>影像密集<b class='flag-5'>匹配</b>算法的綜合分析

    計(jì)算機(jī)視覺中的立體視覺和深度感知Python示例實(shí)現(xiàn)

    在人工智能和圖像處理的迷人世界中,這些概念在使機(jī)器能夠像我們的眼睛一樣感知我們周圍的三維世界中起著關(guān)鍵作用。和我們一起探索立體視覺和深度感知背后的技術(shù),揭示計(jì)算機(jī)如何從二維圖像中獲得深度、距離和空間理解的秘密。
    的頭像 發(fā)表于 11-21 10:50 ?499次閱讀

    新品雙目測寬儀測量原理 寬厚板材在線檢測

    相機(jī)就像人的雙眼,可以形成立體視覺,這樣就可以得到足夠的信息判斷被測物的距離,修正和消除距離變化對(duì)測量的影響。 雙目測寬儀是新研發(fā)的一種寬度檢測設(shè)備,采用立體機(jī)器視覺原理檢測,利用算法消除傾斜等
    發(fā)表于 11-20 17:25

    單目光波導(dǎo)AR眼鏡VS雙目光波導(dǎo)智能眼鏡

    單目AR眼鏡具有較小的視角,相比雙目眼鏡更輕便且結(jié)構(gòu)更穩(wěn)定,佩戴者可以持久穩(wěn)定地使用,但其顯示效果在沉浸感和觀感上不如雙目眼鏡好。相比于單目顯示技術(shù),雙目AR眼鏡的成像技術(shù)優(yōu)勢(shì)在于可以更真實(shí)
    的頭像 發(fā)表于 11-17 19:44 ?652次閱讀
    單目光波導(dǎo)AR眼鏡VS<b class='flag-5'>雙目</b>光波導(dǎo)智能眼鏡

    淺談阻抗匹配(一)什么是電路匹配?

    阻抗匹配是一個(gè)較大的話題,根據(jù)具體的頻率和使用場景,大概可以分為4個(gè)模塊討論。分別是:電路匹配、傳輸線匹配、天線匹配、噪聲
    的頭像 發(fā)表于 11-03 11:50 ?1945次閱讀
    淺談阻抗<b class='flag-5'>匹配</b>(一)什么是電路<b class='flag-5'>匹配</b>?

    長短距離循環(huán)更新(LRRU)網(wǎng)絡(luò)的輕量級(jí)深度網(wǎng)絡(luò)框架介紹

    1. 文章一覽 本文介紹了一種名為長短距離循環(huán)更新(LRRU)網(wǎng)絡(luò)的輕量級(jí)深度網(wǎng)絡(luò)框架,用于深度補(bǔ)全。深度補(bǔ)全是指從稀疏的距離測量估計(jì)密集的深度圖的過程?,F(xiàn)有的
    的頭像 發(fā)表于 11-03 09:24 ?809次閱讀
    長短距離循環(huán)更新(LRRU)網(wǎng)絡(luò)的輕量級(jí)<b class='flag-5'>深度</b>網(wǎng)絡(luò)框架介紹