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

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

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

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

OpenCV學(xué)堂 ? 來源:OpenCV學(xué)堂 ? 2023-12-07 10:56 ? 次閱讀

背景概述

OpenCV中自帶的模板匹配算法,完全是像素基本的模板匹配,特別容易受到光照影響,光照稍微有所不同,該方法就會(huì)歇菜了!搞得很多OpenCV初學(xué)者剛學(xué)習(xí)到該方法時(shí)候很開心,一用該方法馬上很傷心,悲喜交加,充分感受到了理想與現(xiàn)實(shí)的距離,不過沒關(guān)系,這里介紹一種新的模板匹配算法,主要是基于圖像邊緣梯度,它對(duì)圖像光照與像素遷移都有很強(qiáng)的抗干擾能力,據(jù)說Halcon的模板匹配就是基于此的加速版本,在工業(yè)應(yīng)用場(chǎng)景中已經(jīng)得到廣泛使用。

算法原理

該算法主要是基于圖像梯度,實(shí)現(xiàn)基于梯度級(jí)別的NCC模板匹配,基于Sobel梯度算子得到dx, dy, magnitude

1b916480-94a8-11ee-939d-92fbcf53809c.jpg

通過Canny算法得到邊緣圖像、基于輪廓發(fā)現(xiàn)得到所有的輪廓點(diǎn)集,基于每個(gè)點(diǎn)計(jì)算該點(diǎn)的dx、dy、magnitude(dxy)三個(gè)值。生成模板信息。然后對(duì)輸入的圖像進(jìn)行Sobel梯度圖像之后,根據(jù)模型信息進(jìn)行匹配,這樣的好處有兩個(gè):

梯度對(duì)光照有很強(qiáng)的抗干擾能力,對(duì)模板匹配的抗光照干擾

基于梯度匹配,可以對(duì)目標(biāo)圖像上出現(xiàn)的微小像素遷移進(jìn)行抵消。

1b9cc960-94a8-11ee-939d-92fbcf53809c.jpg

算法實(shí)現(xiàn)代碼詳解

梯度圖像計(jì)算

Matgx,gy;
Sobel(gray,gx,CV_32F,1,0);
Sobel(gray,gy,CV_32F,0,1);

Matmagnitude,direction;
cartToPolar(gx,gy,magnitude,direction);
longcontoursLength=0;
doublemagnitudeTemp=0;
intoriginx=contours[0][0].x;
intoriginy=contours[0][0].y;

模板生成

//提取dxdymaglog信息
vector>contoursInfo;
//提取相對(duì)坐標(biāo)位置
vector>contoursRelative;

//開始提取
for(inti=0;i(n));
vectorpoints(n);
for(intj=0;j(y,x);
pointInfo.DerivativeY=gy.at(y,x);
magnitudeTemp=magnitude.at(y,x);
pointInfo.Magnitude=magnitudeTemp;
if(magnitudeTemp!=0)
pointInfo.MagnitudeN=1/magnitudeTemp;
contoursInfo[i][j]=pointInfo;
}
contoursRelative.push_back(points);
}

計(jì)算目標(biāo)圖像梯度

//計(jì)算目標(biāo)圖像梯度
MatgrayImage;
cvtColor(src,grayImage,COLOR_BGR2GRAY);
Matgradx,grady;
Sobel(grayImage,gradx,CV_32F,1,0);
Sobel(grayImage,grady,CV_32F,0,1);

Matmag,angle;
cartToPolar(gradx,grady,mag,angle);

NCC模板匹配

doublepartialScore=0;
doubleresultScore=0;
intresultX=0;
intresultY=0;
doublestart=(double)getTickCount();
for(introw=0;rowgrayImage.cols-1||curY>grayImage.rows-1){
continue;
}

//目標(biāo)邊緣梯度
doublesdx=gradx.at(curY,curX);
doublesdy=grady.at(curY,curX);

//模板邊緣梯度
doubletdx=contoursInfo[m][n].DerivativeX;
doubletdy=contoursInfo[m][n].DerivativeY;

//計(jì)算匹配
if((sdy!=0||sdx!=0)&&(tdx!=0||tdy!=0))
{
doublenMagnitude=mag.at(curY,curX);
if(nMagnitude!=0)
sum+=(sdx*tdx+sdy*tdy)*contoursInfo[m][n].MagnitudeN/nMagnitude;
}

//任意節(jié)點(diǎn)score之和必須大于最小閾值
partialScore=sum/num;
if(partialScoreresultScore)
{
resultScore=partialScore;
resultX=col;
resultY=row;
}
}
}

運(yùn)行效果

正常光照

光照非常暗

改進(jìn):

不需要全局匹配,可以對(duì)目標(biāo)圖像先做一個(gè)小梯度閾值,然后再進(jìn)行匹配,提升速度、構(gòu)造目標(biāo)圖像金字塔,實(shí)現(xiàn)多分辨率模板匹配支持!

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

    關(guān)注

    23

    文章

    4573

    瀏覽量

    92333
  • 模板
    +關(guān)注

    關(guān)注

    0

    文章

    108

    瀏覽量

    20541
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4694

    瀏覽量

    68074
  • OpenCV
    +關(guān)注

    關(guān)注

    29

    文章

    623

    瀏覽量

    41177

原文標(biāo)題:干貨 | OpenCV實(shí)現(xiàn)邊緣模板匹配算法

文章出處:【微信號(hào):CVSCHOOL,微信公眾號(hào):OpenCV學(xué)堂】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    什么是模板匹配?模板匹配的原理講解 圖像處理與模板匹配算法

    一:什么是模板匹配? 在OpenCV教程中這樣解釋模板匹配模板
    的頭像 發(fā)表于 05-05 09:25 ?3.4w次閱讀
    什么是<b class='flag-5'>模板</b><b class='flag-5'>匹配</b>?<b class='flag-5'>模板</b><b class='flag-5'>匹配</b>的原理講解 圖像處理與<b class='flag-5'>模板</b><b class='flag-5'>匹配</b><b class='flag-5'>算法</b>

    基于Qualcomm FastCv的邊緣檢測(cè)算法詳解

    檢測(cè)它的邊緣。二.算法分類邊緣檢測(cè)法的種類很多,如微分算子法、樣板匹配法、小波檢測(cè)法、神經(jīng)網(wǎng)絡(luò)法等等,每一類檢測(cè)法又有不同的具體方法。目前,微分算子法中有Roberts,Sobel,P
    發(fā)表于 09-21 11:45

    openCV的庫自帶了模板匹配算法嗎?

    openCV的庫自帶了模板匹配算法
    發(fā)表于 10-10 06:48

    基于改進(jìn)模板匹配的芯片缺陷檢測(cè)方法

    提出了一種改進(jìn)的模板匹配方法。該方法是在傳統(tǒng)的模板匹配方法的基礎(chǔ)上,通過對(duì)模板匹配
    發(fā)表于 09-03 15:15 ?9次下載

    基于模板匹配的圖像跟蹤技術(shù)

    為了解決傳統(tǒng)模板匹配方法跟蹤圖像時(shí)遇到的問題,提出了在跟蹤過程中采用變模板匹配的方法。該方法較好地解決了傳統(tǒng)方法的局限性,通過實(shí)驗(yàn)比較了使用模板
    發(fā)表于 12-20 17:01 ?0次下載

    模板匹配

    OpenCV3編程入門》書本配套源代碼:模板匹配
    發(fā)表于 06-06 15:39 ?5次下載

    OpenCV3編程入門-源碼例程全集-模板匹配

    OpenCV3編程入門-源碼例程全集-模板匹配
    發(fā)表于 09-17 22:55 ?4次下載

    基于模板匹配的目標(biāo)跟蹤算法在紅外熱成像跟蹤技術(shù)上的應(yīng)用

    基于模板匹配的目標(biāo)跟蹤算法在紅外熱成像跟蹤技術(shù)上的應(yīng)用
    發(fā)表于 02-08 00:57 ?19次下載

    基于輪廓曲線的圖像匹配算法

    圖像和模板分別建立圖像金字塔,對(duì)每層圖像和模板使用sobel算子提取邊緣。對(duì)頂層圖像使用歸一化角點(diǎn)距離矩陣與模板進(jìn)行粗匹配,然后使用同心圓劃
    發(fā)表于 11-02 10:47 ?5次下載
    基于輪廓曲線的圖像<b class='flag-5'>匹配</b><b class='flag-5'>算法</b>

    機(jī)器視覺中基于灰度統(tǒng)計(jì)的快速模板匹配算法詳細(xì)概述

    本文針對(duì)傳統(tǒng)的基于灰度值的匹配算法計(jì)算量大、時(shí)間復(fù)雜度高的缺陷,提出了一種基于灰度統(tǒng)計(jì)的快速模板匹配算法。以十字特征直線代替
    發(fā)表于 08-18 15:53 ?7次下載
    機(jī)器視覺中基于灰度統(tǒng)計(jì)的快速<b class='flag-5'>模板</b><b class='flag-5'>匹配</b><b class='flag-5'>算法</b>詳細(xì)概述

    融合邊緣特征的立體匹配算法Edge-Gray

    為保證SAD算法的立體匹配效率,提高匹配精度,提出一種融合邊緣特征的立體匹配算法 Edge-gr
    發(fā)表于 04-29 11:06 ?8次下載
    融合<b class='flag-5'>邊緣</b>特征的立體<b class='flag-5'>匹配</b><b class='flag-5'>算法</b>Edge-Gray

    探究halcon模板匹配干擾邊緣消除辦法

    最近做了個(gè)項(xiàng)目,遇到一個(gè)問題,就是在創(chuàng)建形狀匹配模板時(shí)候,干擾太多,像麻繩一樣。 使用自定義區(qū)域去消除吧,因?yàn)檩喞L(zhǎng),邊緣干擾距離近,操作起來不方便; 使用CAD圖形創(chuàng)建模板吧,又因?yàn)?/div>
    的頭像 發(fā)表于 05-29 13:42 ?4590次閱讀

    基于邊緣模板匹配適用部分遮擋和光照變化情形(附源碼)

    介紹 模板匹配是一個(gè)圖像處理問題,當(dāng)其姿態(tài)(X,Y,θ)未知時(shí),使用另一張搜索圖像中的模板圖像找到對(duì)象的位置。在本文中,我們實(shí)現(xiàn)了一種算法,該算法
    的頭像 發(fā)表于 10-13 15:20 ?3100次閱讀
    基于<b class='flag-5'>邊緣</b>的<b class='flag-5'>模板</b><b class='flag-5'>匹配</b>適用部分遮擋和光照變化情形(附源碼)

    OpenMV如何實(shí)現(xiàn)旋轉(zhuǎn)模板匹配

    OpenCV模板匹配不支持旋轉(zhuǎn)角度、不支持多尺度跟多對(duì)象模板匹配,同時(shí)匹配速度比較慢,針對(duì)不支
    的頭像 發(fā)表于 01-14 10:21 ?1796次閱讀

    模板匹配算法的改進(jìn)及在自動(dòng)發(fā)牌機(jī)中的應(yīng)用

    電子發(fā)燒友網(wǎng)站提供《模板匹配算法的改進(jìn)及在自動(dòng)發(fā)牌機(jī)中的應(yīng)用.pdf》資料免費(fèi)下載
    發(fā)表于 11-08 09:53 ?0次下載
    <b class='flag-5'>模板</b><b class='flag-5'>匹配</b><b class='flag-5'>算法</b>的改進(jìn)及在自動(dòng)發(fā)牌機(jī)中的應(yīng)用