我想将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.
但结果和原始图像的大小相同。我不明白为什么会这样。有人可以告诉我它们之间有什么区别,为什么输出就是这样。
答案 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) |
+----------+------------+