-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathSmoothness_build.m
83 lines (65 loc) · 3.33 KB
/
Smoothness_build.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
67
68
69
70
71
72
73
74
75
76
function W = Smoothness_build(G_bcubic,YUV_pad,G_edge,Patch_size,win,ser)
% smoothness term
w = win; % Search window radius
f = ser;
W = zeros(Patch_size^2);
% W = sparse(Patch_size^2,Patch_size^2); % 锟斤拷锟斤拷一锟斤拷稀锟斤拷权锟截撅拷锟襟,筹拷值为锟斤拷稀锟斤拷锟斤拷锟?,锟斤拷然锟侥伙拷锟节达拷岵伙拷锟?
% W = [];
col_map = YUV_pad; %padarray(YUV, [f,f], 'symmetric'); % 锟斤拷缘锟斤拷锟桔o拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟?
sigma_I = 0.2; % YUV weighted 0.5
sigma_g = 4; % depth weighted
sigma_p = 11; %color weighted
for i = 1 : Patch_size
for j = 1 : Patch_size
w_pq = zeros(2 * w + 1); % 锟斤拷锟斤拷锟斤拷锟节的达拷小 7 * 7
H = zeros(Patch_size + 2 * w); % 66 * 66锟斤拷锟斤拷一锟斤拷锟斤拷锟斤拷锟斤拷锟节达拷锟斤拷锟较角碉拷一锟斤拷锟姐开始锟斤拷锟斤拷小为9 * 9
w_d = zeros(2 * w + 1); % 9 * 9为锟斤拷锟斤拷锟叫?
w_e = zeros(2 * w + 1);
w_s = zeros(2 * w + 1);
j_min = max(j - w,1); % initial-->1
j_max = min(j + w,Patch_size); % initial-->5
i_min = max(i-w,1); % 1
i_max = min(i + w,Patch_size); % 5
P_x = col_map(j:j + 2 * f,i:i + 2 * f,:); % 锟斤拷x为锟斤拷锟侥碉拷一锟斤拷锟斤拷2f+1锟斤拷直锟斤拷锟斤拷小锟斤拷锟斤拷锟斤拷
tic
diff_R = abs(col_map(j:j + 2 * f,i:i + 2 * f,1)-col_map(j + f,i + f,1));
diff_G = abs(col_map(j:j + 2 * f,i:i + 2 * f,2)-col_map(j + f,i + f,2));
diff_B = abs(col_map(j:j + 2 * f,i:i + 2 * f,3)-col_map(j + f,i + f,3));
% diff_R = abs(col_map(j_min:j_max,i_min:i_max,1)-col_map(j,i,1));
% diff_G = abs(col_map(j_min:j_max,i_min:i_max,2)-col_map(j,i,2));
% diff_B = abs(col_map(j_min:j_max,i_min:i_max,3)-col_map(j,i,3));
w_c =exp(-(diff_R.^2 + diff_G.^2 + diff_B.^2) / (2 * sigma_I^2)); % 锟斤拷式锟斤拷9锟斤拷
toc
disp('Compute the YUV weighting term')
tic
for k = j_min + f:j_max+f
for l = i_min + f:i_max + f
if ~(k == (j + f) && l == (i + f)) % 位锟矫诧拷要锟截猴拷
P_y = col_map(k - f:k + f,l - f:l + f,:);
diff = sum((P_x - P_y),3);
k_pq = exp(-sum(sum (w_c .* (diff.^2)))/(2 * sigma_p^2));
w_pq(k - f - j + w + 1,l - f - i + w + 1) = k_pq;
end
end
end
toc
disp('inner color term')
tic
w_d((j_min:j_max) - j + w + 1,(i_min:i_max) - i + w + 1)=...
exp(-(abs(G_bcubic(j_min:j_max,i_min:i_max)-G_bcubic(j,i))).^2 / (2 * sigma_g^2)); % 锟斤拷式12
toc
disp('Compute the Depth weighting term')
tic
w_e((j_min:j_max) - j + w + 1,(i_min:i_max) - i + w + 1) = 1 ./ (sqrt(G_edge(j,i)^2 + G_edge(j_min:j_max,i_min:i_max).^2) + 1);
toc
disp('Compute the edge weighting term')
w_pq = w_pq .* w_d;
w_pq = -w_pq / sum(w_pq(:)); % normalization
w_pq(w+1,w+1) = 1; % 锟斤拷锟斤拷锟斤拷锟斤拷值为0,锟斤拷锟皆匡拷锟斤拷Gau_kernel只锟叫猴拷锟斤拷5 * 5锟侥诧拷锟斤拷锟斤拷值
H(j:j + 2 * w,i:i + 2 * w) = w_pq; % 锟斤拷为H为68 * 68锟斤拷
mask = H(w + 1:end - w,w + 1 :end - w); % 取锟斤拷一锟斤拷patch
W((i-1) * Patch_size + j,:) = mask(:); % 锟斤拷锟斤拷锟斤拷耍锟斤拷锟斤拷锟斤拷诰锟斤拷锟?
end
end
W = sparse(W);
end