對(duì)象檢測:模板匹配
簡介
模板匹配是一種高級(jí)計(jì)算機(jī)視覺方法,可檢測與預(yù)定模板匹配的圖像部分。先進(jìn)的模板匹配算法檢測模板的出現(xiàn),無論其方向或局部亮度如何。
在醫(yī)學(xué)圖像分析中,不變特征或創(chuàng)新應(yīng)用通常用作對(duì)象識(shí)別領(lǐng)域,例如車輛跟蹤、機(jī)器人和制造。
模板匹配方法用途廣泛且易于應(yīng)用,使其成為最常用的對(duì)象定位方法之一。它們的實(shí)用性主要受計(jì)算機(jī)容量的限制,因?yàn)樽R(shí)別大型復(fù)雜模板可能很耗時(shí)。
· 這是一種在較大圖像中搜索和定位模板的方法。
· 目標(biāo)是發(fā)現(xiàn)與我們基于閾值提供的模板匹配的圖像的相同部分。
· 閾值決定了我們想要識(shí)別原始圖像中的模板的程度。
· 例如,如果我們正在使用人臉識(shí)別,并且想要檢測人的眼睛,我們可以使用眼睛的隨機(jī)圖像作為模板并搜索源(人臉)。
· 在這種情況下,由于“眼睛”因人而異,即使我們將閾值設(shè)置為 50%(0.5),眼睛也會(huì)被識(shí)別出來。
工作功能
· 只需將模板圖片滑動(dòng)到輸入圖像上(如在 2D 卷積中)
· 比較模板圖片和它下面的輸入圖像。
· 將獲得的結(jié)果與閾值進(jìn)行比較。
· 如果結(jié)果超過閾值,則將該部分標(biāo)記為檢測到。
· 函數(shù)cv2.matchTemplate(image, template,cv2.TM_CCOEFF_NORMED)中的第一個(gè)參數(shù)是主圖像,第二個(gè)參數(shù)是要匹配的模板,第三個(gè)參數(shù)是匹配技術(shù)。
讓我們首先定義模板匹配。它是一種在源圖像中定位參考圖像(或模板圖像)的方法。在其最基本的形式中,該算法比較每個(gè)源圖像區(qū)域的模板,一次一個(gè)像素。這被稱為互相關(guān)。此過程的結(jié)果是另一個(gè)圖像,其像素值對(duì)應(yīng)于模板圖像在該像素位置插入時(shí)與源圖像的相似程度。
讓我們看一下金屬瓶蓋的圖像,看看它是如何工作的。假設(shè)我們對(duì)紅色金屬瓶蓋感興趣。
讓我們編碼
讓我們看看它在 Python 中的實(shí)現(xiàn)!但首先,我們必須導(dǎo)入以下庫:
import cv2
import numpy as np
讓我們加載一個(gè)源圖像并將你的 RGB 源圖像轉(zhuǎn)換為灰度(它的二值化形式也可以工作)。彩色照片可用于模板匹配,但灰度或二值化圖像更易于使用。
python 代碼:
# import the necessary packages
import cv2
img = cv2.imread("32080download.png")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow("Output", img)
cv2.waitKey(0)
輸出:
要在上圖中進(jìn)行模板匹配,首先,我們必須加載模板圖像
template = cv2.imread(r"template_image_path")
w, h = template.shape[::-1]
在將模板的寬度和高度存儲(chǔ)在 w 和 h 中之后,我們初始化一個(gè)發(fā)現(xiàn)的變量來跟蹤具有最佳匹配的圖像的區(qū)域和比例。使用模板匹配功能檢測輸入源圖像中的模板,
res = cv2.matchTemplate(gray, template, cv2.TM_CCOEFF_NORMED)
之后,設(shè)置所需輸出的閾值
threshold = 0.90
loc = np.where(res >= threshold)
在模板匹配對(duì)象中繪制矩形
for pt in zip(*loc[::-1]):
cv2.rectangle(img, pt, (pt[0] + w, pt[1] + h), (0, 0, 255),1)
顯示帶有標(biāo)記模板區(qū)域的源圖像
cv2.imshow('Detected the template matching objects', img)
cv2.imshow('Template', template)
cv2.waitKey()
cv2.destroyAllWindows
我們可以利用多重縮放來避免模板和原始圖像大小不同所帶來的問題。
多尺度——新的模板匹配方法
如果你的模板尺寸與你要匹配的圖像中區(qū)域的尺寸不匹配,這并不妨礙你使用模板匹配。
多重縮放過程如下:
以各種比例循環(huán)輸入圖像。使用 cv2.matchTemplate,應(yīng)用模板匹配并跟蹤具有最高相關(guān)系數(shù)的匹配(以及具有最大相關(guān)系數(shù)的區(qū)域的 x 和 y 坐標(biāo))。循環(huán)遍歷所有尺度后,選擇相關(guān)系數(shù)最高的區(qū)域作為匹配區(qū)域。
import cv2
import imutils
import numpy as np
img_rgb = cv2.imread('mainimage.jpg')
img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)
template = cv2.imread('template', 0)
w, h = template.shape[::-1]
resize = imutils.resize(img_gray, width=int(img_gray.shape[0]), height=int(img_gray.shape[1]*scale)
if resized.shape[0] < h or resized.shape[1] < w:
break
found=(maxVal, maxLoc, r)
(__, maxLoc, r)=found
(startX, startY)=(int(maxLoc[0]*r), int maxLoc[1]*r)
(finalX, finalY)=(int((maxLoc[0]+tw)*r), int(maxLoc[1]+tH)*r)
cv2.rectangle(image, (startX, startY),(finalX, finalY), (255, 0, 255), 2)
cv2.imshow("Image", image)
cv2.waitKey(0)
以下是對(duì)上述代碼的分步說明:
我們在 w 和 r 中記錄模板的寬度和高度后,初始化一個(gè)變量來跟蹤最匹配的圖像的區(qū)域和比例。然后,使用 np.linspace 函數(shù),我們開始遍歷圖像的眾多比例。這個(gè)函數(shù)接受三個(gè)參數(shù):起始值和結(jié)束值以及它們之間相等的塊切片的數(shù)量。在此示例中,我們將從原始圖像大小的 100% 開始,然后在 20 個(gè)相同大小的百分比塊中縮小到原始大小的 20%。
我們接下來將圖像調(diào)整為當(dāng)前比例并計(jì)算舊寬度與新寬度的比率——正如你稍后將看到的,這個(gè)比率很關(guān)鍵。我們驗(yàn)證提供的圖像是否大于我們的模板匹配。如果模板更大,我們的 cv2.matchTemplate 調(diào)用將失敗。因此,在這種情況下,我們只是退出循環(huán)。我們現(xiàn)在可以將模板匹配應(yīng)用于我們的縮放圖像:
我們的相關(guān)結(jié)果被傳遞給 cv2.minMaxLoc 函數(shù),該函數(shù)返回一個(gè) 4 元組,其中包含最小相關(guān)值、最大相關(guān)值、最小值的 (x, y) 坐標(biāo)和最大值的坐標(biāo) (x, y)。
因?yàn)槲覀冎幌胍畲笾岛?(x, y) 坐標(biāo),所以我們保存最大值并拒絕最小值。之后,我們在每次縮放迭代中檢查匹配的圖像區(qū)域。然后,我們更新我們發(fā)現(xiàn)的變量以跟蹤迄今為止發(fā)現(xiàn)的最大相關(guān)值、最大值的 (x, y) 坐標(biāo)以及原始圖像寬度與當(dāng)前放大圖像寬度的比率。
在遍歷所有圖片比例后,我們提取我們的found變量并計(jì)算我們的邊界框的開始和結(jié)束 (x, y) 坐標(biāo)。
結(jié)論
本文演示了我們?nèi)绾问褂脠D像處理來輔助對(duì)象檢測和識(shí)別。模板匹配可用作檢測機(jī)器學(xué)習(xí)和深度學(xué)習(xí)模型的對(duì)象的管道。
要點(diǎn):
· 參考圖案的方向必須在模板中保留。
· 因此,它不適用于模板的旋轉(zhuǎn)或縮放版本,因?yàn)閲@模板的對(duì)象的形狀/大。羟械鹊淖兓瘯(huì)導(dǎo)致錯(cuò)誤匹配。
· 由于該過程耗時(shí),該方法在計(jì)算中大型圖像的模式相關(guān)圖像時(shí)效率低下。
原文標(biāo)題 : 對(duì)象檢測:模板匹配

發(fā)表評(píng)論
請(qǐng)輸入評(píng)論內(nèi)容...
請(qǐng)輸入評(píng)論/評(píng)論長度6~500個(gè)字
最新活動(dòng)更多
-
6月20日立即下載>> 【白皮書】精準(zhǔn)測量 安全高效——福祿克光伏行業(yè)解決方案
-
7月3日立即報(bào)名>> 【在線會(huì)議】英飛凌新一代智能照明方案賦能綠色建筑與工業(yè)互聯(lián)
-
7月22-29日立即報(bào)名>> 【線下論壇】第三屆安富利汽車生態(tài)圈峰會(huì)
-
7.30-8.1火熱報(bào)名中>> 全數(shù)會(huì)2025(第六屆)機(jī)器人及智能工廠展
-
7月31日免費(fèi)預(yù)約>> OFweek 2025具身機(jī)器人動(dòng)力電池技術(shù)應(yīng)用大會(huì)
-
免費(fèi)參會(huì)立即報(bào)名>> 7月30日- 8月1日 2025全數(shù)會(huì)工業(yè)芯片與傳感儀表展
推薦專題
- 1 AI 眼鏡讓百萬 APP「集體失業(yè)」?
- 2 大廠紛紛入局,百度、阿里、字節(jié)搶奪Agent話語權(quán)
- 3 深度報(bào)告|中國AI產(chǎn)業(yè)正在崛起成全球力量,市場潛力和關(guān)鍵挑戰(zhàn)有哪些?
- 4 上海跑出80億超級(jí)獨(dú)角獸:獲上市公司戰(zhàn)投,干人形機(jī)器人
- 5 一文看懂視覺語言動(dòng)作模型(VLA)及其應(yīng)用
- 6 國家數(shù)據(jù)局局長劉烈宏調(diào)研格創(chuàng)東智
- 7 下一代入口之戰(zhàn):大廠為何紛紛押注智能體?
- 8 百億AI芯片訂單,瘋狂傾銷中東?
- 9 Robotaxi新消息密集釋放,量產(chǎn)元年誰在領(lǐng)跑?
- 10 格斗大賽出圈!人形機(jī)器人致命短板曝光:頭腦過于簡單