詳細說說shape_model的使用


基於形狀匹配shape_model是工程上用的最多的,掌握它就有了一張王牌。


針對ROI小區域建模板,應用場合: 模板的形狀和大小一經制作完畢便不再改變,在查找模板的過程中,只會改變模板的方向和位置等來匹配目標圖像中的圖像。定位對象內部的灰度值可以有變化,但對象輪廓一定要清晰平滑。匹配速度比灰度快

【創建模板參數 create_shape_model】
create_shape_model(Template : : NumLevels, AngleStart, AngleExtent, AngleStep, Optimization, Metric, Contrast, MinContrast : ModelID)
create_shape_model (ImageROI, NumLevels, 0, rad(360), 'auto', 'none', 'use_polarity', 30, 10, ModelID)

【檢察inspect_shape_model 可選】
inspect_shape_model(Image : ModelImages, ModelRegions : NumLevels, Contrast : )
創建好模板后,這時還需要監視模板,用inspect_shape_model()來完成,它檢查參數的適用性,還能幫助找到合適的參數
inspect_shape_model (ImageROI, ShapeModelImages, ShapeModelRegions, 8, 30)

【保留輪廓后用get_shape_model_contours 可選】
get_shape_model_contours( : ModelContours : ModelID, Level : )
獲得這個模板的輪廓,用於后面的匹配
get_shape_model_contours (ShapeModel, ModelID, 1)

【搜尋匹配find_shape_model】
find_shape_model(Image : : ModelID, AngleStart, AngleExtent, MinScore, NumMatches, MaxOverlap, SubPixel, NumLevels, Greediness : Row, Column, Angle, Score)
在一幅圖中找出最佳匹配的模板,返回一個模板實例的長、寬和旋轉角度
參數設置:

find_shape_model (SearchImage, ModelID, 0, rad(360), 0.7, 1, 0.5, 'least_squares', 0, 0.7, RowCheck, ColumnCheck, AngleCheck, Score)

【 結果轉化 vector_angle_to_rigid或 affine_trans_contour_xld】
后期結果的仿射變換和輪廓處理

【涉及參數詳解】
Numlevels:
指定金字塔級數,值越大用時越少,但要保證最高層至少四個點信息,值越大模塊不易識別出來,需要設低 MinScore和Greediness
判斷在金字塔最高級上匹配是否失敗,可find_shape_model減小NumLevels值來測試;
用 inspect_shape_model函數的輸出結果來選擇一個較好的金字塔層數

AngleStart、AngleExtent:
決定可能的旋轉范圍,find時只找這個范圍內匹配
判斷是否在相同物體上找到多個匹配值,如物體幾乎對稱的,則要控制旋轉范圍;

AngleStep:
指定角度范圍搜索的步長,auto時可以用 get_shape_model_params查看

Optimization:
設置none所有模型點都會被存儲,對特別大的模板,不設none用來減少模板點的數量。如果點數設少了,對應 Greediness設一個比較小值
還可選擇預處理(pregenerated completely),'pregeneration'或'no_pregeneration'。根據內存和時間折中

Contrast:
有三個參數,第一個數值是比較低的閾值,第二個數值是比較高的閾值。第三個數值是在基於組件尺寸選擇重要模型組件時所設置的閾值,可以用 determine_shape_model_params自動確定。

MinConstrast:
將模板從噪聲中分離,如果灰度值波動范圍是10,則應設10
物體是否具有較低的對比度,又要能識別,減小MinContrast值;
設置為'auto',最小對比度會基於模板圖像中的噪聲自動定義。
自動在圖像和噪聲近似時才用。在某些情況下為了遮擋魯棒性,也用

Metric:
決定模板識別條件,如果設’use_polarity’,則圖中物體和模板必須有相同對比度,都是亮底黑字等, 'ignore_global_polarity',在兩者對比度完全相反時也能找到目標。
判斷是否全局或局部地轉化對比度極性,又要能識別,設置Metric合適值

Greediness:
搜索貪婪度,影響搜索速度,若為0,則為啟發式搜索,很耗時,若為1,則為不安全搜索,但最快。在大多數情況下,在能夠匹配的情況下,盡可能的增大其值。
值設的太高,就找不到其中一些可見物體,這時將其設0來執行完全搜索
如果為0,使用安全的搜索啟發式,只要模板在圖像中存在就一定能找到,相對浪費時間。為1,使用不安全的搜索啟發式,這樣即使模板存在於圖像中,也有可能找不到模板,但只是少數情況。如果設置Greediness=0.9,在幾乎所有的情況下,總能找到模型的匹配。

MinScore:
分析模板的旋轉對稱和它們之間的相似度,值越大,則越相似。
物體是否有封閉區域,又要能識別,則減小MinScore值

SubPixel:
決定是否精確到亞像素級,設為’interpolation’,則會精確到,這模式不會占用太多時間,若需要更精確,則可設為’least_square’,’lease_square_high’,但這樣會增加額外的時間,需要在時間和精度上作折中
通常為'interpolation'。如果希望最小二乘就選擇'least_squares', 這樣才能確保運行時間和精度的權衡。

MaxOverlap:
如果有重疊,又要能識別,增加MaxOverlap值
MaxOverlap=0, 找到的目標區域不能存在重疊, 為1,所有找到的目標區域都要返回。

使用的說明:
*保證物體在圖像邊緣處截斷,也就是保證輪廓的清晰
速度上的優化:
*只要匹配成功,則盡可能增加參數MinScore的值
*增加Greediness值直到匹配失敗,同時在需要時減小MinScore值
*如果有可能,在創建模板時使用大NumLevels,即將圖像多分幾個金字塔級
*限定允許的旋轉范圍和大小范圍,調find_shape_model時調整相應參數
*盡量限定搜索ROI的區域
*Greediness值盡可能大,用模板匹配進行視頻對象跟蹤時,它很大程度上影響匹配速度


看了感覺怎么樣?來說說吧。。。
喜歡記得關注起來!趕緊的。



免責聲明!

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



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