ctf_write_mri.m

来自「含有多种ICA算法的eeglab工具箱」· M 代码 · 共 416 行 · 第 1/2 页

M
416
字号
function Version_2_Header_write(fid,Version_2_Header),identifierString = sprintf('%-32s', Version_2_Header.identifierString);if length(identifierString) < 32,    paddingN = 32 - length(identifierString);    padding = char(repmat(double(' '),1,paddingN));    identifierString = [identifierString,padding];end    fwrite(fid,identifierString(1:32),'char');fwrite(fid,Version_2_Header.imageSize           ,'short'); % always = 256fwrite(fid,Version_2_Header.dataSize            ,'short'); % 1 or 2 (bytes), 8 or 16 bitsfwrite(fid,Version_2_Header.clippingRange       ,'short'); % max. integer value of datafwrite(fid,Version_2_Header.imageOrientation    ,'short'); % eg., 0 = left on left, 1 = left on right% voxel dimensions in mmfwrite(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 originfwrite(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 anglefwrite(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 orthogonalfwrite(fid,Version_2_Header.interpolatedFlag ,'short'); % if set than image was interpolated% original spacing between slices before interpolation to CTF formatfwrite(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 - sagittalfwrite(fid,HeadModel_Info.Nasion_Cor ,'short'); % nasion - coronalfwrite(fid,HeadModel_Info.Nasion_Axi ,'short'); % nasion - axialfwrite(fid,HeadModel_Info.LeftEar_Sag ,'short'); % left ear - sagittalfwrite(fid,HeadModel_Info.LeftEar_Cor ,'short'); % left ear - coronalfwrite(fid,HeadModel_Info.LeftEar_Axi ,'short'); % left ear - axialfwrite(fid,HeadModel_Info.RightEar_Sag ,'short'); % right ear - sagittalfwrite(fid,HeadModel_Info.RightEar_Cor ,'short'); % right ear - coronalfwrite(fid,HeadModel_Info.RightEar_Axi ,'short'); % right ear - axialfwrite(fid,'  ','char'); % padding to 4 byte boundary - from Robert Oostenveld% default sphere originfwrite(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_readfwrite(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];endinstituteName = sprintf('%-64s', Image_Info.instituteName);if length(instituteName) < 64,    paddingN = 64 - length(instituteName);    padding = char(repmat(double(' '),1,paddingN));    instituteName = [instituteName,padding];endpatientID = sprintf('%-32s', Image_Info.patientID);if length(patientID) < 32,    paddingN = 32 - length(patientID);    padding = char(repmat(double(' '),1,paddingN));    patientID = [patientID,padding];enddateAndTime = sprintf('%-32s', Image_Info.dateAndTime);if length(dateAndTime) < 32,    paddingN = 32 - length(dateAndTime);    padding = char(repmat(double(' '),1,paddingN));    dateAndTime = [dateAndTime,padding];endscanType = sprintf('%-32s', Image_Info.scanType);if length(scanType) < 32,    paddingN = 32 - length(scanType);    padding = char(repmat(double(' '),1,paddingN));    scanType = [scanType,padding];endcontrastAgent = sprintf('%-32s', Image_Info.contrastAgent);if length(contrastAgent) < 32,    paddingN = 32 - length(contrastAgent);    padding = char(repmat(double(' '),1,paddingN));    contrastAgent = [contrastAgent,padding];endimagedNucleus = 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 variablesfwrite(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 Oostenveldfwrite(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];endforFutureUse = sprintf('%-64s', Image_Info.forFutureUse);if length(forFutureUse) < 64,    paddingN = 64 - length(forFutureUse);    padding = char(repmat(double(' '),1,paddingN));    forFutureUse = [forFutureUse,padding];endfwrite(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 + =
减小字号Ctrl + -
显示快捷键?