[Matlab]我有两个矩阵,A2和B2。我想通过两个数组的每个元素,并使用每个数组中的值进行计算,将它们输出到一个新数组中,然后显示结果。如何迭代2个矩阵并对特定元素进行计算? [Matlab]
这些数组的值目前是int格式。我也必须将输出数组更改为浮点数据类型。我想获得元素B2(50,101),然后我想使用该单元格中的值来做这个计算:(B2-A2)/(())/( B2 + A2)。然后将这些结果输出到单元格C2(50,101)。
% Clear Memory
clear;
% Load Landsat Bands
A1 = imread('p074r073_7t20010204_z60_nn30.tif'); % Red - Band 3
B1 = imread('p074r073_7t20010204_z60_nn40.tif'); % IR - Band 4
C1 = imread('p074r073_7t20010204_z60_nn20.tif'); % Green - Band 2
% Subset Fragment
xsize = 600; % Length in x
ysize = 600; % Length in y
A2 = imcrop(A1, [1800 1300 600 600]);
B2 = imcrop(B1, [1800 1300 600 600]);
C2 = imcrop(C1, [1800 1300 600 600]);
% False Color Image
RGBimage = cat(3, B2, A2, C2);
figure(1); imshow(RGBimage,[]); title('False Color Composite Image') % Shows Images
% NDVI Calculations
for a = 1:xsize
RED = A2(a+1,:);
for b = 1:xsize
NIR = B2(b+1,:);
NDVI = (NIR-RED)./(NIR + RED);
end
end
figure(2);imshow(NDVI);
这目前给我此图像在那里,因为它被认为是一个完整的图像:
例Calcs(计算)
A2:
B2:
A2(2,3)& B2(2,3)
C2(2,3)=(6-7)/(6 + 7)
目前还不清楚你在代码中究竟做了什么。请注意,在内循环的每次迭代中,“NDVI”将成为一维矢量,这就是为什么当您显示图像时会看到一条拉长的黑线。你想要做一个像素明智的计算?在这种情况下,你可以避免使用任何循环。我的观点是,你提供的解释和你的代码做的不匹配。具体来说,你在你的问题中引用'A1',但是你的代码中没有定义这样的变量。你能用一个小尺寸的输入来显示一些例子计算吗? – rayryeng
@rayryeng我加了我的代码的其余部分。对于那个很抱歉。我所做的就是将3个图像带读入我的程序(我只使用其中的2个进行计算)。对于那些像素值(0-255),我想要进行NDVI计算。这会给我一个我需要的float数据类型。 – Tristan