在MATLAB中复制彩色图像

时间:2015-02-26 10:00:03

标签: matlab

我想将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

这很好,非常好。enter image description here为了减少执行时间,我尝试了以下

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

这会在结果图像上显示一些不必要的颜色。您可以在此图像中看到粉红色。 enter image description here 当我尝试

result(OD==0)=Original;

我收到以下错误。

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

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

3 个答案:

答案 0 :(得分:1)

尝试

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

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

答案 1 :(得分:0)

我认为Matlab中的一个图像有3个空格:R,G,B带(,, 1)(,, 2)(,, 3)。你的问题:结果(i,j)=原始(i,j);

答案 2 :(得分:0)

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

为什么不矢量化

 [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)  |
+----------+------------+