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

2021-06-09 14:21:24 字數 1765 閱讀 3713

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,

2iplimage

*greyrightimg32, 

3int

windowsize,

intdsr)22}

2324

cvscalar sum;

25//

cvscalar s2;

26for(y=

0;y<

height

-n;y

++) 

3233

//start matching

34do

else 40

41cvabsdiff(greyleftimg32,greyrightimg32,winimg);

//absolute difference

42sum

=cvsum(winimg);

//sum

43localsad[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}

//x 

53if(y%

10==

0)cout

<<

"row=

"<<

y<<

"of 

"<<

height

<<

endl;  54}

//y5556

cvreleaseimage(

&winimg); 

57//

cvreleaseimage(&rightwinimg); 

5859

return

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 就利用了這一特性將二維問題簡...