【Halcon學(xué)習(xí)筆記】07.圖像匹配
1.概述
????????圖像匹配是通過(guò)對(duì)影像內(nèi)容、特征、結(jié)構(gòu)、關(guān)系、紋理及灰度等對(duì)應(yīng)關(guān)系進(jìn)行相似性和一致性的分析,尋求相似影像目標(biāo)的方法。匹配過(guò)程通常先確定目標(biāo),在某張樣圖中選取目標(biāo)作為模板,然后在待匹配的圖像中分析是否有模板相似區(qū),如果有則進(jìn)一步確定位姿,因此也被稱作模板匹配。
? ? ? ? 圖像匹配方法包括:基于形狀特征的匹配(包括一般形狀匹配、比例縮放匹配、局部形變匹配、透視形變匹配)、基于組件的匹配、基于描述符的匹配、基于灰度值的匹配、基于灰度值相關(guān)性的匹配。
????????本節(jié)介紹常用的兩種匹配方法——基于相關(guān)性的匹配和基于形狀特征的匹配。

2.相關(guān)概念?
2.1 圖像金字塔
???????? 圖像金字塔是由一幅圖像的多個(gè)不同分辨率的子圖構(gòu)成的圖像集合。是通過(guò)一個(gè)圖像不斷的降低采樣率產(chǎn)生的,最小的圖像可能僅僅有一個(gè)像素點(diǎn)。下圖是一個(gè)圖像金子塔的示例。從圖中可以看到,圖像金字塔是一系列以金字塔形狀排列的、自底向上分辨率逐漸降低的圖像集合。


3.基于灰度值相關(guān)性的匹配(灰度匹配)
3.1 概述
????????直接對(duì)原圖像和模板圖像進(jìn)行操作,通過(guò)區(qū)域?qū)傩缘谋容^來(lái)反映它們之間的相似性。時(shí)間復(fù)雜度高,對(duì)圖像尺寸敏感?;诨叶认嚓P(guān)的算法,具有不受比例因子誤差影響和抗白噪聲干擾能力強(qiáng)等優(yōu)點(diǎn);通過(guò)比較參考圖像和輸入圖像在各個(gè)位置的相關(guān)系數(shù),相關(guān)值最大的點(diǎn)就是最佳匹配位置。
????????適用于失焦圖像、輕微變形、線性光照變換及輪廓模糊的場(chǎng)景;不適用于雜亂、遮擋、非線性光照變換、尺寸縮放的場(chǎng)景。
3.2 算子
3.2.1 創(chuàng)建
????????create_ncc_model()
????????Template:模板圖像
????????NumLevels:金子塔層數(shù)
????????AngleStart:旋轉(zhuǎn)開(kāi)始角度
????????AngleExtent:旋轉(zhuǎn)角度范圍
????????AngleStep:旋轉(zhuǎn)角度步長(zhǎng)
????????Metric:物體極性
????????ModelID:?生成的模板ID
3.2.2 匹配? ????????
????????find_ncc_model()
????????Image:?jiǎn)瓮ǖ缊D像,它的區(qū)域可被創(chuàng)建為模板
????????ModelID:模板句柄
????????AngleStart:模板的旋轉(zhuǎn)開(kāi)始角度
????????AngleExtent:模板旋轉(zhuǎn)角度范圍
????????MinScore:被找到的模板最小分?jǐn)?shù)
????????NumMatches:被找到的模板個(gè)數(shù)
????????MaxOverlap:被找到的模板實(shí)例最大重疊部分
????????SubPixel:亞像素級(jí)別標(biāo)志,true,false
????????NumLevels:金字塔層級(jí)數(shù)
????????Row:被找到的模板實(shí)例行坐標(biāo)
????????Column:被找到的模板實(shí)例列坐標(biāo)
????????Angle:被找到的模板實(shí)例的旋轉(zhuǎn)角度
????????Score:被找到的模板實(shí)例的分?jǐn)?shù)
3.2.3 釋放
????????clear_ncc_model (ModelID)
????????ModelID:模板句柄
4.基于形狀特征的匹配(形狀匹配)
4.1 概述
????????基于形狀的模板匹配,也稱為基于邊緣方向梯度的匹配。該算法以物體邊緣的梯度相關(guān)性作為匹配標(biāo)準(zhǔn),原理是提取ROI中的邊緣特征,結(jié)合灰度信息創(chuàng)建模板,并根據(jù)模板大小和清晰度的要求生成多層的圖像金字塔模型,再在圖像金字塔層中自上而下逐層搜索模板圖像,直到搜索到最底層或得到確定的匹配結(jié)果為止。
????????適用于目標(biāo)輪廓較清晰的場(chǎng)景;不適用于紋理復(fù)雜的場(chǎng)景。
4.2 算子
4.2.1 創(chuàng)建(帶縮放的)
????????create_scaled_shape_model()
???????Template:模板圖像(ImageReduced)
????????NumLevels:金字塔的層數(shù)(auto)
????????AngleStart:模板旋轉(zhuǎn)的起始角度(rad(-20))
????????AngleExtent:模板旋轉(zhuǎn)角度范圍(rad(40))
????????AngleStep:旋轉(zhuǎn)角度的步長(zhǎng)(auto)
????????ScaleMin:縮放的最小尺度(0.9)
????????ScaleMax:縮放的最大尺度(1.1)
????????ScaleStep:縮放的步長(zhǎng)(auto)
????????Optimization:模板優(yōu)化的方法(none)
????????Metric:匹配模板的條件(use_polarity:圖像中的目標(biāo)必須和模型具有一樣的對(duì)比度)
????????Contrast:對(duì)比度([灰度低閾值,灰度高閾值,最小長(zhǎng)度])([20,40,50])
????????MinContras:設(shè)置最小對(duì)比度,灰度的波動(dòng)范圍(5)
????? ? ModelID:輸出模板句柄(ModelID)
4.2.2 匹配?(帶縮放的)
????????find_scaled_shape_model
????????ModelID:輸入模板句柄(ModelID)
????????AngleStart:模板旋轉(zhuǎn)的起始角度(rad(-20))
????????AngleExtent:模板旋轉(zhuǎn)角度范圍(rad(40))
????????ScaleMin:縮放的最小尺度(0.9)
????????ScaleMax:縮放的最大尺度(1.1)
????????MinScore:最小分?jǐn)?shù)(0.3)
????????NumMatches:匹配個(gè)數(shù)(1)
????????MaxOverlap:最大重疊數(shù),多個(gè)相似時(shí)(0.5)
????????SubPixel:亞像素精度(least_squares:能確保運(yùn)行時(shí)間和精度的權(quán)衡)
????????NumLevels:金字塔的層數(shù)(0:使用創(chuàng)建模板時(shí)金字塔的層數(shù))
????????Greediness:貪婪值,用于控制定位加速,越大越慢(0.8)
4.2.3 釋放
? ? ? ? clear_shape_model (ModelID)
????????ModelID:模板句柄
4.2.4 顯示
????????dev_display_shape_matching_results()
????????ModelD:匹配模型(ModelID)
????????Color:顯示顏色('red')
????????Row:對(duì)應(yīng)的y值坐標(biāo)位置(Row1)
????????Column:對(duì)應(yīng)的x值坐標(biāo)位置(Column1)
????????Angle:對(duì)應(yīng)的角度(Angle1)
????????ScaleR:水平方向的縮放比例(1)
????????ScaleC:垂直方向的縮放比例(1)
????????Model: 模型句柄(0)
????????
5.模板匹配在Halcon中的應(yīng)用步驟
5.1 從參考圖像中選擇檢測(cè)的目標(biāo)
????????read_image (Image, teach.bmp)?
????????draw_rectangle2 (3600, Row, Column, Phi, Length, Length)?
????????gen_rectangle2(ROI_0, Row, Column, Phi, Length, Length)?
????????reduce_domain (Image, ROI_0, ImageReduced)

5.2 創(chuàng)建模板
????????create_scaled_shape_model (ImageReduced, 'auto', rad(-20), rad(40), 'auto', 0.9, 1.1, 'auto', 'none', 'use_polarity', [20,40,50], 5, ModelID)
5.3 匹配模板
????????read_image (ImageRun, 1.bmp)?
????????find_scaled_shape_model (Image, ModelID, rad(-20), rad(40), 0.9, 1.1, 0.6, 1, 0.5, 'least_squares', 0, 0.8, Row1, Column1, Angle1, Scale1, Score1)

5.4 數(shù)據(jù)處理
????????tuple_length (Score1, Length)
????????if (Length=0) ? ?
????????????disp_message (3600, 'NG(產(chǎn)品定位失敗)', 'window', 12, 12, 'red', 'true') ? ?
????????????stop()?
????????else ? ? ?
????????????gen_rectangle2 (Rectangle1, R, C, Angle1, 250, 200)?
????????endif

by Ryou2-