-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathFind_Cost.m
166 lines (131 loc) · 7.23 KB
/
Find_Cost.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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
function [ CostGraph ] = Find_Cost( Image, Image_width, Image_length, Image_dim )
% Calculate the cost graph
original_img = Image;
Image = double(Image);
Dlink5_Filter = [0 0 0; 1/sqrt(2) 0 0; 0 -1/sqrt(2) 0];
Dlink6_Filter = [0 0 0; 1/4 0 -1/4; 1/4 0 -1/4];
Dlink7_Filter = [0 0 0; 0 0 1/sqrt(2); 0 -1/sqrt(2) 0];
Dlink0_Filter = [0 1/4 1/4; 0 0 0; 0 -1/4 -1/4];
%
% Dlink1_Filter = [0 1/sqrt(2) 0; 0 0 -1/sqrt(2) ; 0 0 0];
% Dlink2_Filter = [1/4 0 -1/4; 1/4 0 -1/4; 0 0 0];
% Dlink3_Filter = [0 1/sqrt(2) 0; -1/sqrt(2) 0 0 ; 0 0 0];
% Dlink4_Filter = [1/4 1/4 0; 0 0 0; -1/4 -1/4 0];
if Image_dim == 3
CostGraph_padding = zeros(Image_width*3+2,Image_length*3+2,3);
[width,length,~] = size(CostGraph_padding);
Dlink5_rgb = zeros(Image_width,Image_length,3);
Dlink6_rgb = zeros(Image_width,Image_length,3);
Dlink7_rgb = zeros(Image_width,Image_length,3);
Dlink0_rgb = zeros(Image_width,Image_length,3);
%
% Dlink1_i_rgb = zeros(Image_width,1,3);
% Dlink1_j_rgb = zeros(1,Image_length,3);
% Dlink2_rgb = zeros(1,Image_length,3);
% Dlink3_i_rgb = zeros(Image_width,1,3);
% Dlink3_j_rgb = zeros(1,Image_length,3);
% Dlink4_rgb = zeros(Image_width,1,3);
Dlink5_rgb(:,:,:) = abs(imfilter(Image(:,:,:),Dlink5_Filter));
Dlink6_rgb(:,:,:) = abs(imfilter(Image(:,:,:),Dlink6_Filter));
Dlink7_rgb(:,:,:) = abs(imfilter(Image(:,:,:),Dlink7_Filter));
Dlink0_rgb(:,:,:) = abs(imfilter(Image(:,:,:),Dlink0_Filter));
% Dlink1_i_rgb(:,:,:) = abs(imfilter(Image(:,Image_length,:),Dlink1_Filter));
% Dlink1_j_rgb(:,:,:) = abs(imfilter(Image(1,:,:),Dlink1_Filter));
% Dlink2_rgb(:,:,:) = abs(imfilter(Image(1,:,:),Dlink2_Filter));
% Dlink3_i_rgb(:,:,:) = abs(imfilter(Image(:,1,:),Dlink3_Filter));
% Dlink3_j_rgb(:,:,:) = abs(imfilter(Image(1,:,:),Dlink3_Filter));
% Dlink4_rgb(:,:,:) = abs(imfilter(Image(:,1,:),Dlink4_Filter));
Dlink5 = sqrt((Dlink5_rgb(:,:,1).^2+Dlink5_rgb(:,:,2).^2+Dlink5_rgb(:,:,3).^2)/3);
Dlink6 = sqrt((Dlink6_rgb(:,:,1).^2+Dlink6_rgb(:,:,2).^2+Dlink6_rgb(:,:,3).^2)/3);
Dlink7 = sqrt((Dlink7_rgb(:,:,1).^2+Dlink7_rgb(:,:,2).^2+Dlink7_rgb(:,:,3).^2)/3);
Dlink0 = sqrt((Dlink0_rgb(:,:,1).^2+Dlink0_rgb(:,:,2).^2+Dlink0_rgb(:,:,3).^2)/3);
% Dlink1_i = sqrt((Dlink1_i_rgb(:,:,1).^2+Dlink1_i_rgb(:,:,2).^2+Dlink1_i_rgb(:,:,3).^2)/3);
% Dlink1_j = sqrt((Dlink1_j_rgb(:,:,1).^2+Dlink1_j_rgb(:,:,2).^2+Dlink1_j_rgb(:,:,3).^2)/3);
% Dlink2 = sqrt((Dlink2_rgb(:,:,1).^2+Dlink2_rgb(:,:,2).^2+Dlink2_rgb(:,:,3).^2)/3);
% Dlink3_i = sqrt((Dlink3_i_rgb(:,:,1).^2+Dlink3_i_rgb(:,:,2).^2+Dlink3_i_rgb(:,:,3).^2)/3);
% Dlink3_j = sqrt((Dlink3_j_rgb(:,:,1).^2+Dlink3_j_rgb(:,:,2).^2+Dlink3_j_rgb(:,:,3).^2)/3);
% Dlink4 = sqrt((Dlink4_rgb(:,:,1).^2+Dlink4_rgb(:,:,2).^2+Dlink4_rgb(:,:,3).^2)/3);
maxD = max([max(Dlink5(:)) max(Dlink6(:)) max(Dlink7(:)) max(Dlink0(:))]);
for i = 1:Image_width
for j = 1:Image_length
CostGraph_padding(3*i,3*j,:) = original_img(i,j,:);
CostGraph_padding(3*i+1,3*j-1,:) = (maxD-Dlink5(i,j))*sqrt(2);
CostGraph_padding(3*i+2,3*j-2,:) = CostGraph_padding(3*i+1,3*j-1,:);
CostGraph_padding(3*i+1,3*j,:) = (maxD-Dlink6(i,j));
CostGraph_padding(3*i+2,3*j,:) = CostGraph_padding(3*i+1,3*j,:);
CostGraph_padding(3*i+1,3*j+1,:) = (maxD-Dlink7(i,j))*sqrt(2);
CostGraph_padding(3*i+2,3*j+2,:) = CostGraph_padding(3*i+1,3*j+1,:);
CostGraph_padding(3*i,3*j+1,:) = (maxD-Dlink0(i,j));
CostGraph_padding(3*i,3*j+2,:) = CostGraph_padding(3*i,3*j+1,:);
end
end
% for i = 1:Image_width
% CostGraph_padding(3*i,2,:) = maxD-Dlink4(i);
% CostGraph_padding(3*i-1,2,:) = (maxD-Dlink3_i(i))*sqrt(2);
% CostGraph_padding(3*i-1,3*Image_length+1,:) = (maxD-Dlink1_i(i))*sqrt(2);
% end
%
% for j = 1:Image_length
% CostGraph_padding(2,3*j-1,:) = (maxD-Dlink3_j(j))*sqrt(2);
% CostGraph_padding(2,3*j,:) = maxD-Dlink2(j);
% CostGraph_padding(2,3*j+1,:) = (maxD-Dlink1_j(j))*sqrt(2);
% end
% CostGraph_padding(:,2:3,:) = 255;
% CostGraph_padding(:,Image_length*3:Image_length*3+1,:) = 255;
% CostGraph_padding(2:3,:,:) = 255;
% CostGraph_padding(Image_width*3:Image_width*3+1,:,:) = 255;
% CostGraph = CostGraph_padding(2:width-1,2:length-1,:);
CostGraph = CostGraph_padding(2:width-1,2:length-1,:);
CostGraph_Mid = ones(size(CostGraph))*255;
CostGraph_Mid(3:end-2,3:end-2,:) = CostGraph(3:end-2,3:end-2,:);
CostGraph = CostGraph_Mid;
else
CostGraph_padding = zeros(Image_width*3+2,Image_length*3+2);
[width,length] = size(CostGraph_padding);
Dlink5 = abs(imfilter(Image,Dlink5_Filter));
Dlink6 = abs(imfilter(Image,Dlink6_Filter));
Dlink7 = abs(imfilter(Image,Dlink7_Filter));
Dlink0 = abs(imfilter(Image,Dlink0_Filter));
% Dlink1_i = abs(imfilter(Image(:,Image_length),Dlink1_Filter));
% Dlink1_j = abs(imfilter(Image(1,:),Dlink1_Filter));
% Dlink2 = abs(imfilter(Image(1,:),Dlink2_Filter));
% Dlink3_i = abs(imfilter(Image(:,1),Dlink3_Filter));
% Dlink3_j = abs(imfilter(Image(1,:),Dlink3_Filter));
% Dlink4 = abs(imfilter(Image(:,1),Dlink4_Filter));
maxD = max([max(Dlink5(:)) max(Dlink6(:)) max(Dlink7(:)) max(Dlink0(:))]);
for i = 1:Image_width
for j = 1:Image_length
CostGraph_padding(3*i,3*j) = original_img(i,j);
CostGraph_padding(3*i+1,3*j-1) = (maxD-Dlink5(i,j))*sqrt(2);
CostGraph_padding(3*i+2,3*j-2) = CostGraph_padding(3*i+1,3*j-1);
CostGraph_padding(3*i+1,3*j) = (maxD-Dlink6(i,j));
CostGraph_padding(3*i+2,3*j) = CostGraph_padding(3*i+1,3*j);
CostGraph_padding(3*i+1,3*j+1) = (maxD-Dlink7(i,j))*sqrt(2);
CostGraph_padding(3*i+2,3*j+2) = CostGraph_padding(3*i+1,3*j+1);
CostGraph_padding(3*i,3*j+1) = (maxD-Dlink0(i,j));
CostGraph_padding(3*i,3*j+2) = CostGraph_padding(3*i,3*j+1);
end
end
% for i = 1:Image_width
% CostGraph_padding(3*i,2) = (maxD-Dlink4(i));
% CostGraph_padding(3*i-1,2) = (maxD-Dlink3_i(i))*sqrt(2);
% CostGraph_padding(3*i-1,3*Image_length+1) = (maxD-Dlink1_i(i))*sqrt(2);
% end
%
% for j = 1:Image_length
% CostGraph_padding(2,3*j-1) = (maxD-Dlink3_j(j))*sqrt(2);
% CostGraph_padding(2,3*j) = maxD-Dlink2(j);
% CostGraph_padding(2,3*j+1) = (maxD-Dlink1_j(j))*sqrt(2);
% end
% CostGraph_padding(:,2:3) = 255;
% CostGraph_padding(:,Image_length*3:Image_length*3+1) = 255;
% CostGraph_padding(2:3,:) = 255;
% CostGraph_padding(Image_width*3:Image_width*3+1,:) = 255;
CostGraph = CostGraph_padding(2:width-1,2:length-1);
CostGraph_Mid = ones(size(CostGraph))*255;
CostGraph_Mid(3:end-2,3:end-2) = CostGraph(3:end-2,3:end-2);
CostGraph = CostGraph_Mid;
end
%CostGraph = uint8(CostGraph);
%CostGraph = double(CostGraph);
end