mesh_freesurfer2emse.m
来自「Matlab下的EEG处理程序库」· M 代码 · 共 135 行
M
135 行
function [FV] = mesh_freesurfer2emse(sfile,rfile)
% MESH_FREESURFER2EMSE - Convert FreeSurfer tesselation to EMSE
%
% USEAGE: [FV] = mesh_freesurfer2emse(sfile,rfile)
%
% This function will call several functions to (a) read a
% freesurfer surface (sfile), (b) read an EMSE registration
% file (rfile) and (c) output the surface as an EMSE wireframe
% file (*.wfr) in the registration space.
%
% The freesurfer surface is read with mesh_freesurfer2matlab.
% The EMSE registration file is read with emse_open_reg.
% The EMSE wireframe is writen with mesh_writ
% Websites:
%
% EMSE: http://www.sourcesignal.com/
% Freesurfer: http://surfer.nmr.mgh.harvard.edu/
%
% $Revision: 1.3 $ $Date: 2003/04/07 06:12:02 $
% Licence: GNU GPL, no implied or express warranties
% History: 08/2002, Darren.Weber@flinders.edu.au
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
msg = sprintf('MESH_FREESURFER2EMSE: In development');
%error(msg);
datapath = '\\potzii\data\freesurfer\subjects\ptsdpet-c01keep\';
cd(datapath)
sfile = 'surf\rh.pial.asc';
rfile = 'mri\analyze\c01_orig_axial_ras.reg';
mfile = 'mri\analyze\c01_orig_axial_ras.img';
% First read the freesurfer surface
[FV] = mesh_freesurfer2matlab(sfile);
% Convert from mm to meters
%FV.vertices = FV.vertices ./ 1000;
avw = avw_img_read(mfile);
keyboard
% Now read the EMSE registration file
%REG = emse_open_reg(rfile);
%scale = ones(size(FV.vertices,1),1);
%vert = [FV.vertices, scale];
%vert = vert * REG.mri2elec;
%vert = Rz(vert(:,1:3),180,'degrees');
%FV.vertices = vert(:,1:3);
%EMSE.file = '\\POTZII\data\freesurfer\subjects\ptsdpet-c01keep\mri\analyze\c01_orig_axial_ras_scalp.wfr';
%[vertices,faces,edges,meshtype] = mesh_emse2matlab(EMSE.file,{'vertex','face'});
%EMSE.vertices = [vertices.x; vertices.y; vertices.z]';
%EMSE.faces = [faces.vertex1;faces.vertex2;faces.vertex3]';
% Rotate 90 degrees around Z for EMSE data
%EMSE.vertices = Rz(EMSE.vertices,90,'degrees');
%clear vertices faces edges meshtype;
% Plot EMSE scalp surface
%figure; hold on
%patch('vertices',EMSE.vertices,'faces',EMSE.faces,'FaceColor',[.6 .0 .0],'Edgecolor','none','FaceAlpha',.4);
% Plot freesurfer cortex and transformed vertices
%patch('vertices',FV.vertices,'faces',FV.faces,'FaceColor',[.0 .0 .6],'Edgecolor','none');
%patch('vertices',vert,'faces',FV.faces,'FaceColor',[.6 .0 .0],'Edgecolor','none');
%set(gca,'Projection','perspective');
%set(gca,'DataAspectRatio',[1 1 1]);
%axis off tight vis3d
%light
%mouse_rotate
%p.mesh.path = '\\potzii\data\freesurfer\subjects\ptsdpet-c01keep\mri\analyze\';
%p.mesh.file = 'c01_orig_axial_ras.wfr';
%p.mesh.data.meshtype{1} = 'pial';
%p.mesh.data.vertices{1} = FV.vertices;
%p.mesh.data.faces{1} = FV.faces;
%mesh_write_emse(p);
return
% 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
%
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?