我想对我的照片做一些计算。我使用Matlab,但它返回错误的答案。我不知道为什么。
这是我的档案:
function [ newImage ] = Run( file )
info = geotiffinfo(file);
[bands,R1]=geotiffread(file);
imageSize=size(bands);
result=nan(imageSize(1),imageSize(2),7);
for i=100:105
for j=100:105
disp(strcat('Pixel ',sprintf('[%d,%d] of [%d,%d]',imageSize(1),imageSize(2), i,j)));
b7=bands(i,i,5);
b6=bands(i,i,4);
b5=bands(i,i,3);
b4=bands(i,i,2);
b3=bands(i,i,1);
%ndvi 7-4/7+4
result(i,j,1)= (b7-b4)/(b7+b4);
%NDI45 5-4/5+4
result(i,j,2)= (b5-b4)/(b5+b4);
%MTCI 6-5/5-4
result(i,j,3)= (b6-b5)/(b5-b4);
%MCARI [(B5 - B4) - 0.2(B5- B3)] * (B5 - B4)
result(i,j,4)= ((b5-b4)-(0.2*(b5-b3)))*(b5-b4);
%GNDVI 7-3/7+3
result(i,j,4)= (b7-b3)/(b7+b3);
%PSSR 7/4
result(i,j,5)= (b7)/(b4);
%S2REP 705 + 35 *((((B7 + B4)/2) - B5)/(B6 - B5))
result(i,j,6)= 705 + 35 *((((b7 + b4)/2) - b5)/(b6 - b5));
%IRECI 7-4/(5/6)
result(i,j,7)=(b7-b4)/(b5/b6);
end
end
geotiffwrite('D:\SazmanJangalha\ref\result.tif', result, R1, ...
'GeoKeyDirectoryTag', info.GeoTIFFTags.GeoKeyDirectoryTag);
end
我只是运行这些命令并返回错误的答案:
result(i,j,7)
ans =
0
K>> b7-b4
ans =
0
K>> b7
b7 =
679
K>> b4
b4 =
1149
K>> b7-b4
ans =
0
似乎结果是四舍五入的。为什么呢?
答案 0 :(得分:1)
这是因为通常使用UINT8
或UINT16
存储图像
解决方案是将数据转换为double
或single
。
放下以下一行:
bands = double(bands);
它应该有用。