【问题标题】:Copying a color image in MATLAB在 MATLAB 中复制彩色图像
【发布时间】:2015-02-26 10:00:02
【问题描述】:

我想将 image1 的特定区域复制到 image2。为此,我使用以下代码。

for i=1:m
    for j=1:n
        if(OD(i,j)==0)
            result(i,j,1)=Original(i,j,1);
            result(i,j,2)=Original(i,j,2);
            result(i,j,3)=Original(i,j,3);
        end
    end
end

这个很好,很好。只是为了减少执行时间,我尝试了以下

for i=1:m
    for j=1:n
        if(OD(i,j)==0)
            result(i,j)=Original(i,j);
        end
    end
end

这会在结果图像上添加一些不必要的颜色。您可以在此图像中看到粉红色。 还有当我尝试

result(OD==0)=Original;

我收到以下错误。

In an assignment  A(:) = B, the number of elements in A and B must be the same.

但结果和原始图像的大小相同。我不明白为什么会这样。谁能告诉我它们之间有什么区别以及为什么输出是这样的。

【问题讨论】:

  • 在第二个循环中,为什​​么不将三个维度都设置为零?
  • 你能把size(Original)的输出贴出来吗?

标签: matlab


【解决方案1】:

试试

result(OD==0)=Original(OD==0);

否则,您会尝试将整个原始图像复制到结果图像的(子)区域中。

【讨论】:

  • 这没有帮助。这也在感兴趣区域的结果图像上提供了一些不必要的颜色。(与问题中的第二个循环相同的输出)
  • 你能提供一个小数据集吗?
【解决方案2】:

我认为 Matlab 中的一张图像有 3 个空格:R、G、B 和 (,,1) (,,2) (,,3)。你的问题:result(i,j)=Original(i,j);

【讨论】:

    【解决方案3】:

    原因是您没有将所有颜色(尺寸)设置为零。

    为什么不向量化它

     [R,C] = find(OD==0); % // Get the coordinates where OD is zero
     result(R,C,:)=Original(R,C,:); % // copy the data over at those coordinates
    

    上述方法与原始方法之间的时间安排如下。时间可能看起来很慢,但请记住,它不是在最快的计算机上,应该被视为一个相对的衡量标准。

    +----------+------------+
    | Original | Vectorised |
    +----------+------------+
    | 3.663 s  | 0.246 (s)  |
    +----------+------------+
    

    【讨论】:

    • @Saipavan579 我非常怀疑。那么您的代码肯定还有其他一些问题。我希望你不要把它放在循环中?这将替换您的两个循环。
    • 我没有将此代码保留在循环中。我将这两行与我的序列号(问题中的第一个 sn-p)进行了比较
    • @Saipavan579 我修改了答案,但 for 循环仍然是最慢的。
    • OD==1 时结果图像不受影响。我只需要更改 OD==0 的结果部分。 OD 只是二值图像。
    • @Saipavan579 我添加了图片来演示效果。我刚刚选择了一个任意矩形作为 OD,但这显然应该是你自己的面具。除了矩形之外,掩码在任何地方都是1,因此您将原始图像与黑色矩形所在的0 和其他任何地方的1 相乘。这意味着唯一会受到影响的部分是OD=0。希望这是有道理的......
    猜你喜欢
    • 2019-10-16
    • 2011-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-31
    • 2012-12-09
    • 1970-01-01
    相关资源
    最近更新 更多