Atitit opencv模板匹配attilax總結

weixin_33896726發表於2017-02-16

Atitit opencv模板匹配attilax總結

 

找一幅影象的匹配的模板,可以在一段視訊裡尋找出我們感興趣的東西,比如條形碼的識別就可能需要這樣類似的一個工作提取出條形碼區域(當然這樣的方法並不魯棒)。而OpenCV已經為我們整合好了相關的功能。函式為matchTemplate

所謂模板匹配就是在一幅影象中尋找和模板影象(patch)最相似的區域。該函式的功能為,在輸入源影象Source imageI)中滑動框,尋找各個位置與模板影象Template imageT)的相似度,並將結果儲存在結果矩陣result matrixR)中。該矩陣的每一個點的亮度表示與模板T的匹配程度。然後可以通過函式minMaxLoc定位矩陣R中的最大值(該函式也可以確定最小值)。

 

 

 

模板匹配是數字影象處理的重要組成部分之一。把不同感測器或同一感測器在不同時間、
不同成像條件下對同一景物獲取的兩幅或多幅影象在空間上對準,或根據已知模式到另一幅
圖中尋找相應模式的處理方法就叫做模板匹配。
    簡單而言,模板就是一幅已知的小影象。模板匹配就是在一幅大影象中搜尋目標,已知
該圖中有要找的目標,且該目標同模板有相同的尺寸、方向和影象,通過一定的演算法可以
在圖中找到目標,確定其座標位置。 

 

2.2 模板尺寸

  模板尺寸對系統效能和計算量的影響不容小覷。模板過大導致動態特性變差;過小又會減少目標的特徵資料量,降低匹配的敏感程度,增大目標檢測難度。實際操作中,模板尺寸設定為32×16時效果非常理想。

2.3 匹配區域

  不同的應用環境下,對匹配區域和實時性要求也不盡相同。光電探測裝置需要在視訊影象採集週期內(20ms)完成資料實時處理。由於目標在兩場視訊影象之間的移動量較小、特徵變化不大,匹配區域可以大大縮小。

  匹配區域太小會導致目標動態特性變差,過大又會導致計算量大幅度增加,具體選擇需要權衡裝置引數來決定。由於CCIR制式視訊訊號是隔行掃描,系統出於實時性考慮,資料以場為單位處理,導致影象比例為2:1狀態。為了保持水平、垂直方向的動態特性一致,影象匹配區域也按2:1比例選擇。

其實模板匹配的使用和直方圖反向投影calcBackProject函式很像,只是直方圖反向投影對比的是直方圖,而模板匹配對比的是影象的畫素值,相比較而言,直方圖反向投影的匹配魯棒性更好。

 

/atiplat_img/src/com/attilax/img/util/OpencvUtil.java

@SuppressWarnings("unused")

public static Point matchTemplate(BufferedImage srcImg, BufferedImage desImg, BufferedImage resultRect4dbg, int matchMode) throws CantFindMatch, IOException {

Mat source = bufImg2mat(srcImg);

Mat dst = bufImg2mat(desImg);

Mat result = Mat.zeros(source.rows(), source.cols(), CvType.CV_32FC1);

try {

Imgproc.matchTemplate(source, dst, result, matchMode); // TM_CCOEFF_NORMED

} catch (Exception e) {

throw new RuntimeException("Imgproc.matchTemplate ex:" + e.getMessage(), e);

}

// 規格化 rst= Mat [ 1005*1236*CV_32FC1, isCont=true, isSubmat=false,

// nativeObj=0x57b3fca0, dataAddr=0x59e80050 ]

Core.normalize(result, result, 0, 1, Core.NORM_MINMAX, -1);

// 獲得最可能點,MinMaxLocResult是其資料格式,包括了最大、最小點的位置x、y

// System.out.println(AtiJson.toJson(result));

MinMaxLocResult mlr = Core.minMaxLoc(result);

Point matchLoc = getMatchPoint(matchMode, mlr);

// 在原圖上的對應模板可能位置畫一個綠色矩形

Core.rectangle(source, matchLoc, new Point(matchLoc.x + dst.width(), matchLoc.y + dst.height()), new Scalar(0, 255, 0));

resultRect4dbg = mat2bufImg(source);

if (matchLoc != null)

return matchLoc;

throw new CantFindMatch(" cant find match");

 

}

 

 

 

private static Point getMatchPoint(int matchMode, MinMaxLocResult mlr) {

Point matchLoc;

if (matchMode == Imgproc.TM_SQDIFF || matchMode == Imgproc.TM_SQDIFF_NORMED) {

matchLoc = mlr.minLoc;

} else {

matchLoc = mlr.maxLoc;

 

}

return matchLoc;

}

 

 

 

作者:: 綽號:老哇的爪子claw of Eagle 偶像破壞者Iconoclast image-smasher

捕鳥王"Bird Catcher  kok  虔誠者Pious 宗教信仰捍衛者 Defender Of the Faith. 卡拉卡拉紅斗篷 Caracalla red cloak 萬獸之王

簡稱:: Emir Attilax Akbar 埃米爾 阿提拉克斯 阿克巴

全名::Emir Attilax Akbar bin Mahmud bin  attila bin Solomon bin adam Al Rapanui 埃米爾 阿提拉克斯 阿克巴 本 馬哈茂德 本 阿提拉 本 所羅門 本亞當  阿爾 拉帕努伊

常用名:艾提拉(艾龍),  EMAIL:1466519819@qq.com

 

 

頭銜:uke總部o2o負責人,全球網格化專案創始人,

uke交友協會會長  uke捕獵協會會長 Emir Uke部落首席大酋長,

 

uke宗教與文化融合事務部部長, uke宗教改革委員會副主席

uke制度與重大會議委員會委員長,uke保安部首席大隊長,uke制度檢查委員會副會長,

 

uke 首席cto  奶牛科技首席cto , 軟體部門總監 技術部副總監  研發部門總監主管  產品部副經理 專案部副經理  奶牛科技研究院院長

 

uke波利尼西亞區大區連鎖負責人 湯加王國區域負責人 uke克爾格倫群島區連鎖負責人,萊恩群島區連鎖負責人,uke布維島和南喬治亞和南桑威奇群島大區連鎖負責人

 Uke軟體標準化協會理事長理事長 Uke 資料庫與儲存標準化協會副會長

 

uke終身教育學校副校長   Uke醫院 與醫學院方面的創始人

 uec學院校長, uecip影象處理機器視覺專業系主任   uke文件檢索專業系主任

Uke影象處理與機器視覺學院首席院長

Uke 戶外運動協會理事長  度假村首席大村長   uke出版社編輯總編

 

轉載請註明來源:attilax的專欄  ?http://www.cnblogs.com/attilax/

--Atiend  v7

 

相關文章