Matlab:根据参考位置将一个矩阵中的值替换为另一个矩阵

时间:2014-01-08 14:50:30

标签: image matlab matrix geotiff

我在Matlab中导入了两个geotiff图像(说“A”和“B”)作为Geotiffread的矩阵。一个具有不同的值,而第二个只有0和255。 我想要做的是根据其位置将所有255s替换为另一个图像(或矩阵)内的值。 A和B的大小不同,但它们具有相同的投影。

我试过了:

A (A== 255)= B;

输出是错误:

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

否则,我也尝试了逻辑方法:

if A== 255
    A= B;
end

没有任何反应。

有没有办法根据特定值和引用空间中的位置将B的值替换为B的值?

3 个答案:

答案 0 :(得分:3)

正如darthbith在评论中提到的那样,您需要确保要替换的条目数与您输入的数字值相同。

通过执行A(A==255)=B,您试图将整个矩阵B放入A的子集中,等于255.

但是,正如你所说,如果投影是相同的,你可以简单地做A(A==255) = B(A==255),假设B比A更大或尺寸相同。

一些示例代码提供概念证明。

A = randi([0,10],10,10);
B = randi([0,4],15,15);

C = A % copy original A matrix for comparison later
A(A==5) = B(A==5); % replace values
C==A % compare original and new

此示例代码创建两个矩阵,A为10x10,B为15x15,并将A中等于5的所有值替换为B中的相应值。通过执行C==A显示为真新矩阵和旧矩阵变化的地方,确实发生了更换。

答案 1 :(得分:2)

试试A(A==255) = B(A==255)。该错误告诉您,当您尝试将值分配给数组的元素时,您不能给它提供比您尝试分配的值更多或更少的值。

此外,关于if语句:if A==255表示与if all(A==255)相同,如果A中的任何元素不是255false退回。您可以在命令行中查看此内容。

如果你真的很绝望,你可以使用一对嵌套的for循环来实现这一点(假设AB的大小和形状相同):

[a,b] = size(A);
for ii = 1:a
    for jj = 1:b
        if A(ii,jj) == 255
            A(ii,jj) = B(ii,jj);
        end
    end
end

答案 2 :(得分:2)

在我看来,你试图用二进制掩码掩盖图像。你可以这样做:

BW = im2bw(B,0.5);
A=A.*BW;

希望有所帮助