1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- % IM = pgmRead( FILENAME )
- %
- % Load a pgm image into a MatLab matrix.
- % This format is accessible from the XV image browsing utility.
- % Only works for 8bit gray images (raw or ascii)
- % Hany Farid, Spring '96. Modified by Eero Simoncelli, 6/96.
- function im = pgmRead( fname );
- [fid,msg] = fopen( fname, 'r' );
- if (fid == -1)
- error(msg);
- end
- %%% First line contains ID string:
- %%% "P1" = ascii bitmap, "P2" = ascii greymap,
- %%% "P3" = ascii pixmap, "P4" = raw bitmap,
- %%% "P5" = raw greymap, "P6" = raw pixmap
- TheLine = fgetl(fid);
- format = TheLine;
- if ~((format(1:2) == 'P2') | (format(1:2) == 'P5'))
- error('PGM file must be of type P2 or P5');
- end
- %%% Any number of comment lines
- TheLine = fgetl(fid);
- while TheLine(1) == '#'
- TheLine = fgetl(fid);
- end
- %%% dimensions
- sz = sscanf(TheLine,'%d',2);
- xdim = sz(1);
- ydim = sz(2);
- sz = xdim * ydim;
- %%% Maximum pixel value
- TheLine = fgetl(fid);
- maxval = sscanf(TheLine, '%d',1);
- %%im = zeros(dim,1);
- if (format(2) == '2')
- [im,count] = fscanf(fid,'%d',sz);
- else
- [im,count] = fread(fid,sz,'uchar');
- end
- fclose(fid);
- if (count == sz)
- im = reshape( im, xdim, ydim )';
- else
- fprintf(1,'Warning: File ended early!');
- im = reshape( [im ; zeros(sz-count,1)], xdim, ydim)';
- end
-
|