|
| 1 | +function img = importRaw(fileName, dims, format, varargin) |
| 2 | +% Read image data from raw data file. |
| 3 | +% |
| 4 | +% output = importRaw(FNAME, DIMS, FORMAT, OPTIONS) |
| 5 | +% |
| 6 | +% Example |
| 7 | +% img = Image.importRaw(fileName, [512 512 27], 'uint8'); |
| 8 | +% |
| 9 | +% See also |
| 10 | +% read |
| 11 | +% |
| 12 | + |
| 13 | +% ------ |
| 14 | +% Author: David Legland |
| 15 | + |
| 16 | +% Created: 2020-12-23, using Matlab 9.7.0.1190202 (R2020b) |
| 17 | +% Copyright 2020 INRA - Cepia Software Platform. |
| 18 | + |
| 19 | +% default parameter values |
| 20 | +pixelType = format; |
| 21 | +byteOrder = 'l'; % assume little endian is default |
| 22 | +offset = 0; |
| 23 | +verbose = false; |
| 24 | + |
| 25 | + |
| 26 | +% parse input options |
| 27 | +while length(varargin) > 1 |
| 28 | + name = varargin{1}; |
| 29 | + value = varargin{2}; |
| 30 | + |
| 31 | + if strcmp(name, 'offset') |
| 32 | + offset = value; |
| 33 | + elseif strcmpi(name, 'byteOrder') |
| 34 | + byteOrder = value; |
| 35 | + elseif strcmp(name, 'verbose') |
| 36 | + verbose = value; |
| 37 | + else |
| 38 | + error(['Unknown parameter name: ' name]); |
| 39 | + end |
| 40 | + |
| 41 | + varargin(1:2) = []; |
| 42 | +end |
| 43 | + |
| 44 | +%% Allocate |
| 45 | + |
| 46 | +if verbose |
| 47 | + disp('allocate memory'); |
| 48 | +end |
| 49 | +% img = zeros(dims, pixelType); |
| 50 | + |
| 51 | + |
| 52 | +%% Open |
| 53 | + |
| 54 | +if verbose |
| 55 | + disp('open data file'); |
| 56 | +end |
| 57 | + |
| 58 | +% open for for binary reading |
| 59 | +f = fopen(fileName, 'rb'); |
| 60 | +if f == -1 |
| 61 | + error(['Unable to open data file: ' fileName]); |
| 62 | +end |
| 63 | + |
| 64 | +% look for beginning of data |
| 65 | +fseek(f, offset, 'bof'); |
| 66 | + |
| 67 | + |
| 68 | +%% Fill array |
| 69 | + |
| 70 | +if verbose |
| 71 | + fprintf('read data...'); |
| 72 | +end |
| 73 | +tic; |
| 74 | +data = fread(f, prod(dims), ['*' pixelType], byteOrder); |
| 75 | +t = toc; |
| 76 | +if verbose |
| 77 | + fprintf(' elapsed time: %7.3f s\n', t); |
| 78 | +end |
| 79 | + |
| 80 | +%% Cleanup |
| 81 | + |
| 82 | +% close file |
| 83 | +fclose(f); |
| 84 | + |
| 85 | +% permute dims 1 and 2 |
| 86 | +if verbose |
| 87 | + disp('permute'); |
| 88 | +end |
| 89 | +data = reshape(data, dims); |
| 90 | + |
| 91 | +img = Image('Data', data); |
0 commit comments