匹配 演算法 總結歸納

2022-03-30 04:42:14 字數 4301 閱讀 8272

模板影象 以視窗滾動的方式 在源影象中 掃一遍。

具體運算公式如下:

r(i,j) = dsigmast / (dsigmat * dsigmas) 對應上公式; r(i,j)=[0,1]

m ,n 模板大小

對於公式的解釋:

dsimgmast --  在 在原圖(i ,j) 位置 模板影象每個畫素與對應原影象素的積 的和)

dsigmat -- 模板影象每個畫素的積 的和

dsigmas -- 在原圖(i,j)位置,模板影象對應的原圖的每個畫素的積的和

r(i,j)最大的位置就是最匹配的位置。

/*函式:normalizegraymatch

功能:歸一化灰度值匹配

引數:src 原圖

template 模板

point 匹配的位置左上角

返回值: 0 --- 未找打匹配物件

其他 --- 返回匹配位置相似度

*/double normalizegraymatch(iplimage * src , iplimage * temp , cvpoint & point)

}double r = 0 ;

double dsigmas ;

double dsigmast ;

unsigned char piexlt,piexls;

double dmaxr = -1 ;

int nmaxheight = -1 ;

int nmaxwidht = -1 ;

for (int i = 0 ; i < nsrcheight - ntheight +1 ; ++ i )

}r = dsigmast / ( sqrt(dsigmas) * sqrt(dsigmat) ) ;

if (r > dmaxr )

}}if (dmaxr != -1)

return 0 ;序貫相似性檢測法匹配 ssda -- similarity sequential dectection algorithm

前面的歸一化積相關匹配演算法計算量很大,原因在於搜尋視窗在源影象上進行滑動,每滑動一次就要做一次匹配運算,除了匹配的點外在其他匹配點做了『無用功』,導

致了匹配演算法的計算量上公升。所以,一旦發現所在的參考位置為非匹配點,就丟棄不再計算,立刻換到新的參考點計算,可以大大加速匹配過程。

ssda演算法過程:

1.定義絕對誤差:

其中:模板對應原圖(子圖)的灰度平均值

模板的灰度平均值
2.取乙個不變閾值

3.掃面原圖每個畫素點待匹配點對應的模板子圖,根據1中的公式據算絕對誤差,當累加值超過閾值時停止累加,停止此模板子圖的掃瞄,記錄帶匹配點的位置和累加次數

4,迴圈 3 直到掃瞄完全圖

5,累加次數最少的畫素點就為最佳匹配點

對於序貫相似相演算法有很多可以優化的地方, 比如 第三步 掃瞄子影象素的時候 可以用 隔行 列 掃瞄 , 第二部 閾值可以改為自動閾值等等,不過這裡的優化有能

怎麼樣呢 還是很慢呀,還是期待後面的演算法吧。

/*函式:ssdamatch

引數:src --- 源影象 in

temp -- 匹配模板 in

point -- 匹配位置 out

threshold -- 閾值 in

返回值:累加次數

限制: 8位灰度圖

*/int ssdamatch(iplimage * src , iplimage * temp , cvpoint & point , int threshold)

}dsigmat /=ntempsize ;

double dsigmas = 0 ;

double dbr =0; //誤差

long lr = 0; //誤差累積次數

long maxr =0; //最大累積次數

int nmaxheight = 0 ; //最大累計次數 對應匹配位置 (左上角)

int nmaxwidht = 0 ;

for (int i = 0 ; i < nsrcheight - ntheight +1 ; ++i)

}dsigmas /=ntempsize ;

//計算誤差 一旦超過閾值則拋棄不再計算

for (int k = 0 ; k < ntheight ; ++ k)

if (dbr>=threshold)

break;

}//取達到threshold 累加最多的 位置

if ( lr >maxr )

}} point.x = nmaxwidht ;

point.y = nmaxheight ;

return lr;基於特徵的匹配

利用灰度資訊匹配的方法主要缺陷是計算量過大,對影象的灰度變換很敏感,尤其是非線性的光照變化,此外,對目標的旋轉、變形以及遮擋也比較敏感,為

了克服這些缺點,可以利用影象的特徵進行匹配,由於影象的特徵點比畫素點要少很多,大大減少了匹配過程的計算量,同時,特徵點的匹配度量值對位置的

變化比較敏感,可以大大的提高匹配的精度。而且,特徵點的提取過程可以減少雜訊的影響,對灰度變化、影象形變以及遮擋等有較好的適應能力。

不變矩匹配法 tm演算法 具有平移、旋轉、尺寸不變性

p+q>=2

歸一化公式:

演算法過程:計算 分別計算模板和原圖的7個不變矩 ,根據歸一化公式得出相似度。

double momentmatch(unsigned char * src , unsigned char * temp ,int nwidth , int nheight ,int nwidthstep )

return r = dsigmast / sqrt( dsigmas * dsigmat) ;/*

函式:calbarycenter

功能:計算重心矩

引數:pdata -- 影象資料 in

nwidth -- 寬 in

nheight -- 高 in

nwidthstep -- 步長 in

nbarycenterx -- 重心座標 out

nbarycentery

*/void calbarycenter(unsigned char * pdata , int nwidth , int nheight ,int nwidthstep , int &nbarycenterx , int &nbarycentery)

}nbarycenterx =(int) (m10 / m00 +0.5);

nbarycentery = (int)(m01/ m00 + 0.5);/*

函式:calcentermoment

功能:計算中心矩

引數:pdata --- 影象資料 in

nwidth -- 寬 in

nheight -- 高 in

nwidthstep -- 步長 in

nbarycenterx -- 重心矩 in

nbarycentery

ip -- 階數 in

jq返回值:中心距值

*/double calcentermoment(unsigned char * pdata , int nwidth , int nheight ,int nwidthstep ,

double nbarycenterx , double nbarycentery,int ip,int jq)

}//for l

}//for l

//計算匹配誤差

dbmatch = ( dsigmast + abs(na-nb)) /(na +nb);

if (dbmatch < dbminmatch)

} // for j

} //for i

point.x = nmatchwidth;

point.y = nmatchheight;

free(ptdist);

free(ptdata);

return dbminmatch;5.最小均方誤差匹配法

最小均方誤差匹配方法是利用影象中的對應特徵點,通過解特徵點的變換防長來計算影象間的變換引數。

基本原理:最小均方誤差匹配方法是以模板中的特徵點構造矩陣x ,影象子圖中的特徵點構造矩陣y ,求解矩陣x 到矩陣y 的變換矩陣, 其中誤差

最小的位置為最佳匹配位置

影象間的仿變換方程:

原點為中心旋轉               平移
仿變換引數為

構建影象矩陣 x

y最小均方誤差的原理是求解

其中

排序演算法 歸納總結

一 直接插入排序 氣泡排序和簡單選擇排序是最基本的排序方法,它們主要用於元素個數n n 10000 不是很大的情形。它們的平均複雜度均為o n 2 實現也比較簡單。1 直接插入排序對於規模很小的元素序列 n 25 非常有效。它的時間複雜度與待排序元素序列的初始排列有關。在最好情況下,直接插入排序只需...

查詢演算法和排序演算法的歸納總結

查詢演算法 有序查詢 時間複雜度 o n 二分查詢 時間複雜度 o logn 有序查詢演算法實現 public int search int searcher 二分查詢演算法實現 public int binary search int searcher return 1 排序演算法 氣泡排序 時間...

Halcon中模板匹配方法的總結歸納

基於元件的模板匹配 應用場合 元件匹配是形狀匹配的擴充套件,但不支援大小縮放匹配,一般用於多個物件 工件 定位的場合。演算法步驟 1.獲取元件模型裡的初始控制項 gen initial components 引數 modelimage input 初始元件的 initialcomponents ou...