【问题标题】:Matlab: Apply an operation to each element of matrixMatlab:对矩阵的每个元素应用运算
【发布时间】:2014-05-01 13:15:20
【问题描述】:

我有 100 个图像,我已经读取并存储在 形式的矩阵中,我想对每个图像应用一个操作。我能怎么做? 我有另一个 形式的矩阵,其中包含 800 个图像,我想做同样的事情,即对每个图像应用一个操作。 我不知道如何制作一个携带它的循环。谢谢你的帮助

【问题讨论】:

  • 我同意这不是最聪明的问题,但为什么投反对票?
  • 你试过什么?我推荐Mathworks documentation 开始使用...特别是在for 循环上

标签: image matlab loops matrix cell


【解决方案1】:

假设你的函数是这种形式function imageOut = someFunction(imageIn):

第一种情况:(假设I 是一个MxNxP 矩阵,带有P 图像,每个MxN

O = cell2mat(cellfun(@someFunction, num2cell(I, [1 2]), 'UniformOutput', false))

第二种情况:(假设IMxN单元格数组,每个单元格包含一张图片)

O = cellfun(@someFunction, I, 'UniformOutput', false)

【讨论】:

    【解决方案2】:

    最直接的方法是使用for-loop
    对于128-by-128-by-100 矩阵(我们称之为M),您可以这样做

    for imi = 1:size(M,3)
        currImg = M(:,:,imi); % take a "slice" of M = an image
        % process currImg here...
    end
    

    对于40-by-20 元胞数组(我们称之为C),您可以这样做

    for ri = 1:size(C,1)
        for ci = 1:size(C,2)
            currImg = C{ri,ci}; % get an image stored in cell ri,ci
            % process currImg here...
        end
    end
    

    注意访问矩阵(使用())和访问单元元素(使用{})的不同模式。

    【讨论】:

      【解决方案3】:

      这真的真的真的取决于您要应用的操作。例如,如果你想用 3x3 的正方形对每张图像进行扩张,你所要做的就是传递 3D 矩阵和 3x3 的正方形。

      imdilate (img, true (3, 3));
      

      这个简单的示例将对矩阵的所有 2D 图像应用膨胀,这完全取决于选择正确的结构元素(true (3, 3))。当然,您也可以使用 for 循环,但这不是该语言的本意。上面的例子不是比循环优雅得多吗?

      一个为 Matlab 语言精心设计的函数应该为您处理这种情况,并在 n 维矩阵的所有图像上工作。由您来理解操作符并使其功能足够好,以使其做您想做的事情。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-13
        • 1970-01-01
        相关资源
        最近更新 更多