⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vtc_writeanalyzevol.m

📁 toolbox of BVQX, This is the access between BV and matlab. It will help you to analysis data from BV
💻 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 + -