立體匹配中的NCC,SAD,SSD演算法

2021-07-05 18:19:00 字數 1838 閱讀 6739

normalized cross correlation (ncc)

ncc(u,v) =  [(wl - w)/(|wl - w|)]*[(wr - w)/(|wr - w|)] 選擇最大值

sum of squared 

defferences 

(ssd)

ssd(u,v) =  sum 選擇最大值

sum of absolute defferences (sad) 

sad(u,v) = sum  選擇最小值

先說說sad演算法的基本流程:

1.構造乙個小視窗,類似與卷積核。

2.用視窗覆蓋左邊的影象,選擇出視窗覆蓋區域內的所有畫素點。 

3.同樣用視窗覆蓋右邊的影象並選擇出覆蓋區域的畫素點。

4.左邊覆蓋區域減去右邊覆蓋區域,並求出所有畫素點差的絕對值的和。

5.移動右邊影象的視窗,重複3,4的動作。(這裡有個搜尋範圍,超過這個範圍跳出) 

6.找到這個範圍內sad值最小的視窗,即找到了左邊影象的最佳匹配的畫素塊。

opencv**示範sad:

1iplimage* 

generatedisparityimage(iplimage* 

greyleftimg32, 2

iplimage* 

greyrightimg32,  3

intwindowsize,

intdsr)

22}

2324

cvscalar 

sum;

25//cvscalar s2;

26for

(y= 0;y

//height-n

27for

(x= 0;x//

width-n 

28cvsetimageroi(greyleftimg32, 

cvrect(x,y,n,n));

29d= 0; 

30//initialise localsad

31for

(m= 0;m0;} 

3233//

start matching

34do

else 

4041cvabsdiff(greyleftimg32,greyrightimg32,winimg);

//absolute difference

42sum=cvsum(winimg);

//sum43

localsad[d]=sum.val[

0];//

0 means single channel

4445

cvresetimageroi(greyrightimg32); 

46d++;

47} while(d<=dsr);

4849//

to find the best d and store

50imga[y+offset][x+offset]=getmaxmin(localsad,dsr,

0)*16; 

//0 means return minimum index

51cvresetimageroi(greyleftimg32);

52} //

53if

(y% 10==

0)cout<<

"row=

"of  "

<54}

//y55

56cvreleaseimage(&winimg); 

57//cvreleaseimage(&rightwinimg); 

5859return

disparity;

6061}

立體匹配中的NCC,SAD,SSD演算法

normalized cross correlation ncc ncc u,v wl w wl w wr w wr w 選擇最大值 sum of squared defferences ssd ssd u,v sum 選擇最大值 sum of absolute defferences sad sa...

立體匹配 立體匹配過程

立體匹配就4個步驟 匹配代價計算,代價聚合,計算視差,視差精化 匹配代價計算 一般是通過計算左右兩圖對應畫素3個通道的灰度值差來決定匹配代價的,常用的就是基於畫素點匹配代價計算,一般有ad,sd,tad什麼的,基於區域的匹配代價計算一般有sad,ssd,stad之類的。匹配代價計算會生成乙個disp...

雙目立體匹配

公式 其中資料項描述了匹配程度,平滑項體現了定義場景的約束,c是匹配代價 或稱penalty p是不同兩畫素p和q視差的函式,一般稱之為平滑項 考慮到能量優化問題在一維空間的複雜度是多項式級的,因此一些研究試圖做一些近似來降低演算法的複雜度。例如,半全域性演算法 sgm 就利用了這一特性將二維問題簡...