电子产业一站式赋能平台

PCB联盟网

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

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

[复制链接]

260

主题

260

帖子

1831

积分

三级会员

Rank: 3Rank: 3

积分
1831
发表于 2023-6-13 22:28:00 | 显示全部楼层 |阅读模式
点击上方蓝字和“好玩的MATLAB”一起快乐玩耍吧!
+ s- }* G) f) o- }7 H6 e2 `: |9 v0 j

ohs0ktgvdtd64018948345.jpg

ohs0ktgvdtd64018948345.jpg
3 M; S. p  w3 @9 y6 H/ {% [
好玩的matlab
: L. _  I+ ?# x0 c7 L带你解锁不一样的matlab新玩法9 |( L' d$ V$ ]. |% I. w% G

# d. w# T* K. W, }% C, W好久没有写推文了,今天整理 以 slice切片的形式展现mri脑核磁共振数据喜欢此推文的小伙伴们记得点赞+关注+分享% {6 c3 h6 N8 P' _9 t& s1 X+ _
效果图
8 r/ }. R* C* _4 _2 X1 {7 x6 Q

3w5i1aqcl4x64018948445.png

3w5i1aqcl4x64018948445.png
4 Q0 ^% ]; z6 f' }0 K4 P( A

) g8 z; U  L" B9 K5 f! N/ `

hzq1wivy5iy64018948545.png

hzq1wivy5iy64018948545.png
* D+ a  l- T: u0 S: ~
& R! D; ~  U1 n3 |4 C

v4jctbwj0te64018948645.png

v4jctbwj0te64018948645.png

' T8 J  i) }) p! P' f* Q# h2 U  i6 ~. D' C( U

xe32nfa3sv464018948745.png

xe32nfa3sv464018948745.png

6 y) ~' d6 R- j* G7 h  i  A" O/ r, b  h0 g. }2 \. W

3kkoficecrw64018948846.png

3kkoficecrw64018948846.png

  a( ~7 ~/ n8 u, U$ e+ W# E
8 c2 H# C: y' M; e8 @; J' _$ a: {9 C/ m% U8 J) e6 d( F; ~  R6 ^- R
将多个图像帧以矩阵形式显示9 {$ r( z) ^8 q& y. b' D5 r/ x* j
  • % 加载数据clc;clear;close all;load('mri.mat')figuremontage(D,map)
    # ]* D' J% ^1 S/ L5 y( X$ b0 b

    dpsjpyb1ces64018948946.png

    dpsjpyb1ces64018948946.png
    2 g, O4 A. U0 K  ^

    $ U. ^  F6 C* q  D6 c0 u横截面视图
    # C8 x6 B. c' X5 N  |
  • %% 切片(横截面视图)% 改变数据格式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;
    ! p8 G  W7 O8 b6 J, ]' r+ O4 W% e, j% |% 设置视图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;            % 设置坐标轴字体大小1 j) V- T" o5 p: c2 O2 F+ A

    bxk1faznaon64018949046.png

    bxk1faznaon64018949046.png

    ; f. q2 b6 U- v& y* \3 U8 W4 a6 G+ x; z' G6 E! U' |5 e$ D
    创建具有不同方向的切片组合
    ( g. ~; `) z4 W# g* p* C; ^3 J$ p
  • %% 创建具有不同方向的切片组合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;            % 设置坐标轴字体大小* D$ V. C6 J. V% E, k

    myp2kxr3b5i64018949146.png

    myp2kxr3b5i64018949146.png

    8 @  l  _+ o0 r6 S
    ( N" D+ P, l+ ^6 g探究其他横截面
    0 Y6 ~# [* s# s2 ]
  • %% 探究其他横截面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;            % 设置坐标轴字体大小% q# H3 u0 ?) a3 k% [" w4 ?# H7 z

    izpdjzrcncw64018949246.png

    izpdjzrcncw64018949246.png

    + R$ j5 y7 Q8 n' S4 S) k! D; s( Z3 }8 W
    非平面切片# T" k' z# L) @1 B* Z% z
  • %% 非平面切片 % 添加一个边界切片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);1 S5 Q% C, |5 I% b( y9 F4 C5 u
    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;            % 设置坐标轴字体大小
    " J+ |' p" {/ `" q

    whclrerxutf64018949347.png

    whclrerxutf64018949347.png
    7 I3 \4 s; B, v! K, a& T' K3 F
    6 S" \( |5 _5 x0 p" V. _$ H! z7 M
    滑块交互式切片% {/ h! V, x9 m
  • %% 滑块交互式切片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;            % 设置坐标轴字体大小) V5 |8 e0 ?; |9 V  I2 l+ ]
    % 添加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);
    2 m3 j# B* M! t8 _# D0 s7 @% 添加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);8 K" N# m2 z; K# E$ K
    % 添加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);
    & r. j5 }8 N) {; l6 e+ w5 x. E: E  y

    pmpmmmk2kej64018949447.png

    pmpmmmk2kej64018949447.png

    $ v2 N2 j9 r' h- -THE END- -4 `0 ]: ^6 {  v' t( ?' R
    源码下载:gitee下载:https://gitee.com/iDMatlab/slice-demo-mri: C; H7 k  M+ t, a+ J
    扫一扫
    : ^9 o3 V/ a2 z: [5 X- @

    2zm3nb03hyn64018949547.png

    2zm3nb03hyn64018949547.png
    ' O, x# c$ T) n7 x7 F
    参考资料:
    * u' D3 V; ]! X! u% n" V【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 返回顶部 返回列表