Skip to content

Commit 1e16404

Browse files
committed
add static method Image.importRaw
1 parent a20c5cd commit 1e16404

File tree

2 files changed

+92
-0
lines changed

2 files changed

+92
-0
lines changed

src/@Image/Image.m

+1
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@
9494

9595
img = read(fileName, varargin)
9696
img = readSeries(fileName, varargin)
97+
img = importRaw(fileName, varargin)
9798

9899
info = fileInfo(fileName)
99100

src/@Image/importRaw.m

+91
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
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

Comments
 (0)