-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDDR_SGM_extend_detect.m
66 lines (59 loc) · 2.04 KB
/
DDR_SGM_extend_detect.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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
function [extend_map] = DDR_SGM_extend_detect(rawCostCube, ddr, extend_map, H, W, TH, opt)
Dmax = size(rawCostCube,3)-1;
L = Inf(H,W,Dmax+1);
if opt==1
L(:,1,:) = rawCostCube(:,1,:);
for i = 1:H
for j = 2:W
priorCost = L(i,j-1,:);
priorCostMin = min(priorCost);
min_r = ddr(i,j,1);
max_r = ddr(i,j,2);
for d = min_r:max_r
L(i,j,d) = rawCostCube(i,j,d)+SGM_L_eval(priorCost,d,priorCostMin)-priorCostMin;
end
slice = L(i,j,:);
if min(slice)>TH %extend to full disparity range
extend_map(i,j) = 1;
end
end
end
end
if opt==2
L(1,:,:) = rawCostCube(1,:,:);
for i = 2:H
for j = 1:W
priorCost = L(i-1,j,:);
priorCostMin = min(priorCost);
min_r = ddr(i,j,1);
max_r = ddr(i,j,2);
for d = min_r:max_r
L(i,j,d) = rawCostCube(i,j,d)+SGM_L_eval(priorCost,d,priorCostMin)-priorCostMin;
end
slice = L(i,j,:);
if min(slice)>TH%extend to full disparity range
extend_map(i,j) = 1;
end
end
end
end
if opt==3
L(:,1,:) = rawCostCube(:,1,:);
L(1,:,:) = rawCostCube(1,:,:);
for i = 2:H
for j = 2:W
priorCost = L(i-1,j-1,:);
priorCostMin = min(priorCost);
min_r = ddr(i,j,1);
max_r = ddr(i,j,2);
for d = min_r:max_r
L(i,j,d) = rawCostCube(i,j,d)+SGM_L_eval(priorCost,d,priorCostMin)-priorCostMin;
end
slice = L(i,j,:);
if min(slice)>TH%extend to full disparity range
extend_map(i,j) = 1;
end
end
end
end
end