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