圖像處理筆記(十八):模板匹配


試一下多種方式的模板匹配:

dev_close_window ()
read_image(Image, '2008531173479_2')
dev_open_window_fit_image(Image, 0, 0, 512, 512, WindowHandle)
dev_display(Image)

* 從原圖中裁切一塊作為模板
crop_part(Image, ImagePart, 445, 250, 240, 220)
dev_set_draw('margin')
mean_image(ImagePart, ImageMean, 3, 3)
rgb1_to_gray(ImageMean, GrayImage)
* 將原圖縮小到一半
zoom_image_size(GrayImage, GrayImage, 120, 110, 'constant')
* 使用切出來創建一個ncc模板(模板生成方式1)
create_ncc_model(GrayImage, 'auto', -0.39, 0.79, 'auto', 'use_polarity', ModelID)
rotate_image(Image, ImageRotate, 45, 'constant')
rgb1_to_gray(Image, GrayImage1)
* 匹配
find_ncc_model(GrayImage1, ModelID, -0.39, 0.79, 0.8, 1, 0.1, 'true', 0, Row, Column, Angle, Score)
if (|Row| > 0)
    gen_rectangle1(Rectangle, Row - 100, Column - 100, Row + 100, Column + 100)
endif

* 模板生成方式2,這個模板是可以旋轉匹配的,也就是說,如果圖像旋轉了,上面那個模板就匹配不到
create_ncc_model(GrayImage, 'auto', 0, rad(360), 'auto', 'use_polarity', ModelID1)
rgb1_to_gray(ImageRotate, GrayImage2)
find_ncc_model(GrayImage2, ModelID1, 0, rad(360), 0.8, 1, 0.1, 'true', 0, Row1, Column1, Angle1, Score1)
if (|Row1| > 0)
    gen_rectangle2(Rectangle1, Row1, Column1, Angle1, 100, 100)
endif

* 模板生成方式3,這個模板是適合有縮放或有旋轉的匹配的,如果模板進行了縮放或者圖像進行了縮放,上面那兩個模板都會匹配不了
* 旋轉角度范圍和圖片縮放比例可配,如果支持的范圍太大的話,會影響匹配速度。
create_scaled_shape_model(GrayImage, 'auto', 0, rad(140), 'auto', 0.5, 10, 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelID2)
find_scaled_shape_model(GrayImage2, ModelID2, 0, rad(140), 0.5, 10, 0.5, 1, 0.5, 'least_squares', 0, 0.1, Row2, Column2, Angle2, Scale, Score2)
if (|Row2| > 0)
    gen_rectangle2(Rectangle2, Row2, Column2, Angle2, 100, 100)
endif

看一下最后一種方式,
create_scaled_shape_model(Template, 輸出值,模板
NumLevels, 圖像金字塔層數,用來降低匹配時長,每增加一層圖像的寬高就會減半,圖像分辨率會降低
AngleStart, 旋轉開始的弧度
AngleExtend, 旋轉的角度范圍
AngleStep, 旋轉步長,如果不知道怎么設置,可以設置為auto,步長設置的越小,越占用內存,越慢
ScaleMin, 最小縮放倍數
ScaleMax, 最大縮放倍數
ScaleStep, 縮放步長,可以設置為auto
Optimization, 優化方式
Metric, 是否使用極性,如果使用極性,那么如果模板背景灰度弱,前景灰度強,那么匹配的圖片也必須滿足這樣的條件;如果不要求極性,當匹配的圖片背景灰度強,前景灰度弱的時候也會匹配到,忽略極性會導致匹配耗時增加
Contrast, 和模板圖片對比度相關的一個閾值,可以直接使用auto
MinContrast, 用來匹配的圖片的最小對比度
ModelID) 輸出值,模板ID

find_scaled_shape_model(Image, 用來查找的圖片
ModelID, 模板ID
AngleStart,
AngleExtent,
ScaleMin,
ScaleMax,
MinScore, 匹配的最低分數,大於這個分數的才是被接受的匹配
NumMatches, 需要找的匹配數量
MaxOverlap, 最大重疊
SubPixel, 是否亞像素精度
NumLevels, 圖像金字塔層數
Greediness, 搜索貪婪度,0-1,越大搜索越快,可以理解為搜得越不仔細
Row, 搜索到的行坐標
Column, 搜索到的列坐標
Angle, 相對於x軸正半軸的旋轉角度
Scale, 圖片相對於模板的縮放倍數bc
Score) 得分

搜索到的行列坐標都是匹配上的模板中心坐標。模板的中心坐標默認是模板的原點坐標,可以通過set_shape_model_origin來進行調整。
當模板是對稱的時候,需要控制旋轉角度來防止搜索到多個角度不同的相同匹配


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM