-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDDR_SGM_diagonal_1_aggregation.m
40 lines (36 loc) · 1.37 KB
/
DDR_SGM_diagonal_1_aggregation.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
function [L] = DDR_SGM_diagonal_1_aggregation(rawCostCube, ddr, left, right, TH)
H = size(ddr,1);
W = size(ddr,2);
Dmax = size(rawCostCube,3)-1;
width = (size(left,1)-H)/2;
window_size = 2*width+1;
L = Inf(H,W,Dmax+1);
L(1,:,:) = rawCostCube(1,:,:);
L(:,1,:) = rawCostCube(:,1,:);
for i = 2:H
for j = 2:W
min_r = ddr(i,j,1);
max_r = ddr(i,j,2);
priorCost = L(i-1,j-1,:);
priorCostMin = min(priorCost);
for d = min_r:max_r
L(i,j,d) = rawCostCube(i,j,d)+SGM_L_eval(priorCost,d,priorCostMin)-priorCostMin;
end
if min(L(i,j,:))>TH
if j-1<Dmax
top = j-1;
else
top = Dmax;
end
patch1 = left(i:i+window_size-1, j:j+window_size-1)-left(i+width,j+width);
for k = 1:top+1
if (k<min_r)||(k>max_r)
patch2 = right(i:i+window_size-1, j-k+1:j-k+window_size)-right(i+width,j+width-k+1);
rawCostCube(i,j,k) = sum(sum(xor(patch1>0,patch2>0)));
L(i,j,k) = rawCostCube(i,j,k)+SGM_L_eval(priorCost,k,priorCostMin)-priorCostMin;
end
end
end
end
end
end