source: proiecte/pmake3d/make3d_original/Make3dSingleImageStanford_version0.1/LearningCode/Inference/OldVersion/FreeSupSharpCorner.m @ 37

Last change on this file since 37 was 37, checked in by (none), 14 years ago

Added original make3d

File size: 9.3 KB
Line 
1% *  This code was used in the following articles:
2% *  [1] Learning 3-D Scene Structure from a Single Still Image,
3% *      Ashutosh Saxena, Min Sun, Andrew Y. Ng,
4% *      In ICCV workshop on 3D Representation for Recognition (3dRR-07), 2007.
5% *      (best paper)
6% *  [2] 3-D Reconstruction from Sparse Views using Monocular Vision,
7% *      Ashutosh Saxena, Min Sun, Andrew Y. Ng,
8% *      In ICCV workshop on Virtual Representations and Modeling
9% *      of Large-scale environments (VRML), 2007.
10% *  [3] 3-D Depth Reconstruction from a Single Still Image,
11% *      Ashutosh Saxena, Sung H. Chung, Andrew Y. Ng.
12% *      International Journal of Computer Vision (IJCV), Aug 2007.
13% *  [6] Learning Depth from Single Monocular Images,
14% *      Ashutosh Saxena, Sung H. Chung, Andrew Y. Ng.
15% *      In Neural Information Processing Systems (NIPS) 18, 2005.
16% *
17% *  These articles are available at:
18% *  http://make3d.stanford.edu/publications
19% *
20% *  We request that you cite the papers [1], [3] and [6] in any of
21% *  your reports that uses this code.
22% *  Further, if you use the code in image3dstiching/ (multiple image version),
23% *  then please cite [2].
24% * 
25% *  If you use the code in third_party/, then PLEASE CITE and follow the
26% *  LICENSE OF THE CORRESPONDING THIRD PARTY CODE.
27% *
28% *  Finally, this code is for non-commercial use only.  For further
29% *  information and to obtain a copy of the license, see
30% *
31% *  http://make3d.stanford.edu/publications/code
32% *
33% *  Also, the software distributed under the License is distributed on an
34% * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
35% *  express or implied.   See the License for the specific language governing
36% *  permissions and limitations under the License.
37% *
38% */
39function [CoPEstDepth CoPM1 CoPM2 EstDepHoriStick HoriStickM_i HoriStickM_j EstDepVertStick VertStickM_i VertStickM_j WeiCoP NewSup NewNuSup NewNuSupSize NewSup2Para FixPara VertStickPointInd HoriStickPointInd] ...
40            = FreeSupSharpCorner( Sup, Ray, OccluList, WeiV, ShiftStick, StickHori, StickVert, ClosestDist, depthMap, ...
41              MultiScaleSupTable, verticalParaInd, graoundParaInd, MultiScaleFlag, Sup2Para);
42
43% This function detect the para needs to be fixed
44% and free the corresponding para near the corner
45% InPut : PlnaePara, Sup, HoriStickPointInd, VertStickPointInd,
46% SepPointMeasureHori, SepPointMeasureVert
47% OutPut:
48% StickVertFreeM StickHoriFreeM Sup2Para FixPara
49
50global GeneralDataFolder ScratchDataFolder LocalFolder ClusterExecutionDirectory...
51    ImgFolder VertYNuPatch VertYNuDepth HoriXNuPatch HoriXNuDepth a_default b_default Ox_default Oy_default...
52    Horizon_default filename batchSize NuRow_default SegVertYSize SegHoriXSize WeiBatchSize PopUpVertY PopUpHoriX taskName;
53% initial parameter
54MaxSupNu = max(Sup(:));
55OriMaxSupNu = MaxSupNu;
56%threSize = prod(size(Sup))*3e-4;
57
58
59% free every sup if not Vert or Ground==========================
60NuSup =  setdiff( unique(Sup)',0);
61NuSup = sort(NuSup);
62NuSupFree = setdiff( NuSup, NuSup([ verticalParaInd'; graoundParaInd']) );
63NewSup = Sup;
64for i = NuSupFree
65    i;
66    maskfree = Sup == i;
67%  end
68    % set all free point a new sup index
69    NuNewFree = sum(maskfree(:));
70    NewSup(maskfree) = ((MaxSupNu+1):(MaxSupNu+NuNewFree));
71    Sup(maskfree) = 0;
72    MaxSupNu = (MaxSupNu+NuNewFree);
73end
74
75% Generate StickVertFreeM StickHoriFreeM Sup2Para FixPara
76NewNuSup = setdiff(unique(NewSup)',0);
77NewNuSup = sort(NewNuSup);
78NewNuSupSize = size(NewNuSup,2);
79NewSup2Para = sparse(1,max(NewSup(:)));
80NewSup2Para(NewNuSup) = 1:NewNuSupSize;
81FixPara = NewNuSup(NewNuSup <= OriMaxSupNu);
82
83BounaryPHori = conv2(Sup,[1 -1],'same') ~=0;
84BounaryPHori(:,end) = 0;
85BounaryPVert = conv2(Sup,[1; -1],'same') ~=0;
86BounaryPVert(end,:) = 0;
87ClosestNList = [ Sup(find(BounaryPHori==1)) Sup(find(BounaryPHori==1)+VertYNuDepth);...
88                 Sup(find(BounaryPVert==1)) Sup(find(BounaryPVert==1)+1)];
89ClosestNList = sort(ClosestNList,2);
90ClosestNList = unique(ClosestNList,'rows');
91ClosestNList(ClosestNList(:,1) == 0,:) = [];
92% find the boundary point that might need to be stick ot each other in Sup at Vert and Hori direction==========================================
93HoriStickM_i = sparse(0,3*NewNuSupSize);
94HoriStickM_j = sparse(0,3*NewNuSupSize);
95HoriStickPointInd = [];
96EstDepHoriStick = [];
97for i = find(BounaryPHori==1)'
98    j = i+VertYNuDepth;
99    if Sup(i) == 0 || Sup(j) == 0
100       continue;
101    end
102%  if ~OccluList(sum( ClosestNList == repmat(sort([Sup(i) Sup(j)]), [NuNei  1]),2) == 2)
103%  size(OccluList)
104%  if ~any(sum( OccluList == repmat(sort([Sup(i) Sup(j)]), [size(OccluList,1)  1]),2) == 2)
105    Target(1) = NewSup2Para(Sup(i));
106    Target(2) = NewSup2Para(Sup(j));
107    rayBoundary(:,1) =  Ray(:,i);
108    rayBoundary(:,2) =  Ray(:,i);
109    if MultiScaleFlag
110          vector = (MultiScaleSupTable(Sup2Para(Sup(i)),2:end) == MultiScaleSupTable(Sup2Para(Sup(j)),2:end)); % MultiScaleSupTable Worked in old index
111          expV = exp(-10*(WeiV*vector' + ShiftStick) );
112       betaTemp = StickHori*(0.5+1/(1+expV)); %*(DistStickLengthNormWei.^2)*beta(Target(I));
113       % therr should always be sticking (know don't care about occlusion)
114    else
115       betaTemp = StickHori;
116    end
117    temp = sparse(3,NewNuSupSize);
118    temp(:,Target(1)) = rayBoundary(:,1);
119    HoriStickM_i = [HoriStickM_i; betaTemp*temp(:)'];
120    temp = sparse(3,NewNuSupSize);
121    temp(:,Target(2)) = rayBoundary(:,2);
122    HoriStickM_j = [HoriStickM_j; betaTemp*temp(:)'];
123    EstDepHoriStick = [EstDepHoriStick; sqrt(max(depthMap(i),ClosestDist)*max(depthMap(j),ClosestDist))];
124    HoriStickPointInd = [HoriStickPointInd i ];
125%  else
126%    disp('Occlu');
127%  end
128end
129VertStickM_i = sparse(0,3*NewNuSupSize);
130VertStickM_j = sparse(0,3*NewNuSupSize);
131VertStickPointInd = [];
132EstDepVertStick = [];
133for i = find(BounaryPVert==1)'
134    j = i+1;
135    if Sup(i) == 0 || Sup(j) == 0
136       continue;
137    end
138%  if ~OccluList(sum( ClosestNList == repmat(sort([Sup(i) Sup(j)]), [NuNei  1]),2) == 2)
139%  if ~any(sum( OccluList == repmat(sort([Sup(i) Sup(j)]), [size(OccluList,1)  1]),2) == 2)
140    Target(1) = NewSup2Para(Sup(i));
141    Target(2) = NewSup2Para(Sup(j));
142    rayBoundary(:,1) =  Ray(:,i);
143    rayBoundary(:,2) =  Ray(:,i);
144    if MultiScaleFlag
145       vector = (MultiScaleSupTable(Sup2Para(Sup(i)),2:end) == MultiScaleSupTable(Sup2Para(Sup(j)),2:end));
146       expV = exp(-10*(WeiV*vector' + ShiftStick) );
147       betaTemp = StickVert*(0.5+1/(1+expV));
148       % therr should always be sticking (know don't care about occlusion)
149    else
150       betaTemp = StickVert;
151    end
152    temp = sparse(3,NewNuSupSize);
153    temp(:,Target(1)) = rayBoundary(:,1);
154    VertStickM_i = [VertStickM_i; betaTemp*temp(:)'];
155    temp = sparse(3,NewNuSupSize);
156    temp(:,Target(2)) = rayBoundary(:,2);
157    VertStickM_j = [VertStickM_j; betaTemp*temp(:)'];
158    EstDepVertStick = [EstDepVertStick; sqrt(max(depthMap(i),ClosestDist)*max(depthMap(j),ClosestDist))];
159    VertStickPointInd = [VertStickPointInd i ];
160%  else
161%    disp('Occlu');
162%  end
163end
164
165BounaryPHori = conv2(NewSup,[1 -1],'same') ~=0;
166BounaryPHori(:,end) = 0;
167BounaryPVert = conv2(NewSup,[1; -1],'same') ~=0;
168BounaryPVert(end,:) = 0;
169ClosestNList = [ NewSup(find(BounaryPHori==1)) NewSup(find(BounaryPHori==1)+VertYNuDepth);...
170                 NewSup(find(BounaryPVert==1)) NewSup(find(BounaryPVert==1)+1)];
171ClosestNList = sort(ClosestNList,2);
172ClosestNList = unique(ClosestNList,'rows');
173ClosestNList(ClosestNList(:,1) == 0,:) = [];
174
175% find Coplane need for New added Sup index only
176NuNei = size(ClosestNList,1);
177CoPM1 = sparse(0,3*NewNuSupSize);
178CoPM2 = sparse(0,3*NewNuSupSize);
179CoPEstDepth = sparse(0,0);
180WeiCoP = [];
181for i = 1: NuNei
182%  if ~CornerList(i)
183    if any( FixPara == ClosestNList(i,1)) &&  any( FixPara == ClosestNList(i,2))
184       continue;
185    end
186    mask = NewSup == ClosestNList(i,1);
187    SizeMaskAll = sum(mask(:));
188    [y x] = find(mask);
189    CenterX = round(median(x));
190    CenterY = round(median(y));
191    y = find(mask(:,CenterX));
192    if ~isempty(y)
193       CenterY = round(median(y));
194    end   
195    temp1 = sparse(1, 3*NewNuSupSize);
196    temp2 = sparse(1, 3*NewNuSupSize);
197    temp1(:,(NewSup2Para(ClosestNList(i,1))*3-2): NewSup2Para(ClosestNList(i,1))*3) = Ray(:,CenterY,CenterX)';
198    temp2(:,(NewSup2Para(ClosestNList(i,2))*3-2): NewSup2Para(ClosestNList(i,2))*3) = Ray(:,CenterY,CenterX)';
199    wei = 1;%WeiV;
200
201    CoPM1 = [CoPM1; temp1*wei];
202    CoPM2 = [CoPM2; temp2*wei];
203    tempWeiCoP = [SizeMaskAll];
204    CoPEstDepth = [CoPEstDepth; max(median(depthMap(mask)),ClosestDist)];   
205 
206    mask = NewSup == ClosestNList(i,2);
207    SizeMaskAll = sum(mask(:));
208    [y x] = find(mask);
209    CenterX = round(median(x));
210    CenterY = round(median(y));
211    y = find(mask(:,CenterX));
212    if ~isempty(y)
213       CenterY = round(median(y));
214    end
215
216    temp1 = sparse(1, 3*NewNuSupSize);
217    temp2 = sparse(1, 3*NewNuSupSize);
218    temp1(:,(NewSup2Para(ClosestNList(i,1))*3-2): NewSup2Para(ClosestNList(i,1))*3) = Ray(:,CenterY,CenterX)';
219    temp2(:,(NewSup2Para(ClosestNList(i,2))*3-2): NewSup2Para(ClosestNList(i,2))*3) = Ray(:,CenterY,CenterX)';
220    CoPM1 = [CoPM1; temp1*wei];
221    CoPM2 = [CoPM2; temp2*wei];
222    tempWeiCoP = [tempWeiCoP; SizeMaskAll];
223    WeiCoP = [WeiCoP; tempWeiCoP];
224    CoPEstDepth = [CoPEstDepth; max(median(depthMap(mask)),ClosestDist)];
225%  end
226end%=========================================================================================================
227return;
228
229
Note: See TracBrowser for help on using the repository browser.