【问题标题】:Simplify iterating dimensions in MATLAB简化 MATLAB 中的迭代维度
【发布时间】:2012-02-28 11:51:06
【问题描述】:

我目前正在研究用于平均MATLAB 中的图像的功能。但是我觉得下面几行可以简单得多,只是我不知道如何。

    centroidImage(:,:,1) = double(centroidImage(:,:,1)) ./ alphaImage;
    centroidImage(:,:,2) = double(centroidImage(:,:,2)) ./ alphaImage;
    centroidImage(:,:,3) = double(centroidImage(:,:,3)) ./ alphaImage;

如果我写成这样,我会得到一个错误:

    centroidImage = double(centroidImage) ./ alphaImage;

因为尺寸不匹配(alphaImage 是 [y x] 并且 centroidImage 是 [y x 3])。难道没有一种更简单、更有效的方法来迭代centroidImage 变量的维度,而不必一一明确说明它们吗?

【问题讨论】:

    标签: matlab image-processing


    【解决方案1】:

    您可以为此使用bsxfun

    centroidImage = bsxfun(@rdivide,centroidImage,alphaImage);
    

    【讨论】:

      【解决方案2】:

      您也可以在 alphaImage 上使用repmat

      centroidImage = double(centroidImage) ./ repmat(alphaImage,[1 1 3]);
      

      【讨论】:

      • 确实如此。但除非您不必支持旧的 Matlab 版本,否则bsxfun 会更方便,而且 IIRC 更快。无论如何 +1。
      • @Jonas,你说得对,说实话,我更喜欢你的回答,我对此表示赞同 :) 只是想告诉另一个选项
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-20
      • 1970-01-01
      • 2018-09-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多