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

📄 ctf_write_mri.m

📁 mri_toolbox是一个工具用来MRI. 来自于SourceForge, 我上传这个软件,希望能结识对医疗软件感兴趣的兄弟.
💻 M
📖 第 1 页 / 共 2 页
字号:
    
fwrite(fid,identifierString(1:32),'char');

fwrite(fid,Version_2_Header.imageSize           ,'short'); % always = 256
fwrite(fid,Version_2_Header.dataSize            ,'short'); % 1 or 2 (bytes), 8 or 16 bits
fwrite(fid,Version_2_Header.clippingRange       ,'short'); % max. integer value of data
fwrite(fid,Version_2_Header.imageOrientation    ,'short'); % eg., 0 = left on left, 1 = left on right

% voxel dimensions in mm
fwrite(fid,Version_2_Header.mmPerPixel_sagittal ,'float');
fwrite(fid,Version_2_Header.mmPerPixel_coronal  ,'float');
fwrite(fid,Version_2_Header.mmPerPixel_axial    ,'float');

headModel_write(fid,Version_2_Header.HeadModel_Info); % defined below...
imageInfo_write(fid,Version_2_Header.Image_Info);     % defined below...

% voxel location of head origin
fwrite(fid,Version_2_Header.headOrigin_sagittal ,'float');
fwrite(fid,Version_2_Header.headOrigin_coronal  ,'float');
fwrite(fid,Version_2_Header.headOrigin_axial    ,'float');

% euler angles to align MR to head coordinate system (angles in degrees!)
% 1. rotate in coronal plane by this angle
% 2. rotate in sagittal plane by this angle
% 3. rotate in axial plane by this angle
fwrite(fid,Version_2_Header.rotate_coronal  ,'float');
fwrite(fid,Version_2_Header.rotate_sagittal ,'float');
fwrite(fid,Version_2_Header.rotate_axial    ,'float');

fwrite(fid,Version_2_Header.orthogonalFlag   ,'short'); % if set then image is orthogonal
fwrite(fid,Version_2_Header.interpolatedFlag ,'short'); % if set than image was interpolated

% original spacing between slices before interpolation to CTF format
fwrite(fid,Version_2_Header.originalSliceThickness ,'float');

% transformation matrix head->MRI [column][row]
fwrite(fid,Version_2_Header.transformMatrix' ,'float')';

% padding to 1028 bytes
% according to CTF manual, this should
%be 202, but it works out to the 1028 bytes with 204.
spaces = char(repmat(double(' '),1,204));
fwrite(fid,spaces,'uchar');

return




%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function headModel_write(fid,HeadModel_Info),

% this function is called from Version_2_Header_read

% fid. point coordinate (in voxels)
fwrite(fid,HeadModel_Info.Nasion_Sag ,'short'); % nasion - sagittal
fwrite(fid,HeadModel_Info.Nasion_Cor ,'short'); % nasion - coronal
fwrite(fid,HeadModel_Info.Nasion_Axi ,'short'); % nasion - axial
fwrite(fid,HeadModel_Info.LeftEar_Sag ,'short'); % left ear - sagittal
fwrite(fid,HeadModel_Info.LeftEar_Cor ,'short'); % left ear - coronal
fwrite(fid,HeadModel_Info.LeftEar_Axi ,'short'); % left ear - axial
fwrite(fid,HeadModel_Info.RightEar_Sag ,'short'); % right ear - sagittal
fwrite(fid,HeadModel_Info.RightEar_Cor ,'short'); % right ear - coronal
fwrite(fid,HeadModel_Info.RightEar_Axi ,'short'); % right ear - axial

fwrite(fid,'  ','char'); % padding to 4 byte boundary - from Robert Oostenveld

% default sphere origin
fwrite(fid,HeadModel_Info.defaultSphereX ,'float'); % sphere origin x coordinate ( in mm )
fwrite(fid,HeadModel_Info.defaultSphereY ,'float'); % sphere origin y coordinate ( in mm )
fwrite(fid,HeadModel_Info.defaultSphereZ ,'float'); % sphere origin z coordinate ( in mm )
fwrite(fid,HeadModel_Info.defaultSphereRadius ,'float'); % default sphere radius ( in mm )

return




%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function imageInfo_write(fid,Image_Info),

% this function is called from Version_2_Header_read

fwrite(fid,Image_Info.modality,'short'); % 0 = MRI, 1 = CT, 2 = PET, 3 = SPECT, 4 = OTHER


% check the length of char variables

% Image_Info.manufacturerName = char( fread(fid,[1,64],'char') );
% Image_Info.instituteName    = char( fread(fid,[1,64],'char') );
% Image_Info.patientID        = char( fread(fid,[1,32],'char') );
% Image_Info.dateAndTime      = char( fread(fid,[1,32],'char') );
% Image_Info.scanType         = char( fread(fid,[1,32],'char') );
% Image_Info.contrastAgent    = char( fread(fid,[1,32],'char') );
% Image_Info.imagedNucleus    = char( fread(fid,[1,32],'char') );

manufacturerName = sprintf('%-64s', Image_Info.manufacturerName);
if length(manufacturerName) < 64,
    paddingN = 64 - length(manufacturerName);
    padding = char(repmat(double(' '),1,paddingN));
    manufacturerName = [manufacturerName,padding];
end

instituteName = sprintf('%-64s', Image_Info.instituteName);
if length(instituteName) < 64,
    paddingN = 64 - length(instituteName);
    padding = char(repmat(double(' '),1,paddingN));
    instituteName = [instituteName,padding];
end

patientID = sprintf('%-32s', Image_Info.patientID);
if length(patientID) < 32,
    paddingN = 32 - length(patientID);
    padding = char(repmat(double(' '),1,paddingN));
    patientID = [patientID,padding];
end

dateAndTime = sprintf('%-32s', Image_Info.dateAndTime);
if length(dateAndTime) < 32,
    paddingN = 32 - length(dateAndTime);
    padding = char(repmat(double(' '),1,paddingN));
    dateAndTime = [dateAndTime,padding];
end

scanType = sprintf('%-32s', Image_Info.scanType);
if length(scanType) < 32,
    paddingN = 32 - length(scanType);
    padding = char(repmat(double(' '),1,paddingN));
    scanType = [scanType,padding];
end

contrastAgent = sprintf('%-32s', Image_Info.contrastAgent);
if length(contrastAgent) < 32,
    paddingN = 32 - length(contrastAgent);
    padding = char(repmat(double(' '),1,paddingN));
    contrastAgent = [contrastAgent,padding];
end

imagedNucleus = sprintf('%-32s', Image_Info.imagedNucleus);
if length(imagedNucleus) < 32,
    paddingN = 32 - length(imagedNucleus);
    padding = char(repmat(double(' '),1,paddingN));
    imagedNucleus = [imagedNucleus,padding];
end

% output these char variables

fwrite(fid,manufacturerName(1:64),'char');
fwrite(fid,instituteName(1:64),'char');
fwrite(fid,patientID(1:32),'char');
fwrite(fid,dateAndTime(1:32),'char');
fwrite(fid,scanType(1:32),'char');
fwrite(fid,contrastAgent(1:32),'char');
fwrite(fid,imagedNucleus(1:32),'char');

fwrite(fid,'  ','char'); % padding to 4 byte boundary - from Robert Oostenveld

fwrite(fid,Image_Info.Frequency        ,'float');
fwrite(fid,Image_Info.FieldStrength    ,'float');
fwrite(fid,Image_Info.EchoTime         ,'float');
fwrite(fid,Image_Info.RepetitionTime   ,'float');
fwrite(fid,Image_Info.InversionTime    ,'float');
fwrite(fid,Image_Info.FlipAngle        ,'float');
fwrite(fid,Image_Info.NoExcitations    ,'short');
fwrite(fid,Image_Info.NoAcquisitions   ,'short');


commentString = sprintf('%-256s', Image_Info.commentString);
if length(commentString) < 256,
    paddingN = 256 - length(commentString);
    padding = char(repmat(double(' '),1,paddingN));
    commentString = [commentString,padding];
end

forFutureUse = sprintf('%-64s', Image_Info.forFutureUse);
if length(forFutureUse) < 64,
    paddingN = 64 - length(forFutureUse);
    padding = char(repmat(double(' '),1,paddingN));
    forFutureUse = [forFutureUse,padding];
end

fwrite(fid,commentString(1:256),'char');
fwrite(fid,forFutureUse(1:64),'char');

return








% The CTF MRI File format used by MRIViewer consists of a binary file with a
% 1,028 byte header. The MRI data can be in 8-bit (unsigned character) or 16-bit
% (unsigned short integer) format and consists of 256 x 256 pixel slices, stored as
% 256 contiguous sagittal slices from left to right (or right to left if head orientation
% is 搇eft-on-right

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -