电子产业一站式赋能平台

PCB联盟网

搜索
查看: 43|回复: 0
收起左侧

MATLAB|mri核磁共振数据|slice切片展示

[复制链接]

260

主题

260

帖子

1827

积分

三级会员

Rank: 3Rank: 3

积分
1827
发表于 2023-6-13 22:28:00 | 显示全部楼层 |阅读模式
点击上方蓝字和“好玩的MATLAB”一起快乐玩耍吧!7 _" P/ P  t( E

2 a0 T3 _5 B3 z

ohs0ktgvdtd64018948345.jpg

ohs0ktgvdtd64018948345.jpg
8 E4 q! @' V8 A! _
好玩的matlab
; W# ~: w: m! }" f  R带你解锁不一样的matlab新玩法
4 K4 [5 o. V% E. \2 ?; L8 A, i) w$ |: P, f6 s9 Z. e
好久没有写推文了,今天整理 以 slice切片的形式展现mri脑核磁共振数据喜欢此推文的小伙伴们记得点赞+关注+分享+ U( d# B/ p4 [' K
效果图; F# e1 O, |! W: M$ |

3w5i1aqcl4x64018948445.png

3w5i1aqcl4x64018948445.png

3 Q: m& A6 O& n, g; K, l0 j, z$ \" C9 t' c* {

hzq1wivy5iy64018948545.png

hzq1wivy5iy64018948545.png
1 J. ]: v, Z% M/ z
9 o0 H9 L( Y& P# |$ J( N

v4jctbwj0te64018948645.png

v4jctbwj0te64018948645.png

( r) a2 g' K( }2 G4 c6 q- n. M( g3 X5 |* x, s3 P' q* U

xe32nfa3sv464018948745.png

xe32nfa3sv464018948745.png

* Q3 t1 D9 w; Q* C% O
1 T) u1 H8 T, q  O1 b

3kkoficecrw64018948846.png

3kkoficecrw64018948846.png
1 A8 n7 X/ B: C# I9 j6 t
. L& n" j$ V  @
" j" j6 O- ?: M: f9 ^/ U: k
将多个图像帧以矩阵形式显示
1 d  m( ?% U0 i" n, O" {7 }
  • % 加载数据clc;clear;close all;load('mri.mat')figuremontage(D,map)
    ! Z( e% L& s- n7 t) f2 N) v9 u

    dpsjpyb1ces64018948946.png

    dpsjpyb1ces64018948946.png

    " _- v8 O  E0 }! z9 g+ j! X$ _
    * i, W( W9 s* |  F7 M  F, v横截面视图% o/ i$ [- A" O. P
  • %% 切片(横截面视图)% 改变数据格式D = double(squeeze(D));D(D==0)=nan;%% 为了探索,从这组中绘制几个MRI图像(水平切片)% 布局图形;指导使用随数据集提供的颜色图figurem=colormap('turbo');colormap(m);% 查看水平切片whichSlices = 3:4:27;slice(1:128,1:128,1:27,D,[],[],whichSlices);shading interp;
    6 P  F3 p4 W+ ~% 设置视图zoom(1.2);campos([-706 -778  111]);zlim([1 25]);ax = gca; % 获取当前坐标轴句柄grid on;  % 打开网格线box on;   % 显示坐标轴边框ax.LineWidth = 1;            % 设置坐标轴线宽ax.XMinorTick = 'on';        % 打开x轴次要刻度线ax.YMinorTick = 'on';        % 打开y轴次要刻度线ax.ZMinorTick='on';          % 打开z轴次要刻度线ax.TickDir = 'out';          % 设置刻度线方向向外ax.GridLineStyle = '--';     % 设置网格线样式为虚线ax.FontSize = 14;            % 设置坐标轴字体大小2 S( G  r3 N  E) `# b7 i

    bxk1faznaon64018949046.png

    bxk1faznaon64018949046.png
    8 k- s5 W6 N6 z, \4 ]$ j0 t
    ' I2 ]6 V; I2 S) l: G
    创建具有不同方向的切片组合* ^: x- e3 z) G4 [& h/ i3 N
  • %% 创建具有不同方向的切片组合figure;% 选择一种颜色图,反转它使得低值是浅色的m=colormap('jet');m = m(end:-1:1,:);colormap(m);% 制作切片h=slice(1:128,1:128,1:27,double(D),63,40,[1:5:25]);shading interp; axis tight;% 设置透明度,使得低值不可见set(h(1),'alphadata',squeeze(double(D(90,:,:))),'facealpha','interp'); alim([0 2])set(h(2),'alphadata',squeeze(double(D(:,50,:))),'facealpha','interp'); alim([0 2])set(h(3),'alphadata',squeeze(double(D(:,:,1))),'facealpha','interp'); alim([0 2])set(h(4),'alphadata',squeeze(double(D(:,:,15))),'facealpha','interp'); alim([0 2])% 设置视图daspect([128 128 27]);campos([-637 366 177]);ax = gca; % 获取当前坐标轴句柄grid on;  % 打开网格线box on;   % 显示坐标轴边框ax.LineWidth = 1;            % 设置坐标轴线宽ax.XMinorTick = 'on';        % 打开x轴次要刻度线ax.YMinorTick = 'on';        % 打开y轴次要刻度线ax.ZMinorTick='on';          % 打开z轴次要刻度线ax.TickDir = 'out';          % 设置刻度线方向向外ax.GridLineStyle = '--';     % 设置网格线样式为虚线ax.FontSize = 14;            % 设置坐标轴字体大小
    6 z9 ^" H, V6 `  W8 d4 P

    myp2kxr3b5i64018949146.png

    myp2kxr3b5i64018949146.png

    2 E( S- ^1 ?$ N7 v6 F
    1 u0 N: N3 g2 H) k+ }, p探究其他横截面* y9 v; m) n+ @' U7 R+ {
  • %% 探究其他横截面figure;hold on;view(3);m=colormap('turbo');colormap(m);% 定义想要旋转的切片hslice = slice(1:128,1:128,1:27,double(D),[],[],15); shading interp; axis tight;% 旋转切片rotate(hslice,[-1,0,0],-35);% 从旋转的切片中提取x,y和z数据xd1 = get(hslice,'XData');yd1 = get(hslice,'YData');zd1 = get(hslice,'ZData');% 删除旋转的切片delete(hslice);% 使用提取的数据调用切片函数h=slice(1:128,1:128,1:27,D,xd1,yd1,zd1); shading interp; axis tight;% 设置其透明度也对应数据值set(h,'alphadata',squeeze(D(:,:,15)),'facealpha','interp'); alim([0 2])% 声明两个其他水平切片h=slice(1:128,1:128,1:27,D,[],[],[1 18]); shading interp; axis tight;% 设置额外切片的透明度set(h(1),'alphadata',squeeze(D(:,:,1)),'facealpha','interp'); alim([0 2])set(h(2),'alphadata',squeeze(D(:,:,18)),'facealpha','interp'); alim([0 2])% 设置视图zlim([1 27]);box oncampos([-710.945 617.6196 126.5833]);ax = gca; % 获取当前坐标轴句柄grid on;  % 打开网格线box on;   % 显示坐标轴边框ax.LineWidth = 1;            % 设置坐标轴线宽ax.XMinorTick = 'on';        % 打开x轴次要刻度线ax.YMinorTick = 'on';        % 打开y轴次要刻度线ax.ZMinorTick='on';          % 打开z轴次要刻度线ax.TickDir = 'out';          % 设置刻度线方向向外ax.GridLineStyle = '--';     % 设置网格线样式为虚线ax.FontSize = 14;            % 设置坐标轴字体大小
    ; I" a) I5 h- R% z" h

    izpdjzrcncw64018949246.png

    izpdjzrcncw64018949246.png
    9 d! l- j: m* o, X
    1 S# j$ \# F; D$ \/ }
    非平面切片
    , }$ h( i7 W9 S  O! s4 S0 w
  • %% 非平面切片 % 添加一个边界切片figure;m=colormap('turbo');colormap(m);h=slice(1:128,1:128,1:27,double(D),[],[],[1 13 18]); shading interp; axis tight; hold on;set(h(1),'alphadata',squeeze(double(D(:,:,1))),'facealpha','interp'); alim([0 2])set(h(2),'alphadata',squeeze(double(D(:,:,13))),'facealpha','interp'); alim([0 2])set(h(3),'alphadata',squeeze(double(D(:,:,18))),'facealpha','interp'); alim([0 2])% 创建你想要投影的表面[xsp,ysp,zsp] = sphere;% 缩放并转移你的表面% 使其覆盖数据区域hsp = surface(30*xsp+60,30*ysp+60,10*zsp+13);% 获取数据xd = get(hsp,'XData');yd = get(hsp,'YData');zd = get(hsp,'ZData');% 删除临时表面delete(hsp)% 作为切片命令的一部分绘制表面hslicer = slice(1:128,1:128,1:27,squeeze(D),xd,yd,zd);shading interp;% set(hslicer,'alphadata',squeeze(double(D(:,:,18))),'facealpha','interp'); alim([0 2])% 设置视图axis tight view(-103.5,28);
    # m; p7 J2 T. k5 g/ u1 U3 q# Q; Xax = gca; % 获取当前坐标轴句柄grid on;  % 打开网格线box on;   % 显示坐标轴边框ax.LineWidth = 1;            % 设置坐标轴线宽ax.XMinorTick = 'on';        % 打开x轴次要刻度线ax.YMinorTick = 'on';        % 打开y轴次要刻度线ax.ZMinorTick='on';          % 打开z轴次要刻度线ax.TickDir = 'out';          % 设置刻度线方向向外ax.GridLineStyle = '--';     % 设置网格线样式为虚线ax.FontSize = 14;            % 设置坐标轴字体大小
    : P1 v  ]+ _" x! o% y0 R2 w

    whclrerxutf64018949347.png

    whclrerxutf64018949347.png

    $ H# K( w8 d. [% z: S
    ) ], K) B7 D3 a4 u# L滑块交互式切片
    1 c. S- p! \/ N9 T. e
  • %% 滑块交互式切片figure('units','normalized','position',[.35 .36 .29 .54]);set(gcf,'color',[1 1 1],'paperpositionmode','auto');s = volumeVisualization(1:128,1:128,1:27,double(D));ax = gca; % 获取当前坐标轴句柄grid on;  % 打开网格线box on;   % 显示坐标轴边框ax.LineWidth = 1;            % 设置坐标轴线宽ax.XMinorTick = 'on';        % 打开x轴次要刻度线ax.YMinorTick = 'on';        % 打开y轴次要刻度线ax.ZMinorTick='on';          % 打开z轴次要刻度线ax.TickDir = 'out';          % 设置刻度线方向向外ax.GridLineStyle = '--';     % 设置网格线样式为虚线ax.FontSize = 14;            % 设置坐标轴字体大小0 T/ {! [& c( s) \0 \
    % 添加uicontrol用于xannotation('textbox',[.75,.1388,.06,.05],'String','X','fontweight','bold','linestyle','none');hSliderx = uicontrol(...    'Units','normalized', ...    'Position',[.79 .13 .2 .05], ...    'Style','slider', ...    'Min',s.xMin, ...    'Max',s.xMax, ...    'Value',s.xMin, ...    'tag','x',...    'userdata',s,...    'Callback',@volVisSlicesUpdateSliderPosition);
    ! @1 U0 a$ N8 c' @% |* k! K% 添加uicontrol用于yannotation('textbox',[.75,.0788,.06,.05],'String','Y','fontweight','bold','linestyle','none');hSlidery = uicontrol(...    'Units','normalized', ...    'Position',[.79 .07 .2 .05], ...    'Style','slider', ...    'Min',s.yMin, ...    'Max',s.yMax, ...    'Value',s.yMin, ...    'tag','y',...        'userdata',s,...    'Callback',@volVisSlicesUpdateSliderPosition);
    5 O9 q6 Y  O6 T% 添加uicontrol用于zannotation('textbox',[.75,.0088,.06,.05],'String','Z','fontweight','bold','linestyle','none');hSliderz = uicontrol(...    'Units','normalized', ...    'Position',[.79 .01 .2 .05], ...    'Style','slider', ...    'Min',s.zMin, ...    'Max',s.zMax, ...    'Value',s.zMin, ...    'tag','z',...        'userdata',s,...    'Callback',@volVisSlicesUpdateSliderPosition);
    ( a( L$ G0 b* M! O: o; s

    pmpmmmk2kej64018949447.png

    pmpmmmk2kej64018949447.png

    $ ^% a% f& L# o! }* }  q7 k- -THE END- -( U0 ?+ C8 ~0 w! q* Q
    源码下载:gitee下载:https://gitee.com/iDMatlab/slice-demo-mri
    4 C4 j! c% H4 u" B$ w扫一扫/ ]) D0 {/ N  x

    2zm3nb03hyn64018949547.png

    2zm3nb03hyn64018949547.png

    * G- u. U+ H$ G' ~参考资料:" P, W, h  F1 s9 Q/ s/ X
    【1】https://www.mathworks.com/help/releases/R2021b/images/ref/montage.html【2】https://www.mathworks.com/help/releases/R2021b/matlab/ref/slice.html
  • 回复

    使用道具 举报

    发表回复

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则


    联系客服 关注微信 下载APP 返回顶部 返回列表