裴裴裴之Miraitowa 2022-04-02 16:21 采纳率: 100%
浏览 40
已结题

matlab代码,运行太慢,求同效果简洁代码

问题遇到的现象和发生背景

我利用subject.ct(256x256x63)分割出了5种脑部的组织,期望给他们上色并在同一个图里面显示出来;但运行这段代码时候,花费近30分钟,十分缓慢,效果也不好。

问题相关代码
 for j=1:z%该循环是比较subject.ct数据和其他数据
       for m=1:x
           for n=1:y
                if subject.ct(m,n,j)==ctbone(m,n,j)
                    labelct(m,n,j)=1;
                elseif subject.ct==ctair
                    labelct(m,n,j)=2;
                elseif  subject.ct==ctwater
                    labelct(m,n,j)=3;
                elseif subject.ct==ctfat
                    labelct(m,n,j)=4;
                elseif subject.ct==ctbrain
                    labelct(m,n,j)=5;
                else label(m,n,j)=6;
                end
           end
       end
      colorimg(:,:,j) = drawlabel2image(subject.ct(:,:,j),label(:,:,j),color,alpha);%drawlabel2img是一段自动上色的代码,通过它给每一层上色
   end
    
  • 写回答

3条回答 默认 最新

  • A-Chin 2022-04-02 17:08
    关注

    代码慢的原因是循环层数太多,首先subject.ct,ctbone和labelct等变量的长度是一致的。

    可以直接用 == 运算,给个示例:

    X = [1 2 3 4 5 6 7 8 9 0];
    Y = [1 2 2 2 3 6 7 8 9 0];
    B = zeros(size(X));
    B(X == Y) = 1
    
    

    输出结果:

    B =
    
         1     1     0     0     0     1     1     1     1     1
    

    楼主的问题也可以用这种方法,示意代码如下:

    labelct(:) = 6;
    labelct(subject.ct == ctbone) = 1;
    labelct(subject.ct == ctair) = 2;
    labelct(subject.ct == ctwater) = 3;
    labelct(subject.ct == ctfat) = 4;
    labelct(subject.ct == ctbrain) = 5;
    for j=1:z
        %drawlabel2img是一段自动上色的代码,通过它给每一层上色
        colorimg(:, :, j) = drawlabel2image(subject.ct(:, :, j),label(:, :, j), color, alpha);
    end
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月10日
  • 已采纳回答 4月2日
  • 创建了问题 4月2日

悬赏问题

  • ¥15 关于#java#的问题,请各位专家解答!
  • ¥15 急matlab编程仿真二阶震荡系统
  • ¥20 TEC-9的数据通路实验
  • ¥15 ue5 .3之前好好的现在只要是激活关卡就会崩溃
  • ¥50 MATLAB实现圆柱体容器内球形颗粒堆积
  • ¥15 python如何将动态的多个子列表,拼接后进行集合的交集
  • ¥20 vitis-ai量化基于pytorch框架下的yolov5模型
  • ¥15 如何实现H5在QQ平台上的二次分享卡片效果?
  • ¥30 求解达问题(有红包)
  • ¥15 请解包一个pak文件