導航:首頁 > 源碼編譯 > 自適應模板匹配演算法

自適應模板匹配演算法

發布時間:2023-05-12 08:12:21

『壹』 基於灰度的模板匹配

想將自己開發機器人視覺應用中的點滴過程和心得進行記錄分享,討論,生活很有趣,學術很有趣,當然能讓自己做的研究落地更有意義!

可能的優化路徑:

1.匹配路徑優化演算法:從圖像預處理中改進,對模板匹配的較可能區域先定位,後進行精確的卷積運算,減低卷積計算量,但沒有從根本上減少卷積運算計算量大的缺點。

2.通過傅里葉變換將函數的卷積運算轉為乘積運算。

ps:opencv中的自適應閾值方法為adaptiveThreshold

金字塔分層快速圖像搜索演算法流程:

1.對降采樣的圖像進行自適應閾值化處理

2.處理完的圖像通過森慧opencv快速模板匹配尋找最匹配悉裂的坐標:

cv::matchTemplate()

cv::normalize()

cv::minMaxLoc()

3.根據獲取的降采樣層的坐標獲取源圖像的坐標(*2.05),注意不要越出圖像邊界

源圖像層根此陸答據放大後的坐標截取一個子圖

4.在子圖上進行快速模板匹配,搜索模板圖像,返回搜索到的坐標

5.通過聯合Hash演算法確認源圖像層坐標下的模板圖像和原圖像是否相似(可以選擇別的相似度量函數)

在原圖自適應閾值處理後的快速模板匹配函數處理時間為0.076s,加入金字塔處理後的時間為0.376s..

現在進行金字塔加速後進行閾值處理再進行模板匹配的時間。0.022s(第三層金字塔處),0.39s(帶金字塔處理過程)

『貳』 opencv(C++)GPU、CPU 模板匹配

本文主要關注opencv常規版和cuda版的模板匹配演算法,網上cuda版的資料不多,這里做個記錄,以後用到也好有個參考。

@[toc]

opencv cuda版需要自己用cmake編譯,編譯過程並不復雜,cmake編譯成vs的項目,然後用vs編譯成opencv_worldXXX.dll.編譯燃尺租過程可參考 link1 , link2

GPU加速模板匹配看起來效果並不是很好,測試了不同大小的圖片有的情況速度會超過CPU,本來覺得應該會有幾倍的加速效果,但是其實並沒有,大多數情況下反而是變慢了。開始覺得是cpu向gpu傳圖的過程耗時較多,後面去掉傳圖的過程只看匹配過程,它的計算就是比cpu的慢,不知道是不是因困歷為這塊GPU太低端了。皮兆

『叄』 javaopencv模板匹配多個

熱門頻道

首頁

博客

研修院

VIP

APP

問答

下載

社區

推薦頻道

活動

招聘

專題

打開CSDN APP
Copyright © 1999-2020, CSDN.NET, All Rights Reserved

打開APP

032-OpenCV模板匹配單個對象、多個對象 原創
2022-01-30 11:06:14

逆鱗x

碼齡3年

關注
話不多說,上代碼,看結行氏果。

結果如下圖。
在這里插入圖片描述
接下來是模板匹配多個對象。

在這里插入圖片描述
就先這樣,遇到別的再補充。

文章知識點與官方知識檔案匹配
OpenCV技能樹首頁概覽
12102 人正在系統學習中
打開CSDN APP,看更多技術內容

SORT 多目標跟蹤演算法+opencv模板匹配演算法實戰——多個小球此鎮跟蹤,以及...
sort跟蹤演算法+opencv模板匹配實現小檔扒散球跟蹤 實現結果 rgb 灰度圖像假彩色 二值化,提取坐標 SORT多目標跟蹤演算法 基於模板匹配的目標檢測 模板匹配結果與SORT演算法融合 完整代碼 實現結果 先把最終結果放上來,個人感覺效果還是非常棒的。 rgb ...
繼續訪問
OpenCV多模板匹配講解與匹配汽車實戰(附python源碼)_showswoller的博客...
模板匹配包括單模板匹配和多模板匹配,單模板匹配又包括單目標匹配和多目標匹配。實現這些內容的基礎方法就是模板匹配方法,即matchTemplate()方法。其中,讀者朋友重點掌握模板匹配方法的6個參數值。此外,為了實現單目標匹配,除了需要使用模板匹...
繼續訪問
MARCHTEST.zip_opencv_opencv模板匹配_多目標匹配_模板匹配_模板匹配 opencv
通過OPENCV庫函數能是實現多目標模板匹配查找並且限定閾值
python OpenCV 模板匹配,單目標,多目標匹配,在一幅圖像中找出與模板匹配的對象
1、單模板單目標,多目標匹配 2、多模板,多目標匹配 3、通過OpenCV模板匹配方法,實現圖片的匹配功能 4、相關系數匹配,最小平方差匹配 5、matchTemplate
OpenCV(python)在一張圖上進行多種模板多個方向匹配
在一張圖像上進行多種模板在不同方向上的匹配
繼續訪問

OpenCV多模板匹配
多模板匹配

『肆』 opencv 中自帶的模板匹配演算法出處

方法如下:
使用OPENCV下SIFT庫做圖像匹配的常式
// opencv_empty_proj.cpp : 定義控制台應用程序的入口點。
//
#include "stdafx.h"
#include <opencv2/opencv.hpp>
#include <opencv2/features2d/features2d.hpp>
#include<opencv2/nonfree/nonfree.hpp>
#include<opencv2/legacy/legacy.hpp>
#include<vector>
using namespace std;
using namespace cv;

int _tmain(int argc, _TCHAR* argv[])
{
const char* imagename = "img.jpg";

//從文件中讀入圖像
Mat img = imread(imagename);
Mat img2=imread("img2.jpg");

//如果讀入圖像失敗
if(img.empty())
{
fprintf(stderr, "Can not load image %s\n", imagename);
return -1;
}
if(img2.empty())
{
fprintf(stderr, "Can not load image %s\n", imagename);
return -1;
}
//顯示圖像
imshow("image before", img);
imshow("image2 before",img2);
//sift特徵檢測
SiftFeatureDetector siftdtc;
vector<KeyPoint>kp1,kp2;
siftdtc.detect(img,kp1);
Mat outimg1;
drawKeypoints(img,kp1,outimg1);
imshow("image1 keypoints",outimg1);
KeyPoint kp;
vector<KeyPoint>::iterator itvc;
for(itvc=kp1.begin();itvc!=kp1.end();itvc++)
{
cout<<"angle:"<<itvc->angle<<"\t"<<itvc->class_id<<"\t"<<itvc->octave<<"\t"<<itvc->pt<<"\t"<<itvc->response<<endl;
}
siftdtc.detect(img2,kp2);
Mat outimg2;
drawKeypoints(img2,kp2,outimg2);
imshow("image2 keypoints",outimg2);
SiftDescriptorExtractor extractor;
Mat descriptor1,descriptor2;
BruteForceMatcher<L2<float>> matcher;
vector<DMatch> matches;
Mat img_matches;
extractor.compute(img,kp1,descriptor1);
extractor.compute(img2,kp2,descriptor2);
imshow("desc",descriptor1);
cout<<endl<<descriptor1<<endl;
matcher.match(descriptor1,descriptor2,matches);
drawMatches(img,kp1,img2,kp2,matches,img_matches);
imshow("matches",img_matches);
//此函數等待按鍵,按鍵盤任意鍵就返回
waitKey();
return 0;
}

『伍』 模板匹配概述

模板匹配是通過一張模板圖片去另一張圖中找到與模板相似部分的一種演算法。一個模板是一張小圖片,這個圖片有一定的尺寸,有角度(一般是不旋轉的矩形, 角度為0)。

模板匹配演算法一般是笑備通過滑窗的方式在待匹配的圖像上滑動,通過比較模板與子圖的相似度,找到相似度最大的子圖。這種演算法最核心部分在於如何設計一個相似性函數。
最容易想到的一個相似性函數便是歐式距離:

將這個相似性函數展開,可以得:

可以看出,只有第二項是有意義的,因為第一項和第三項的值在選定模板後是固定的。對於歐式距離相似函數,值越大表示越不相似,也就是說,第二項的值越小則越不相似。

將第二項進行歸一化:

那麼當R(i, j)為1時,表示模板與子圖完全相等。

cv::matchTemplate(const CvArr* image, //欲搜索的圖像。它應該是單通道、8-比特或32-比特 浮點數悶芹圖像
const CvArr* template,//搜索模板,不能大於輸入圖像,且與輸入圖像具有一樣的數據類型
CvArr* result, //比較結果的映射圖像。單通道、32-比特浮點數.
若圖像是W×H而templ是w×h,則result一定是(W-w+1)×(H-h+1)
int method//CV_TM_SQDIFF、CV_TM_SQDIFF_NORMED、CV_TM_CCORR、
CV_TM_CCORR_NORMED、CV_TM_CCOEFF、CV_TM_CCOEFF_NORMED
);

函數來進行模板匹配。其中的method參數具體如下:

在通過matchTemplate函數進行模板匹配後,可以得到一個映射圖,這張圖中最大值的地方便是匹配度最大的子圖的左上角坐標,可以使用cv::minMaxLoc函數獲得子圖位置和相應分數,再進行後續操作。

使用傳統的模板匹配速度較快,但是無法應對旋轉和縮放問題。要解決旋轉不變的 問題,必須要碰罩毀得到旋轉不變的特徵量,例如特徵點。

使用SIFT或SURF計算得到模板和待匹配圖像的特徵點,然後使用RANSAC或者FLANN進行特徵點匹配, 最後進行仿射變換便可得到匹配的位置。

python opencv實現(surf):
# - - coding:utf-8 - -
author = 'Microcosm'

運行的具體信息如下:
操作系統:ubuntu 14.04
運行環境:
opencv版本:opencv 3.0
模板大小:126x96 png
匹配圖像大小:750x407 jpg
特徵提取時間:0.15 s
KNN匹配時間:0.0024s
匹配效果:

『陸』 驗證碼識別之模板匹配方法

在寫爬蟲的時候難免會遇到驗證碼識別的問題,常見的驗證碼識別的流程為:

- 圖像灰度化

- 圖像去噪(如圖像二值化)

- 切割圖片

- 提取特徵

- 訓練

但這種方法要切割圖片,而且破解驗證碼的重點和難點就在於 能否成功分割字元 。

本文要介紹的演算法 不需要進行圖片切割,也不需要進行機器訓練 ,這種方法就是模板匹配:將待識別的文字切割成一個個模板,在待識別的圖像中去匹配模板。

這篇文章將分為兩個部分:

第一部分介紹模板匹配的基本概念以及模板匹配的一種實現演算法:快速歸一化互相關匹配演算法;

第二部分是一個具體實例。

模板匹配是在圖像中尋找目標的方法之一,目的就是在一幅圖像中尋找和模板圖像最相似的區域。

模板匹配的大致過程是這樣的:通過在輸入圖像上滑動圖像塊對實際的圖像塊和輸入圖像進行匹配。

假設我們有一張100x100的輸入圖像,有一張10x10的模板圖像,查找的過程是這樣的:

從輸入圖像的左上角(0,0)開始,切割一塊(0,0)至(10,10)的臨時圖像;

用某種方法得出臨時圖像與模板的相似度c,存放到相似度矩陣中(矩陣大小為91 x91);

切割輸入圖像從(0,1)至(10,11)的臨時圖像,對比,並記錄到相似度矩陣;

重復上述步驟,直到輸入圖像的右下角。

最終得到一個相似度矩陣,找到矩陣中的最大或最小值,最大值(最小值)對應的臨時圖像即為與模板最相似的圖像。

在步驟b中,求模板與圖像的相似度有多種方法,如平均絕對差演算法(MAD)、絕對誤差和演算法(SAD)、誤差平方和演算法(SSD)、歸一化互相關演算法(NCC),本文使用的是歸一化互相關演算法。

什麼是歸一化互相關?

從幾何圖形上來看,空間中的兩個向量,同方向平行時,歸一化互相關系數為1,表示兩個向量最相似,反方向平行時歸一化互相關系數為-1,垂直時為0,表示最不相似(用互相垂直的三個向量來代表整個空間也是這個道理,垂直的向量之間不包含對方的信息,相關系數為0),存在一定夾角時處於(-1,1),是不是跟餘弦函數很像,cos(0)=1,cos(pi/2)=0,cos(pi)=-1。就是這個樣子的,相關系數可以看作是兩個向量之間夾角的cosine函數。

在數學中是這么計算cosine函數的,假設兩個n維向量X,Y,對應的坐標分別為(x1,x2,…xn), (y1,y2,…yn) 則:

(如果想要了解更多,請參考文獻【2】)

但這是一維的,在模板匹配中要再加一個維度 (具體演算法請參考文獻【3】) ,簡要說一下文獻【3】的內容:如果直接計算二維相似度的話計算復雜度會非常高,文獻【3】利用快速傅里葉變換與積分圖像快速演算法來降低計算復雜度。

接下來讓我們看一個具體的應用。

模板匹配識別驗證碼的具體步驟為:

1. 找出圖片中所有可能出現的字元,製作成模板集合

2. 圖像灰度化

3. 圖片去噪(二值化)

4. 模板匹配

5. 匹配結果優化

要識別的圖片如下,以識別圖片中的加字為例:



要從image中找到與模板最匹配的部分,Template圖像是事先從image圖像中截取的一部分。所用的為python模塊skimage中的match_template方法,match_template方法使用的是快速歸一化互相關演算法 【2】 。

遍歷模板圖像集合,與圖像匹配,如果dist大於閾值h,則認為此模板在圖像中存在,否則不存在,繼續匹配下一個模板,直到遍歷完所有模板。

以模板『加』為例,圖像大小為40x260,模板大小27x27,result是一個大小為(14,234)的矩陣,即上文提到的相似度矩陣,矩陣中的數值屬於[-1,1],找到result中最大值所處的對應位置即為與模板最匹配的圖像位置:x=66,y=11,正好對應模板圖像在image中所處的位置。 (更多內容請參閱參考文獻【4】)

但這是比較好的情況,因為在匹配時遍歷了所有的模板,而一張圖片中出現的模板數量是有限的,比如數字』四』在圖片中是沒有的,這時就要根據某種規則去掉這些在圖片中沒有出現的模板:程序中使用dist變數來過濾匹配結果,如果dist變數大於某個值則認為此模板在圖像中不存在。

最後的result_list中可能仍然存在一些圖片中不存在的模板或者匹配不精確的模板,比如數字『一』在模板中不存在,但仍然可以匹配到,因為數字『二』中可以匹配到『一』,需要進一步優化,優化方法有很多,比如當匹配到的兩個模板距離過近時,選擇較大的那個模板,其餘方法留給讀者自行考慮吧。

後續將會推出如何使用深度學習識別驗證碼,敬請期待~


參考文獻:

http://www.cnblogs.com/beer/p/5672678.html

http://www.ruanyifeng.com/blog/2013/03/cosine_similarity.html

J. P. Lewis, 「Fast Normalized Cross-Correlation」, Instrial Light and Magic.

http://scikit-image.org/docsjinhqin/dev/auto_examples/plot_template.html


本文作者 :李暉(點融黑幫),畢業於電子科技大學,現就職於點融成都Data部門,對一切新鮮事物充滿好奇,對跳舞毫無抵抗力的活力女青年一枚。

『柒』 人體行為識別有哪些演算法

人體行為識別前已仿氏有的方法主要分為三大類:基於模板的方法,基於概率統計的方法和基於語義的方法。

模板匹配是一種較早用在人體運動識別上的方法,將運動圖像序列轉化為一個或一組靜態的模板,通過將待識別樣本的模板與已知的模板進行匹配獲得識別結果。

在行為識別中,基於模板匹配的演算法可以分為幀對幀匹配方法和融合匹配方法。

主要方法有:運動能量圖像(MEI)和運動歷史圖像(MHI),基於輪廓的平均運動形狀(MMS)和基於運動前景的平均運備鍵散動能量(AME)等。

概率統計方法進行運動識別是把運動的每一種靜態姿勢定義為一個狀態或者一個狀態的 *** ,通過亮宴網路的方式將這些狀態連接起來,狀態和狀態之間的切換採用概率來描述。

主要有隱馬爾科夫模型HMM, 最大熵馬爾科夫模型(MEMM),條件隨機場(CRF)等。

『捌』 模板匹配屬於深度學習嗎

1 不屬於深度學習
2 因為模板匹配是一種傳統的計算機視覺技術,它基於像素納頌銀級別的比較和匹配,不涉及神經網路等深度學習櫻坦技術。

3 當然洞宴,模板匹配可以和深度學習結合使用,例如在深度學習模型的輸出結果中進行模板匹配來進一步提高識別准確率,但單獨的模板匹配不屬於深度學習的范疇。

閱讀全文

與自適應模板匹配演算法相關的資料

熱點內容
解放壓縮機支架 瀏覽:255
程序員禿頂搞笑相遇 瀏覽:6
IBM手機app商店叫什麼名字 瀏覽:834
jpeg壓縮質量 瀏覽:774
雲伺服器評測對比 瀏覽:145
java日期轉string 瀏覽:221
openfire源碼編譯 瀏覽:897
在線小工具箱引流網站源碼 瀏覽:337
非科班程序員自學 瀏覽:799
壓縮泡沫鞋底底材 瀏覽:219
程序員職場第一課2正確的溝通 瀏覽:679
遇到不合法app應該怎麼辦 瀏覽:90
匯編程序編譯後的文件 瀏覽:79
大智慧均線源碼 瀏覽:373
單片機排阻的作用 瀏覽:215
滴滴金融app被下架如何還款 瀏覽:212
jpg轉換成pdf免費軟體 瀏覽:744
范里安pdf 瀏覽:447
偽造pdf 瀏覽:79
能刪除android文件夾嗎 瀏覽:448