source: proiecte/pmake3d/make3d_original/Make3dSingleImageStanford_version0.1/LaserDataCollection/makeDepthImages_1.m @ 37

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

Added original make3d

File size: 10.6 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 makeDepthImages(dataNumber, displayFlag)
40
41if nargin < 2
42    displayFlag = false;
43end
44if nargin < 1
45    dataNumber = 1;
46end
47%       if dataNumber == 10
48%           waithere = 1;
49%       end
50    %% we first read the log file and then read the depth values in a
51%% two-dimensional array after binning and averaging values for each bin
52%% value
53homeData='/afs/cs/group/reconstruction3d/Data/Dataset_July7/scenario';
54depthDirectory = strcat(homeData,num2str(dataNumber),'/');
55imgDirectory = strcat(homeData,num2str(dataNumber),'/');
56%Win05:
57% system([ 'cat ' depthDirectory depthFilename ' | sed s/PTLASER/\/g | cat > ' depthDirectory depthFilename 'cleaned']);
58% Above command is passed in Linux to clear the text, leaving only numbers, which can be directly
59% imported into Matlab by using File > Import Data
60    dirList = dir([depthDirectory '*.txt']);
61    depthFileInitialname = dirList(1).name;
62   
63%     system([ 'cat ' depthDirectory depthFileInitialname ' | sed /PTLASER/\d | cat > ' depthDirectory depthFileInitialname 'image1']);
64%     system([ 'cat ' depthDirectory depthFileInitialname 'image1' ' | sed s/IMAGE/\/g | cat > ' depthDirectory depthFileInitialname 'image2']);
65%     system([ 'cat ' depthDirectory depthFileInitialname 'image2' ' | sed s/data/\\n\data/g | cat > ' depthDirectory depthFileInitialname 'image3']);
66%     system([ 'cat ' depthDirectory depthFileInitialname 'image3' ' | sed /data/\d | cat > ' depthDirectory depthFileInitialname 'image']);
67%
68%     system([ 'cat ' depthDirectory depthFileInitialname ' | sed s/PTLASER/\/g | cat > ' depthDirectory depthFileInitialname 'cleaned1']);
69%     system([ 'cat ' depthDirectory depthFileInitialname 'cleaned1' ' | sed /IMAGE/\d | cat > ' depthDirectory depthFileInitialname 'cleaned']);
70%
71%     system([ 'rm ' depthDirectory depthFileInitialname 'cleaned1']);
72%     system([ 'rm ' depthDirectory depthFileInitialname 'image1']);
73%     system([ 'rm ' depthDirectory depthFileInitialname 'image2']);
74%     system([ 'rm ' depthDirectory depthFileInitialname 'image3']);
75   
76    depthFilename = strcat(depthFileInitialname,'cleaned');
77    imageFileForAnglesName = strcat(depthFileInitialname,'image');
78rawDepth = load([depthDirectory depthFilename]); %load([directory 'log' num2str(dataNumber) '.mat']);
79imageAngList = load([depthDirectory imageFileForAnglesName]);
80floor(rawDepth(1,2))
81if (floor(rawDepth(1,2))<-184)
82    beginAngD=-202.7;
83    angShiftForImg=31;
84elseif (floor(rawDepth(1,2))<-180)
85    beginAngD=-200.4;
86    angShiftForImg=31.1;
87elseif (floor(rawDepth(1,2))<-40)
88    beginAngD=-13.8;
89    angShiftForImg=31;
90end
91
92
93for imageNumber=1:length(imageAngList)
94   
95        centerAngle = beginAngD + imageNumber*angShiftForImg;
96       
97        %Win05: Recalculate these numbers by looking at images and depthmaps
98        laserAngleScan = 19;
99        topAngle = 63; %% earlier 63
100        botAngle = 63; %% if we make it 64, the left side of the image is more aligned, however if we make it 62,
101        %% the right siede of the image is more aligned, so we are choosing it to be 63
102        leftAngle = 10;
103        rightAngle = 7;
104        horThetaStep = 0.125; %.5
105       
106        % close all;
107        % depthDirectory = './dataset1/';
108        % imgDirectory = './dataset1/';
109        %
110        % if uniqueCode > 0
111        %     dirList = dir([depthDirectory '*.txt']);
112        %     depthFilename = dirList(uniqueCode).name;
113       
114%       depthDirectory = './dataset1/';
115%       imgDirectory = './dataset1/';
116        %Win05:
117        % system([ 'cat ' depthDirectory depthFilename ' | sed s/PTLASER/\/g | cat > ' depthDirectory depthFilename 'cleaned']);
118        % Above command is passed in Linux to clear the text, leaving only numbers, which can be directly
119        % imported into Matlab by using File > Import Data
120       
121%         dirList = dir([depthDirectory '*.txt']);
122%         depthFilename = dirList(1).name;
123%       %     use to remove PTLASER text from files
124%       %     system([ 'cat ' depthDirectory depthFilename ' | sed s/PTLASER/\/g | cat > ' depthDirectory depthFilename 'cleaned']);
125%         depthFilename = strcat(depthFilename,'cleaned');
126%       %     dirList = dir([imgDirectory '*right*.jpg']);
127        imagePanAngD=imageAngList(:,2);
128        imagePanAngD=(imagePanAngD<-180).*(imagePanAngD+360)+(imagePanAngD>-180).*(imagePanAngD);
129        imagePanAngRndD = round(imageAngList(:,2));
130        dirList = dir([imgDirectory strcat('*',num2str(abs(imagePanAngRndD(imageNumber))),'*.jpg')]);
131
132%         dirList = dir([imgDirectory '*.jpg']);
133%         %dirList = dir([imgDirectory 'packard1_10-28-05right*.jpg']);
134%         imNumber = -imageNumber+7;
135%         if imNumber <=0
136%             imNumber = imNumber+12;
137%         end
138    imageFilename = dirList(1).name;
139        %% 5 is 1 going down and coming back in a circle from 12
140       
141%       rawDepth = load([depthDirectory depthFilename]); %load([directory 'log' num2str(dataNumber) '.mat']);
142        x = (centerAngle-laserAngleScan):horThetaStep:(centerAngle+laserAngleScan);
143       
144        sizeHor = round( (-min(rawDepth(:,2)) + max(rawDepth(:,2) ) )/ horThetaStep );
145        quantizedRawDepth = zeros( length(x), size(rawDepth,2)-4 );
146        angleIndex = 0;
147       
148        for xc = (centerAngle-laserAngleScan):horThetaStep:(centerAngle+laserAngleScan)
149        if (xc>max(rawDepth(:,2)))
150            x=xc-360;
151                elseif (xc<min(rawDepth(:,2)))
152            x=xc+360;
153                else
154            x=xc;
155        end
156        [tmp ind] = min( abs( rawDepth(:,2) - x) );
157                %Win05: I remember 2nd column contained the time stamp, therefore it basically matches
158                % the timestamp
159        %IMPROVEMENT: instead of nearest one, do AVERAGING
160        angleIndex = angleIndex + 1;
161        quantizedRawDepth(angleIndex,:) = rawDepth(ind, 5:size(rawDepth,2) );
162                %Win05: 5 because first 4 numbers are not useful
163        end
164       
165        clippedDepth = quantizedRawDepth( size(quantizedRawDepth,1):-1:1, ...
166            (size(quantizedRawDepth,2)-topAngle):-1:botAngle )';
167       
168        min(clippedDepth(:));
169        depthMap = (clippedDepth);   
170        %depthImg = clippedDepth .^ (1/3);   
171        % displayDepthMaps(depthMap);
172        % figure;
173        % imshow(A);
174       
175        if displayFlag
176        A = imread([imgDirectory imageFilename]); %A = imread([directory 'img-' num2str(dataNumber) '.jpg']);
177%         A=imrotate(A,-90);
178       
179        %         %subplot(1,2,1);
180        %         image(A);
181        %         axis square;
182        %         %subplot(1,2,2);
183        %         figure,
184        %         imagesc( depthMap( :, leftAngle:(size(depthMap,2)-rightAngle) ) .^ (1/3) );
185        %         axis square;
186               
187               
188                % image A = size(500,500,3 ), dephmap D = size(25,25), D_high = imresize(D, 500, 500, 'nearest')
189                % B = rgb2ycbcr(A); B(:,:,2) = scaling factor * D_high, % set color channel tp depthmap.
190                % imagesc(A), axis equal; imagesc(B), axis equal; displaydepthMap(D);
191                % subplot(2,2,..)
192               
193               
194                % size(A)
195                % size(depthMap)
196                % D_high = imresize(depthMap, [size(A,1) size(A,2)], 'nearest');
197                % minDistance = min(min(D_high));
198                % maxDistance = max(max(D_high));
199                % B = rgb2hsv(A);
200                % scaling_factor = 1/maxDistance;
201                % B(:,:,1) = scaling_factor*D_high;
202                % % B(:,:,2) = scaling_factor*D_high; % The scaling factor should be chosen such that values are in between
203                % %% 0 and 255? Here we set color channel to depthmap.
204                % %
205                % figure;
206                % subplot(1,2,1);
207                % imagesc(A), axis equal;
208                %
209                % %% copying from displayDepthMap
210                %
211                % jetMap = jet;
212                % % close;
213                % jetMap = 1-jetMap(end:-1:1,:);
214                % jetMap = jetMap(end:-1:1,:);
215                % jetMap = imresize(jetMap, [256 3], 'bilinear');
216                % displayNorm = size(jetMap,1);
217                % warning off;
218                % D_high = uint8( displayNorm* (D_high - minDistance) / (maxDistance - minDistance) );
219                % warning on;
220                % subplot(1,2,2);
221                % imagesc( D_high ); axis equal; colormap( jetMap );    axis off;   axis tight;
222                %
223                % figure; %subplot(2,2,2);
224                % imagesc(B), axis equal;
225               
226        %       size(A)
227        %       size(depthMap)
228                D_high = imresize(depthMap, [size(A,1) size(A,2)], 'nearest');
229        %       B = rgb2hsv(A);
230                B = rgb2ycbcr(A);
231                scaling_factor = 3;
232                B(:,:,2) = scaling_factor*D_high; % The scaling factor should be chosen such that values are in between
233                % 0 and 255? Here we set color channel to depthmap.
234               
235                figure;
236                subplot(1,2,1);
237                imagesc(A), axis equal;
238               
239                % copying from displayDepthMap
240               
241                minDistance = min(min(D_high));
242                maxDistance = max(max(D_high));
243                jetMap = jet;
244        %       close;
245                jetMap = 1-jetMap(end:-1:1,:);
246                jetMap = jetMap(end:-1:1,:);
247                jetMap = imresize(jetMap, [256 3], 'bilinear');
248                displayNorm = size(jetMap,1);
249                warning off;
250                D_high = uint8( displayNorm* (D_high - minDistance) / (maxDistance - minDistance) );
251                warning on;
252                subplot(1,2,2);
253                imagesc( D_high ); axis equal; colormap( jetMap );    axis off;   axis tight;
254               
255                figure; %subplot(2,2,2);
256                imagesc(B), axis equal;
257        end
258       
259%       if imageNumber == 5
260%           waithere = 1;
261%       end
262        % displaydepthMap(D);
263        %
264        % subplot(2,2,..);
265       
266        directory = '/afs/cs/group/reconstruction3d/scratch/Min/rawlaserdata/';
267        save([directory strrep(strrep(imageFilename,'img','depth'),'.jpg','.mat')], 'depthMap' );
268%       save([directory strrep(strrep(imageFilename,'img','depth_high_res'),'.jpg','.mat')], 'D_high' );
269        % save([directory 'calculatedDepthData-' num2str(dataNumber) '.mat'], 'depthMap' );
270        % imwrite( depthMap/ max(depthMap(:) ), [directory 'calculatedDepthImgSet2-' num2str(dataNumber) '.jpg']);
271end
Note: See TracBrowser for help on using the repository browser.