📄 vtc_writeanalyzevol.m
字号:
function rvalue = vtc_WriteAnalyzeVol(hfile, volnum, filename)
% VTC::WriteAnalyzeVol - write an Analyze image from one VTC volume
%
% FORMAT: [writeok] = vtc.WriteAnalyzeVol(number, filename)
%
% Input fields:
%
% number volume (time point) number
% filename analyze filename
%
% Output fields:
%
% writeok boolean indicator whether write was successful
% Version: v0.7b
% Build: 7083014
% Date: Aug-30 2007, 2:17 PM CEST
% Author: Jochen Weber, Brain Innovation, B.V., Maastricht, NL
% URL/Info: http://wiki.brainvoyager.com/BVQXtools
% argument check
if nargin ~= 3 || ...
numel(hfile) ~= 1 || ...
~isBVQXfile(hfile, 'vtc')
error( ...
'BVQXfile:BadArgument', ...
'Invalid call to %s.', ...
mfilename ...
);
end
% get object reference
sc = bvqxfile_getscont(hfile.L);
bc = sc.C;
% default rvalue
rvalue = false;
% create struct version
ofile = sc.F;
[opath{1:2}] = fileparts(ofile);
ofile = opath{2};
% check further arguments
if nargin < 2 || ...
~isa(volnum, 'double') || ...
numel(volnum) ~= 1 || ...
isnan(volnum) || ...
isinf(volnum) || ...
volnum ~= fix(volnum) || ...
volnum < 1 || ...
volnum > bc.NrOfVolumes
error( ...
'BVQXfile:BadArgument', ...
'Invalid or missing volnum argument for call to %s.', ...
mfilename ...
);
end
if nargin < 3 || ...
~ischar(filename) || ...
isempty(filename) || ...
numel(filename) ~= length(filename) || ...
length(filename) < 5 || ...
(~strcmpi(filename(end-3:end), '.hdr') && ...
~strcmpi(filename(end-3:end), '.img'))
error( ...
'BVQXfile:BadArgument', ...
'Invalid or missing filename argument for call to %s.', ...
mfilename ...
);
end
% filename
filename = filename(:)';
filename = [filename(1:end-3) 'img'];
hdrfname = [filename(1:end-3) 'hdr'];
matfname = [filename(1:end-3) 'mat'];
% voxel and time resolution
vres = bc.Resolution;
tres = bc.TR / 1000;
% dimension and datatype
xpix = (bc.XEnd - bc.XStart) / vres;
ypix = (bc.YEnd - bc.YStart) / vres;
zpix = (bc.ZEnd - bc.ZStart) / vres;
isiz = [xpix, ypix, zpix, 1];
% positional information
xvec = vres .* [0; 1; 0];
yvec = vres .* [0; 0;-1];
zvec = vres .* [1; 0; 0];
svec = [bc.XStart; bc.YStart; bc.ZStart] - 128;
% build mat
tfmat = eye(4);
tfmat(2, 2) = -1;
tmat = [[xvec, yvec, zvec], svec; 0, 0, 0, 1];
tmat = tfmat * tmat;
% try volume creation
hdr = BVQXfile('new:hdr');
hdrc = bvqxfile_getcont(hdr.L);
% set dims and data
hdrc.ImgDim.Dim(1:5) = [4, isiz];
hdrc.ImgDim.DataType = 132;
hdrc.ImgDim.BitsPerPixel = 16;
hdrc.ImgDim.PixSpacing(2:5) = [vres, vres, vres, tres];
hdrc.ImgDim.CalMaxDisplay = 32767;
hdrc.ImgDim.CalMinDisplay = 0;
hdrc.ImgDim.GLMax = 32767;
hdrc.ImgDim.GLMin = 0;
hdrc.DataHist.Description = sprintf('Volume %d of VTC %s', volnum, ofile);
hdrc.DataHist.ScanNumber = sprintf('%d', volnum);
hdrc.VoxelData = squeeze(bc.VTCData(volnum, :, :, :));
% save hdr/img
try
aft_SaveAs(hdr, hdrfname);
rvalue = hdr_SaveVoxelData(hdr);
catch
BVQXfile(0, 'clearobj', hdr.L);
error( ...
'BVQXfile:InternalError', ...
'Error writing Analyze header/image %s.', ...
hdrfname ...
);
end
BVQXfile(0, 'clearobj', hdr.L);
if ~rvalue
return;
end
% save mat
eval('M=tmat;mat=tmat;save(matfname,''M'',''mat'',''-v6'');','');
if exist(matfname, 'file') ~= 2
rvalue = false;
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -