为什么matlab返回错误答案

为什么matlab返回错误答案,matlab,Matlab,我想对我的图像做一些计算。我使用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

我想对我的图像做一些计算。我使用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

结果似乎是四舍五入的。为什么?

之所以会出现这种情况,是因为通常使用
UINT8
UINT16
存储图像
解决方案是将数据转换为

请写下一行:

bands = double(bands);

它应该会起作用。

什么是
波段
?@bicker它是Unit16当你从一个较小的无符号整数中减去一个较大的无符号整数时,你认为会发生什么?@excaza哇..我真傻。。它不能保存负值。对吗?如何将其转换为双精度或类似的东西?请参阅:。我要提醒大家不要随意改变类型。考虑您正在执行的操作,类型更改可能导致的后果,并适当地选择一个类型。或者选择一个有符号整数。。。在开发程序时盲目地转换为浮点数据类型,假设整数运算是一种很好的方法,可以让自己面对不希望出现的行为。@excaza,我同意你所写的一切。然而,我写的内容将把OP引向“棘手”的一点。在你发布答案前一小时,他被引向了“棘手”部分。