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

📄 mesh_write_emse.m

📁 Matlab下的EEG处理程序库
💻 M
字号:
function mesh_write_emse(p)

% MESH_WRITE_EMSE - Save mesh to EMSE (.wfr) file
% 
% USEAGE: mesh_write_emse(p)
% 
% Write a .wfr file, in minor revision 3 format (ascii), 
% for each mesh in p.mesh.data.  If any cells of 
% p.mesh.data.meshtype are empty, these cells will 
% be skipped.
% 
% See the EMSE website at http://www.sourcesignal.com
% for more information on file formats.
% 

% $Revision: 1.3 $ $Date: 2003/04/07 06:12:02 $

% Licence:  GNU GPL, no implied or express warranties
% History:  06/2002 Darren.Weber@flinders.edu.au
%                 - created function from mesh_emse2matlab
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

fprintf('\nMESH_WRITE_EMSE...\n');

if ~exist('p','var'),
    error('...no input p struct.\n');
elseif isempty(p),
    error('...input p struct is empty.\n');
elseif isempty(p.mesh.data),
    error('...input p struct has no mesh data.\n');
end

[path,name,ext] = fileparts(strcat(p.mesh.path,filesep,p.mesh.file));
file = fullfile(path,[name ext]);

fprintf('...writing EMSE meshes to:\n\t%s\n',fullfile(path,name));

tic;

Meshes = p.mesh.data.meshtype;

for i=1:size(Meshes,2),
    
    if Meshes{i},
        write_emse(file,p.mesh.data.vertices{i},p.mesh.data.faces{i},Meshes{i});
    end
    
end

t=toc; fprintf('...done (%5.2f sec).\n\n',t);

return


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function write_emse(file,vertex,face,meshtype)

    [path,name,ext] = fileparts(file);
    ext = '.wfr';
    
    name = strcat(name,'_',meshtype);
    
    file = fullfile(path,[name ext]);
    
    
    fid = fopen(file,'w','ieee-le');
    
    if(fid == -1),
        fprintf('...could not open file: %s',file);
        return;
    else
        
        fprintf('...writing tesselation: %s\n',[name ext]);
        
        % Write prolog
        fprintf(fid,'3\t4000\n');
        fprintf(fid,'3\n');
        
        % Write mesh type
        type = lower(meshtype);
        switch type,
        case 'unknown',     fprintf(fid,  '0\n');
        case 'scalp',       fprintf(fid, '40\n');
        case 'outer skull', fprintf(fid, '80\n');
        case 'outer_skull', fprintf(fid, '80\n');
        case 'inner skull', fprintf(fid,'100\n');
        case 'inner_skull', fprintf(fid,'100\n');
        case 'cortex',      fprintf(fid,'200\n');
        case 'pial',        fprintf(fid,'200\n'); % cortex variant
        case 'white',       fprintf(fid,'200\n'); % cortex variant
        case 'smoothwm',    fprintf(fid,'200\n'); % cortex variant
        otherwise,          fprintf(fid,  '0\n');
            fprintf('\n...WARNING, unknown meshtype!\n\n');
        end
        
        
        % EMSE Voxel Coordinates
        % Voxel coordinates measure location in terms of the voxels inherent in 
        % the given volumetric set. The origin is the bottom (inferior) axial 
        % slice, the posterior row and in the rightmost column. This coordinate 
        % system is right-handed (although, internally, the origin is in the 
        % anterior row, and thus is left-handed; this representation is not 
        % available to the user). The order of the displayed coordinates is 
        % (slice#, row#, column#).
        %
        % EMSE MRI Coordinates
        % MRI coordinates share the same origin as internal voxel coordinates, 
        % but differ from the latter in two ways: first, the coordinates 
        % are measured in millimeters, not voxels. Secondly, the origin is that 
        % of the internal representation; that is, the inferior slice, anterior 
        % row and rightmost column. As mentioned above, this internal representation 
        % is left-handed. To correct for this, the row axis is numbered in the 
        % opposite direction, making the displayed coordinate system right-handed. 
        % The order of the displayed coordinates is (x, y, z).
        
        % Given a point P(x,y,z) in head frame (the activation point on the 
		% cortical mesh) and you want to find the corresponding voxel in the 
		% vmi file.  Symbolically you have P(head) and you want to find P(voxel).
		% 
		% 1.  The registration file contains the matrix HeadToImage,
		%     so P(MRI-mm) = HeadToImage*P(head), where P(MRI-mm) is the 
		%     point in MRI coordinates.
		% 2.  From the voxel size, you can find P(MRI-voxel), which 
		%     is the MRI coordinates expressed in voxels
		% 3.  Use the offset between the MRI coordinate frame and 
		%     the Image coordinate frame to find P(voxel).
		%
		%Demetrios Voreades, Ph.D.
		%Applications Engineer, Source Signal Imaging
		%
        
        
        % Rotate -90 degrees around Z
        vertex = Rz(vertex,-90,'degrees');
        
        % Write vertex data
        for v = 1:size(vertex,1),
            fprintf(fid,'v\t%12.8f\t%12.8f\t%12.8f\n',vertex(v,1),vertex(v,2),vertex(v,3));
        end
        
        % matlab vertex indices start at one,
        % not zero, so we subtract one from matlab values
        face = face - 1;
        for t = 1:size(face,1),
            fprintf(fid,'t\t%d\t%d\t%d\t\n',face(t,1),face(t,2),face(t,3));
        end
        
        
        fclose(fid);
        
	end
    
return

⌨️ 快捷键说明

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