一種優化的快速模板的匹配算法及應用介紹
3 數學模型優化方法
數學模型結合選擇的模板和搜索區域大小,可以知道模板最佳匹配點計算公式如下:

由公式(7)可以看出,程序需要進行大量的循環計算,整體運算量仍然不小,需要進一步優化,減少處理時間。運用如下優化算法進一步減少實際運算量。
3.1 粗精匹配結合
觀察實際模板匹配運算結果可以發現,匹配點附近的匹配誤差迅速下降,有顯區別于其它位置。針對這一特點,采用粗精匹配結合的算法迅速鎖定匹配點大致區域,可大大降低整體匹配次數。
具體實現方法:先跳動著隔幾個點進行一次粗匹配,大致框定匹配區域,然后在附近區域逐一檢索獲得最佳匹配點。運算量可減少到三分之一以下,且目標提取效果相當好。
3.2 限制最大匹配誤差
因為只需找到最小匹配誤差的位置,不必完整計算每一位置的絕對匹配誤差,而以已經計算最小匹配誤差作為最大允許誤差。若計算誤差大于該最大允許誤差,就肯定不是最佳匹配點,可以提前結束計算,進入下一匹配位置的計算;如果匹配完成后仍小于最大允許誤差,就用當前誤差替換最大允許誤差,并把該點作為潛在的匹配位置記錄下來。
匹配點和非匹配點的誤差常常相差2~3個數量級。經過這種處理后,匹配點后剩余的計算量可以大大降低。
3.3 亂序匹配
目標出現在匹配區域中的位置不確定。不固定順序算法可以更快地檢索到匹配區域,迅速降低最大匹配誤差,減少剩余非匹配點的計算一,降低整體運算量。
針對光電探測設備的實際工作情況,在跟蹤狀態下,目標位移角速度和角加速度有限,導致目標常處于匹配區域中心附近。選擇由中心向周圍輻射匹配的方式效果最理想。
4 程序樣本
以下程序樣本綜合使用了上面的優化算法,成功應用于紅外熱成像跟蹤技術的原理樣機,達到了預期效果。
該函數用于圖像模板匹配運算,適用于256灰度值的黑白圖像數據。
Deal_With:TemplateMatch(unsigned char* lpSource,LONGlWIDTh,LONG lHeight,unsigned char* lpTemplate,LONG lTemplateWidth,LONG lTemplateHeight,)
{
unsigned char* Source; //指向待處理圖像的指針
unsigned char*Template; //指向模板圖像的指針
int i,j,m,n; //循環變量
unsigned char lMaxWidth,lMaxHeigth,//匹配位置
unsigned long D; //相似誤差
unsigned long MaxD; //最大允許相似誤差
//粗相關
MaxD=0x10000000; //約定最大匹配誤差
for(j=0;j
for(i=0;i
D=0;
Source=(unsigned char *)lpSource+lWidth*j+i;
Template=(unsigned char *)lpTemplate;
for(n=0;n
for(m=0;m
D+=(*Source++-*Template++)*(*Source++-*Template++);
Source+=lWidth-lTemplateWidth;
}
linux操作系統文章專題:linux操作系統詳解(linux不再難懂)








評論